@koda-sl/baker-cli 0.386.0 → 0.387.0-dev.3bafd569e

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 (967) hide show
  1. package/README.md +1090 -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-CLOKMTTC.js +49 -0
  5. package/dist/account-CLOKMTTC.js.map +1 -0
  6. package/dist/account-V5Y2QHAK.js +79 -0
  7. package/dist/account-V5Y2QHAK.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-S5VXX2QU.js +218 -0
  11. package/dist/account-reads-S5VXX2QU.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-LOJ4WLIX.js +77 -0
  19. package/dist/accounts-LOJ4WLIX.js.map +1 -0
  20. package/dist/accounts-RYBDLQ6H.js +75 -0
  21. package/dist/accounts-RYBDLQ6H.js.map +1 -0
  22. package/dist/accounts-UO4XBWM2.js +611 -0
  23. package/dist/accounts-UO4XBWM2.js.map +1 -0
  24. package/dist/actions-3AW3R63U.js +55 -0
  25. package/dist/actions-3AW3R63U.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-43DUOVNR.js +104 -0
  37. package/dist/add-43DUOVNR.js.map +1 -0
  38. package/dist/add-IE5WDELB.js +302 -0
  39. package/dist/add-IE5WDELB.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-DZ4N5INZ.js +40 -0
  51. package/dist/ads-DZ4N5INZ.js.map +1 -0
  52. package/dist/ads-XZCMSPM5.js +113 -0
  53. package/dist/ads-XZCMSPM5.js.map +1 -0
  54. package/dist/adsets-AKR75THA.js +176 -0
  55. package/dist/adsets-AKR75THA.js.map +1 -0
  56. package/dist/advertisers-52FMMBTQ.js +120 -0
  57. package/dist/advertisers-52FMMBTQ.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-JPDBKETM.js +1980 -0
  61. package/dist/analytics-JPDBKETM.js.map +1 -0
  62. package/dist/analytics-YVQ6H4BG.js +433 -0
  63. package/dist/analytics-YVQ6H4BG.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-66NTWTR2.js +77 -0
  67. package/dist/assign-66NTWTR2.js.map +1 -0
  68. package/dist/audience-size-LVQJWQAS.js +94 -0
  69. package/dist/audience-size-LVQJWQAS.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-NYGMBGQ3.js +79 -0
  75. package/dist/audiences-NYGMBGQ3.js.map +1 -0
  76. package/dist/audit-UIPMTI5C.js +88 -0
  77. package/dist/audit-UIPMTI5C.js.map +1 -0
  78. package/dist/audit-XGN2OFLN.js +151 -0
  79. package/dist/audit-XGN2OFLN.js.map +1 -0
  80. package/dist/autocomplete-LVPDV3JE.js +111 -0
  81. package/dist/autocomplete-LVPDV3JE.js.map +1 -0
  82. package/dist/avatars-S6NSLMJK.js +38 -0
  83. package/dist/avatars-S6NSLMJK.js.map +1 -0
  84. package/dist/bid-pricing-2LYULXU2.js +99 -0
  85. package/dist/bid-pricing-2LYULXU2.js.map +1 -0
  86. package/dist/brand-WWHUZ72R.js +22 -0
  87. package/dist/brand-WWHUZ72R.js.map +1 -0
  88. package/dist/brief-K3FILESK.js +492 -0
  89. package/dist/brief-K3FILESK.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-N4TZ2F3L.js +95 -0
  93. package/dist/campaign-groups-N4TZ2F3L.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-7YFRQIQT.js +165 -0
  97. package/dist/campaign-writes-7YFRQIQT.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-L43ZUKAI.js +107 -0
  101. package/dist/campaigns-L43ZUKAI.js.map +1 -0
  102. package/dist/campaigns-OD7Z332M.js +109 -0
  103. package/dist/campaigns-OD7Z332M.js.map +1 -0
  104. package/dist/campaigns-R4DXIR2Q.js +110 -0
  105. package/dist/campaigns-R4DXIR2Q.js.map +1 -0
  106. package/dist/canvas-57K7AGAP.js +46 -0
  107. package/dist/canvas-57K7AGAP.js.map +1 -0
  108. package/dist/capabilities-FVTZAFPV.js +144 -0
  109. package/dist/capabilities-FVTZAFPV.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-7ZIGNUW6.js +135 -0
  117. package/dist/changes-7ZIGNUW6.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-E7DBRHBF.js +262 -0
  121. package/dist/chats-E7DBRHBF.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-2HCI5BXB.js +479 -0
  125. package/dist/chunk-2HCI5BXB.js.map +1 -0
  126. package/dist/chunk-2SQJL7ZN.js +56 -0
  127. package/dist/chunk-2SQJL7ZN.js.map +1 -0
  128. package/dist/chunk-2Y5V23PU.js +29 -0
  129. package/dist/chunk-2Y5V23PU.js.map +1 -0
  130. package/dist/chunk-32CPGJPL.js +149 -0
  131. package/dist/chunk-32CPGJPL.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-3N4PZIIV.js +304 -0
  135. package/dist/chunk-3N4PZIIV.js.map +1 -0
  136. package/dist/chunk-3U7TDBIB.js +275 -0
  137. package/dist/chunk-3U7TDBIB.js.map +1 -0
  138. package/dist/chunk-3UDSYYND.js +42 -0
  139. package/dist/chunk-3UDSYYND.js.map +1 -0
  140. package/dist/chunk-3ZWWXAQZ.js +150 -0
  141. package/dist/chunk-3ZWWXAQZ.js.map +1 -0
  142. package/dist/chunk-4MH6LONO.js +274 -0
  143. package/dist/chunk-4MH6LONO.js.map +1 -0
  144. package/dist/chunk-4NZ47VXO.js +137 -0
  145. package/dist/chunk-4NZ47VXO.js.map +1 -0
  146. package/dist/chunk-564AEU2Q.js +541 -0
  147. package/dist/chunk-564AEU2Q.js.map +1 -0
  148. package/dist/chunk-5HYSKH77.js +315 -0
  149. package/dist/chunk-5HYSKH77.js.map +1 -0
  150. package/dist/chunk-5MBPIONY.js +29 -0
  151. package/dist/chunk-5MBPIONY.js.map +1 -0
  152. package/dist/chunk-5OVOLYY3.js +74 -0
  153. package/dist/chunk-5OVOLYY3.js.map +1 -0
  154. package/dist/chunk-5SJ3JNNY.js +6683 -0
  155. package/dist/chunk-5SJ3JNNY.js.map +1 -0
  156. package/dist/chunk-66USKCVY.js +4410 -0
  157. package/dist/chunk-66USKCVY.js.map +1 -0
  158. package/dist/chunk-6I7SYEYN.js +166 -0
  159. package/dist/chunk-6I7SYEYN.js.map +1 -0
  160. package/dist/chunk-6O7ISBC7.js +65 -0
  161. package/dist/chunk-6O7ISBC7.js.map +1 -0
  162. package/dist/chunk-752S7JF6.js +35 -0
  163. package/dist/chunk-752S7JF6.js.map +1 -0
  164. package/dist/chunk-77DN7R35.js +228 -0
  165. package/dist/chunk-77DN7R35.js.map +1 -0
  166. package/dist/chunk-7F7MFMLI.js +175 -0
  167. package/dist/chunk-7F7MFMLI.js.map +1 -0
  168. package/dist/chunk-7THBBTJJ.js +183 -0
  169. package/dist/chunk-7THBBTJJ.js.map +1 -0
  170. package/dist/chunk-7XU3HKMX.js +1599 -0
  171. package/dist/chunk-7XU3HKMX.js.map +1 -0
  172. package/dist/chunk-AEA5JV2X.js +92 -0
  173. package/dist/chunk-AEA5JV2X.js.map +1 -0
  174. package/dist/chunk-AFJGYJ7Z.js +45 -0
  175. package/dist/chunk-AFJGYJ7Z.js.map +1 -0
  176. package/dist/chunk-AR7PU7BB.js +76 -0
  177. package/dist/chunk-AR7PU7BB.js.map +1 -0
  178. package/dist/chunk-ASL7JFBD.js +96 -0
  179. package/dist/chunk-ASL7JFBD.js.map +1 -0
  180. package/dist/chunk-AUSKKFVH.js +84 -0
  181. package/dist/chunk-AUSKKFVH.js.map +1 -0
  182. package/dist/chunk-B52DCYL2.js +159 -0
  183. package/dist/chunk-B52DCYL2.js.map +1 -0
  184. package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
  185. package/dist/chunk-BVM5IRZW.js.map +1 -0
  186. package/dist/chunk-CAMX6OHF.js +3182 -0
  187. package/dist/chunk-CAMX6OHF.js.map +1 -0
  188. package/dist/chunk-CYBLKMXQ.js +310 -0
  189. package/dist/chunk-CYBLKMXQ.js.map +1 -0
  190. package/dist/chunk-CZENWCBS.js +333 -0
  191. package/dist/chunk-CZENWCBS.js.map +1 -0
  192. package/dist/chunk-D5FY4FAK.js +24 -0
  193. package/dist/chunk-D5FY4FAK.js.map +1 -0
  194. package/dist/chunk-DGCUPJZD.js +39 -0
  195. package/dist/chunk-DGCUPJZD.js.map +1 -0
  196. package/dist/chunk-DNCLWSHO.js +41 -0
  197. package/dist/chunk-DNCLWSHO.js.map +1 -0
  198. package/dist/chunk-DX4GIDO7.js +296 -0
  199. package/dist/chunk-DX4GIDO7.js.map +1 -0
  200. package/dist/chunk-EDLZGTGN.js +216 -0
  201. package/dist/chunk-EDLZGTGN.js.map +1 -0
  202. package/dist/chunk-EDNX3AOS.js +76 -0
  203. package/dist/chunk-EDNX3AOS.js.map +1 -0
  204. package/dist/chunk-EF5DP6EB.js +52 -0
  205. package/dist/chunk-EF5DP6EB.js.map +1 -0
  206. package/dist/chunk-ERSX3MKH.js +34 -0
  207. package/dist/chunk-ERSX3MKH.js.map +1 -0
  208. package/dist/chunk-F3IJSR7O.js +346 -0
  209. package/dist/chunk-F3IJSR7O.js.map +1 -0
  210. package/dist/chunk-FKOECEVC.js +126 -0
  211. package/dist/chunk-FKOECEVC.js.map +1 -0
  212. package/dist/chunk-FYWWTMXP.js +2902 -0
  213. package/dist/chunk-FYWWTMXP.js.map +1 -0
  214. package/dist/chunk-G7AFVTUS.js +106 -0
  215. package/dist/chunk-G7AFVTUS.js.map +1 -0
  216. package/dist/chunk-GIW7ABMM.js +74 -0
  217. package/dist/chunk-GIW7ABMM.js.map +1 -0
  218. package/dist/chunk-GIWHHCD6.js +145 -0
  219. package/dist/chunk-GIWHHCD6.js.map +1 -0
  220. package/dist/chunk-GPZH5ASB.js +3151 -0
  221. package/dist/chunk-GPZH5ASB.js.map +1 -0
  222. package/dist/chunk-GRQ2AXDX.js +9 -0
  223. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  224. package/dist/chunk-GXDLWBOY.js +73 -0
  225. package/dist/chunk-GXDLWBOY.js.map +1 -0
  226. package/dist/chunk-GYABNLWW.js +629 -0
  227. package/dist/chunk-GYABNLWW.js.map +1 -0
  228. package/dist/chunk-H7MLHG2I.js +94 -0
  229. package/dist/chunk-H7MLHG2I.js.map +1 -0
  230. package/dist/chunk-H7XVKLIY.js +206 -0
  231. package/dist/chunk-H7XVKLIY.js.map +1 -0
  232. package/dist/chunk-HAE4WWFQ.js +455 -0
  233. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  234. package/dist/chunk-HDHWIEJJ.js +136 -0
  235. package/dist/chunk-HDHWIEJJ.js.map +1 -0
  236. package/dist/chunk-HJTIBTF7.js +98 -0
  237. package/dist/chunk-HJTIBTF7.js.map +1 -0
  238. package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
  239. package/dist/chunk-HLXWKMTK.js.map +1 -0
  240. package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
  241. package/dist/chunk-HREWXNTO.js.map +1 -0
  242. package/dist/chunk-HYXKRNRV.js +176 -0
  243. package/dist/chunk-HYXKRNRV.js.map +1 -0
  244. package/dist/chunk-I3DIZWN5.js +97 -0
  245. package/dist/chunk-I3DIZWN5.js.map +1 -0
  246. package/dist/chunk-IJMWEO4P.js +57 -0
  247. package/dist/chunk-IJMWEO4P.js.map +1 -0
  248. package/dist/chunk-IOCSDFF2.js +23992 -0
  249. package/dist/chunk-IOCSDFF2.js.map +1 -0
  250. package/dist/chunk-IVIJJXXT.js +62 -0
  251. package/dist/chunk-IVIJJXXT.js.map +1 -0
  252. package/dist/chunk-J57GWTPK.js +106 -0
  253. package/dist/chunk-J57GWTPK.js.map +1 -0
  254. package/dist/chunk-JPK34QPS.js +134 -0
  255. package/dist/chunk-JPK34QPS.js.map +1 -0
  256. package/dist/chunk-JRCFCIE3.js +188 -0
  257. package/dist/chunk-JRCFCIE3.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-K5OQES4V.js +58 -0
  261. package/dist/chunk-K5OQES4V.js.map +1 -0
  262. package/dist/chunk-KBS5GH4T.js +1626 -0
  263. package/dist/chunk-KBS5GH4T.js.map +1 -0
  264. package/dist/chunk-KIGGMKAE.js +66 -0
  265. package/dist/chunk-KIGGMKAE.js.map +1 -0
  266. package/dist/chunk-KKJ4KJCW.js +29 -0
  267. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  268. package/dist/chunk-KLK6KQLQ.js +55 -0
  269. package/dist/chunk-KLK6KQLQ.js.map +1 -0
  270. package/dist/chunk-KUZFWMJN.js +207 -0
  271. package/dist/chunk-KUZFWMJN.js.map +1 -0
  272. package/dist/chunk-KXGG6EQM.js +382 -0
  273. package/dist/chunk-KXGG6EQM.js.map +1 -0
  274. package/dist/chunk-KXRKPZZY.js +169 -0
  275. package/dist/chunk-KXRKPZZY.js.map +1 -0
  276. package/dist/chunk-KZUHRZ2C.js +5187 -0
  277. package/dist/chunk-KZUHRZ2C.js.map +1 -0
  278. package/dist/chunk-L45A3IYV.js +1079 -0
  279. package/dist/chunk-L45A3IYV.js.map +1 -0
  280. package/dist/chunk-LA6PPSNA.js +65 -0
  281. package/dist/chunk-LA6PPSNA.js.map +1 -0
  282. package/dist/chunk-LEIQAHWF.js +25 -0
  283. package/dist/chunk-LEIQAHWF.js.map +1 -0
  284. package/dist/chunk-LERWCRY5.js +297 -0
  285. package/dist/chunk-LERWCRY5.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-MZWC6HHA.js +455 -0
  291. package/dist/chunk-MZWC6HHA.js.map +1 -0
  292. package/dist/chunk-N3XJ434P.js +197 -0
  293. package/dist/chunk-N3XJ434P.js.map +1 -0
  294. package/dist/chunk-NFSLRRIE.js +77 -0
  295. package/dist/chunk-NFSLRRIE.js.map +1 -0
  296. package/dist/chunk-NHU33T2S.js +60 -0
  297. package/dist/chunk-NHU33T2S.js.map +1 -0
  298. package/dist/chunk-NJEZM4OB.js +51 -0
  299. package/dist/chunk-NJEZM4OB.js.map +1 -0
  300. package/dist/chunk-O6QKCJE4.js +455 -0
  301. package/dist/chunk-O6QKCJE4.js.map +1 -0
  302. package/dist/chunk-OFFAMC5H.js +225 -0
  303. package/dist/chunk-OFFAMC5H.js.map +1 -0
  304. package/dist/chunk-OHGTCFFE.js +57 -0
  305. package/dist/chunk-OHGTCFFE.js.map +1 -0
  306. package/dist/chunk-P4NSJS54.js +20 -0
  307. package/dist/chunk-P4NSJS54.js.map +1 -0
  308. package/dist/chunk-P5T7OZKV.js +26 -0
  309. package/dist/chunk-P5T7OZKV.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-PKTLHYH4.js +509 -0
  313. package/dist/chunk-PKTLHYH4.js.map +1 -0
  314. package/dist/chunk-PUPEGICD.js +103 -0
  315. package/dist/chunk-PUPEGICD.js.map +1 -0
  316. package/dist/chunk-Q6ULQMWG.js +41 -0
  317. package/dist/chunk-Q6ULQMWG.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-QSGIWV4P.js +337 -0
  321. package/dist/chunk-QSGIWV4P.js.map +1 -0
  322. package/dist/chunk-R5OQM7FF.js +179 -0
  323. package/dist/chunk-R5OQM7FF.js.map +1 -0
  324. package/dist/chunk-RFB6RYKA.js +111 -0
  325. package/dist/chunk-RFB6RYKA.js.map +1 -0
  326. package/dist/chunk-RGIXQEGJ.js +502 -0
  327. package/dist/chunk-RGIXQEGJ.js.map +1 -0
  328. package/dist/chunk-RODLBWIR.js +592 -0
  329. package/dist/chunk-RODLBWIR.js.map +1 -0
  330. package/dist/chunk-S4LZ7KTG.js +160 -0
  331. package/dist/chunk-S4LZ7KTG.js.map +1 -0
  332. package/dist/chunk-SHTESUB6.js +1442 -0
  333. package/dist/chunk-SHTESUB6.js.map +1 -0
  334. package/dist/chunk-SJH4EOZH.js +23 -0
  335. package/dist/chunk-SJH4EOZH.js.map +1 -0
  336. package/dist/chunk-SLB46MSS.js +64 -0
  337. package/dist/chunk-SLB46MSS.js.map +1 -0
  338. package/dist/chunk-SMIENBNX.js +6212 -0
  339. package/dist/chunk-SMIENBNX.js.map +1 -0
  340. package/dist/chunk-T7GT22KA.js +494 -0
  341. package/dist/chunk-T7GT22KA.js.map +1 -0
  342. package/dist/chunk-T7M4WFNV.js +172 -0
  343. package/dist/chunk-T7M4WFNV.js.map +1 -0
  344. package/dist/chunk-TLQ23DDW.js +19 -0
  345. package/dist/chunk-TLQ23DDW.js.map +1 -0
  346. package/dist/chunk-TMIDUSOR.js +665 -0
  347. package/dist/chunk-TMIDUSOR.js.map +1 -0
  348. package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
  349. package/dist/chunk-U6VRBDNQ.js +1830 -0
  350. package/dist/chunk-U6VRBDNQ.js.map +1 -0
  351. package/dist/chunk-U7BBXM67.js +1743 -0
  352. package/dist/chunk-U7BBXM67.js.map +1 -0
  353. package/dist/chunk-UI6BKYQD.js +225 -0
  354. package/dist/chunk-UI6BKYQD.js.map +1 -0
  355. package/dist/chunk-UOI5S62H.js +846 -0
  356. package/dist/chunk-UOI5S62H.js.map +1 -0
  357. package/dist/chunk-USL5ARRE.js +26 -0
  358. package/dist/chunk-USL5ARRE.js.map +1 -0
  359. package/dist/chunk-UYC45JNS.js +139 -0
  360. package/dist/chunk-UYC45JNS.js.map +1 -0
  361. package/dist/chunk-VNKVBY54.js +363 -0
  362. package/dist/chunk-VNKVBY54.js.map +1 -0
  363. package/dist/chunk-VS4C7VAR.js +533 -0
  364. package/dist/chunk-VS4C7VAR.js.map +1 -0
  365. package/dist/chunk-W4W4ZRBP.js +191 -0
  366. package/dist/chunk-W4W4ZRBP.js.map +1 -0
  367. package/dist/chunk-WN4KX7GE.js +25 -0
  368. package/dist/chunk-WN4KX7GE.js.map +1 -0
  369. package/dist/chunk-WNFTXSGR.js +111 -0
  370. package/dist/chunk-WNFTXSGR.js.map +1 -0
  371. package/dist/chunk-WOTDHRNF.js +2109 -0
  372. package/dist/chunk-WOTDHRNF.js.map +1 -0
  373. package/dist/chunk-XGWKTYXQ.js +67 -0
  374. package/dist/chunk-XGWKTYXQ.js.map +1 -0
  375. package/dist/chunk-XIGIJJSF.js +66 -0
  376. package/dist/chunk-XIGIJJSF.js.map +1 -0
  377. package/dist/chunk-XNUXB63I.js +817 -0
  378. package/dist/chunk-XNUXB63I.js.map +1 -0
  379. package/dist/chunk-XQ3CCNJD.js +610 -0
  380. package/dist/chunk-XQ3CCNJD.js.map +1 -0
  381. package/dist/chunk-XX6ZMCY5.js +4227 -0
  382. package/dist/chunk-XX6ZMCY5.js.map +1 -0
  383. package/dist/chunk-Y362QH54.js +98 -0
  384. package/dist/chunk-Y362QH54.js.map +1 -0
  385. package/dist/chunk-Y4T6ATDQ.js +74 -0
  386. package/dist/chunk-Y4T6ATDQ.js.map +1 -0
  387. package/dist/chunk-YQSBHWOI.js +41 -0
  388. package/dist/chunk-YU26SDNT.js +46 -0
  389. package/dist/chunk-YU26SDNT.js.map +1 -0
  390. package/dist/chunk-YULENNA7.js +501 -0
  391. package/dist/chunk-YULENNA7.js.map +1 -0
  392. package/dist/chunk-YYSZYSAG.js +150 -0
  393. package/dist/chunk-YYSZYSAG.js.map +1 -0
  394. package/dist/chunk-Z3ENMCFE.js +94 -0
  395. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  396. package/dist/chunk-ZH7ZM3ZM.js +125 -0
  397. package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
  398. package/dist/chunk-ZIXHS6AM.js +42 -0
  399. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  400. package/dist/chunk-ZLLJKSNS.js +96 -0
  401. package/dist/chunk-ZLLJKSNS.js.map +1 -0
  402. package/dist/claim-LF6VQ7OR.js +197 -0
  403. package/dist/claim-LF6VQ7OR.js.map +1 -0
  404. package/dist/cli.js +104 -70026
  405. package/dist/cli.js.map +1 -1
  406. package/dist/client-26SAJ46D.js +19 -0
  407. package/dist/code-MOWYJMDH.js +76 -0
  408. package/dist/code-MOWYJMDH.js.map +1 -0
  409. package/dist/companies-6HSK5BLK.js +195 -0
  410. package/dist/companies-6HSK5BLK.js.map +1 -0
  411. package/dist/complete-2PUAFQEC.js +81 -0
  412. package/dist/complete-2PUAFQEC.js.map +1 -0
  413. package/dist/config-X6GKOVQ6.js +88 -0
  414. package/dist/config-X6GKOVQ6.js.map +1 -0
  415. package/dist/connect-RXPMAJQI.js +42 -0
  416. package/dist/content-UYZC4AKN.js +85 -0
  417. package/dist/content-UYZC4AKN.js.map +1 -0
  418. package/dist/conversation-Y3NB2VDI.js +93 -0
  419. package/dist/conversation-Y3NB2VDI.js.map +1 -0
  420. package/dist/conversion-report-R4GJWWTK.js +125 -0
  421. package/dist/conversion-report-R4GJWWTK.js.map +1 -0
  422. package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
  423. package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
  424. package/dist/conversion-writes-WHFFUWWL.js +120 -0
  425. package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
  426. package/dist/conversions-K7C32DPW.js +135 -0
  427. package/dist/conversions-K7C32DPW.js.map +1 -0
  428. package/dist/conversions-OXJAX5GB.js +76 -0
  429. package/dist/conversions-OXJAX5GB.js.map +1 -0
  430. package/dist/countries-PBXNB3BR.js +82 -0
  431. package/dist/countries-PBXNB3BR.js.map +1 -0
  432. package/dist/create-AJ4KPSJ4.js +59 -0
  433. package/dist/create-AJ4KPSJ4.js.map +1 -0
  434. package/dist/create-ALKOAD5J.js +138 -0
  435. package/dist/create-ALKOAD5J.js.map +1 -0
  436. package/dist/create-HTKZMXKB.js +207 -0
  437. package/dist/create-HTKZMXKB.js.map +1 -0
  438. package/dist/create-TZMAOFBR.js +236 -0
  439. package/dist/create-TZMAOFBR.js.map +1 -0
  440. package/dist/creatives-BJYJFVXJ.js +51 -0
  441. package/dist/creatives-BJYJFVXJ.js.map +1 -0
  442. package/dist/creatives-OZHVU4WB.js +182 -0
  443. package/dist/creatives-OZHVU4WB.js.map +1 -0
  444. package/dist/creatives-VMGY5SU4.js +87 -0
  445. package/dist/creatives-VMGY5SU4.js.map +1 -0
  446. package/dist/credentials-FY4UH6TF.js +287 -0
  447. package/dist/credentials-FY4UH6TF.js.map +1 -0
  448. package/dist/critique-B3H7QFM2.js +1449 -0
  449. package/dist/critique-B3H7QFM2.js.map +1 -0
  450. package/dist/critique-YZBOA27H.js +216 -0
  451. package/dist/critique-YZBOA27H.js.map +1 -0
  452. package/dist/crm-2IBLUHDB.js +318 -0
  453. package/dist/crm-2IBLUHDB.js.map +1 -0
  454. package/dist/crm-YMYO4U53.js +224 -0
  455. package/dist/crm-YMYO4U53.js.map +1 -0
  456. package/dist/crop-U3AD4DDR.js +113 -0
  457. package/dist/crop-U3AD4DDR.js.map +1 -0
  458. package/dist/currency-S6KWZSZ6.js +88 -0
  459. package/dist/currency-S6KWZSZ6.js.map +1 -0
  460. package/dist/custom-conversions-FABS6YVT.js +125 -0
  461. package/dist/custom-conversions-FABS6YVT.js.map +1 -0
  462. package/dist/customers-P6LLLJHK.js +56 -0
  463. package/dist/decide-YTHCBKM6.js +199 -0
  464. package/dist/decide-YTHCBKM6.js.map +1 -0
  465. package/dist/delete-B2TDEW7H.js +63 -0
  466. package/dist/delete-B2TDEW7H.js.map +1 -0
  467. package/dist/delete-DZUDLYPC.js +69 -0
  468. package/dist/delete-DZUDLYPC.js.map +1 -0
  469. package/dist/delete-NZGZP4YP.js +71 -0
  470. package/dist/delete-NZGZP4YP.js.map +1 -0
  471. package/dist/delete-SDOZNDWQ.js +54 -0
  472. package/dist/delete-SDOZNDWQ.js.map +1 -0
  473. package/dist/delete-VQMU56OH.js +71 -0
  474. package/dist/delete-VQMU56OH.js.map +1 -0
  475. package/dist/delete-WKQPMVAM.js +66 -0
  476. package/dist/delete-WKQPMVAM.js.map +1 -0
  477. package/dist/demographics-Q3DCXULY.js +138 -0
  478. package/dist/demographics-Q3DCXULY.js.map +1 -0
  479. package/dist/describe-JNTCQZNL.js +97 -0
  480. package/dist/describe-JNTCQZNL.js.map +1 -0
  481. package/dist/describe-MT4334NG.js +97 -0
  482. package/dist/describe-MT4334NG.js.map +1 -0
  483. package/dist/dimensions-FEZUJRAG.js +101 -0
  484. package/dist/dimensions-FEZUJRAG.js.map +1 -0
  485. package/dist/discard-NEZM5CHF.js +66 -0
  486. package/dist/discard-NEZM5CHF.js.map +1 -0
  487. package/dist/discover-4GD7QSF5.js +93 -0
  488. package/dist/discover-4GD7QSF5.js.map +1 -0
  489. package/dist/discover-6K3IOYXR.js +172 -0
  490. package/dist/discover-6K3IOYXR.js.map +1 -0
  491. package/dist/domain-7Y256IDR.js +98 -0
  492. package/dist/domain-7Y256IDR.js.map +1 -0
  493. package/dist/download-L27HWEOE.js +299 -0
  494. package/dist/download-L27HWEOE.js.map +1 -0
  495. package/dist/draft-25G2P2TE.js +281 -0
  496. package/dist/draft-25G2P2TE.js.map +1 -0
  497. package/dist/draft-F6TUGXAY.js +307 -0
  498. package/dist/draft-F6TUGXAY.js.map +1 -0
  499. package/dist/draft-KLULNBWP.js +233 -0
  500. package/dist/draft-KLULNBWP.js.map +1 -0
  501. package/dist/draft-LY5ZPF73.js +217 -0
  502. package/dist/draft-LY5ZPF73.js.map +1 -0
  503. package/dist/draft-M4ZHDQ46.js +306 -0
  504. package/dist/draft-M4ZHDQ46.js.map +1 -0
  505. package/dist/draft-MI7RWY2K.js +100 -0
  506. package/dist/draft-MI7RWY2K.js.map +1 -0
  507. package/dist/draft-P4IVYTY3.js +103 -0
  508. package/dist/draft-P4IVYTY3.js.map +1 -0
  509. package/dist/draft-QQMCVDDS.js +328 -0
  510. package/dist/draft-QQMCVDDS.js.map +1 -0
  511. package/dist/engine/index.d.ts +213 -127
  512. package/dist/engine/index.js +18 -4
  513. package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
  514. package/dist/env-FBTHZKGN.js.map +1 -0
  515. package/dist/experiment-HDYTJPUY.js +1397 -0
  516. package/dist/experiment-HDYTJPUY.js.map +1 -0
  517. package/dist/export-TS5GYEMA.js +168 -0
  518. package/dist/export-TS5GYEMA.js.map +1 -0
  519. package/dist/extract-QVQFUOIK.js +113 -0
  520. package/dist/extract-QVQFUOIK.js.map +1 -0
  521. package/dist/facets-7MBSM7BP.js +114 -0
  522. package/dist/facets-7MBSM7BP.js.map +1 -0
  523. package/dist/favorites-7QP7BY5K.js +178 -0
  524. package/dist/favorites-7QP7BY5K.js.map +1 -0
  525. package/dist/feed-EETRO2FG.js +177 -0
  526. package/dist/feed-EETRO2FG.js.map +1 -0
  527. package/dist/feedback-ZOUL22TP.js +66 -0
  528. package/dist/feedback-ZOUL22TP.js.map +1 -0
  529. package/dist/feedback-record-XFFJRKS6.js +177 -0
  530. package/dist/feedback-record-XFFJRKS6.js.map +1 -0
  531. package/dist/fetch-QE3EB756.js +176 -0
  532. package/dist/fetch-QE3EB756.js.map +1 -0
  533. package/dist/fetch-Z7O3ZL4D.js +139 -0
  534. package/dist/fetch-Z7O3ZL4D.js.map +1 -0
  535. package/dist/find-KAQ6JDMO.js +134 -0
  536. package/dist/find-KAQ6JDMO.js.map +1 -0
  537. package/dist/fit-MY5GVZZZ.js +45 -0
  538. package/dist/fit-MY5GVZZZ.js.map +1 -0
  539. package/dist/flows-C67KEMDU.js +247 -0
  540. package/dist/flows-C67KEMDU.js.map +1 -0
  541. package/dist/follow-IX4XVK5Y.js +94 -0
  542. package/dist/follow-IX4XVK5Y.js.map +1 -0
  543. package/dist/follow-competitors-UZBUOYTH.js +112 -0
  544. package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
  545. package/dist/following-VGOIUCIZ.js +113 -0
  546. package/dist/following-VGOIUCIZ.js.map +1 -0
  547. package/dist/fonts-UR7XZ5XZ.js +34 -0
  548. package/dist/fonts-UR7XZ5XZ.js.map +1 -0
  549. package/dist/forecast-3F4SZNAK.js +104 -0
  550. package/dist/forecast-3F4SZNAK.js.map +1 -0
  551. package/dist/forecast-K5E7CTKX.js +168 -0
  552. package/dist/forecast-K5E7CTKX.js.map +1 -0
  553. package/dist/funding-H5YO37OW.js +85 -0
  554. package/dist/funding-H5YO37OW.js.map +1 -0
  555. package/dist/funnel-2PPEPAMY.js +394 -0
  556. package/dist/funnel-2PPEPAMY.js.map +1 -0
  557. package/dist/ga4-YHJ2XMLC.js +55 -0
  558. package/dist/ga4-YHJ2XMLC.js.map +1 -0
  559. package/dist/generate-M2ZX5DMI.js +262 -0
  560. package/dist/generate-M2ZX5DMI.js.map +1 -0
  561. package/dist/get-4EYKCZ6F.js +59 -0
  562. package/dist/get-4EYKCZ6F.js.map +1 -0
  563. package/dist/get-637GALM2.js +63 -0
  564. package/dist/get-637GALM2.js.map +1 -0
  565. package/dist/get-AZARFR6O.js +61 -0
  566. package/dist/get-AZARFR6O.js.map +1 -0
  567. package/dist/get-BPMEHRUG.js +56 -0
  568. package/dist/get-BPMEHRUG.js.map +1 -0
  569. package/dist/get-MQ6MMIZ7.js +78 -0
  570. package/dist/get-MQ6MMIZ7.js.map +1 -0
  571. package/dist/get-N4BPOQCB.js +63 -0
  572. package/dist/get-N4BPOQCB.js.map +1 -0
  573. package/dist/get-RPZHLQ56.js +92 -0
  574. package/dist/get-RPZHLQ56.js.map +1 -0
  575. package/dist/gif-6PRTB2VR.js +94 -0
  576. package/dist/gif-6PRTB2VR.js.map +1 -0
  577. package/dist/google-4XAYE4OI.js +3190 -0
  578. package/dist/google-4XAYE4OI.js.map +1 -0
  579. package/dist/google-52JRH7X3.js +136 -0
  580. package/dist/google-52JRH7X3.js.map +1 -0
  581. package/dist/google-ads-PWX7OF5Z.js +195 -0
  582. package/dist/google-ads-PWX7OF5Z.js.map +1 -0
  583. package/dist/group-AAZ5QKC3.js +43 -0
  584. package/dist/group-AAZ5QKC3.js.map +1 -0
  585. package/dist/group-GSYCZORC.js +43 -0
  586. package/dist/group-GSYCZORC.js.map +1 -0
  587. package/dist/gsc-TS5T7ML2.js +30 -0
  588. package/dist/gsc-TS5T7ML2.js.map +1 -0
  589. package/dist/history-EW6LFFCX.js +67 -0
  590. package/dist/history-EW6LFFCX.js.map +1 -0
  591. package/dist/history-XI5ABCFO.js +133 -0
  592. package/dist/history-XI5ABCFO.js.map +1 -0
  593. package/dist/hubspot-AVUOILRE.js +779 -0
  594. package/dist/hubspot-AVUOILRE.js.map +1 -0
  595. package/dist/icon-K75KI6BV.js +137 -0
  596. package/dist/icon-K75KI6BV.js.map +1 -0
  597. package/dist/ideas-UCPV3KTM.js +35 -0
  598. package/dist/ideas-UCPV3KTM.js.map +1 -0
  599. package/dist/images-CD53I2W5.js +90 -0
  600. package/dist/images-CD53I2W5.js.map +1 -0
  601. package/dist/improve-L3BW4EQG.js +86 -0
  602. package/dist/improve-L3BW4EQG.js.map +1 -0
  603. package/dist/ingest-KRJOYTCQ.js +107 -0
  604. package/dist/ingest-KRJOYTCQ.js.map +1 -0
  605. package/dist/ingest-WE3SPPND.js +23 -0
  606. package/dist/ingest-WE3SPPND.js.map +1 -0
  607. package/dist/insights-PELVD4RY.js +122 -0
  608. package/dist/insights-PELVD4RY.js.map +1 -0
  609. package/dist/insights-XCA4BUJW.js +423 -0
  610. package/dist/insights-XCA4BUJW.js.map +1 -0
  611. package/dist/inspect-QKETG5UJ.js +189 -0
  612. package/dist/inspect-QKETG5UJ.js.map +1 -0
  613. package/dist/inspiration-Y2J2PUPC.js +53 -0
  614. package/dist/inspiration-Y2J2PUPC.js.map +1 -0
  615. package/dist/intent-YJOJGNVJ.js +95 -0
  616. package/dist/intent-YJOJGNVJ.js.map +1 -0
  617. package/dist/job-E2U4FS5P.js +202 -0
  618. package/dist/job-E2U4FS5P.js.map +1 -0
  619. package/dist/job-create-DFYCHVQ7.js +109 -0
  620. package/dist/job-create-DFYCHVQ7.js.map +1 -0
  621. package/dist/job-status-FFPMTSHB.js +74 -0
  622. package/dist/job-status-FFPMTSHB.js.map +1 -0
  623. package/dist/keep-GYZS2UTL.js +78 -0
  624. package/dist/keep-GYZS2UTL.js.map +1 -0
  625. package/dist/keyword-gap-QU7O7UKC.js +130 -0
  626. package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
  627. package/dist/keyword-metrics-HLCM3QU7.js +197 -0
  628. package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
  629. package/dist/keywords-for-site-BDKPQKWB.js +128 -0
  630. package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
  631. package/dist/landing-4K6XYNFM.js +28 -0
  632. package/dist/landing-4K6XYNFM.js.map +1 -0
  633. package/dist/landings-F7LOAEJE.js +151 -0
  634. package/dist/landings-F7LOAEJE.js.map +1 -0
  635. package/dist/languages-P3ZM6R2A.js +40 -0
  636. package/dist/languages-P3ZM6R2A.js.map +1 -0
  637. package/dist/languages-XEJKTIFP.js +55 -0
  638. package/dist/languages-XEJKTIFP.js.map +1 -0
  639. package/dist/launches-TCFAYUA5.js +19 -0
  640. package/dist/launches-TCFAYUA5.js.map +1 -0
  641. package/dist/layerize-ZSKFIPZA.js +190 -0
  642. package/dist/layerize-ZSKFIPZA.js.map +1 -0
  643. package/dist/leads-GDF4S2AM.js +90 -0
  644. package/dist/leads-GDF4S2AM.js.map +1 -0
  645. package/dist/leads-TPB5OFSQ.js +293 -0
  646. package/dist/leads-TPB5OFSQ.js.map +1 -0
  647. package/dist/learn-NMFEA5H5.js +203 -0
  648. package/dist/learn-NMFEA5H5.js.map +1 -0
  649. package/dist/library-IP2UKNRU.js +109 -0
  650. package/dist/library-IP2UKNRU.js.map +1 -0
  651. package/dist/lighthouse-57XBJRCO.js +75 -0
  652. package/dist/lighthouse-57XBJRCO.js.map +1 -0
  653. package/dist/line-item-writes-O6SSS5NQ.js +208 -0
  654. package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
  655. package/dist/line-items-ZZAKH3YZ.js +103 -0
  656. package/dist/line-items-ZZAKH3YZ.js.map +1 -0
  657. package/dist/link-CRY57R3E.js +64 -0
  658. package/dist/link-CRY57R3E.js.map +1 -0
  659. package/dist/linkedin-WC7LGYPP.js +1008 -0
  660. package/dist/linkedin-WC7LGYPP.js.map +1 -0
  661. package/dist/list-6IKPWQGG.js +57 -0
  662. package/dist/list-6IKPWQGG.js.map +1 -0
  663. package/dist/list-CAUH3BMG.js +65 -0
  664. package/dist/list-CAUH3BMG.js.map +1 -0
  665. package/dist/list-CWAKX5TH.js +63 -0
  666. package/dist/list-CWAKX5TH.js.map +1 -0
  667. package/dist/list-FJ5FSVL6.js +151 -0
  668. package/dist/list-FJ5FSVL6.js.map +1 -0
  669. package/dist/list-GTOSN7DP.js +50 -0
  670. package/dist/list-GTOSN7DP.js.map +1 -0
  671. package/dist/list-HLJP4NVE.js +51 -0
  672. package/dist/list-HLJP4NVE.js.map +1 -0
  673. package/dist/list-LCUPF7EF.js +76 -0
  674. package/dist/list-LCUPF7EF.js.map +1 -0
  675. package/dist/list-NH4ZRZTL.js +303 -0
  676. package/dist/list-NH4ZRZTL.js.map +1 -0
  677. package/dist/locations-2BYWKIYA.js +67 -0
  678. package/dist/locations-2BYWKIYA.js.map +1 -0
  679. package/dist/locations-LVVDOSXO.js +40 -0
  680. package/dist/locations-LVVDOSXO.js.map +1 -0
  681. package/dist/log-6JOWOY5G.js +92 -0
  682. package/dist/log-6JOWOY5G.js.map +1 -0
  683. package/dist/logo-AJK2TDQU.js +18 -0
  684. package/dist/logo-AJK2TDQU.js.map +1 -0
  685. package/dist/lookup-H5GEM77H.js +22 -0
  686. package/dist/lookup-H5GEM77H.js.map +1 -0
  687. package/dist/make-Q2AMLCWE.js +640 -0
  688. package/dist/make-Q2AMLCWE.js.map +1 -0
  689. package/dist/map-4KOYFHAN.js +404 -0
  690. package/dist/map-4KOYFHAN.js.map +1 -0
  691. package/dist/mcp-LSS2DHYL.js +463 -0
  692. package/dist/mcp-LSS2DHYL.js.map +1 -0
  693. package/dist/media-JBCN6V4X.js +15 -0
  694. package/dist/media-JBCN6V4X.js.map +1 -0
  695. package/dist/media-RAGEJTZX.js +89 -0
  696. package/dist/media-RAGEJTZX.js.map +1 -0
  697. package/dist/media-sources-GSPAV7HT.js +32 -0
  698. package/dist/media-sources-GSPAV7HT.js.map +1 -0
  699. package/dist/members-GUUVEK2Y.js +44 -0
  700. package/dist/members-GUUVEK2Y.js.map +1 -0
  701. package/dist/meta-Z37ZR3PJ.js +69 -0
  702. package/dist/meta-Z37ZR3PJ.js.map +1 -0
  703. package/dist/metrics-KW6SDULI.js +152 -0
  704. package/dist/metrics-KW6SDULI.js.map +1 -0
  705. package/dist/models-5J4WFUD3.js +155 -0
  706. package/dist/models-5J4WFUD3.js.map +1 -0
  707. package/dist/normalize-DSFVTRXN.js +806 -0
  708. package/dist/normalize-DSFVTRXN.js.map +1 -0
  709. package/dist/normalize-EUDI5HEM.js +141 -0
  710. package/dist/normalize-EUDI5HEM.js.map +1 -0
  711. package/dist/options-P4PPJQH4.js +121 -0
  712. package/dist/options-P4PPJQH4.js.map +1 -0
  713. package/dist/output-DTCLVPUF.js +24 -0
  714. package/dist/output-DTCLVPUF.js.map +1 -0
  715. package/dist/page-N2ZO3O7F.js +105 -0
  716. package/dist/page-N2ZO3O7F.js.map +1 -0
  717. package/dist/pages-FQ4CBAJ2.js +66 -0
  718. package/dist/pages-FQ4CBAJ2.js.map +1 -0
  719. package/dist/performance-A66LYIZX.js +24 -0
  720. package/dist/performance-A66LYIZX.js.map +1 -0
  721. package/dist/pinterest-NV5XTNJE.js +96 -0
  722. package/dist/pinterest-NV5XTNJE.js.map +1 -0
  723. package/dist/pixels-CTJ43FZ4.js +108 -0
  724. package/dist/pixels-CTJ43FZ4.js.map +1 -0
  725. package/dist/pixels-HKINGZCH.js +60 -0
  726. package/dist/pixels-HKINGZCH.js.map +1 -0
  727. package/dist/plan-ZYTWLGWK.js +207 -0
  728. package/dist/plan-ZYTWLGWK.js.map +1 -0
  729. package/dist/preview-5ROBOQG7.js +169 -0
  730. package/dist/preview-5ROBOQG7.js.map +1 -0
  731. package/dist/profile-Q3PHR6FU.js +159 -0
  732. package/dist/profile-Q3PHR6FU.js.map +1 -0
  733. package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
  734. package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
  735. package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
  736. package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
  737. package/dist/properties-WLL6M2P6.js +101 -0
  738. package/dist/properties-WLL6M2P6.js.map +1 -0
  739. package/dist/publish-KHNR5ARF.js +322 -0
  740. package/dist/publish-KHNR5ARF.js.map +1 -0
  741. package/dist/query-A34J7BGX.js +61 -0
  742. package/dist/query-A34J7BGX.js.map +1 -0
  743. package/dist/query-IYZN5KHO.js +236 -0
  744. package/dist/query-IYZN5KHO.js.map +1 -0
  745. package/dist/query-UN2P6DBA.js +247 -0
  746. package/dist/query-UN2P6DBA.js.map +1 -0
  747. package/dist/questionnaire-Z2ZIKNBV.js +93 -0
  748. package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
  749. package/dist/read-GM7PQYJA.js +141 -0
  750. package/dist/read-GM7PQYJA.js.map +1 -0
  751. package/dist/reddit-5NPFULGD.js +26 -0
  752. package/dist/reddit-5NPFULGD.js.map +1 -0
  753. package/dist/refresh-FGXW4Y4X.js +94 -0
  754. package/dist/refresh-FGXW4Y4X.js.map +1 -0
  755. package/dist/release-OKZMC73N.js +60 -0
  756. package/dist/release-OKZMC73N.js.map +1 -0
  757. package/dist/relevant-pages-J76ZKNKF.js +99 -0
  758. package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
  759. package/dist/remove-CA2J6ACH.js +50 -0
  760. package/dist/remove-CA2J6ACH.js.map +1 -0
  761. package/dist/remove-GOYW2G4R.js +48 -0
  762. package/dist/remove-GOYW2G4R.js.map +1 -0
  763. package/dist/reopen-XPKSOE6O.js +63 -0
  764. package/dist/reopen-XPKSOE6O.js.map +1 -0
  765. package/dist/rerun-2ERJV4WC.js +86 -0
  766. package/dist/rerun-2ERJV4WC.js.map +1 -0
  767. package/dist/research-FZ63UZTE.js +62 -0
  768. package/dist/research-FZ63UZTE.js.map +1 -0
  769. package/dist/research-YGQQ6CNG.js +262 -0
  770. package/dist/research-YGQQ6CNG.js.map +1 -0
  771. package/dist/reset-BGPZ4HMA.js +54 -0
  772. package/dist/reset-BGPZ4HMA.js.map +1 -0
  773. package/dist/reset-HTD6LCIT.js +54 -0
  774. package/dist/reset-HTD6LCIT.js.map +1 -0
  775. package/dist/resolve-NRDZ6N2B.js +121 -0
  776. package/dist/resolve-NRDZ6N2B.js.map +1 -0
  777. package/dist/retry-PF4BGKJV.js +60 -0
  778. package/dist/retry-PF4BGKJV.js.map +1 -0
  779. package/dist/retry-XL26JDAV.js +62 -0
  780. package/dist/retry-XL26JDAV.js.map +1 -0
  781. package/dist/retry-failed-BEFWRV4Z.js +45 -0
  782. package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
  783. package/dist/run-EMJLI7LR.js +65 -0
  784. package/dist/run-EMJLI7LR.js.map +1 -0
  785. package/dist/run-L5K44UEA.js +61 -0
  786. package/dist/run-L5K44UEA.js.map +1 -0
  787. package/dist/scaffold-ad-AY2OL7RI.js +1550 -0
  788. package/dist/scaffold-ad-AY2OL7RI.js.map +1 -0
  789. package/dist/scaffold-static-ad-FXYE46MT.js +973 -0
  790. package/dist/scaffold-static-ad-FXYE46MT.js.map +1 -0
  791. package/dist/scaffold-video-533BT6RX.js +874 -0
  792. package/dist/scaffold-video-533BT6RX.js.map +1 -0
  793. package/dist/schedule-KQ7UIR3N.js +66 -0
  794. package/dist/schedule-KQ7UIR3N.js.map +1 -0
  795. package/dist/schedule-PKPNSISL.js +61 -0
  796. package/dist/schedule-PKPNSISL.js.map +1 -0
  797. package/dist/scheduled-agents-LP5LITA3.js +49 -0
  798. package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
  799. package/dist/schema-B6J6VPTO.js +132 -0
  800. package/dist/schema-B6J6VPTO.js.map +1 -0
  801. package/dist/schema-QXTDLZVC.js +63 -0
  802. package/dist/schema-QXTDLZVC.js.map +1 -0
  803. package/dist/scrape-7YKJWFZE.js +2241 -0
  804. package/dist/scrape-7YKJWFZE.js.map +1 -0
  805. package/dist/screenshot-ZHBSG3SI.js +102 -0
  806. package/dist/screenshot-ZHBSG3SI.js.map +1 -0
  807. package/dist/search-332KFYZ6.js +224 -0
  808. package/dist/search-332KFYZ6.js.map +1 -0
  809. package/dist/search-4PBMXXUY.js +91 -0
  810. package/dist/search-4PBMXXUY.js.map +1 -0
  811. package/dist/search-6WNUKCMP.js +174 -0
  812. package/dist/search-6WNUKCMP.js.map +1 -0
  813. package/dist/search-AVNUU6TJ.js +26 -0
  814. package/dist/search-AVNUU6TJ.js.map +1 -0
  815. package/dist/search-F5INRFFK.js +92 -0
  816. package/dist/search-F5INRFFK.js.map +1 -0
  817. package/dist/search-copy-DZVBYG2B.js +168 -0
  818. package/dist/search-copy-DZVBYG2B.js.map +1 -0
  819. package/dist/seeds-5JTQN5WI.js +101 -0
  820. package/dist/seeds-5JTQN5WI.js.map +1 -0
  821. package/dist/select-RSGLDQ5Z.js +96 -0
  822. package/dist/select-RSGLDQ5Z.js.map +1 -0
  823. package/dist/sends-3L6QBS46.js +309 -0
  824. package/dist/sends-3L6QBS46.js.map +1 -0
  825. package/dist/sequences-YKFV7BDH.js +146 -0
  826. package/dist/sequences-YKFV7BDH.js.map +1 -0
  827. package/dist/set-prompt-7WWJI6XW.js +188 -0
  828. package/dist/set-prompt-7WWJI6XW.js.map +1 -0
  829. package/dist/setup-links-6H5ONDCQ.js +141 -0
  830. package/dist/setup-links-6H5ONDCQ.js.map +1 -0
  831. package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
  832. package/dist/shared-QAMP7FZV.js.map +1 -0
  833. package/dist/shopify-2OY3J3OY.js +3692 -0
  834. package/dist/shopify-2OY3J3OY.js.map +1 -0
  835. package/dist/site-TBPERLY3.js +177 -0
  836. package/dist/site-TBPERLY3.js.map +1 -0
  837. package/dist/sitemaps-XPGLW24S.js +87 -0
  838. package/dist/sitemaps-XPGLW24S.js.map +1 -0
  839. package/dist/sites-WMBY2HJV.js +101 -0
  840. package/dist/sites-WMBY2HJV.js.map +1 -0
  841. package/dist/skills-3HEILQCU.js +47 -0
  842. package/dist/skills-3HEILQCU.js.map +1 -0
  843. package/dist/sources-JFQKTK2L.js +421 -0
  844. package/dist/sources-JFQKTK2L.js.map +1 -0
  845. package/dist/sources-Q3I6DDV7.js +30 -0
  846. package/dist/sources-Q3I6DDV7.js.map +1 -0
  847. package/dist/stale-CAXBLZKJ.js +66 -0
  848. package/dist/stale-CAXBLZKJ.js.map +1 -0
  849. package/dist/stats-GNILHSKK.js +34 -0
  850. package/dist/stats-GNILHSKK.js.map +1 -0
  851. package/dist/status-LIZWJYS4.js +62 -0
  852. package/dist/status-LIZWJYS4.js.map +1 -0
  853. package/dist/sticker-KCV3VZHY.js +94 -0
  854. package/dist/sticker-KCV3VZHY.js.map +1 -0
  855. package/dist/stock-VTORKR4C.js +179 -0
  856. package/dist/stock-VTORKR4C.js.map +1 -0
  857. package/dist/studio-QCRA6BY5.js +49 -0
  858. package/dist/studio-QCRA6BY5.js.map +1 -0
  859. package/dist/sync-455DB46Y.js +54 -0
  860. package/dist/sync-455DB46Y.js.map +1 -0
  861. package/dist/sync-A4KKQ3B6.js +265 -0
  862. package/dist/sync-A4KKQ3B6.js.map +1 -0
  863. package/dist/sync-ULKWDFXM.js +54 -0
  864. package/dist/sync-ULKWDFXM.js.map +1 -0
  865. package/dist/sync-definition-P6QTHJJ6.js +55 -0
  866. package/dist/sync-definition-P6QTHJJ6.js.map +1 -0
  867. package/dist/tag-manager-E7QTXBWQ.js +43 -0
  868. package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
  869. package/dist/tags-4Q4I5GQJ.js +20 -0
  870. package/dist/tags-4Q4I5GQJ.js.map +1 -0
  871. package/dist/tags-AMEVAQZ4.js +26 -0
  872. package/dist/tags-AMEVAQZ4.js.map +1 -0
  873. package/dist/tags-DPLOLH3E.js +20 -0
  874. package/dist/tags-DPLOLH3E.js.map +1 -0
  875. package/dist/tags-LDHXONR3.js +224 -0
  876. package/dist/tags-LDHXONR3.js.map +1 -0
  877. package/dist/tags-UW3WJTAQ.js +20 -0
  878. package/dist/tags-UW3WJTAQ.js.map +1 -0
  879. package/dist/targeting-constants-D64YO3E7.js +118 -0
  880. package/dist/targeting-constants-D64YO3E7.js.map +1 -0
  881. package/dist/targeting-criteria-BP6VJA7X.js +113 -0
  882. package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
  883. package/dist/targets-CQWO2UXD.js +102 -0
  884. package/dist/targets-CQWO2UXD.js.map +1 -0
  885. package/dist/templates-WZSTNRNZ.js +178 -0
  886. package/dist/templates-WZSTNRNZ.js.map +1 -0
  887. package/dist/testimonials-ETHSNWUH.js +32 -0
  888. package/dist/testimonials-ETHSNWUH.js.map +1 -0
  889. package/dist/themes-YU663LQH.js +94 -0
  890. package/dist/themes-YU663LQH.js.map +1 -0
  891. package/dist/top-companies-KTXHS472.js +108 -0
  892. package/dist/top-companies-KTXHS472.js.map +1 -0
  893. package/dist/translate-A7LYHUW3.js +600 -0
  894. package/dist/translate-A7LYHUW3.js.map +1 -0
  895. package/dist/triggers-4EDFLNGH.js +141 -0
  896. package/dist/triggers-4EDFLNGH.js.map +1 -0
  897. package/dist/tweets-ZUKQAAUQ.js +123 -0
  898. package/dist/tweets-ZUKQAAUQ.js.map +1 -0
  899. package/dist/unfollow-A4JVCJBF.js +46 -0
  900. package/dist/unfollow-A4JVCJBF.js.map +1 -0
  901. package/dist/unlink-KY2OEKMD.js +67 -0
  902. package/dist/unlink-KY2OEKMD.js.map +1 -0
  903. package/dist/unstage-FHUG67RI.js +84 -0
  904. package/dist/unstage-FHUG67RI.js.map +1 -0
  905. package/dist/unstage-ZRLLCSQF.js +95 -0
  906. package/dist/unstage-ZRLLCSQF.js.map +1 -0
  907. package/dist/update-27LGM65V.js +63 -0
  908. package/dist/update-27LGM65V.js.map +1 -0
  909. package/dist/update-AIY46I2Q.js +155 -0
  910. package/dist/update-AIY46I2Q.js.map +1 -0
  911. package/dist/update-QYD2XZFM.js +142 -0
  912. package/dist/update-QYD2XZFM.js.map +1 -0
  913. package/dist/update-W2OSRNFO.js +98 -0
  914. package/dist/update-W2OSRNFO.js.map +1 -0
  915. package/dist/upload-JGBTSKGH.js +126 -0
  916. package/dist/upload-JGBTSKGH.js.map +1 -0
  917. package/dist/upload-XEHWYMJG.js +150 -0
  918. package/dist/upload-XEHWYMJG.js.map +1 -0
  919. package/dist/upscale-I5P2OHTN.js +109 -0
  920. package/dist/upscale-I5P2OHTN.js.map +1 -0
  921. package/dist/url-options-QHGA42RP.js +130 -0
  922. package/dist/url-options-QHGA42RP.js.map +1 -0
  923. package/dist/url-params-NWSUHWRE.js +98 -0
  924. package/dist/url-params-NWSUHWRE.js.map +1 -0
  925. package/dist/use-U4HG2NF3.js +95 -0
  926. package/dist/use-U4HG2NF3.js.map +1 -0
  927. package/dist/validate-VKL3XKQ2.js +91 -0
  928. package/dist/validate-VKL3XKQ2.js.map +1 -0
  929. package/dist/variant-FOVE6URJ.js +338 -0
  930. package/dist/variant-FOVE6URJ.js.map +1 -0
  931. package/dist/videos-DP3VCSYG.js +39 -0
  932. package/dist/videos-DP3VCSYG.js.map +1 -0
  933. package/dist/view-HRI3FHCH.js +121 -0
  934. package/dist/view-HRI3FHCH.js.map +1 -0
  935. package/dist/viewer-check-JYUE24M6.js +68 -0
  936. package/dist/viewer-check-JYUE24M6.js.map +1 -0
  937. package/dist/web-AFUIWPFU.js +140 -0
  938. package/dist/web-AFUIWPFU.js.map +1 -0
  939. package/dist/winners-SMMDN6LW.js +113 -0
  940. package/dist/winners-SMMDN6LW.js.map +1 -0
  941. package/dist/winning-ads-PCIJUYVA.js +84 -0
  942. package/dist/winning-ads-PCIJUYVA.js.map +1 -0
  943. package/dist/write-commands-7Z34WG2J.js +206 -0
  944. package/dist/write-commands-7Z34WG2J.js.map +1 -0
  945. package/dist/write-commands-BLT2SEC4.js +713 -0
  946. package/dist/write-commands-BLT2SEC4.js.map +1 -0
  947. package/dist/write-commands-N4FSGRVQ.js +743 -0
  948. package/dist/write-commands-N4FSGRVQ.js.map +1 -0
  949. package/dist/write-commands-Q4MQ3BGM.js +1015 -0
  950. package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
  951. package/dist/x-AUOZJNWE.js +47 -0
  952. package/dist/x-AUOZJNWE.js.map +1 -0
  953. package/package.json +9 -2
  954. package/dist/chunk-FGHMWBUD.js +0 -9989
  955. package/dist/chunk-FGHMWBUD.js.map +0 -1
  956. package/dist/chunk-HJEMOSPH.js +0 -1292
  957. package/dist/chunk-HJEMOSPH.js.map +0 -1
  958. package/dist/chunk-MF7YA62W.js.map +0 -1
  959. package/dist/chunk-VZEDAFAR.js.map +0 -1
  960. package/dist/chunk-XHC4LMK4.js.map +0 -1
  961. package/dist/client-GR6YL3YX.js +0 -17
  962. package/dist/output-NMQXZF3Z.js +0 -18
  963. /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
  964. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  965. /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
  966. /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
  967. /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/winning-ads/seeds.ts"],"sourcesContent":["import type { PatternSeed, SeedCatalogField, SeedCatalogResponse } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../client.ts\";\nimport { type OutputFormat, writeJson, writeOutput } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { reportError } from \"./shared.ts\";\n\n/**\n * Read the pattern rollup (ad-dna `pattern_stats`, exposed at\n * `/api/ad-library/seed-catalog`). One builder powers three named subcommands\n * (`hooks` / `mechanisms` / `formats`), each pinning a different taxonomy\n * `field`. It returns the SEED keys that win inside brands for a segment\n * (`lift`: how much more often a brand's creatives with the seed kept running\n * 60 days than its others; `brands_for` / `brands_against`), so the agent\n * grounds a creative in a PROVEN pattern for the exact\n * platform+awareness+industry — then still grounds it in a real reference. The\n * ranking is corpus data, not a hand-authored preset. Feed a hook seed to\n * `winning-ads search --hook-archetype` to narrow the search to that pattern.\n */\nexport function leanSeedRow(r: PatternSeed): Record<string, unknown> {\n return {\n key: r.key,\n lift: r.lift,\n brands_for: r.brands_for,\n brands_against: r.brands_against,\n count: r.count,\n mean_winner_score: r.mean_winner_score,\n winner_share: r.winner_share,\n };\n}\n\ninterface SeedArgs {\n platform?: unknown;\n awareness?: unknown;\n industry?: unknown;\n limit?: unknown;\n}\n\n/** Build the `/api/ad-library/seed-catalog` query params, emitting only set keys. */\nfunction buildSeedParams(field: SeedCatalogField, args: SeedArgs): Record<string, string> {\n const params: Record<string, string> = { field };\n if (args.platform) params.platform = String(args.platform);\n if (args.awareness) params.awareness_stage = String(args.awareness);\n if (args.industry) params.industry = String(args.industry);\n if (args.limit) params.limit = String(args.limit);\n return params;\n}\n\nfunction makeSeedCommand(opts: { name: string; field: SeedCatalogField; description: string }) {\n registerSchema({\n command: `winning-ads.${opts.name}`,\n description: opts.description,\n args: {\n platform: { type: \"string\", description: \"Single platform (meta,linkedin,tiktok,google)\", required: false },\n awareness: { type: \"string\", description: \"Single awareness stage\", required: false },\n industry: { type: \"string\", description: \"Single industry seed\", required: false },\n limit: { type: \"number\", description: \"Max keys 1-100 (default 20)\", required: false, default: 20 },\n },\n });\n\n return defineCommand({\n meta: { name: opts.name, description: opts.description },\n args: {\n platform: { type: \"string\", description: \"Single platform to segment on\", required: false },\n awareness: { type: \"string\", description: \"Single awareness stage to segment on\", required: false },\n industry: { type: \"string\", description: \"Single industry seed to segment on\", required: false },\n limit: { type: \"string\", description: \"Max keys 1-100 (default 20)\", required: false, default: \"20\" },\n output: { type: \"string\", description: \"Output format: json|files|md\", required: false, default: \"json\" },\n full: { type: \"boolean\", description: \"Include the segment breakdown per key\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const params = buildSeedParams(opts.field, args as SeedArgs);\n const data = await apiGet<SeedCatalogResponse>(\"/api/ad-library/seed-catalog\", params);\n const rows = Array.isArray(data?.patterns) ? data.patterns : [];\n const full = args.full as boolean;\n const projected = rows.map((r) => (full ? r : leanSeedRow(r)));\n const output = (args.output as OutputFormat) || \"json\";\n\n if (output === \"json\") {\n writeJson({\n ok: true,\n data: { field: data?.field ?? opts.field, segment: data?.segment ?? null, patterns: projected },\n });\n return;\n }\n writeOutput({ ok: true, data: projected }, output);\n } catch (err) {\n reportError(err);\n }\n },\n });\n}\n\nexport const hooksCommand = makeSeedCommand({\n name: \"hooks\",\n field: \"hook_archetype\",\n description:\n \"Top winner-weighted HOOK seeds for a segment (from the ad-dna pattern rollup). Ground a creative in a proven hook for the exact platform+awareness+industry, then feed the chosen seed to `search --hook-archetype`.\",\n});\n\nexport const mechanismsCommand = makeSeedCommand({\n name: \"mechanisms\",\n field: \"mechanism_type\",\n description:\n \"Top winner-weighted PRODUCT mechanism seeds for a segment: how the advertised product claims to work (proprietary formula, AI automated, done-for-you…). Not the ad's persuasion device: for that use `hooks` and `formats`.\",\n});\n\nexport const formatsCommand = makeSeedCommand({\n name: \"formats\",\n field: \"static_format_pattern\",\n description: \"Top winner-weighted static ad FORMAT patterns for a segment (from the ad-dna pattern rollup).\",\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,96 @@
1
+ import {
2
+ versionOf
3
+ } from "./chunk-TLQ23DDW.js";
4
+ import "./chunk-RFB6RYKA.js";
5
+ import "./chunk-5SJ3JNNY.js";
6
+ import "./chunk-SLB46MSS.js";
7
+ import "./chunk-RGIXQEGJ.js";
8
+ import "./chunk-YULENNA7.js";
9
+ import "./chunk-MZWC6HHA.js";
10
+ import "./chunk-QSGIWV4P.js";
11
+ import "./chunk-I3DIZWN5.js";
12
+ import "./chunk-AUSKKFVH.js";
13
+ import "./chunk-HDHWIEJJ.js";
14
+ import "./chunk-66USKCVY.js";
15
+ import "./chunk-SHTESUB6.js";
16
+ import "./chunk-DGCUPJZD.js";
17
+ import "./chunk-U6VRBDNQ.js";
18
+ import "./chunk-CAMX6OHF.js";
19
+ import "./chunk-XQ3CCNJD.js";
20
+ import "./chunk-5HYSKH77.js";
21
+ import "./chunk-KIGGMKAE.js";
22
+ import "./chunk-MGKHFGLV.js";
23
+ import "./chunk-U7BBXM67.js";
24
+ import "./chunk-DX4GIDO7.js";
25
+ import "./chunk-CZENWCBS.js";
26
+ import {
27
+ creativesSelectRequestSchema
28
+ } from "./chunk-SMIENBNX.js";
29
+ import "./chunk-GXDLWBOY.js";
30
+ import "./chunk-GIWHHCD6.js";
31
+ import "./chunk-UI6BKYQD.js";
32
+ import "./chunk-XX6ZMCY5.js";
33
+ import {
34
+ ApiError,
35
+ apiPost
36
+ } from "./chunk-HREWXNTO.js";
37
+ import "./chunk-HLXWKMTK.js";
38
+ import "./chunk-O6QKCJE4.js";
39
+ import {
40
+ registerSchema,
41
+ writeJson
42
+ } from "./chunk-WOTDHRNF.js";
43
+ import "./chunk-YQSBHWOI.js";
44
+
45
+ // src/commands/creatives/select.ts
46
+ import { defineCommand } from "citty";
47
+ var DESCRIPTION = `Choose the version of a creative to keep, and optionally which of its options, only when the user says to keep this version in this chat. The creative shows that version as the chosen one, and the choice counts as the user's approval. A version you render after it replaces it when the chat is published (the user saw that one last). It does not save the image to their library (that is baker creatives publish) and puts nothing into an ad.
48
+ Start here: baker creatives select --slug spring-offer
49
+ Only some options of a version that made several: --options "ugc,2" (labels or numbers). Naming options again replaces the earlier pick.`;
50
+ var ARGS = {
51
+ slug: { type: "string", description: "The creative: its folder name under src/creatives/.", required: true },
52
+ run: {
53
+ type: "string",
54
+ description: "The version to keep: its canvas run id (r_\u2026) Left out, the version the creative shows now (its last render).",
55
+ required: false
56
+ },
57
+ options: {
58
+ type: "string",
59
+ description: 'Keep only these options of the version, comma-separated: labels ("ugc"), numbers ("2") or slots. Left out, the whole version.',
60
+ required: false
61
+ }
62
+ };
63
+ registerSchema({ command: "creatives.select", description: DESCRIPTION, args: ARGS });
64
+ function fail(code, message) {
65
+ writeJson({ ok: false, error: { code, message } });
66
+ process.exit(1);
67
+ }
68
+ var selectCommand = defineCommand({
69
+ meta: { name: "select", description: DESCRIPTION },
70
+ args: ARGS,
71
+ run: async ({ args }) => {
72
+ const options = typeof args.options === "string" ? args.options.split(",").map((option) => option.trim()).filter((option) => option.length > 0) : [];
73
+ const parsed = creativesSelectRequestSchema.safeParse({
74
+ slug: args.slug,
75
+ runId: await versionOf(String(args.slug), args.run).then(
76
+ (run) => run ?? fail("VALIDATION_ERROR", "--run: this creative has no rendered version here; name one (r_\u2026).")
77
+ ),
78
+ ...options.length > 0 ? { options } : {}
79
+ });
80
+ if (!parsed.success) {
81
+ const issue = parsed.error.issues[0];
82
+ fail("VALIDATION_ERROR", `--${String(issue?.path[0] ?? "args")}: ${issue?.message ?? "invalid"}`);
83
+ }
84
+ try {
85
+ const response = await apiPost("/api/creatives/select", parsed.data);
86
+ writeJson(response);
87
+ } catch (err) {
88
+ if (err instanceof ApiError) fail(err.code, err.message);
89
+ fail("INTERNAL_ERROR", "Unexpected error");
90
+ }
91
+ }
92
+ });
93
+ export {
94
+ selectCommand
95
+ };
96
+ //# sourceMappingURL=select-RSGLDQ5Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/creatives/select.ts"],"sourcesContent":["import { type CreativesSelectResponse, creativesSelectRequestSchema } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { versionOf } from \"./version-of.ts\";\n\nconst DESCRIPTION = `Choose the version of a creative to keep, and optionally which of its options, only when the user says to keep this version in this chat. The creative shows that version as the chosen one, and the choice counts as the user's approval. A version you render after it replaces it when the chat is published (the user saw that one last). It does not save the image to their library (that is baker creatives publish) and puts nothing into an ad.\nStart here: baker creatives select --slug spring-offer\nOnly some options of a version that made several: --options \"ugc,2\" (labels or numbers). Naming options again replaces the earlier pick.`;\n\nconst ARGS = {\n slug: { type: \"string\", description: \"The creative: its folder name under src/creatives/.\", required: true },\n run: {\n type: \"string\",\n description:\n \"The version to keep: its canvas run id (r_…) Left out, the version the creative shows now (its last render).\",\n required: false,\n },\n options: {\n type: \"string\",\n description:\n 'Keep only these options of the version, comma-separated: labels (\"ugc\"), numbers (\"2\") or slots. Left out, the whole version.',\n required: false,\n },\n} as const;\n\nregisterSchema({ command: \"creatives.select\", description: DESCRIPTION, args: ARGS });\n\nfunction fail(code: string, message: string): never {\n writeJson({ ok: false, error: { code, message } });\n process.exit(1);\n}\n\nexport const selectCommand = defineCommand({\n meta: { name: \"select\", description: DESCRIPTION },\n args: ARGS,\n run: async ({ args }) => {\n const options =\n typeof args.options === \"string\"\n ? args.options\n .split(\",\")\n .map((option) => option.trim())\n .filter((option) => option.length > 0)\n : [];\n const parsed = creativesSelectRequestSchema.safeParse({\n slug: args.slug,\n runId: await versionOf(String(args.slug), args.run).then(\n (run) => run ?? fail(\"VALIDATION_ERROR\", \"--run: this creative has no rendered version here; name one (r_…).\"),\n ),\n ...(options.length > 0 ? { options } : {}),\n });\n if (!parsed.success) {\n const issue = parsed.error.issues[0];\n fail(\"VALIDATION_ERROR\", `--${String(issue?.path[0] ?? \"args\")}: ${issue?.message ?? \"invalid\"}`);\n }\n try {\n const response = await apiPost<CreativesSelectResponse>(\"/api/creatives/select\", parsed.data);\n writeJson(response);\n } catch (err) {\n if (err instanceof ApiError) fail(err.code, err.message);\n fail(\"INTERNAL_ERROR\", \"Unexpected error\");\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAM9B,IAAM,cAAc;AAAA;AAAA;AAIpB,IAAM,OAAO;AAAA,EACX,MAAM,EAAE,MAAM,UAAU,aAAa,uDAAuD,UAAU,KAAK;AAAA,EAC3G,KAAK;AAAA,IACH,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AACF;AAEA,eAAe,EAAE,SAAS,oBAAoB,aAAa,aAAa,MAAM,KAAK,CAAC;AAEpF,SAAS,KAAK,MAAc,SAAwB;AAClD,YAAU,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,QAAQ,EAAE,CAAC;AACjD,UAAQ,KAAK,CAAC;AAChB;AAEO,IAAM,gBAAgB,cAAc;AAAA,EACzC,MAAM,EAAE,MAAM,UAAU,aAAa,YAAY;AAAA,EACjD,MAAM;AAAA,EACN,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,UACJ,OAAO,KAAK,YAAY,WACpB,KAAK,QACF,MAAM,GAAG,EACT,IAAI,CAAC,WAAW,OAAO,KAAK,CAAC,EAC7B,OAAO,CAAC,WAAW,OAAO,SAAS,CAAC,IACvC,CAAC;AACP,UAAM,SAAS,6BAA6B,UAAU;AAAA,MACpD,MAAM,KAAK;AAAA,MACX,OAAO,MAAM,UAAU,OAAO,KAAK,IAAI,GAAG,KAAK,GAAG,EAAE;AAAA,QAClD,CAAC,QAAQ,OAAO,KAAK,oBAAoB,yEAAoE;AAAA,MAC/G;AAAA,MACA,GAAI,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC1C,CAAC;AACD,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,QAAQ,OAAO,MAAM,OAAO,CAAC;AACnC,WAAK,oBAAoB,KAAK,OAAO,OAAO,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,OAAO,WAAW,SAAS,EAAE;AAAA,IAClG;AACA,QAAI;AACF,YAAM,WAAW,MAAM,QAAiC,yBAAyB,OAAO,IAAI;AAC5F,gBAAU,QAAQ;AAAA,IACpB,SAAS,KAAK;AACZ,UAAI,eAAe,SAAU,MAAK,IAAI,MAAM,IAAI,OAAO;AACvD,WAAK,kBAAkB,kBAAkB;AAAA,IAC3C;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,309 @@
1
+ import {
2
+ ConversionArgsError,
3
+ onlyOnce
4
+ } from "./chunk-R5OQM7FF.js";
5
+ import {
6
+ SEND_PLATFORMS,
7
+ isSendPlatform,
8
+ sendEventProblem,
9
+ sendsRequestSchema
10
+ } from "./chunk-FYWWTMXP.js";
11
+ import "./chunk-EDLZGTGN.js";
12
+ import {
13
+ writeJsonEnvelope
14
+ } from "./chunk-BVM5IRZW.js";
15
+ import {
16
+ ApiError,
17
+ apiPost
18
+ } from "./chunk-HREWXNTO.js";
19
+ import "./chunk-HLXWKMTK.js";
20
+ import "./chunk-O6QKCJE4.js";
21
+ import {
22
+ registerSchema
23
+ } from "./chunk-WOTDHRNF.js";
24
+ import "./chunk-YQSBHWOI.js";
25
+
26
+ // src/commands/analytics/sends.ts
27
+ import { defineCommand } from "citty";
28
+ var SET_FLAGS = ["--source-event", "--platform", "--tag", "--event"];
29
+ function parseSendsArgs(raw, argv, now = Date.now()) {
30
+ const set = parseSetFlags(raw, argv, now);
31
+ const remove = onlyOnce(raw.remove, "--remove", argv);
32
+ const days = raw.days === void 0 ? void 0 : Number(raw.days);
33
+ if (days !== void 0 && (!Number.isInteger(days) || days <= 0 || days > 400)) {
34
+ throw new ConversionArgsError("--days must be a whole number of days, from 1 to 400.");
35
+ }
36
+ const uploads = onlyOnce(raw.uploads, "--uploads", argv);
37
+ if (raw.failed === true && uploads === void 0) {
38
+ throw new ConversionArgsError("--failed narrows --uploads <sendId> to the refused ones; name the send.");
39
+ }
40
+ if (raw.skipped === true && uploads === void 0) {
41
+ throw new ConversionArgsError(
42
+ "--skipped narrows --uploads <sendId> to the events it never uploaded; name the send."
43
+ );
44
+ }
45
+ return {
46
+ ...set === void 0 ? {} : { set },
47
+ ...remove === void 0 ? {} : { remove },
48
+ ...days === void 0 ? {} : { days },
49
+ ...uploads === void 0 ? {} : { uploads },
50
+ ...raw.failed === true ? { failedOnly: true } : {},
51
+ ...raw.skipped === true ? { skippedOnly: true } : {},
52
+ full: raw.full === true
53
+ };
54
+ }
55
+ function flagValueAt(argv, flag, index) {
56
+ const arg = argv[index] ?? "";
57
+ if (arg === flag) return argv[index + 1];
58
+ return arg.startsWith(`${flag}=`) ? arg.slice(flag.length + 1) : void 0;
59
+ }
60
+ function parseParameterArgs(argv) {
61
+ const parameters = {};
62
+ for (let index = 0; index < argv.length; index += 1) {
63
+ const pair = flagValueAt(argv, "--parameter", index);
64
+ if (pair === void 0) continue;
65
+ const eq = pair.indexOf("=");
66
+ const name = (eq === -1 ? pair : pair.slice(0, eq)).trim();
67
+ const template = eq === -1 ? "" : pair.slice(eq + 1).trim();
68
+ if (name === "" || template === "") {
69
+ throw new ConversionArgsError(
70
+ `--parameter needs <name>=<template>, like --parameter content_name={{properties.plan}}; got "${pair}".`
71
+ );
72
+ }
73
+ parameters[name] = template;
74
+ }
75
+ return Object.keys(parameters).length === 0 ? void 0 : parameters;
76
+ }
77
+ function parseSetFlags(raw, argv, now) {
78
+ if (raw.conversion !== void 0) {
79
+ throw new ConversionArgsError(
80
+ "--conversion is gone: a send is on a system's EVENT, not a conversion. Pass --source-event <key> \u2014 one of events[].eventKey from a plain `baker analytics sends` (page:<name>)."
81
+ );
82
+ }
83
+ const values = {
84
+ "--source-event": onlyOnce(raw["source-event"] ?? raw.sourceEvent, "--source-event", argv),
85
+ "--platform": onlyOnce(raw.platform, "--platform", argv),
86
+ "--tag": onlyOnce(raw.tag, "--tag", argv),
87
+ "--event": onlyOnce(raw.event, "--event", argv)
88
+ };
89
+ const given = SET_FLAGS.filter((flag) => values[flag] !== void 0);
90
+ const set = raw.set === true;
91
+ if (!set) {
92
+ if (given.length > 0) {
93
+ throw new ConversionArgsError(
94
+ `${given.join(", ")} describe a send, so add --set to stage it. Without --set the command only reads.`
95
+ );
96
+ }
97
+ return void 0;
98
+ }
99
+ const missing = SET_FLAGS.filter((flag) => values[flag] === void 0);
100
+ if (missing.length > 0) {
101
+ throw new ConversionArgsError(
102
+ `--set needs ${SET_FLAGS.join(", ")}; missing ${missing.join(", ")}. Copy --tag from platforms[].tags of a plain \`baker analytics sends\`, never from memory.`
103
+ );
104
+ }
105
+ const platform = values["--platform"] ?? "";
106
+ if (!isSendPlatform(platform)) {
107
+ throw new ConversionArgsError(
108
+ `"${platform}" is not somewhere a conversion can be sent \u2014 --platform is one of ${SEND_PLATFORMS.join(", ")}.`
109
+ );
110
+ }
111
+ const event = values["--event"] ?? "";
112
+ const templated = sendEventProblem(platform, event);
113
+ if (templated !== null) {
114
+ throw new ConversionArgsError(`--event ${event} cannot be sent to ${platform}. ${templated}`);
115
+ }
116
+ const account = onlyOnce(raw.account, "--account", argv);
117
+ const parameters = parseParameterArgs(argv);
118
+ return {
119
+ id: onlyOnce(raw.id, "--id", argv) ?? sendIdFor(now),
120
+ eventKey: values["--source-event"] ?? "",
121
+ ...originFlag(raw, argv),
122
+ platform,
123
+ tagId: values["--tag"] ?? "",
124
+ event,
125
+ ...account === void 0 ? {} : { account },
126
+ ...parameters === void 0 ? {} : { parameters }
127
+ };
128
+ }
129
+ function originFlag(raw, argv) {
130
+ const from = onlyOnce(raw.from, "--from", argv) ?? "any";
131
+ if (from === "any") return { origin: "any" };
132
+ if (from === "api") return {};
133
+ if (from === "pixel") return { origin: "website" };
134
+ throw new ConversionArgsError(
135
+ `--from is any, pixel or api; got "${from}". any \u2014 the default \u2014 uploads the event whichever door it arrives by, once when the pixel and the API both report it with the same event id; pixel only what Baker's pixel sent from the client's website; api only what the API or an integration sent.`
136
+ );
137
+ }
138
+ function sendIdFor(now) {
139
+ return `s${now.toString(36).slice(-5)}`;
140
+ }
141
+ function sendsWrite(args2) {
142
+ const body = {
143
+ ...args2.set === void 0 ? {} : { set: [args2.set] },
144
+ ...args2.remove === void 0 ? {} : { remove: [args2.remove] },
145
+ ...args2.days === void 0 ? {} : { days: args2.days },
146
+ ...args2.uploads === void 0 ? {} : { uploads: args2.uploads },
147
+ ...args2.failedOnly === void 0 ? {} : { failedOnly: args2.failedOnly },
148
+ ...args2.skippedOnly === void 0 ? {} : { skippedOnly: args2.skippedOnly }
149
+ };
150
+ const parsed = sendsRequestSchema.safeParse(body);
151
+ if (!parsed.success) {
152
+ const issue = parsed.error.issues[0];
153
+ throw new ConversionArgsError(
154
+ `That send cannot be staged \u2014 ${issue?.path.join(".") || "set"}: ${issue?.message ?? "invalid"}. Run \`baker schema analytics.sends\` for the exact shape.`
155
+ );
156
+ }
157
+ return parsed.data;
158
+ }
159
+ function sendsView(response, full) {
160
+ const { carries, templateFields, ...rest } = response.data;
161
+ return {
162
+ ok: true,
163
+ data: { ...rest, ...full ? { carries, templateFields } : {} },
164
+ ...response.hints && response.hints.length > 0 ? { hints: response.hints } : {}
165
+ };
166
+ }
167
+ var args = {
168
+ set: {
169
+ type: "boolean",
170
+ description: "Stage a send, described by --source-event, --platform, --tag and --event. It applies when this chat is published, and from then on every event arriving under that key is uploaded to the platform and spends ad budget \u2014 say so to the client, never that it is a preview",
171
+ required: false
172
+ },
173
+ "source-event": {
174
+ type: "string",
175
+ description: "The event to send, by key \u2014 one of `events[].eventKey` from a plain `baker analytics sends`: a Source's own event (page:<source name>), or a named event the client's server posts. A Form's or a page's event is refused: the page's own pixels and the Form's side effects already send those",
176
+ required: false
177
+ },
178
+ from: {
179
+ type: "string",
180
+ description: "Which door's events the send uploads: `any` (default) \u2014 the event whichever door it arrives by, uploaded once when the pixel and the API both report it with the same event id; `pixel` \u2014 only what Baker's pixel sent from the client's own website (an `events[]` row with origin `website`); `api` \u2014 only what the client's server posted or an integration like HubSpot sent",
181
+ required: false
182
+ },
183
+ platform: {
184
+ type: "string",
185
+ description: `Where it goes: one of ${SEND_PLATFORMS.join(", ")}`,
186
+ required: false
187
+ },
188
+ tag: {
189
+ type: "string",
190
+ description: "The tag on Tracking that sends it. COPY the id from `platforms[].tags[].tagId` in the response \u2014 it is only listed there when the tag holds its server credential, and one typed from memory is refused",
191
+ required: false
192
+ },
193
+ event: {
194
+ type: "string",
195
+ description: 'What the platform calls it \u2014 `platforms[].eventMeans` says what each one takes: a Meta or Google Analytics event name (Purchase, Lead, generate_lead), a Google Ads conversion action id copied from `platforms[].conversionActions`, or the conversion label the person gives you (staged as its id; never type an id: one the account does not hold is refused), a LinkedIn conversion rule id, an X event tag id. On Meta and Google Analytics it may be WRITTEN FROM THE EVENT with the same {{path}} mentions --parameter takes: --event {{properties.plan}} sends each event under the plan it carries, --event "Purchase {{properties.tier}}" mixes text and a field. An event carrying nothing there is not uploaded. Google Ads, LinkedIn and X take an id THEY issued, so a template is refused there \u2014 pass what varies as a --parameter instead. For a GOOGLE ADS id, list the account\'s conversion actions first and pick by name \u2014 `baker ads google query "SELECT conversion_action.id, conversion_action.name, conversion_action.primary_for_goal FROM conversion_action WHERE conversion_action.status = \'ENABLED\'"` \u2014 never guess: Google accepts an upload against an id the account does not hold and files it against nothing',
196
+ required: false
197
+ },
198
+ account: {
199
+ type: "string",
200
+ description: "LinkedIn only: the ad account the conversion rule belongs to",
201
+ required: false
202
+ },
203
+ parameter: {
204
+ type: "string",
205
+ description: "<name>=<template>, repeatable, with --set: an EXTRA parameter the platform receives with every upload, beyond who, the click and the amount \u2014 Meta's custom_data (content_name, content_category, or your own), a GA4 event parameter, a Google Ads custom variable (must exist in the account), X's contents (content_name, num_items\u2026); LinkedIn takes none. The template is text with {{path}} mentions over the event: its own properties as {{properties.<key>}} (a HubSpot event's --field properties.<key> rows, a server event's `properties`), and the fields `templateFields` lists (--full): value, value_currency, event_name, page_path, city, country, gclid\u2026 Example: --parameter content_name={{properties.plan}} --parameter content_category=hubspot. `parameters[]` in the response says what each platform takes",
206
+ required: false
207
+ },
208
+ uploads: {
209
+ type: "string",
210
+ description: "The id of a send (`sends[].id`) whose uploads to list, newest first over --days: which event went, when, `outcome` (success | failed | pending | skipped) and in `error` the platform's refusal in its own words or what a skipped event was missing \u2014 the rows behind `sends[].outcome`. With --failed, only the refused ones; with --skipped, only the skipped ones",
211
+ required: false
212
+ },
213
+ failed: {
214
+ type: "boolean",
215
+ description: "With --uploads: only the uploads the platform refused",
216
+ required: false
217
+ },
218
+ skipped: {
219
+ type: "boolean",
220
+ description: "With --uploads: only the events the send never uploaded because they carried nothing the platform matches a person by \u2014 each `error` names what was missing (a Meta click id or cookie, an email, a gclid\u2026)",
221
+ required: false
222
+ },
223
+ id: {
224
+ type: "string",
225
+ description: "The send's id, when changing one that exists (`sends[].id` for a live one, `staged.set[].id` for one staged in this chat, like s1). Left out, a new id is minted and a NEW send is staged \u2014 so re-running a --set you already ran is refused, naming the send it would duplicate",
226
+ required: false
227
+ },
228
+ remove: {
229
+ type: "string",
230
+ description: "The id of a send to stop, from `sends[].id`. Staged like a set: it stops when the chat is published",
231
+ required: false
232
+ },
233
+ days: {
234
+ type: "string",
235
+ description: "How many days the outcome beside each send covers (default 30, up to 400)",
236
+ required: false
237
+ },
238
+ full: {
239
+ type: "boolean",
240
+ description: "Also return `carries`: every field a send forwards, the same for every send",
241
+ required: false
242
+ }
243
+ };
244
+ registerSchema({
245
+ command: "analytics.sends",
246
+ description: "Read where this company's system events are sent, or stage a change",
247
+ args
248
+ });
249
+ var sendsCommand = defineCommand({
250
+ meta: {
251
+ name: "sends",
252
+ description: `Where this company's SYSTEM EVENTS are sent \u2014 Meta, Google Ads, LinkedIn, X, Google Analytics \u2014 and what happened to each upload. A send belongs to an event one of the client's own systems raises, by key: page:deal_won from HubSpot \u2192 Meta Purchase means every "deal_won" HubSpot reports is uploaded to Meta with who the person is, the click that brought them and the amount forwarded automatically. There is nothing to map. What happens on a page or in a Form is never sent from here \u2014 the page's pixels and the Form's own side effects do that \u2014 and a send is never set on a funnel step: the step reads the sends of the events behind its ways in.
253
+
254
+ Start here:
255
+ baker analytics sends \u2014 the sends in effect, each with its outcome; the platforms and the tags that can send; the system events (events[]) that can be sent
256
+ baker analytics sends --set --source-event page:deal_won --platform meta --tag <tagId> --event Purchase
257
+ baker analytics sends --set --source-event page:deal_won --platform googleAds --tag <tagId> --event 987654321
258
+ baker analytics sends --set --source-event page:deal_won --platform meta --tag <tagId> --event Purchase --parameter content_name={{properties.plan}}
259
+ baker analytics sends --set --source-event page:lead_completed_step_2 --platform meta --tag <tagId> --event Lead \u2014 an event the pixel and/or the API send; uploaded once per event id
260
+ baker analytics sends --set --source-event page:deal_won --platform meta --tag <tagId> --event {{properties.plan}} \u2014 a Meta event named after what each one carries
261
+ baker analytics sends --remove s1 \u2014 stop one
262
+ baker analytics sends --days 7 \u2014 outcomes over the last week
263
+ baker analytics sends --uploads s1 --failed \u2014 the uploads Meta refused, each with the event and Meta's own words
264
+ baker analytics sends --uploads s1 --skipped \u2014 the events never uploaded, each with what the platform needed and they lacked
265
+
266
+ Three things to hold on to:
267
+ it is STAGED \u2014 a set or a remove lands when this chat is published, and from then on it SPENDS AD BUDGET on every "<event>" that arrives. Tell the client that plainly; never call a published send a preview.
268
+ the tagId is COPIED \u2014 from \`platforms[].tags\` in the response, which lists only the tags on Tracking that hold their server credential. One typed from memory is refused; a platform with no tag listed says what to add on Tracking (\`platforms[].setupHint\`).
269
+ the outcome is what happened \u2014 \`sends[].outcome\` counts what was sent, what failed and why (\`lastError\`, in the platform's words), and what was SKIPPED: an event carrying nothing the platform matches a person by is never uploaded (Meta: a Meta click id or cookie, an email or your own customer id; Google Ads: gclid, wbraid, gbraid, an email or a phone; LinkedIn: li_fat_id or an email; X: twclid or an email; Google Analytics: nothing), counted in \`skipped\` with \`lastSkipReason\`.
270
+ check the MATCH before staging \u2014 \`events[].match\` says, for the last 30 days of each event, how many arrived and how many each platform could match. A send to a platform matching 0 of 14 skips all 14: say so to the client, and ask for the click id or the email to be sent with the event instead. "Nothing sent yet" means no event under that name has fired since the send was set. \`--uploads <id>\` lists the rows behind the count, \`--failed\` only the refused ones \u2014 read it before telling a client a send "failed".
271
+ a Meta or GA4 event name can be WRITTEN FROM THE EVENT \u2014 \`--event {{properties.plan}}\` sends each event under its own plan, so one Source covers every value instead of one Source, one send and one conversion action per value. Only where the platform takes a name of your own: Google Ads, LinkedIn and X take an id they issued and refuse a template.
272
+ extra parameters are optional \u2014 \`--parameter <name>=<template>\` adds what the platform receives beyond who, the click and the amount: \`{{properties.<key>}}\` reads a property the event carries (a HubSpot event's \`--field properties.<key>\` rows), \`{{value}}\`, \`{{page_path}}\`, \`{{city}}\`\u2026 read the event's fields. \`parameters[]\` in the response says what each platform takes and the names it knows; LinkedIn takes none.
273
+
274
+ An empty \`events[]\` means none of the client's systems sends an event yet and there is nothing to send: make a Source with \`baker analytics sources\` (a HubSpot event, or the server's address), then send its event.`
275
+ },
276
+ args,
277
+ run: async ({ args: raw }) => {
278
+ try {
279
+ const parsed = parseSendsArgs(raw, process.argv);
280
+ const response = await apiPost("/api/analytics/sends", sendsWrite(parsed));
281
+ writeJsonEnvelope(sendsView(response, parsed.full));
282
+ } catch (err) {
283
+ handleError(err);
284
+ }
285
+ }
286
+ });
287
+ function handleError(err) {
288
+ if (err instanceof ConversionArgsError) {
289
+ writeJsonEnvelope({ ok: false, error: { code: "VALIDATION_ERROR", message: err.message } });
290
+ process.exit(1);
291
+ }
292
+ if (err instanceof ApiError) {
293
+ writeJsonEnvelope({ ok: false, error: { code: err.code, message: err.message } });
294
+ process.exit(1);
295
+ }
296
+ writeJsonEnvelope({
297
+ ok: false,
298
+ error: { code: "NETWORK_ERROR", message: err instanceof Error ? err.message : "Unexpected error" }
299
+ });
300
+ process.exit(1);
301
+ }
302
+ export {
303
+ parseParameterArgs,
304
+ parseSendsArgs,
305
+ sendsCommand,
306
+ sendsView,
307
+ sendsWrite
308
+ };
309
+ //# sourceMappingURL=sends-3L6QBS46.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/analytics/sends.ts"],"sourcesContent":["/**\n * `baker analytics sends` — where this company's system events are sent, and\n * changing it.\n *\n * A send hangs off an event one of the client's own systems raises, by its\n * key: `page:deal_won` from HubSpot → Meta Purchase. Every such event is\n * uploaded to the platform with who the person is, the click that brought\n * them and the amount forwarded automatically. Nothing is mapped. What happens\n * on a page or in a Form is not sendable here: the page's own pixels and the\n * Form's own side effects already send those.\n *\n * A write STAGES: it lands when the chat is published, and from then on it\n * spends ad budget on every event under the key. The dashboard's Sources page\n * applies at once because the person clicking is the review; an agent's\n * proposal gets its review at Publish.\n */\n\nimport {\n isSendPlatform,\n SEND_PLATFORMS,\n type SendsRequest,\n type SendsResponse,\n sendEventProblem,\n sendsRequestSchema,\n} from \"@baker/api/analytics\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { writeJsonEnvelope } from \"../ads/output.ts\";\nimport { ConversionArgsError, onlyOnce } from \"./conversionArgs.ts\";\n\nexport interface SendsArgs {\n set?: {\n id: string;\n eventKey: string;\n platform: string;\n tagId: string;\n event: string;\n account?: string;\n parameters?: Record<string, string>;\n };\n remove?: string;\n days?: number;\n /** One send's uploads, by id, and whether only the refused ones. */\n uploads?: string;\n failedOnly?: boolean;\n /** With `uploads`: only the events it skipped, for want of anything to match. */\n skippedOnly?: boolean;\n full: boolean;\n}\n\nconst SET_FLAGS = [\"--source-event\", \"--platform\", \"--tag\", \"--event\"] as const;\n\n/**\n * The flags, checked for the shapes that would otherwise stage the wrong\n * send in silence. Pure, so the refusals are tier-1 tested.\n */\nexport function parseSendsArgs(raw: Record<string, unknown>, argv: readonly string[], now = Date.now()): SendsArgs {\n const set = parseSetFlags(raw, argv, now);\n const remove = onlyOnce(raw.remove, \"--remove\", argv);\n\n const days = raw.days === undefined ? undefined : Number(raw.days);\n if (days !== undefined && (!Number.isInteger(days) || days <= 0 || days > 400)) {\n throw new ConversionArgsError(\"--days must be a whole number of days, from 1 to 400.\");\n }\n\n const uploads = onlyOnce(raw.uploads, \"--uploads\", argv);\n if (raw.failed === true && uploads === undefined) {\n throw new ConversionArgsError(\"--failed narrows --uploads <sendId> to the refused ones; name the send.\");\n }\n if (raw.skipped === true && uploads === undefined) {\n throw new ConversionArgsError(\n \"--skipped narrows --uploads <sendId> to the events it never uploaded; name the send.\",\n );\n }\n\n return {\n ...(set === undefined ? {} : { set }),\n ...(remove === undefined ? {} : { remove }),\n ...(days === undefined ? {} : { days }),\n ...(uploads === undefined ? {} : { uploads }),\n ...(raw.failed === true ? { failedOnly: true } : {}),\n ...(raw.skipped === true ? { skippedOnly: true } : {}),\n full: raw.full === true,\n };\n}\n\n/** The value a repeated flag carries at this position, in either spelling, or nothing. */\nfunction flagValueAt(argv: readonly string[], flag: string, index: number): string | undefined {\n const arg = argv[index] ?? \"\";\n if (arg === flag) return argv[index + 1];\n return arg.startsWith(`${flag}=`) ? arg.slice(flag.length + 1) : undefined;\n}\n\n/**\n * Every `--parameter name=template` on the command line, in order. Read off\n * argv rather than the parsed args because citty keeps only the last value\n * of a repeated flag — the defect that once staged one of three UTMs.\n */\nexport function parseParameterArgs(argv: readonly string[]): Record<string, string> | undefined {\n const parameters: Record<string, string> = {};\n for (let index = 0; index < argv.length; index += 1) {\n const pair = flagValueAt(argv, \"--parameter\", index);\n if (pair === undefined) continue;\n const eq = pair.indexOf(\"=\");\n const name = (eq === -1 ? pair : pair.slice(0, eq)).trim();\n const template = eq === -1 ? \"\" : pair.slice(eq + 1).trim();\n if (name === \"\" || template === \"\") {\n throw new ConversionArgsError(\n `--parameter needs <name>=<template>, like --parameter content_name={{properties.plan}}; got \"${pair}\".`,\n );\n }\n parameters[name] = template;\n }\n return Object.keys(parameters).length === 0 ? undefined : parameters;\n}\n\n/**\n * The send `--set` describes, or nothing on a read.\n *\n * The four flags are only meaningful together and only under `--set`: a send\n * described without it would answer ok and stage nothing, and a `--set` with\n * a piece missing would be refused by the server with the field named but not\n * the flag.\n */\nfunction parseSetFlags(raw: Record<string, unknown>, argv: readonly string[], now: number): SendsArgs[\"set\"] {\n if (raw.conversion !== undefined) {\n throw new ConversionArgsError(\n \"--conversion is gone: a send is on a system's EVENT, not a conversion. Pass --source-event <key> — one of events[].eventKey from a plain `baker analytics sends` (page:<name>).\",\n );\n }\n const values = {\n \"--source-event\": onlyOnce(raw[\"source-event\"] ?? raw.sourceEvent, \"--source-event\", argv),\n \"--platform\": onlyOnce(raw.platform, \"--platform\", argv),\n \"--tag\": onlyOnce(raw.tag, \"--tag\", argv),\n \"--event\": onlyOnce(raw.event, \"--event\", argv),\n };\n const given = SET_FLAGS.filter((flag) => values[flag] !== undefined);\n const set = raw.set === true;\n\n if (!set) {\n if (given.length > 0) {\n throw new ConversionArgsError(\n `${given.join(\", \")} describe a send, so add --set to stage it. Without --set the command only reads.`,\n );\n }\n return undefined;\n }\n\n const missing = SET_FLAGS.filter((flag) => values[flag] === undefined);\n if (missing.length > 0) {\n throw new ConversionArgsError(\n `--set needs ${SET_FLAGS.join(\", \")}; missing ${missing.join(\", \")}. Copy --tag from platforms[].tags of a plain \\`baker analytics sends\\`, never from memory.`,\n );\n }\n const platform = values[\"--platform\"] ?? \"\";\n if (!isSendPlatform(platform)) {\n throw new ConversionArgsError(\n `\"${platform}\" is not somewhere a conversion can be sent — --platform is one of ${SEND_PLATFORMS.join(\", \")}.`,\n );\n }\n\n const event = values[\"--event\"] ?? \"\";\n const templated = sendEventProblem(platform, event);\n if (templated !== null) {\n throw new ConversionArgsError(`--event ${event} cannot be sent to ${platform}. ${templated}`);\n }\n\n const account = onlyOnce(raw.account, \"--account\", argv);\n const parameters = parseParameterArgs(argv);\n return {\n id: onlyOnce(raw.id, \"--id\", argv) ?? sendIdFor(now),\n eventKey: values[\"--source-event\"] ?? \"\",\n ...originFlag(raw, argv),\n platform,\n tagId: values[\"--tag\"] ?? \"\",\n event,\n ...(account === undefined ? {} : { account }),\n ...(parameters === undefined ? {} : { parameters }),\n };\n}\n\n/**\n * Which door's events `--set` uploads, as the send spells it: every door the\n * event arrives by (`origin: \"any\"`, the default — one event, one set of\n * destinations, uploaded once when the pixel and the API both report it under\n * one event id), or only the pixel's (`website`) or only the API's and the\n * integrations' (no field at all).\n */\nfunction originFlag(raw: Record<string, unknown>, argv: readonly string[]): { origin?: \"website\" | \"any\" } {\n const from = onlyOnce(raw.from, \"--from\", argv) ?? \"any\";\n if (from === \"any\") return { origin: \"any\" };\n if (from === \"api\") return {};\n if (from === \"pixel\") return { origin: \"website\" };\n throw new ConversionArgsError(\n `--from is any, pixel or api; got \"${from}\". any — the default — uploads the event whichever door it arrives by, once when the pixel and the API both report it with the same event id; pixel only what Baker's pixel sent from the client's website; api only what the API or an integration sent.`,\n );\n}\n\n/** A short id a person can type, when the caller did not choose one. */\nfunction sendIdFor(now: number): string {\n return `s${now.toString(36).slice(-5)}`;\n}\n\n/**\n * The request body, validated against the shared schema here rather than only\n * on the server, so a malformed send is named before a round trip.\n */\nexport function sendsWrite(args: SendsArgs): SendsRequest {\n const body = {\n ...(args.set === undefined ? {} : { set: [args.set] }),\n ...(args.remove === undefined ? {} : { remove: [args.remove] }),\n ...(args.days === undefined ? {} : { days: args.days }),\n ...(args.uploads === undefined ? {} : { uploads: args.uploads }),\n ...(args.failedOnly === undefined ? {} : { failedOnly: args.failedOnly }),\n ...(args.skippedOnly === undefined ? {} : { skippedOnly: args.skippedOnly }),\n };\n const parsed = sendsRequestSchema.safeParse(body);\n if (!parsed.success) {\n const issue = parsed.error.issues[0];\n throw new ConversionArgsError(\n `That send cannot be staged — ${issue?.path.join(\".\") || \"set\"}: ${issue?.message ?? \"invalid\"}. Run \\`baker schema analytics.sends\\` for the exact shape.`,\n );\n }\n return parsed.data;\n}\n\n/**\n * What to print. Compact by default: the sends with their outcomes, the\n * platforms with the tags that can send (where a `tagId` is copied from), and\n * the system events that can be sent. `carries` — every field a send forwards\n * — is the same list every time, so it is behind `--full`.\n */\nexport function sendsView(response: SendsResponse, full: boolean): Record<string, unknown> {\n const { carries, templateFields, ...rest } = response.data;\n return {\n ok: true,\n data: { ...rest, ...(full ? { carries, templateFields } : {}) },\n ...(response.hints && response.hints.length > 0 ? { hints: response.hints } : {}),\n };\n}\n\nconst args = {\n set: {\n type: \"boolean\",\n description:\n \"Stage a send, described by --source-event, --platform, --tag and --event. It applies when this chat is published, and from then on every event arriving under that key is uploaded to the platform and spends ad budget — say so to the client, never that it is a preview\",\n required: false,\n },\n \"source-event\": {\n type: \"string\",\n description:\n \"The event to send, by key — one of `events[].eventKey` from a plain `baker analytics sends`: a Source's own event (page:<source name>), or a named event the client's server posts. A Form's or a page's event is refused: the page's own pixels and the Form's side effects already send those\",\n required: false,\n },\n from: {\n type: \"string\",\n description:\n \"Which door's events the send uploads: `any` (default) — the event whichever door it arrives by, uploaded once when the pixel and the API both report it with the same event id; `pixel` — only what Baker's pixel sent from the client's own website (an `events[]` row with origin `website`); `api` — only what the client's server posted or an integration like HubSpot sent\",\n required: false,\n },\n platform: {\n type: \"string\",\n description: `Where it goes: one of ${SEND_PLATFORMS.join(\", \")}`,\n required: false,\n },\n tag: {\n type: \"string\",\n description:\n \"The tag on Tracking that sends it. COPY the id from `platforms[].tags[].tagId` in the response — it is only listed there when the tag holds its server credential, and one typed from memory is refused\",\n required: false,\n },\n event: {\n type: \"string\",\n description:\n 'What the platform calls it — `platforms[].eventMeans` says what each one takes: a Meta or Google Analytics event name (Purchase, Lead, generate_lead), a Google Ads conversion action id copied from `platforms[].conversionActions`, or the conversion label the person gives you (staged as its id; never type an id: one the account does not hold is refused), a LinkedIn conversion rule id, an X event tag id. On Meta and Google Analytics it may be WRITTEN FROM THE EVENT with the same {{path}} mentions --parameter takes: --event {{properties.plan}} sends each event under the plan it carries, --event \"Purchase {{properties.tier}}\" mixes text and a field. An event carrying nothing there is not uploaded. Google Ads, LinkedIn and X take an id THEY issued, so a template is refused there — pass what varies as a --parameter instead. For a GOOGLE ADS id, list the account\\'s conversion actions first and pick by name — `baker ads google query \"SELECT conversion_action.id, conversion_action.name, conversion_action.primary_for_goal FROM conversion_action WHERE conversion_action.status = \\'ENABLED\\'\"` — never guess: Google accepts an upload against an id the account does not hold and files it against nothing',\n required: false,\n },\n account: {\n type: \"string\",\n description: \"LinkedIn only: the ad account the conversion rule belongs to\",\n required: false,\n },\n parameter: {\n type: \"string\",\n description:\n \"<name>=<template>, repeatable, with --set: an EXTRA parameter the platform receives with every upload, beyond who, the click and the amount — Meta's custom_data (content_name, content_category, or your own), a GA4 event parameter, a Google Ads custom variable (must exist in the account), X's contents (content_name, num_items…); LinkedIn takes none. The template is text with {{path}} mentions over the event: its own properties as {{properties.<key>}} (a HubSpot event's --field properties.<key> rows, a server event's `properties`), and the fields `templateFields` lists (--full): value, value_currency, event_name, page_path, city, country, gclid… Example: --parameter content_name={{properties.plan}} --parameter content_category=hubspot. `parameters[]` in the response says what each platform takes\",\n required: false,\n },\n uploads: {\n type: \"string\",\n description:\n \"The id of a send (`sends[].id`) whose uploads to list, newest first over --days: which event went, when, `outcome` (success | failed | pending | skipped) and in `error` the platform's refusal in its own words or what a skipped event was missing — the rows behind `sends[].outcome`. With --failed, only the refused ones; with --skipped, only the skipped ones\",\n required: false,\n },\n failed: {\n type: \"boolean\",\n description: \"With --uploads: only the uploads the platform refused\",\n required: false,\n },\n skipped: {\n type: \"boolean\",\n description:\n \"With --uploads: only the events the send never uploaded because they carried nothing the platform matches a person by — each `error` names what was missing (a Meta click id or cookie, an email, a gclid…)\",\n required: false,\n },\n id: {\n type: \"string\",\n description:\n \"The send's id, when changing one that exists (`sends[].id` for a live one, `staged.set[].id` for one staged in this chat, like s1). Left out, a new id is minted and a NEW send is staged — so re-running a --set you already ran is refused, naming the send it would duplicate\",\n required: false,\n },\n remove: {\n type: \"string\",\n description: \"The id of a send to stop, from `sends[].id`. Staged like a set: it stops when the chat is published\",\n required: false,\n },\n days: {\n type: \"string\",\n description: \"How many days the outcome beside each send covers (default 30, up to 400)\",\n required: false,\n },\n full: {\n type: \"boolean\",\n description: \"Also return `carries`: every field a send forwards, the same for every send\",\n required: false,\n },\n} as const;\n\nregisterSchema({\n command: \"analytics.sends\",\n description: \"Read where this company's system events are sent, or stage a change\",\n args,\n});\n\nexport const sendsCommand = defineCommand({\n meta: {\n name: \"sends\",\n description: `Where this company's SYSTEM EVENTS are sent — Meta, Google Ads, LinkedIn, X, Google Analytics — and what happened to each upload. A send belongs to an event one of the client's own systems raises, by key: page:deal_won from HubSpot → Meta Purchase means every \"deal_won\" HubSpot reports is uploaded to Meta with who the person is, the click that brought them and the amount forwarded automatically. There is nothing to map. What happens on a page or in a Form is never sent from here — the page's pixels and the Form's own side effects do that — and a send is never set on a funnel step: the step reads the sends of the events behind its ways in.\n\nStart here:\n baker analytics sends — the sends in effect, each with its outcome; the platforms and the tags that can send; the system events (events[]) that can be sent\n baker analytics sends --set --source-event page:deal_won --platform meta --tag <tagId> --event Purchase\n baker analytics sends --set --source-event page:deal_won --platform googleAds --tag <tagId> --event 987654321\n baker analytics sends --set --source-event page:deal_won --platform meta --tag <tagId> --event Purchase --parameter content_name={{properties.plan}}\n baker analytics sends --set --source-event page:lead_completed_step_2 --platform meta --tag <tagId> --event Lead — an event the pixel and/or the API send; uploaded once per event id\n baker analytics sends --set --source-event page:deal_won --platform meta --tag <tagId> --event {{properties.plan}} — a Meta event named after what each one carries\n baker analytics sends --remove s1 — stop one\n baker analytics sends --days 7 — outcomes over the last week\n baker analytics sends --uploads s1 --failed — the uploads Meta refused, each with the event and Meta's own words\n baker analytics sends --uploads s1 --skipped — the events never uploaded, each with what the platform needed and they lacked\n\nThree things to hold on to:\n it is STAGED — a set or a remove lands when this chat is published, and from then on it SPENDS AD BUDGET on every \"<event>\" that arrives. Tell the client that plainly; never call a published send a preview.\n the tagId is COPIED — from \\`platforms[].tags\\` in the response, which lists only the tags on Tracking that hold their server credential. One typed from memory is refused; a platform with no tag listed says what to add on Tracking (\\`platforms[].setupHint\\`).\n the outcome is what happened — \\`sends[].outcome\\` counts what was sent, what failed and why (\\`lastError\\`, in the platform's words), and what was SKIPPED: an event carrying nothing the platform matches a person by is never uploaded (Meta: a Meta click id or cookie, an email or your own customer id; Google Ads: gclid, wbraid, gbraid, an email or a phone; LinkedIn: li_fat_id or an email; X: twclid or an email; Google Analytics: nothing), counted in \\`skipped\\` with \\`lastSkipReason\\`.\n check the MATCH before staging — \\`events[].match\\` says, for the last 30 days of each event, how many arrived and how many each platform could match. A send to a platform matching 0 of 14 skips all 14: say so to the client, and ask for the click id or the email to be sent with the event instead. \"Nothing sent yet\" means no event under that name has fired since the send was set. \\`--uploads <id>\\` lists the rows behind the count, \\`--failed\\` only the refused ones — read it before telling a client a send \"failed\".\n a Meta or GA4 event name can be WRITTEN FROM THE EVENT — \\`--event {{properties.plan}}\\` sends each event under its own plan, so one Source covers every value instead of one Source, one send and one conversion action per value. Only where the platform takes a name of your own: Google Ads, LinkedIn and X take an id they issued and refuse a template.\n extra parameters are optional — \\`--parameter <name>=<template>\\` adds what the platform receives beyond who, the click and the amount: \\`{{properties.<key>}}\\` reads a property the event carries (a HubSpot event's \\`--field properties.<key>\\` rows), \\`{{value}}\\`, \\`{{page_path}}\\`, \\`{{city}}\\`… read the event's fields. \\`parameters[]\\` in the response says what each platform takes and the names it knows; LinkedIn takes none.\n\nAn empty \\`events[]\\` means none of the client's systems sends an event yet and there is nothing to send: make a Source with \\`baker analytics sources\\` (a HubSpot event, or the server's address), then send its event.`,\n },\n args,\n run: async ({ args: raw }) => {\n try {\n const parsed = parseSendsArgs(raw as Record<string, unknown>, process.argv);\n const response = await apiPost<SendsResponse>(\"/api/analytics/sends\", sendsWrite(parsed));\n writeJsonEnvelope(sendsView(response, parsed.full));\n } catch (err) {\n handleError(err);\n }\n },\n});\n\nfunction handleError(err: unknown): never {\n if (err instanceof ConversionArgsError) {\n writeJsonEnvelope({ ok: false, error: { code: \"VALIDATION_ERROR\", message: err.message } });\n process.exit(1);\n }\n if (err instanceof ApiError) {\n writeJsonEnvelope({ ok: false, error: { code: err.code, message: err.message } });\n process.exit(1);\n }\n writeJsonEnvelope({\n ok: false,\n error: { code: \"NETWORK_ERROR\", message: err instanceof Error ? err.message : \"Unexpected error\" },\n });\n process.exit(1);\n}\n"],"mappings":"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","names":["args"]}
@@ -0,0 +1,146 @@
1
+ import {
2
+ INSPIRATION_HINTS,
3
+ favoritesScopeHints,
4
+ parseNumber,
5
+ reportError,
6
+ splitList
7
+ } from "./chunk-H7MLHG2I.js";
8
+ import {
9
+ apiPost
10
+ } from "./chunk-HREWXNTO.js";
11
+ import "./chunk-HLXWKMTK.js";
12
+ import "./chunk-O6QKCJE4.js";
13
+ import {
14
+ registerSchema,
15
+ writeJson
16
+ } from "./chunk-WOTDHRNF.js";
17
+ import "./chunk-YQSBHWOI.js";
18
+
19
+ // src/commands/landing/inspiration/sequences.ts
20
+ import { defineCommand } from "citty";
21
+ var COMPACT_TRANSITIONS = 12;
22
+ var COMPACT_ENDS = 5;
23
+ var MAX_PAGES = 50;
24
+ registerSchema({
25
+ command: "landing.inspiration.sequences",
26
+ description: "Learn how real pages of a given kind are ORDERED: what they open with, what section follows what, what they close on \u2014 counted across many pages at once. Start here: baker landing inspiration sequences 'b2b saas pricing page' --scope all. Use this to decide the order of a page you are about to build; use `baker landing inspiration page <id>` to read one specific page's order.",
27
+ args: {
28
+ query: { type: "string", description: "What kind of page, in plain English", required: false },
29
+ scope: { type: "string", description: "favorites (default) | all", required: false },
30
+ domain: { type: "string", description: "Restrict to one site", required: false },
31
+ "section-type": {
32
+ type: "string",
33
+ description: "Comma list \u2014 only pages carrying one of these sections (same vocabulary as `search --type`)",
34
+ required: false
35
+ },
36
+ limit: { type: "number", description: "Pages to count over (default 10, max 50)", required: false },
37
+ full: {
38
+ type: "boolean",
39
+ description: "Count over every page that matched, and print the whole transition table",
40
+ required: false
41
+ }
42
+ }
43
+ });
44
+ function buildSequencesBody(args) {
45
+ const body = {};
46
+ if (args.query) body.query = String(args.query);
47
+ if (args.domain) body.domain = String(args.domain);
48
+ const sectionType = splitList(args["section-type"]);
49
+ if (sectionType) body.sectionType = sectionType;
50
+ body.scope = args.scope === "all" ? "all" : "favorites";
51
+ const limit = parseNumber(args.limit);
52
+ if (limit !== void 0) body.limit = limit;
53
+ else if (args.full) body.limit = MAX_PAGES;
54
+ return body;
55
+ }
56
+ function sequencesHints(data, { scope, full }) {
57
+ const hints = [];
58
+ if (data.pagesReturned === 0) {
59
+ hints.push(
60
+ scope === "favorites" ? "No readable saved pages matched, so there is nothing to count. Retry with --scope all, or save pages the client admires with `baker landing inspiration add <url>`." : "No pages matched. Drop the filters, or widen the query \u2014 sequencing evidence needs several pages to mean anything."
61
+ );
62
+ } else {
63
+ hints.push(
64
+ `Counted over ${data.pagesReturned} ${data.pagesReturned === 1 ? "page" : "pages"} of ${data.pagesConsidered} that matched` + (data.pagesConsidered > data.pagesReturned ? " \u2014 raise --limit or pass --full to count over all of them." : ".")
65
+ );
66
+ if (data.pagesReturned < 3) {
67
+ hints.push(
68
+ "Two pages or fewer is an anecdote, not a pattern. Widen with --scope all before you sequence a page from this."
69
+ );
70
+ }
71
+ }
72
+ if (data.scanLimited) {
73
+ hints.push(
74
+ "More pages matched than one sweep reads, so the counts are over a sample. Narrow with --domain or --section-type for a firmer answer."
75
+ );
76
+ }
77
+ if (data.pages.length > 0) {
78
+ hints.push(
79
+ "This is the aggregate; it deliberately does not repeat any single page's order. Open one with `baker landing inspiration page <page_id>` when a page is worth reading top to bottom."
80
+ );
81
+ hints.push(
82
+ "Openers and closers are the first and last *described* section, not literally the top and bottom of the page. A site's repeated chrome (navbar, footer, a shared logo strip) is filed once and skipped on its other pages, so treat the middle of the table \u2014 the transitions \u2014 as the firm evidence here."
83
+ );
84
+ }
85
+ if (!full && data.transitions.length > COMPACT_TRANSITIONS) {
86
+ hints.push(
87
+ `Showing the ${COMPACT_TRANSITIONS} most common of ${data.transitions.length} pairs \u2014 add --full for the whole table.`
88
+ );
89
+ }
90
+ hints.push(INSPIRATION_HINTS.structureNotCopy);
91
+ if (scope === "favorites") hints.push(...favoritesScopeHints(data.favoritesHealth, data.pagesReturned));
92
+ return hints;
93
+ }
94
+ var sequencesCommand = defineCommand({
95
+ meta: {
96
+ name: "sequences",
97
+ description: "What section follows what, across many real pages at once. Example: baker landing inspiration sequences 'developer tool pricing page' --scope all \u2014 the evidence for how to order a page you are about to build."
98
+ },
99
+ args: {
100
+ query: { type: "positional", description: "What kind of page, in plain English", required: false },
101
+ scope: { type: "string", description: "favorites (default) | all", required: false, default: "favorites" },
102
+ domain: { type: "string", description: "Restrict to one site", required: false },
103
+ "section-type": {
104
+ type: "string",
105
+ description: "Comma list \u2014 only pages carrying one of these sections",
106
+ required: false
107
+ },
108
+ limit: { type: "string", description: "Pages to count over (default 10, max 50)", required: false },
109
+ full: { type: "boolean", description: "Every matching page and the whole table", required: false, default: false }
110
+ },
111
+ run: async ({ args }) => {
112
+ try {
113
+ const body = buildSequencesBody(args);
114
+ const data = await apiPost("/api/landing-inspiration/sequences", body);
115
+ const full = args.full;
116
+ const hints = sequencesHints(data, { scope: body.scope ?? "favorites", full });
117
+ writeJson({
118
+ ok: true,
119
+ data: {
120
+ scope: data.scope,
121
+ pages_considered: data.pagesConsidered,
122
+ pages_returned: data.pagesReturned,
123
+ openers: full ? data.openers : data.openers.slice(0, COMPACT_ENDS),
124
+ transitions: full ? data.transitions : data.transitions.slice(0, COMPACT_TRANSITIONS),
125
+ closers: full ? data.closers : data.closers.slice(0, COMPACT_ENDS),
126
+ pages: data.pages.map((page) => ({
127
+ page_id: page.id,
128
+ url: page.url,
129
+ domain: page.domain,
130
+ sections: page.sectionCount
131
+ })),
132
+ ...data.favoritesHealth ? { saved_pages: data.favoritesHealth } : {}
133
+ },
134
+ hints
135
+ });
136
+ } catch (error) {
137
+ reportError(error);
138
+ }
139
+ }
140
+ });
141
+ export {
142
+ buildSequencesBody,
143
+ sequencesCommand,
144
+ sequencesHints
145
+ };
146
+ //# sourceMappingURL=sequences-YKFV7BDH.js.map