@koda-sl/baker-cli 0.383.0 → 0.384.0-dev.557795bef

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 (964) hide show
  1. package/README.md +1102 -218
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-4UEZAY5T.js +49 -0
  5. package/dist/account-4UEZAY5T.js.map +1 -0
  6. package/dist/account-OINZG6UP.js +80 -0
  7. package/dist/account-OINZG6UP.js.map +1 -0
  8. package/dist/account-QMDCUUSG.js +79 -0
  9. package/dist/account-QMDCUUSG.js.map +1 -0
  10. package/dist/account-reads-ZKKDYHK5.js +218 -0
  11. package/dist/account-reads-ZKKDYHK5.js.map +1 -0
  12. package/dist/account-writes-N4JDIDRB.js +66 -0
  13. package/dist/account-writes-N4JDIDRB.js.map +1 -0
  14. package/dist/accounts-AEBQFCNH.js +114 -0
  15. package/dist/accounts-AEBQFCNH.js.map +1 -0
  16. package/dist/accounts-EBGJ2YO7.js +611 -0
  17. package/dist/accounts-EBGJ2YO7.js.map +1 -0
  18. package/dist/accounts-HP4BLKK5.js +75 -0
  19. package/dist/accounts-HP4BLKK5.js.map +1 -0
  20. package/dist/accounts-YE2SQ3UQ.js +77 -0
  21. package/dist/accounts-YE2SQ3UQ.js.map +1 -0
  22. package/dist/accounts-Z4CLGQXJ.js +115 -0
  23. package/dist/accounts-Z4CLGQXJ.js.map +1 -0
  24. package/dist/actions-ADRIEQZX.js +55 -0
  25. package/dist/actions-ADRIEQZX.js.map +1 -0
  26. package/dist/active-entities-YB46ADQN.js +103 -0
  27. package/dist/active-entities-YB46ADQN.js.map +1 -0
  28. package/dist/activities-DUAIQJLN.js +74 -0
  29. package/dist/activities-DUAIQJLN.js.map +1 -0
  30. package/dist/ad-group-writes-HL3EZ3BT.js +170 -0
  31. package/dist/ad-group-writes-HL3EZ3BT.js.map +1 -0
  32. package/dist/ad-groups-FGS5JJGN.js +68 -0
  33. package/dist/ad-groups-FGS5JJGN.js.map +1 -0
  34. package/dist/ad-writes-LX4ACUHB.js +174 -0
  35. package/dist/ad-writes-LX4ACUHB.js.map +1 -0
  36. package/dist/add-5CUXNOUM.js +97 -0
  37. package/dist/add-5CUXNOUM.js.map +1 -0
  38. package/dist/add-6OXOQNET.js +302 -0
  39. package/dist/add-6OXOQNET.js.map +1 -0
  40. package/dist/add-E66HBIZV.js +105 -0
  41. package/dist/add-E66HBIZV.js.map +1 -0
  42. package/dist/add-ROK3ETQC.js +104 -0
  43. package/dist/add-ROK3ETQC.js.map +1 -0
  44. package/dist/add-accounts-YME5SCXD.js +91 -0
  45. package/dist/add-accounts-YME5SCXD.js.map +1 -0
  46. package/dist/ads-65R3WMDU.js +128 -0
  47. package/dist/ads-65R3WMDU.js.map +1 -0
  48. package/dist/ads-O63J7BDF.js +113 -0
  49. package/dist/ads-O63J7BDF.js.map +1 -0
  50. package/dist/ads-TFZ5PXKS.js +77 -0
  51. package/dist/ads-TFZ5PXKS.js.map +1 -0
  52. package/dist/ads-XSVRH45E.js +40 -0
  53. package/dist/ads-XSVRH45E.js.map +1 -0
  54. package/dist/adsets-Y62JOOTV.js +176 -0
  55. package/dist/adsets-Y62JOOTV.js.map +1 -0
  56. package/dist/advertisers-AIC4QPEK.js +120 -0
  57. package/dist/advertisers-AIC4QPEK.js.map +1 -0
  58. package/dist/advertisers-LJ2HKJ4W.js +125 -0
  59. package/dist/advertisers-LJ2HKJ4W.js.map +1 -0
  60. package/dist/analytics-N4PGXXEQ.js +1976 -0
  61. package/dist/analytics-N4PGXXEQ.js.map +1 -0
  62. package/dist/analytics-X3DR3UVG.js +433 -0
  63. package/dist/analytics-X3DR3UVG.js.map +1 -0
  64. package/dist/animate-E3SKQ6SI.js +480 -0
  65. package/dist/animate-E3SKQ6SI.js.map +1 -0
  66. package/dist/assign-Y7HGSQVJ.js +77 -0
  67. package/dist/assign-Y7HGSQVJ.js.map +1 -0
  68. package/dist/audience-size-SWX5YJQF.js +94 -0
  69. package/dist/audience-size-SWX5YJQF.js.map +1 -0
  70. package/dist/audiences-5A6BCWSA.js +268 -0
  71. package/dist/audiences-5A6BCWSA.js.map +1 -0
  72. package/dist/audiences-6QOCASVV.js +78 -0
  73. package/dist/audiences-6QOCASVV.js.map +1 -0
  74. package/dist/audiences-O67NGIP5.js +85 -0
  75. package/dist/audiences-O67NGIP5.js.map +1 -0
  76. package/dist/audit-2KVLWSAI.js +151 -0
  77. package/dist/audit-2KVLWSAI.js.map +1 -0
  78. package/dist/audit-HWK24VXI.js +88 -0
  79. package/dist/audit-HWK24VXI.js.map +1 -0
  80. package/dist/autocomplete-JJSGC5WU.js +111 -0
  81. package/dist/autocomplete-JJSGC5WU.js.map +1 -0
  82. package/dist/avatars-XIEKQ77J.js +38 -0
  83. package/dist/avatars-XIEKQ77J.js.map +1 -0
  84. package/dist/bid-pricing-D2HGRWZL.js +99 -0
  85. package/dist/bid-pricing-D2HGRWZL.js.map +1 -0
  86. package/dist/brand-AYYWRGIE.js +22 -0
  87. package/dist/brand-AYYWRGIE.js.map +1 -0
  88. package/dist/brief-3HUIDK5F.js +490 -0
  89. package/dist/brief-3HUIDK5F.js.map +1 -0
  90. package/dist/businesses-65EWTK5E.js +53 -0
  91. package/dist/businesses-65EWTK5E.js.map +1 -0
  92. package/dist/campaign-groups-6HCYR2JX.js +95 -0
  93. package/dist/campaign-groups-6HCYR2JX.js.map +1 -0
  94. package/dist/campaign-writes-M6JLF5AC.js +170 -0
  95. package/dist/campaign-writes-M6JLF5AC.js.map +1 -0
  96. package/dist/campaign-writes-Y6QPRQ4E.js +165 -0
  97. package/dist/campaign-writes-Y6QPRQ4E.js.map +1 -0
  98. package/dist/campaigns-6SM2ZSIH.js +76 -0
  99. package/dist/campaigns-6SM2ZSIH.js.map +1 -0
  100. package/dist/campaigns-7RKJZRY2.js +107 -0
  101. package/dist/campaigns-7RKJZRY2.js.map +1 -0
  102. package/dist/campaigns-KRI25JDZ.js +109 -0
  103. package/dist/campaigns-KRI25JDZ.js.map +1 -0
  104. package/dist/campaigns-TD7ZB5DG.js +110 -0
  105. package/dist/campaigns-TD7ZB5DG.js.map +1 -0
  106. package/dist/canvas-DMYY2DWI.js +46 -0
  107. package/dist/canvas-DMYY2DWI.js.map +1 -0
  108. package/dist/capabilities-3WJTXS2O.js +144 -0
  109. package/dist/capabilities-3WJTXS2O.js.map +1 -0
  110. package/dist/cards-7HRC4UQQ.js +85 -0
  111. package/dist/cards-7HRC4UQQ.js.map +1 -0
  112. package/dist/catalog-N6MDMIVL.js +64 -0
  113. package/dist/catalog-N6MDMIVL.js.map +1 -0
  114. package/dist/catalogs-PB46L7FH.js +128 -0
  115. package/dist/catalogs-PB46L7FH.js.map +1 -0
  116. package/dist/changes-SASUQK62.js +135 -0
  117. package/dist/changes-SASUQK62.js.map +1 -0
  118. package/dist/chatgpt-JKBSAG25.js +47 -0
  119. package/dist/chatgpt-JKBSAG25.js.map +1 -0
  120. package/dist/chats-WRVSQQB2.js +262 -0
  121. package/dist/chats-WRVSQQB2.js.map +1 -0
  122. package/dist/chunk-2FGKJY63.js +455 -0
  123. package/dist/chunk-2FGKJY63.js.map +1 -0
  124. package/dist/chunk-2GVXNKAE.js +42 -0
  125. package/dist/chunk-2GVXNKAE.js.map +1 -0
  126. package/dist/chunk-2J3PTIQB.js +479 -0
  127. package/dist/chunk-2J3PTIQB.js.map +1 -0
  128. package/dist/chunk-2J7XC2NO.js +346 -0
  129. package/dist/chunk-2J7XC2NO.js.map +1 -0
  130. package/dist/{chunk-VLUGGVJL.js → chunk-2UFRHW3T.js} +12 -4
  131. package/dist/chunk-2UFRHW3T.js.map +1 -0
  132. package/dist/chunk-2Y5V23PU.js +29 -0
  133. package/dist/chunk-2Y5V23PU.js.map +1 -0
  134. package/dist/chunk-3ACMDRSE.js +39 -0
  135. package/dist/chunk-3ACMDRSE.js.map +1 -0
  136. package/dist/chunk-3EWF7VII.js +1079 -0
  137. package/dist/chunk-3EWF7VII.js.map +1 -0
  138. package/dist/chunk-3LYMIKKN.js +625 -0
  139. package/dist/chunk-3LYMIKKN.js.map +1 -0
  140. package/dist/chunk-3M6RNCDD.js +26 -0
  141. package/dist/chunk-3M6RNCDD.js.map +1 -0
  142. package/dist/chunk-3MDO4RR2.js +310 -0
  143. package/dist/chunk-3MDO4RR2.js.map +1 -0
  144. package/dist/chunk-3NPOIHSX.js +6667 -0
  145. package/dist/chunk-3NPOIHSX.js.map +1 -0
  146. package/dist/chunk-3SK7TWGP.js +103 -0
  147. package/dist/chunk-3SK7TWGP.js.map +1 -0
  148. package/dist/chunk-3VXQYDJN.js +1743 -0
  149. package/dist/chunk-3VXQYDJN.js.map +1 -0
  150. package/dist/chunk-44VXKO65.js +106 -0
  151. package/dist/chunk-44VXKO65.js.map +1 -0
  152. package/dist/chunk-4NZ47VXO.js +137 -0
  153. package/dist/chunk-4NZ47VXO.js.map +1 -0
  154. package/dist/chunk-4X3UR372.js +225 -0
  155. package/dist/chunk-4X3UR372.js.map +1 -0
  156. package/dist/chunk-553XSIFW.js +304 -0
  157. package/dist/chunk-553XSIFW.js.map +1 -0
  158. package/dist/chunk-5FEBUCJU.js +25 -0
  159. package/dist/chunk-5FEBUCJU.js.map +1 -0
  160. package/dist/chunk-5HYSKH77.js +315 -0
  161. package/dist/chunk-5HYSKH77.js.map +1 -0
  162. package/dist/chunk-5MBPIONY.js +29 -0
  163. package/dist/chunk-5MBPIONY.js.map +1 -0
  164. package/dist/chunk-5UCP4EEQ.js +111 -0
  165. package/dist/chunk-5UCP4EEQ.js.map +1 -0
  166. package/dist/chunk-5VPJNNJL.js +494 -0
  167. package/dist/chunk-5VPJNNJL.js.map +1 -0
  168. package/dist/{chunk-VZEDAFAR.js → chunk-6YYSUISH.js} +47 -8
  169. package/dist/chunk-6YYSUISH.js.map +1 -0
  170. package/dist/chunk-7OHWEF3I.js +98 -0
  171. package/dist/chunk-7OHWEF3I.js.map +1 -0
  172. package/dist/chunk-A636XRD7.js +159 -0
  173. package/dist/chunk-A636XRD7.js.map +1 -0
  174. package/dist/chunk-A76FRBSF.js +297 -0
  175. package/dist/chunk-A76FRBSF.js.map +1 -0
  176. package/dist/chunk-AADVCEL4.js +817 -0
  177. package/dist/chunk-AADVCEL4.js.map +1 -0
  178. package/dist/chunk-AG62YO7C.js +96 -0
  179. package/dist/chunk-AG62YO7C.js.map +1 -0
  180. package/dist/chunk-AIRIT4GF.js +75 -0
  181. package/dist/chunk-AIRIT4GF.js.map +1 -0
  182. package/dist/chunk-AMCY5YCB.js +206 -0
  183. package/dist/chunk-AMCY5YCB.js.map +1 -0
  184. package/dist/chunk-AP3TP6VG.js +139 -0
  185. package/dist/chunk-AP3TP6VG.js.map +1 -0
  186. package/dist/chunk-APP475IQ.js +474 -0
  187. package/dist/chunk-APP475IQ.js.map +1 -0
  188. package/dist/chunk-AR7PU7BB.js +76 -0
  189. package/dist/chunk-AR7PU7BB.js.map +1 -0
  190. package/dist/chunk-B4S72KSS.js +172 -0
  191. package/dist/chunk-B4S72KSS.js.map +1 -0
  192. package/dist/chunk-BIPIL4QA.js +486 -0
  193. package/dist/chunk-BIPIL4QA.js.map +1 -0
  194. package/dist/chunk-BPUSL5Y2.js +58 -0
  195. package/dist/chunk-BPUSL5Y2.js.map +1 -0
  196. package/dist/chunk-BR32GHYD.js +65 -0
  197. package/dist/chunk-BR32GHYD.js.map +1 -0
  198. package/dist/chunk-CAMX6OHF.js +3182 -0
  199. package/dist/chunk-CAMX6OHF.js.map +1 -0
  200. package/dist/{chunk-MF7YA62W.js → chunk-CUL3VB4L.js} +10 -5
  201. package/dist/chunk-CUL3VB4L.js.map +1 -0
  202. package/dist/chunk-CVEY353K.js +66 -0
  203. package/dist/chunk-CVEY353K.js.map +1 -0
  204. package/dist/chunk-CWXADUKL.js +1599 -0
  205. package/dist/chunk-CWXADUKL.js.map +1 -0
  206. package/dist/chunk-D5FY4FAK.js +24 -0
  207. package/dist/chunk-D5FY4FAK.js.map +1 -0
  208. package/dist/chunk-DGCUPJZD.js +39 -0
  209. package/dist/chunk-DGCUPJZD.js.map +1 -0
  210. package/dist/chunk-DNCLWSHO.js +41 -0
  211. package/dist/chunk-DNCLWSHO.js.map +1 -0
  212. package/dist/chunk-DUPURL26.js +97 -0
  213. package/dist/chunk-DUPURL26.js.map +1 -0
  214. package/dist/chunk-E2ZOSNF5.js +96 -0
  215. package/dist/chunk-E2ZOSNF5.js.map +1 -0
  216. package/dist/chunk-E3HYHT7C.js +274 -0
  217. package/dist/chunk-E3HYHT7C.js.map +1 -0
  218. package/dist/chunk-EDLZGTGN.js +216 -0
  219. package/dist/chunk-EDLZGTGN.js.map +1 -0
  220. package/dist/chunk-EI5QN4UO.js +363 -0
  221. package/dist/chunk-EI5QN4UO.js.map +1 -0
  222. package/dist/{chunk-XHC4LMK4.js → chunk-EIGXX6KI.js} +16 -8
  223. package/dist/chunk-EIGXX6KI.js.map +1 -0
  224. package/dist/chunk-EPDE7ZRU.js +174 -0
  225. package/dist/chunk-EPDE7ZRU.js.map +1 -0
  226. package/dist/chunk-ERSX3MKH.js +34 -0
  227. package/dist/chunk-ERSX3MKH.js.map +1 -0
  228. package/dist/chunk-EVDRF4CI.js +509 -0
  229. package/dist/chunk-EVDRF4CI.js.map +1 -0
  230. package/dist/chunk-F4IEILTR.js +382 -0
  231. package/dist/chunk-F4IEILTR.js.map +1 -0
  232. package/dist/chunk-F7HRLPR5.js +67 -0
  233. package/dist/chunk-F7HRLPR5.js.map +1 -0
  234. package/dist/chunk-FEG6MN4H.js +84 -0
  235. package/dist/chunk-FEG6MN4H.js.map +1 -0
  236. package/dist/chunk-FKOECEVC.js +126 -0
  237. package/dist/chunk-FKOECEVC.js.map +1 -0
  238. package/dist/chunk-FMGW2NZI.js +106 -0
  239. package/dist/chunk-FMGW2NZI.js.map +1 -0
  240. package/dist/chunk-FPZKKNDK.js +98 -0
  241. package/dist/chunk-FPZKKNDK.js.map +1 -0
  242. package/dist/chunk-FUVCY63N.js +169 -0
  243. package/dist/chunk-FUVCY63N.js.map +1 -0
  244. package/dist/chunk-GBNJQNDS.js +19 -0
  245. package/dist/chunk-GBNJQNDS.js.map +1 -0
  246. package/dist/chunk-GIWHHCD6.js +145 -0
  247. package/dist/chunk-GIWHHCD6.js.map +1 -0
  248. package/dist/chunk-GOJXKIFQ.js +1605 -0
  249. package/dist/chunk-GOJXKIFQ.js.map +1 -0
  250. package/dist/chunk-GRQ2AXDX.js +9 -0
  251. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  252. package/dist/chunk-GXDLWBOY.js +73 -0
  253. package/dist/chunk-GXDLWBOY.js.map +1 -0
  254. package/dist/chunk-HAE4WWFQ.js +455 -0
  255. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  256. package/dist/chunk-I2DNBEV6.js +4227 -0
  257. package/dist/chunk-I2DNBEV6.js.map +1 -0
  258. package/dist/chunk-I4FTS5EE.js +455 -0
  259. package/dist/chunk-I4FTS5EE.js.map +1 -0
  260. package/dist/chunk-IELPT4K2.js +74 -0
  261. package/dist/chunk-IELPT4K2.js.map +1 -0
  262. package/dist/chunk-IJMWEO4P.js +57 -0
  263. package/dist/chunk-IJMWEO4P.js.map +1 -0
  264. package/dist/chunk-IREMSVKW.js +175 -0
  265. package/dist/chunk-IREMSVKW.js.map +1 -0
  266. package/dist/chunk-IVIJJXXT.js +62 -0
  267. package/dist/chunk-IVIJJXXT.js.map +1 -0
  268. package/dist/chunk-JD3W3ON7.js +188 -0
  269. package/dist/chunk-JD3W3ON7.js.map +1 -0
  270. package/dist/chunk-JLWBK3VC.js +5187 -0
  271. package/dist/chunk-JLWBK3VC.js.map +1 -0
  272. package/dist/chunk-JPK34QPS.js +134 -0
  273. package/dist/chunk-JPK34QPS.js.map +1 -0
  274. package/dist/chunk-JUY47NZ2.js +183 -0
  275. package/dist/chunk-JUY47NZ2.js.map +1 -0
  276. package/dist/chunk-JXMZEOHV.js +333 -0
  277. package/dist/chunk-JXMZEOHV.js.map +1 -0
  278. package/dist/chunk-K37K447U.js +51 -0
  279. package/dist/chunk-K37K447U.js.map +1 -0
  280. package/dist/chunk-K6TDB2KV.js +1442 -0
  281. package/dist/chunk-K6TDB2KV.js.map +1 -0
  282. package/dist/chunk-KIGGMKAE.js +66 -0
  283. package/dist/chunk-KIGGMKAE.js.map +1 -0
  284. package/dist/chunk-KKJ4KJCW.js +29 -0
  285. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  286. package/dist/chunk-KONA5PSR.js +55 -0
  287. package/dist/chunk-KONA5PSR.js.map +1 -0
  288. package/dist/chunk-KVHRW7KO.js +60 -0
  289. package/dist/chunk-KVHRW7KO.js.map +1 -0
  290. package/dist/chunk-LA6PPSNA.js +65 -0
  291. package/dist/chunk-LA6PPSNA.js.map +1 -0
  292. package/dist/chunk-LKPJADL2.js +74 -0
  293. package/dist/chunk-LKPJADL2.js.map +1 -0
  294. package/dist/chunk-LWAEHLKV.js +74 -0
  295. package/dist/chunk-LWAEHLKV.js.map +1 -0
  296. package/dist/chunk-M6UNISGO.js +66 -0
  297. package/dist/chunk-M6UNISGO.js.map +1 -0
  298. package/dist/chunk-MIJAGBEP.js +23992 -0
  299. package/dist/chunk-MIJAGBEP.js.map +1 -0
  300. package/dist/chunk-MP4EXZ45.js +3151 -0
  301. package/dist/chunk-MP4EXZ45.js.map +1 -0
  302. package/dist/chunk-MYTDK3AL.js +2102 -0
  303. package/dist/chunk-MYTDK3AL.js.map +1 -0
  304. package/dist/chunk-MZQ5DX6S.js +125 -0
  305. package/dist/chunk-MZQ5DX6S.js.map +1 -0
  306. package/dist/chunk-NFSLRRIE.js +77 -0
  307. package/dist/chunk-NFSLRRIE.js.map +1 -0
  308. package/dist/chunk-NOK7MSVJ.js +533 -0
  309. package/dist/chunk-NOK7MSVJ.js.map +1 -0
  310. package/dist/chunk-NR5RZDAW.js +592 -0
  311. package/dist/chunk-NR5RZDAW.js.map +1 -0
  312. package/dist/chunk-O2EVJALZ.js +133 -0
  313. package/dist/chunk-O2EVJALZ.js.map +1 -0
  314. package/dist/chunk-O6UM5WWH.js +275 -0
  315. package/dist/chunk-O6UM5WWH.js.map +1 -0
  316. package/dist/chunk-O6XZIQXZ.js +6212 -0
  317. package/dist/chunk-O6XZIQXZ.js.map +1 -0
  318. package/dist/chunk-OIL6PU5W.js +35 -0
  319. package/dist/chunk-OIL6PU5W.js.map +1 -0
  320. package/dist/chunk-P4NSJS54.js +20 -0
  321. package/dist/chunk-P4NSJS54.js.map +1 -0
  322. package/dist/chunk-P5T7OZKV.js +26 -0
  323. package/dist/chunk-P5T7OZKV.js.map +1 -0
  324. package/dist/chunk-PFBQERWX.js +10 -0
  325. package/dist/chunk-PFBQERWX.js.map +1 -0
  326. package/dist/chunk-PSWVSLJU.js +56 -0
  327. package/dist/chunk-PSWVSLJU.js.map +1 -0
  328. package/dist/chunk-PY2NJ6XZ.js +191 -0
  329. package/dist/chunk-PY2NJ6XZ.js.map +1 -0
  330. package/dist/chunk-PZ4OM2LK.js +45 -0
  331. package/dist/chunk-PZ4OM2LK.js.map +1 -0
  332. package/dist/chunk-PZNOJ76W.js +541 -0
  333. package/dist/chunk-PZNOJ76W.js.map +1 -0
  334. package/dist/chunk-Q6ULQMWG.js +41 -0
  335. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  336. package/dist/chunk-QKFD6PPX.js +57 -0
  337. package/dist/chunk-QKFD6PPX.js.map +1 -0
  338. package/dist/chunk-QMLGJ5OW.js +2891 -0
  339. package/dist/chunk-QMLGJ5OW.js.map +1 -0
  340. package/dist/chunk-R4TPDVBD.js +207 -0
  341. package/dist/chunk-R4TPDVBD.js.map +1 -0
  342. package/dist/chunk-R7QV5N2S.js +846 -0
  343. package/dist/chunk-R7QV5N2S.js.map +1 -0
  344. package/dist/chunk-RR3KT2E7.js +665 -0
  345. package/dist/chunk-RR3KT2E7.js.map +1 -0
  346. package/dist/chunk-SEPPFM5S.js +228 -0
  347. package/dist/chunk-SEPPFM5S.js.map +1 -0
  348. package/dist/chunk-SQ7DRYCC.js +150 -0
  349. package/dist/chunk-SQ7DRYCC.js.map +1 -0
  350. package/dist/chunk-SYULM665.js +610 -0
  351. package/dist/chunk-SYULM665.js.map +1 -0
  352. package/dist/chunk-TKT3OHZ6.js +170 -0
  353. package/dist/chunk-TKT3OHZ6.js.map +1 -0
  354. package/dist/chunk-TNOSX3PJ.js +136 -0
  355. package/dist/chunk-TNOSX3PJ.js.map +1 -0
  356. package/dist/chunk-TTVKI54A.js +160 -0
  357. package/dist/chunk-TTVKI54A.js.map +1 -0
  358. package/dist/chunk-U7ZVXFS3.js +23 -0
  359. package/dist/chunk-U7ZVXFS3.js.map +1 -0
  360. package/dist/chunk-UI6BKYQD.js +225 -0
  361. package/dist/chunk-UI6BKYQD.js.map +1 -0
  362. package/dist/chunk-UKLDW4UW.js +46 -0
  363. package/dist/chunk-UKLDW4UW.js.map +1 -0
  364. package/dist/chunk-V6XXXEXZ.js +76 -0
  365. package/dist/chunk-V6XXXEXZ.js.map +1 -0
  366. package/dist/chunk-V7BW2CIQ.js +92 -0
  367. package/dist/chunk-V7BW2CIQ.js.map +1 -0
  368. package/dist/chunk-VSU5R34H.js +76 -0
  369. package/dist/chunk-VSU5R34H.js.map +1 -0
  370. package/dist/chunk-W4SA4CMR.js +296 -0
  371. package/dist/chunk-W4SA4CMR.js.map +1 -0
  372. package/dist/chunk-WFUMNDCE.js +111 -0
  373. package/dist/chunk-WFUMNDCE.js.map +1 -0
  374. package/dist/chunk-WHWNXLTD.js +166 -0
  375. package/dist/chunk-WHWNXLTD.js.map +1 -0
  376. package/dist/chunk-WN4KX7GE.js +25 -0
  377. package/dist/chunk-WN4KX7GE.js.map +1 -0
  378. package/dist/chunk-XIY7P54H.js +84 -0
  379. package/dist/chunk-XIY7P54H.js.map +1 -0
  380. package/dist/chunk-YFPLNMPZ.js +337 -0
  381. package/dist/chunk-YFPLNMPZ.js.map +1 -0
  382. package/dist/chunk-YMBB4JBD.js +1830 -0
  383. package/dist/chunk-YMBB4JBD.js.map +1 -0
  384. package/dist/chunk-YQFM2P5W.js +197 -0
  385. package/dist/chunk-YQFM2P5W.js.map +1 -0
  386. package/dist/chunk-YQSBHWOI.js +41 -0
  387. package/dist/chunk-YTF3IVMF.js +149 -0
  388. package/dist/chunk-YTF3IVMF.js.map +1 -0
  389. package/dist/chunk-Z3ENMCFE.js +94 -0
  390. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  391. package/dist/chunk-Z7MWSXLG.js +94 -0
  392. package/dist/chunk-Z7MWSXLG.js.map +1 -0
  393. package/dist/chunk-ZIXHS6AM.js +42 -0
  394. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  395. package/dist/chunk-ZJ7TQUCU.js +4410 -0
  396. package/dist/chunk-ZJ7TQUCU.js.map +1 -0
  397. package/dist/chunk-ZNQRDLSS.js +52 -0
  398. package/dist/chunk-ZNQRDLSS.js.map +1 -0
  399. package/dist/claim-ROWH6JVB.js +197 -0
  400. package/dist/claim-ROWH6JVB.js.map +1 -0
  401. package/dist/cli.js +104 -69952
  402. package/dist/cli.js.map +1 -1
  403. package/dist/client-EURRWXPW.js +19 -0
  404. package/dist/code-FKQW7V7N.js +76 -0
  405. package/dist/code-FKQW7V7N.js.map +1 -0
  406. package/dist/companies-MD2MZKU6.js +195 -0
  407. package/dist/companies-MD2MZKU6.js.map +1 -0
  408. package/dist/complete-FCAJM6Z4.js +81 -0
  409. package/dist/complete-FCAJM6Z4.js.map +1 -0
  410. package/dist/config-OZOHIAOJ.js +88 -0
  411. package/dist/config-OZOHIAOJ.js.map +1 -0
  412. package/dist/connect-4YXFMXYX.js +42 -0
  413. package/dist/content-PCGSX2QU.js +85 -0
  414. package/dist/content-PCGSX2QU.js.map +1 -0
  415. package/dist/conversation-UX5NZ3IO.js +93 -0
  416. package/dist/conversation-UX5NZ3IO.js.map +1 -0
  417. package/dist/conversion-report-7QSWB2FY.js +125 -0
  418. package/dist/conversion-report-7QSWB2FY.js.map +1 -0
  419. package/dist/conversion-upload-command-XESIAQPU.js +438 -0
  420. package/dist/conversion-upload-command-XESIAQPU.js.map +1 -0
  421. package/dist/conversion-writes-BGOVLBS5.js +120 -0
  422. package/dist/conversion-writes-BGOVLBS5.js.map +1 -0
  423. package/dist/conversions-IYIWW4O7.js +76 -0
  424. package/dist/conversions-IYIWW4O7.js.map +1 -0
  425. package/dist/conversions-RLIJAE7E.js +135 -0
  426. package/dist/conversions-RLIJAE7E.js.map +1 -0
  427. package/dist/countries-5OBUVLLD.js +82 -0
  428. package/dist/countries-5OBUVLLD.js.map +1 -0
  429. package/dist/create-CUJLJUAQ.js +138 -0
  430. package/dist/create-CUJLJUAQ.js.map +1 -0
  431. package/dist/create-FENOT6DX.js +236 -0
  432. package/dist/create-FENOT6DX.js.map +1 -0
  433. package/dist/create-OFZQMOWO.js +59 -0
  434. package/dist/create-OFZQMOWO.js.map +1 -0
  435. package/dist/create-Z5SS2AWB.js +207 -0
  436. package/dist/create-Z5SS2AWB.js.map +1 -0
  437. package/dist/creatives-UJW2QBLH.js +182 -0
  438. package/dist/creatives-UJW2QBLH.js.map +1 -0
  439. package/dist/creatives-XI2DGQUZ.js +87 -0
  440. package/dist/creatives-XI2DGQUZ.js.map +1 -0
  441. package/dist/creatives-YLXQSROD.js +51 -0
  442. package/dist/creatives-YLXQSROD.js.map +1 -0
  443. package/dist/credentials-CH73QMD2.js +287 -0
  444. package/dist/credentials-CH73QMD2.js.map +1 -0
  445. package/dist/critique-C4WRQ4AJ.js +1449 -0
  446. package/dist/critique-C4WRQ4AJ.js.map +1 -0
  447. package/dist/critique-ZBNJ6MQ3.js +213 -0
  448. package/dist/critique-ZBNJ6MQ3.js.map +1 -0
  449. package/dist/crm-MJTT6GOJ.js +224 -0
  450. package/dist/crm-MJTT6GOJ.js.map +1 -0
  451. package/dist/crm-ZXHSEFYI.js +318 -0
  452. package/dist/crm-ZXHSEFYI.js.map +1 -0
  453. package/dist/crop-B52KIQ4O.js +113 -0
  454. package/dist/crop-B52KIQ4O.js.map +1 -0
  455. package/dist/currency-GGWF5DMU.js +88 -0
  456. package/dist/currency-GGWF5DMU.js.map +1 -0
  457. package/dist/custom-conversions-7WDBTC4X.js +125 -0
  458. package/dist/custom-conversions-7WDBTC4X.js.map +1 -0
  459. package/dist/customers-7E4HBSEY.js +56 -0
  460. package/dist/decide-PK7WNSQ2.js +199 -0
  461. package/dist/decide-PK7WNSQ2.js.map +1 -0
  462. package/dist/delete-56LKNEGA.js +71 -0
  463. package/dist/delete-56LKNEGA.js.map +1 -0
  464. package/dist/delete-DQY4ZSFN.js +54 -0
  465. package/dist/delete-DQY4ZSFN.js.map +1 -0
  466. package/dist/delete-EZ7HHOOD.js +69 -0
  467. package/dist/delete-EZ7HHOOD.js.map +1 -0
  468. package/dist/delete-JV4KAA6Y.js +66 -0
  469. package/dist/delete-JV4KAA6Y.js.map +1 -0
  470. package/dist/delete-YONJW4UZ.js +63 -0
  471. package/dist/delete-YONJW4UZ.js.map +1 -0
  472. package/dist/delete-YSYVFL6W.js +71 -0
  473. package/dist/delete-YSYVFL6W.js.map +1 -0
  474. package/dist/demographics-6N3TTYWC.js +138 -0
  475. package/dist/demographics-6N3TTYWC.js.map +1 -0
  476. package/dist/describe-AAVYIFE3.js +97 -0
  477. package/dist/describe-AAVYIFE3.js.map +1 -0
  478. package/dist/describe-UQFLWVFR.js +97 -0
  479. package/dist/describe-UQFLWVFR.js.map +1 -0
  480. package/dist/dimensions-QDXBG2XC.js +101 -0
  481. package/dist/dimensions-QDXBG2XC.js.map +1 -0
  482. package/dist/discard-S3NGGUSK.js +66 -0
  483. package/dist/discard-S3NGGUSK.js.map +1 -0
  484. package/dist/discover-6TEBPVNC.js +93 -0
  485. package/dist/discover-6TEBPVNC.js.map +1 -0
  486. package/dist/discover-SBZPB7T2.js +172 -0
  487. package/dist/discover-SBZPB7T2.js.map +1 -0
  488. package/dist/domain-AMAR76PB.js +98 -0
  489. package/dist/domain-AMAR76PB.js.map +1 -0
  490. package/dist/download-LV3GPOWV.js +299 -0
  491. package/dist/download-LV3GPOWV.js.map +1 -0
  492. package/dist/draft-6QZ7WMWM.js +217 -0
  493. package/dist/draft-6QZ7WMWM.js.map +1 -0
  494. package/dist/draft-DDFFTZ43.js +233 -0
  495. package/dist/draft-DDFFTZ43.js.map +1 -0
  496. package/dist/draft-FIKJXNIQ.js +281 -0
  497. package/dist/draft-FIKJXNIQ.js.map +1 -0
  498. package/dist/draft-GYGWTMBU.js +307 -0
  499. package/dist/draft-GYGWTMBU.js.map +1 -0
  500. package/dist/draft-KXL62WFS.js +328 -0
  501. package/dist/draft-KXL62WFS.js.map +1 -0
  502. package/dist/draft-N4LFPKTA.js +100 -0
  503. package/dist/draft-N4LFPKTA.js.map +1 -0
  504. package/dist/draft-POSLJCWG.js +306 -0
  505. package/dist/draft-POSLJCWG.js.map +1 -0
  506. package/dist/draft-XPO5RWST.js +103 -0
  507. package/dist/draft-XPO5RWST.js.map +1 -0
  508. package/dist/engine/index.d.ts +213 -127
  509. package/dist/engine/index.js +18 -4
  510. package/dist/{env-4P5HOGNA.js → env-TQ2XS2KY.js} +12 -2
  511. package/dist/env-TQ2XS2KY.js.map +1 -0
  512. package/dist/experiment-FQNKMORZ.js +1397 -0
  513. package/dist/experiment-FQNKMORZ.js.map +1 -0
  514. package/dist/export-4IZQZAPF.js +168 -0
  515. package/dist/export-4IZQZAPF.js.map +1 -0
  516. package/dist/extract-DZMGVQ7D.js +113 -0
  517. package/dist/extract-DZMGVQ7D.js.map +1 -0
  518. package/dist/facets-223V5P47.js +114 -0
  519. package/dist/facets-223V5P47.js.map +1 -0
  520. package/dist/favorites-DD2LNSTG.js +178 -0
  521. package/dist/favorites-DD2LNSTG.js.map +1 -0
  522. package/dist/feed-TUVFNX2U.js +177 -0
  523. package/dist/feed-TUVFNX2U.js.map +1 -0
  524. package/dist/feedback-MIW23MI2.js +66 -0
  525. package/dist/feedback-MIW23MI2.js.map +1 -0
  526. package/dist/feedback-record-RGKRKPGZ.js +175 -0
  527. package/dist/feedback-record-RGKRKPGZ.js.map +1 -0
  528. package/dist/fetch-O6UHNXWB.js +139 -0
  529. package/dist/fetch-O6UHNXWB.js.map +1 -0
  530. package/dist/fetch-TZ4UCMJK.js +176 -0
  531. package/dist/fetch-TZ4UCMJK.js.map +1 -0
  532. package/dist/find-4XKIBF4D.js +134 -0
  533. package/dist/find-4XKIBF4D.js.map +1 -0
  534. package/dist/fit-ODVVXV2Q.js +45 -0
  535. package/dist/fit-ODVVXV2Q.js.map +1 -0
  536. package/dist/flows-HVWBFZ7T.js +247 -0
  537. package/dist/flows-HVWBFZ7T.js.map +1 -0
  538. package/dist/follow-RCOXTZGY.js +94 -0
  539. package/dist/follow-RCOXTZGY.js.map +1 -0
  540. package/dist/follow-competitors-SQ5XBFTK.js +112 -0
  541. package/dist/follow-competitors-SQ5XBFTK.js.map +1 -0
  542. package/dist/following-VDU3BHC4.js +113 -0
  543. package/dist/following-VDU3BHC4.js.map +1 -0
  544. package/dist/fonts-NBIQAVQN.js +34 -0
  545. package/dist/fonts-NBIQAVQN.js.map +1 -0
  546. package/dist/forecast-2GJKBNBM.js +168 -0
  547. package/dist/forecast-2GJKBNBM.js.map +1 -0
  548. package/dist/forecast-76MUJBPO.js +104 -0
  549. package/dist/forecast-76MUJBPO.js.map +1 -0
  550. package/dist/funding-HTFVZLLG.js +85 -0
  551. package/dist/funding-HTFVZLLG.js.map +1 -0
  552. package/dist/funnel-FE2HIRVQ.js +394 -0
  553. package/dist/funnel-FE2HIRVQ.js.map +1 -0
  554. package/dist/ga4-2RC4EH7V.js +55 -0
  555. package/dist/ga4-2RC4EH7V.js.map +1 -0
  556. package/dist/generate-TPDOBCKQ.js +262 -0
  557. package/dist/generate-TPDOBCKQ.js.map +1 -0
  558. package/dist/get-6JNOVI27.js +56 -0
  559. package/dist/get-6JNOVI27.js.map +1 -0
  560. package/dist/get-FH2LIEYL.js +63 -0
  561. package/dist/get-FH2LIEYL.js.map +1 -0
  562. package/dist/get-GZLCDXXW.js +61 -0
  563. package/dist/get-GZLCDXXW.js.map +1 -0
  564. package/dist/get-KVAOPAQW.js +78 -0
  565. package/dist/get-KVAOPAQW.js.map +1 -0
  566. package/dist/get-TSPQYEKC.js +59 -0
  567. package/dist/get-TSPQYEKC.js.map +1 -0
  568. package/dist/get-TY3RXYNZ.js +63 -0
  569. package/dist/get-TY3RXYNZ.js.map +1 -0
  570. package/dist/get-VPW33XTN.js +92 -0
  571. package/dist/get-VPW33XTN.js.map +1 -0
  572. package/dist/gif-JFEYPFFI.js +94 -0
  573. package/dist/gif-JFEYPFFI.js.map +1 -0
  574. package/dist/google-R6RD4L6Z.js +136 -0
  575. package/dist/google-R6RD4L6Z.js.map +1 -0
  576. package/dist/google-VPQNRVIB.js +3190 -0
  577. package/dist/google-VPQNRVIB.js.map +1 -0
  578. package/dist/google-ads-JEQMNNMN.js +195 -0
  579. package/dist/google-ads-JEQMNNMN.js.map +1 -0
  580. package/dist/group-7AV6UL26.js +43 -0
  581. package/dist/group-7AV6UL26.js.map +1 -0
  582. package/dist/group-BVQZEZIC.js +43 -0
  583. package/dist/group-BVQZEZIC.js.map +1 -0
  584. package/dist/gsc-SQ42WAQE.js +30 -0
  585. package/dist/gsc-SQ42WAQE.js.map +1 -0
  586. package/dist/history-BNNHFURR.js +67 -0
  587. package/dist/history-BNNHFURR.js.map +1 -0
  588. package/dist/history-EHUQG4CE.js +133 -0
  589. package/dist/history-EHUQG4CE.js.map +1 -0
  590. package/dist/hubspot-JABE4USC.js +779 -0
  591. package/dist/hubspot-JABE4USC.js.map +1 -0
  592. package/dist/icon-OYTTSNSL.js +137 -0
  593. package/dist/icon-OYTTSNSL.js.map +1 -0
  594. package/dist/ideas-OD76WOQ3.js +32 -0
  595. package/dist/ideas-OD76WOQ3.js.map +1 -0
  596. package/dist/images-LY7AWWBK.js +90 -0
  597. package/dist/images-LY7AWWBK.js.map +1 -0
  598. package/dist/improve-W6GZNT2A.js +86 -0
  599. package/dist/improve-W6GZNT2A.js.map +1 -0
  600. package/dist/ingest-47WON6HT.js +23 -0
  601. package/dist/ingest-47WON6HT.js.map +1 -0
  602. package/dist/ingest-HDGGHBSJ.js +107 -0
  603. package/dist/ingest-HDGGHBSJ.js.map +1 -0
  604. package/dist/insights-IW7LGAWU.js +423 -0
  605. package/dist/insights-IW7LGAWU.js.map +1 -0
  606. package/dist/insights-QH54F56A.js +122 -0
  607. package/dist/insights-QH54F56A.js.map +1 -0
  608. package/dist/inspect-AJLG2HGL.js +189 -0
  609. package/dist/inspect-AJLG2HGL.js.map +1 -0
  610. package/dist/inspiration-RDQ3Y3N3.js +53 -0
  611. package/dist/inspiration-RDQ3Y3N3.js.map +1 -0
  612. package/dist/intent-5GSSCFZ2.js +95 -0
  613. package/dist/intent-5GSSCFZ2.js.map +1 -0
  614. package/dist/job-URVXJP75.js +202 -0
  615. package/dist/job-URVXJP75.js.map +1 -0
  616. package/dist/job-create-S4SECUVF.js +109 -0
  617. package/dist/job-create-S4SECUVF.js.map +1 -0
  618. package/dist/job-status-253SUCTJ.js +74 -0
  619. package/dist/job-status-253SUCTJ.js.map +1 -0
  620. package/dist/keep-GPSYDIGJ.js +78 -0
  621. package/dist/keep-GPSYDIGJ.js.map +1 -0
  622. package/dist/keyword-gap-NTFDX43B.js +130 -0
  623. package/dist/keyword-gap-NTFDX43B.js.map +1 -0
  624. package/dist/keyword-metrics-XSFLMBZX.js +197 -0
  625. package/dist/keyword-metrics-XSFLMBZX.js.map +1 -0
  626. package/dist/keywords-for-site-U4JLYXVE.js +128 -0
  627. package/dist/keywords-for-site-U4JLYXVE.js.map +1 -0
  628. package/dist/landing-AO72EGJ6.js +28 -0
  629. package/dist/landing-AO72EGJ6.js.map +1 -0
  630. package/dist/landings-NEF4PQL2.js +151 -0
  631. package/dist/landings-NEF4PQL2.js.map +1 -0
  632. package/dist/languages-3RDPPPTE.js +55 -0
  633. package/dist/languages-3RDPPPTE.js.map +1 -0
  634. package/dist/languages-CQX3YOIT.js +40 -0
  635. package/dist/languages-CQX3YOIT.js.map +1 -0
  636. package/dist/launches-GBHLJH5S.js +19 -0
  637. package/dist/launches-GBHLJH5S.js.map +1 -0
  638. package/dist/layerize-Q56C6LFG.js +190 -0
  639. package/dist/layerize-Q56C6LFG.js.map +1 -0
  640. package/dist/leads-JHUM6FYR.js +293 -0
  641. package/dist/leads-JHUM6FYR.js.map +1 -0
  642. package/dist/leads-UYZM2XQX.js +90 -0
  643. package/dist/leads-UYZM2XQX.js.map +1 -0
  644. package/dist/learn-D2KBGJHZ.js +203 -0
  645. package/dist/learn-D2KBGJHZ.js.map +1 -0
  646. package/dist/library-6VUFHTEK.js +109 -0
  647. package/dist/library-6VUFHTEK.js.map +1 -0
  648. package/dist/lighthouse-57U2GMPV.js +75 -0
  649. package/dist/lighthouse-57U2GMPV.js.map +1 -0
  650. package/dist/line-item-writes-R5GO6GTL.js +208 -0
  651. package/dist/line-item-writes-R5GO6GTL.js.map +1 -0
  652. package/dist/line-items-RBMH6YBZ.js +103 -0
  653. package/dist/line-items-RBMH6YBZ.js.map +1 -0
  654. package/dist/link-WS2RMCOP.js +64 -0
  655. package/dist/link-WS2RMCOP.js.map +1 -0
  656. package/dist/linkedin-FSIALZTS.js +1008 -0
  657. package/dist/linkedin-FSIALZTS.js.map +1 -0
  658. package/dist/list-2AE2Q4ZD.js +151 -0
  659. package/dist/list-2AE2Q4ZD.js.map +1 -0
  660. package/dist/list-E635Y6M4.js +303 -0
  661. package/dist/list-E635Y6M4.js.map +1 -0
  662. package/dist/list-G57ZO4PG.js +50 -0
  663. package/dist/list-G57ZO4PG.js.map +1 -0
  664. package/dist/list-JCSWZWDI.js +57 -0
  665. package/dist/list-JCSWZWDI.js.map +1 -0
  666. package/dist/list-KT6NXVLV.js +63 -0
  667. package/dist/list-KT6NXVLV.js.map +1 -0
  668. package/dist/list-RINCJOAC.js +76 -0
  669. package/dist/list-RINCJOAC.js.map +1 -0
  670. package/dist/list-SRNXHS6L.js +51 -0
  671. package/dist/list-SRNXHS6L.js.map +1 -0
  672. package/dist/list-YJSO4M5Q.js +65 -0
  673. package/dist/list-YJSO4M5Q.js.map +1 -0
  674. package/dist/locations-HW2Y5OJO.js +67 -0
  675. package/dist/locations-HW2Y5OJO.js.map +1 -0
  676. package/dist/locations-XOHI3VWI.js +40 -0
  677. package/dist/locations-XOHI3VWI.js.map +1 -0
  678. package/dist/log-3HX5BIO6.js +92 -0
  679. package/dist/log-3HX5BIO6.js.map +1 -0
  680. package/dist/logo-KXTGIYBI.js +18 -0
  681. package/dist/logo-KXTGIYBI.js.map +1 -0
  682. package/dist/lookup-X6O5UNJH.js +22 -0
  683. package/dist/lookup-X6O5UNJH.js.map +1 -0
  684. package/dist/make-QH77XOWM.js +633 -0
  685. package/dist/make-QH77XOWM.js.map +1 -0
  686. package/dist/map-QABBPYZM.js +404 -0
  687. package/dist/map-QABBPYZM.js.map +1 -0
  688. package/dist/mcp-HSD3W3OB.js +463 -0
  689. package/dist/mcp-HSD3W3OB.js.map +1 -0
  690. package/dist/media-MI4EE7L4.js +89 -0
  691. package/dist/media-MI4EE7L4.js.map +1 -0
  692. package/dist/media-QUTQOBA7.js +15 -0
  693. package/dist/media-QUTQOBA7.js.map +1 -0
  694. package/dist/media-sources-HO4DXRX5.js +32 -0
  695. package/dist/media-sources-HO4DXRX5.js.map +1 -0
  696. package/dist/members-YEYYJGY6.js +44 -0
  697. package/dist/members-YEYYJGY6.js.map +1 -0
  698. package/dist/meta-E3JOUOSS.js +69 -0
  699. package/dist/meta-E3JOUOSS.js.map +1 -0
  700. package/dist/metrics-HQ7XJAYQ.js +152 -0
  701. package/dist/metrics-HQ7XJAYQ.js.map +1 -0
  702. package/dist/models-PGX3FBHU.js +155 -0
  703. package/dist/models-PGX3FBHU.js.map +1 -0
  704. package/dist/normalize-FPJ6GSOY.js +806 -0
  705. package/dist/normalize-FPJ6GSOY.js.map +1 -0
  706. package/dist/normalize-GSQWN77S.js +141 -0
  707. package/dist/normalize-GSQWN77S.js.map +1 -0
  708. package/dist/options-F5XZMQLK.js +121 -0
  709. package/dist/options-F5XZMQLK.js.map +1 -0
  710. package/dist/output-GQFJ2T5B.js +24 -0
  711. package/dist/output-GQFJ2T5B.js.map +1 -0
  712. package/dist/page-VTTSBC6Y.js +105 -0
  713. package/dist/page-VTTSBC6Y.js.map +1 -0
  714. package/dist/pages-PMZVNVQM.js +66 -0
  715. package/dist/pages-PMZVNVQM.js.map +1 -0
  716. package/dist/performance-G67JQE5J.js +24 -0
  717. package/dist/performance-G67JQE5J.js.map +1 -0
  718. package/dist/pinterest-UDNGOWDM.js +96 -0
  719. package/dist/pinterest-UDNGOWDM.js.map +1 -0
  720. package/dist/pixels-OYZDGCH3.js +108 -0
  721. package/dist/pixels-OYZDGCH3.js.map +1 -0
  722. package/dist/pixels-XKGNTCFX.js +60 -0
  723. package/dist/pixels-XKGNTCFX.js.map +1 -0
  724. package/dist/plan-DZS3TVIJ.js +207 -0
  725. package/dist/plan-DZS3TVIJ.js.map +1 -0
  726. package/dist/preview-DR6MXOGI.js +169 -0
  727. package/dist/preview-DR6MXOGI.js.map +1 -0
  728. package/dist/profile-VOVZG44G.js +159 -0
  729. package/dist/profile-VOVZG44G.js.map +1 -0
  730. package/dist/promoted-tweet-writes-VCK2ADVJ.js +180 -0
  731. package/dist/promoted-tweet-writes-VCK2ADVJ.js.map +1 -0
  732. package/dist/promoted-tweets-4ACBP2RV.js +119 -0
  733. package/dist/promoted-tweets-4ACBP2RV.js.map +1 -0
  734. package/dist/properties-MKVF7MUK.js +101 -0
  735. package/dist/properties-MKVF7MUK.js.map +1 -0
  736. package/dist/publish-6XVA35T6.js +322 -0
  737. package/dist/publish-6XVA35T6.js.map +1 -0
  738. package/dist/query-CNWQ6STR.js +61 -0
  739. package/dist/query-CNWQ6STR.js.map +1 -0
  740. package/dist/query-DBSBZ73C.js +247 -0
  741. package/dist/query-DBSBZ73C.js.map +1 -0
  742. package/dist/query-QK4U4TEL.js +236 -0
  743. package/dist/query-QK4U4TEL.js.map +1 -0
  744. package/dist/questionnaire-OVJWNUVV.js +93 -0
  745. package/dist/questionnaire-OVJWNUVV.js.map +1 -0
  746. package/dist/read-L2QIVJTL.js +141 -0
  747. package/dist/read-L2QIVJTL.js.map +1 -0
  748. package/dist/reddit-SCEB2JQL.js +26 -0
  749. package/dist/reddit-SCEB2JQL.js.map +1 -0
  750. package/dist/refresh-TIH5Y3NP.js +94 -0
  751. package/dist/refresh-TIH5Y3NP.js.map +1 -0
  752. package/dist/release-LKMUKVXM.js +60 -0
  753. package/dist/release-LKMUKVXM.js.map +1 -0
  754. package/dist/relevant-pages-CRI2NLWG.js +99 -0
  755. package/dist/relevant-pages-CRI2NLWG.js.map +1 -0
  756. package/dist/remove-6ABOB7TZ.js +50 -0
  757. package/dist/remove-6ABOB7TZ.js.map +1 -0
  758. package/dist/remove-JKSCGKQG.js +48 -0
  759. package/dist/remove-JKSCGKQG.js.map +1 -0
  760. package/dist/reopen-27TDNXFP.js +63 -0
  761. package/dist/reopen-27TDNXFP.js.map +1 -0
  762. package/dist/rerun-XHECBJD5.js +84 -0
  763. package/dist/rerun-XHECBJD5.js.map +1 -0
  764. package/dist/research-4MOXIMDX.js +62 -0
  765. package/dist/research-4MOXIMDX.js.map +1 -0
  766. package/dist/research-XYXP7D4R.js +262 -0
  767. package/dist/research-XYXP7D4R.js.map +1 -0
  768. package/dist/reset-NLYEBPLX.js +54 -0
  769. package/dist/reset-NLYEBPLX.js.map +1 -0
  770. package/dist/reset-RDQOYBXX.js +54 -0
  771. package/dist/reset-RDQOYBXX.js.map +1 -0
  772. package/dist/resolve-VHKWC5KW.js +121 -0
  773. package/dist/resolve-VHKWC5KW.js.map +1 -0
  774. package/dist/retry-MTQSHXKH.js +60 -0
  775. package/dist/retry-MTQSHXKH.js.map +1 -0
  776. package/dist/retry-ZI5ECSFD.js +62 -0
  777. package/dist/retry-ZI5ECSFD.js.map +1 -0
  778. package/dist/retry-failed-2OYMCB55.js +45 -0
  779. package/dist/retry-failed-2OYMCB55.js.map +1 -0
  780. package/dist/run-BMJJRJL2.js +65 -0
  781. package/dist/run-BMJJRJL2.js.map +1 -0
  782. package/dist/run-IHXS6F5V.js +59 -0
  783. package/dist/run-IHXS6F5V.js.map +1 -0
  784. package/dist/scaffold-ad-QEADKYPL.js +1548 -0
  785. package/dist/scaffold-ad-QEADKYPL.js.map +1 -0
  786. package/dist/scaffold-static-ad-PTJ73ZNF.js +971 -0
  787. package/dist/scaffold-static-ad-PTJ73ZNF.js.map +1 -0
  788. package/dist/scaffold-video-ZQEZRVD6.js +872 -0
  789. package/dist/scaffold-video-ZQEZRVD6.js.map +1 -0
  790. package/dist/schedule-JD2EQJCT.js +61 -0
  791. package/dist/schedule-JD2EQJCT.js.map +1 -0
  792. package/dist/schedule-TLYT5UXM.js +66 -0
  793. package/dist/schedule-TLYT5UXM.js.map +1 -0
  794. package/dist/scheduled-agents-GIVKWTXX.js +49 -0
  795. package/dist/scheduled-agents-GIVKWTXX.js.map +1 -0
  796. package/dist/schema-MZTVCNP4.js +63 -0
  797. package/dist/schema-MZTVCNP4.js.map +1 -0
  798. package/dist/schema-RYTVKPLZ.js +132 -0
  799. package/dist/schema-RYTVKPLZ.js.map +1 -0
  800. package/dist/scrape-T3DA7ER7.js +2241 -0
  801. package/dist/scrape-T3DA7ER7.js.map +1 -0
  802. package/dist/screenshot-EIGC6SZB.js +102 -0
  803. package/dist/screenshot-EIGC6SZB.js.map +1 -0
  804. package/dist/search-2SVUDZIX.js +224 -0
  805. package/dist/search-2SVUDZIX.js.map +1 -0
  806. package/dist/search-34NFJ5F6.js +26 -0
  807. package/dist/search-34NFJ5F6.js.map +1 -0
  808. package/dist/search-AOFAN5NB.js +174 -0
  809. package/dist/search-AOFAN5NB.js.map +1 -0
  810. package/dist/search-BWE3OPOY.js +91 -0
  811. package/dist/search-BWE3OPOY.js.map +1 -0
  812. package/dist/search-EYYAOZND.js +92 -0
  813. package/dist/search-EYYAOZND.js.map +1 -0
  814. package/dist/search-copy-VKQ2OOBM.js +168 -0
  815. package/dist/search-copy-VKQ2OOBM.js.map +1 -0
  816. package/dist/seeds-HQYSVFIX.js +101 -0
  817. package/dist/seeds-HQYSVFIX.js.map +1 -0
  818. package/dist/select-HJMOAWAU.js +94 -0
  819. package/dist/select-HJMOAWAU.js.map +1 -0
  820. package/dist/sends-I7VQFE4S.js +309 -0
  821. package/dist/sends-I7VQFE4S.js.map +1 -0
  822. package/dist/sequences-JHSEJJGN.js +146 -0
  823. package/dist/sequences-JHSEJJGN.js.map +1 -0
  824. package/dist/set-prompt-TSS33JQZ.js +185 -0
  825. package/dist/set-prompt-TSS33JQZ.js.map +1 -0
  826. package/dist/setup-links-IW4BUANK.js +141 -0
  827. package/dist/setup-links-IW4BUANK.js.map +1 -0
  828. package/dist/{shared-J7DQZ2ED.js → shared-AT3FXPAG.js} +8 -6
  829. package/dist/shared-AT3FXPAG.js.map +1 -0
  830. package/dist/shopify-RQKO5TMR.js +3819 -0
  831. package/dist/shopify-RQKO5TMR.js.map +1 -0
  832. package/dist/site-3NU2BDAR.js +177 -0
  833. package/dist/site-3NU2BDAR.js.map +1 -0
  834. package/dist/sitemaps-FG37N5EB.js +87 -0
  835. package/dist/sitemaps-FG37N5EB.js.map +1 -0
  836. package/dist/sites-FIXK4Y3O.js +101 -0
  837. package/dist/sites-FIXK4Y3O.js.map +1 -0
  838. package/dist/skills-OKVCVQVD.js +47 -0
  839. package/dist/skills-OKVCVQVD.js.map +1 -0
  840. package/dist/sources-SEODRUIC.js +30 -0
  841. package/dist/sources-SEODRUIC.js.map +1 -0
  842. package/dist/sources-Z6BGTBGO.js +421 -0
  843. package/dist/sources-Z6BGTBGO.js.map +1 -0
  844. package/dist/stale-SWPDWXG7.js +63 -0
  845. package/dist/stale-SWPDWXG7.js.map +1 -0
  846. package/dist/stats-ZWZ7BAHV.js +34 -0
  847. package/dist/stats-ZWZ7BAHV.js.map +1 -0
  848. package/dist/status-7Y7UNSO6.js +62 -0
  849. package/dist/status-7Y7UNSO6.js.map +1 -0
  850. package/dist/sticker-FLRZM3BI.js +94 -0
  851. package/dist/sticker-FLRZM3BI.js.map +1 -0
  852. package/dist/stock-2CSMWRWV.js +179 -0
  853. package/dist/stock-2CSMWRWV.js.map +1 -0
  854. package/dist/studio-TTTR6N7D.js +49 -0
  855. package/dist/studio-TTTR6N7D.js.map +1 -0
  856. package/dist/sync-FH773IFH.js +54 -0
  857. package/dist/sync-FH773IFH.js.map +1 -0
  858. package/dist/sync-G5CS2RYV.js +54 -0
  859. package/dist/sync-G5CS2RYV.js.map +1 -0
  860. package/dist/sync-UADA6M33.js +265 -0
  861. package/dist/sync-UADA6M33.js.map +1 -0
  862. package/dist/sync-definition-77KLGPMA.js +52 -0
  863. package/dist/sync-definition-77KLGPMA.js.map +1 -0
  864. package/dist/tag-manager-NK3ZHSJB.js +43 -0
  865. package/dist/tag-manager-NK3ZHSJB.js.map +1 -0
  866. package/dist/tags-ANGHHLAC.js +20 -0
  867. package/dist/tags-ANGHHLAC.js.map +1 -0
  868. package/dist/tags-DKPUSQTJ.js +20 -0
  869. package/dist/tags-DKPUSQTJ.js.map +1 -0
  870. package/dist/tags-HSCV4ZAQ.js +20 -0
  871. package/dist/tags-HSCV4ZAQ.js.map +1 -0
  872. package/dist/tags-J3RMQEQM.js +26 -0
  873. package/dist/tags-J3RMQEQM.js.map +1 -0
  874. package/dist/tags-VZGTR3VJ.js +224 -0
  875. package/dist/tags-VZGTR3VJ.js.map +1 -0
  876. package/dist/targeting-constants-ZGBX3VWU.js +118 -0
  877. package/dist/targeting-constants-ZGBX3VWU.js.map +1 -0
  878. package/dist/targeting-criteria-BSG3CLHU.js +113 -0
  879. package/dist/targeting-criteria-BSG3CLHU.js.map +1 -0
  880. package/dist/targets-DVOAFYZQ.js +102 -0
  881. package/dist/targets-DVOAFYZQ.js.map +1 -0
  882. package/dist/templates-KJ5O44FF.js +178 -0
  883. package/dist/templates-KJ5O44FF.js.map +1 -0
  884. package/dist/testimonials-NB7V3DUO.js +32 -0
  885. package/dist/testimonials-NB7V3DUO.js.map +1 -0
  886. package/dist/themes-3RV3HNNE.js +94 -0
  887. package/dist/themes-3RV3HNNE.js.map +1 -0
  888. package/dist/top-companies-KRB3OZOT.js +108 -0
  889. package/dist/top-companies-KRB3OZOT.js.map +1 -0
  890. package/dist/translate-5FP32BIA.js +598 -0
  891. package/dist/translate-5FP32BIA.js.map +1 -0
  892. package/dist/triggers-EURHTCYC.js +141 -0
  893. package/dist/triggers-EURHTCYC.js.map +1 -0
  894. package/dist/tweets-X64YDEAA.js +123 -0
  895. package/dist/tweets-X64YDEAA.js.map +1 -0
  896. package/dist/unfollow-PIONCSBL.js +46 -0
  897. package/dist/unfollow-PIONCSBL.js.map +1 -0
  898. package/dist/unlink-HVVTZ3MB.js +67 -0
  899. package/dist/unlink-HVVTZ3MB.js.map +1 -0
  900. package/dist/unstage-BJJ5M7MK.js +95 -0
  901. package/dist/unstage-BJJ5M7MK.js.map +1 -0
  902. package/dist/unstage-Y7ZE3NUJ.js +84 -0
  903. package/dist/unstage-Y7ZE3NUJ.js.map +1 -0
  904. package/dist/update-3IP7FB6Y.js +98 -0
  905. package/dist/update-3IP7FB6Y.js.map +1 -0
  906. package/dist/update-CSDSK5NO.js +63 -0
  907. package/dist/update-CSDSK5NO.js.map +1 -0
  908. package/dist/update-FGJXVDB7.js +142 -0
  909. package/dist/update-FGJXVDB7.js.map +1 -0
  910. package/dist/update-MF7LY2OT.js +155 -0
  911. package/dist/update-MF7LY2OT.js.map +1 -0
  912. package/dist/upload-DDPI7KJV.js +126 -0
  913. package/dist/upload-DDPI7KJV.js.map +1 -0
  914. package/dist/upload-IWFYKD7A.js +150 -0
  915. package/dist/upload-IWFYKD7A.js.map +1 -0
  916. package/dist/upscale-EYCEYRWE.js +109 -0
  917. package/dist/upscale-EYCEYRWE.js.map +1 -0
  918. package/dist/url-options-RA3XISLN.js +130 -0
  919. package/dist/url-options-RA3XISLN.js.map +1 -0
  920. package/dist/url-params-SN4APXCK.js +98 -0
  921. package/dist/url-params-SN4APXCK.js.map +1 -0
  922. package/dist/use-E2TA2K6J.js +95 -0
  923. package/dist/use-E2TA2K6J.js.map +1 -0
  924. package/dist/validate-W52JOEXI.js +88 -0
  925. package/dist/validate-W52JOEXI.js.map +1 -0
  926. package/dist/variant-ETHB6XUM.js +338 -0
  927. package/dist/variant-ETHB6XUM.js.map +1 -0
  928. package/dist/videos-653WAFPG.js +39 -0
  929. package/dist/videos-653WAFPG.js.map +1 -0
  930. package/dist/view-BVEZRRV2.js +121 -0
  931. package/dist/view-BVEZRRV2.js.map +1 -0
  932. package/dist/viewer-check-W4ICSBHO.js +68 -0
  933. package/dist/viewer-check-W4ICSBHO.js.map +1 -0
  934. package/dist/web-JWIGFGIU.js +140 -0
  935. package/dist/web-JWIGFGIU.js.map +1 -0
  936. package/dist/winners-MJDKCGEZ.js +113 -0
  937. package/dist/winners-MJDKCGEZ.js.map +1 -0
  938. package/dist/winning-ads-O3IMUGGO.js +84 -0
  939. package/dist/winning-ads-O3IMUGGO.js.map +1 -0
  940. package/dist/write-commands-DA6FIFAO.js +737 -0
  941. package/dist/write-commands-DA6FIFAO.js.map +1 -0
  942. package/dist/write-commands-EMN2WENA.js +1015 -0
  943. package/dist/write-commands-EMN2WENA.js.map +1 -0
  944. package/dist/write-commands-KTPISQRE.js +206 -0
  945. package/dist/write-commands-KTPISQRE.js.map +1 -0
  946. package/dist/write-commands-QBGIWU27.js +713 -0
  947. package/dist/write-commands-QBGIWU27.js.map +1 -0
  948. package/dist/x-BT3SNCTU.js +47 -0
  949. package/dist/x-BT3SNCTU.js.map +1 -0
  950. package/package.json +9 -2
  951. package/dist/chunk-FGHMWBUD.js +0 -9989
  952. package/dist/chunk-FGHMWBUD.js.map +0 -1
  953. package/dist/chunk-HJEMOSPH.js +0 -1292
  954. package/dist/chunk-HJEMOSPH.js.map +0 -1
  955. package/dist/chunk-MF7YA62W.js.map +0 -1
  956. package/dist/chunk-VLUGGVJL.js.map +0 -1
  957. package/dist/chunk-VZEDAFAR.js.map +0 -1
  958. package/dist/chunk-XHC4LMK4.js.map +0 -1
  959. package/dist/client-GR6YL3YX.js +0 -17
  960. package/dist/output-NMQXZF3Z.js +0 -18
  961. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  962. /package/dist/{env-4P5HOGNA.js.map → client-EURRWXPW.js.map} +0 -0
  963. /package/dist/{output-NMQXZF3Z.js.map → connect-4YXFMXYX.js.map} +0 -0
  964. /package/dist/{shared-J7DQZ2ED.js.map → customers-7E4HBSEY.js.map} +0 -0
@@ -0,0 +1,112 @@
1
+ import {
2
+ reportError,
3
+ splitList
4
+ } from "./chunk-OIL6PU5W.js";
5
+ import {
6
+ apiPost
7
+ } from "./chunk-CUL3VB4L.js";
8
+ import "./chunk-6YYSUISH.js";
9
+ import "./chunk-I4FTS5EE.js";
10
+ import {
11
+ FOLLOW_BATCH_MAX,
12
+ registerSchema,
13
+ writeJson
14
+ } from "./chunk-MYTDK3AL.js";
15
+ import "./chunk-YQSBHWOI.js";
16
+
17
+ // src/commands/winning-ads/follow-competitors.ts
18
+ import { defineCommand } from "citty";
19
+ var BATCH_TIMEOUT_MS = 3e5;
20
+ function buildFollowBatchBody(input) {
21
+ const seen = /* @__PURE__ */ new Set();
22
+ const inputs = [];
23
+ for (const domain of splitList(input.domains)) {
24
+ const key = domain.toLowerCase();
25
+ if (seen.has(key)) {
26
+ continue;
27
+ }
28
+ seen.add(key);
29
+ inputs.push(domain);
30
+ }
31
+ return { inputs };
32
+ }
33
+ registerSchema({
34
+ command: "winning-ads.follow-competitors",
35
+ description: "Follow MANY brands at once \u2014 the fast way to add every competitor to your library. Pass a comma-separated list of domains (best \u2014 each resolves every platform and every account we can find, every country). One brand failing never blocks the others: the response reports per-brand status (following/added/ambiguous/failed) plus rollup counts. Ideal right after a competitor scan.",
36
+ args: {
37
+ domains: {
38
+ type: "string",
39
+ description: `Comma-separated domains (best), profile/ad-library URLs, or brand names \u2014 up to ${FOLLOW_BATCH_MAX}. e.g. "deel.com,notion.so,hubspot.com"`,
40
+ required: true
41
+ }
42
+ }
43
+ });
44
+ var followCompetitorsCommand = defineCommand({
45
+ meta: {
46
+ name: "follow-competitors",
47
+ description: 'Follow many brands at once by domain \u2014 add every competitor in one call. Example: baker winning-ads follow-competitors "deel.com,notion.so,hubspot.com"'
48
+ },
49
+ args: {
50
+ domains: {
51
+ type: "positional",
52
+ description: "Comma-separated domains (best), URLs, or brand names",
53
+ required: true
54
+ },
55
+ platform: {
56
+ type: "string",
57
+ description: "Ignored \u2014 every platform is searched. Kept so older commands still run.",
58
+ required: false
59
+ }
60
+ },
61
+ run: async ({ args }) => {
62
+ try {
63
+ const body = buildFollowBatchBody({ domains: String(args.domains ?? "") });
64
+ if (body.inputs.length === 0) {
65
+ writeJson({
66
+ ok: false,
67
+ error: { code: "VALIDATION_ERROR", message: "Pass at least one domain in --domains." }
68
+ });
69
+ process.exit(1);
70
+ }
71
+ if (body.inputs.length > FOLLOW_BATCH_MAX) {
72
+ writeJson({
73
+ ok: false,
74
+ error: {
75
+ code: "VALIDATION_ERROR",
76
+ message: `Too many brands (${body.inputs.length}). Follow at most ${FOLLOW_BATCH_MAX} per call.`
77
+ }
78
+ });
79
+ process.exit(1);
80
+ }
81
+ const data = await apiPost("/api/ad-library/follow-batch", body, {
82
+ timeoutMs: BATCH_TIMEOUT_MS
83
+ });
84
+ const hints = [];
85
+ if (data.failed_count > 0) {
86
+ const failed = data.results.filter((r) => r.status === "failed").map((r) => r.input);
87
+ hints.push(
88
+ `${data.failed_count} brand(s) couldn't be added: ${failed.join(", ")}. Retry each with its website or Facebook/LinkedIn URL via \`baker winning-ads follow\`.`
89
+ );
90
+ }
91
+ if (data.ambiguous_count > 0) {
92
+ const ambiguous = data.results.filter((r) => r.status === "ambiguous").map((r) => r.input);
93
+ hints.push(
94
+ `${data.ambiguous_count} brand(s) matched multiple advertisers: ${ambiguous.join(", ")}. Re-run \`baker winning-ads follow\` with an exact domain/URL to pick one.`
95
+ );
96
+ }
97
+ if (data.added_count > 0) {
98
+ hints.push(
99
+ "Newly added brands are ingesting now \u2014 their winners fill in over the next few minutes. Check `baker winning-ads following` or `baker winning-ads feed`."
100
+ );
101
+ }
102
+ writeJson({ ok: true, data, hints: hints.length > 0 ? hints : void 0 });
103
+ } catch (err) {
104
+ reportError(err);
105
+ }
106
+ }
107
+ });
108
+ export {
109
+ buildFollowBatchBody,
110
+ followCompetitorsCommand
111
+ };
112
+ //# sourceMappingURL=follow-competitors-SQ5XBFTK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/winning-ads/follow-competitors.ts"],"sourcesContent":["import { FOLLOW_BATCH_MAX, type FollowBatchResponse } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { reportError, splitList } from \"./shared.ts\";\n\n// A batch follows each brand sequentially — a paid resolve lookup + an ad-dna add\n// per brand, a few seconds each — so give it far more room than the default\n// request timeout. A timeout is safe anyway: each follow is idempotent, so an\n// already-followed brand returns instantly on a re-run.\nconst BATCH_TIMEOUT_MS = 300_000;\n\n/**\n * Build the `/api/ad-library/follow-batch` body from the CLI flags. Pure so the\n * csv-splitting + de-duplication is unit-testable without the transport. Dedupes\n * case-insensitively (following the same domain twice is a wasted lookup) while\n * preserving the first-seen order + original casing.\n */\nexport function buildFollowBatchBody(input: { domains?: string }): { inputs: string[] } {\n const seen = new Set<string>();\n const inputs: string[] = [];\n for (const domain of splitList(input.domains)) {\n const key = domain.toLowerCase();\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n inputs.push(domain);\n }\n return { inputs };\n}\n\nregisterSchema({\n command: \"winning-ads.follow-competitors\",\n description:\n \"Follow MANY brands at once — the fast way to add every competitor to your library. Pass a comma-separated list of domains (best — each resolves every platform and every account we can find, every country). One brand failing never blocks the others: the response reports per-brand status (following/added/ambiguous/failed) plus rollup counts. Ideal right after a competitor scan.\",\n args: {\n domains: {\n type: \"string\",\n description: `Comma-separated domains (best), profile/ad-library URLs, or brand names — up to ${FOLLOW_BATCH_MAX}. e.g. \"deel.com,notion.so,hubspot.com\"`,\n required: true,\n },\n },\n});\n\nexport const followCompetitorsCommand = defineCommand({\n meta: {\n name: \"follow-competitors\",\n description:\n 'Follow many brands at once by domain — add every competitor in one call. Example: baker winning-ads follow-competitors \"deel.com,notion.so,hubspot.com\"',\n },\n args: {\n domains: {\n type: \"positional\",\n description: \"Comma-separated domains (best), URLs, or brand names\",\n required: true,\n },\n platform: {\n type: \"string\",\n description: \"Ignored — every platform is searched. Kept so older commands still run.\",\n required: false,\n },\n },\n run: async ({ args }) => {\n try {\n const body = buildFollowBatchBody({ domains: String(args.domains ?? \"\") });\n if (body.inputs.length === 0) {\n writeJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: \"Pass at least one domain in --domains.\" },\n });\n process.exit(1);\n }\n if (body.inputs.length > FOLLOW_BATCH_MAX) {\n writeJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: `Too many brands (${body.inputs.length}). Follow at most ${FOLLOW_BATCH_MAX} per call.`,\n },\n });\n process.exit(1);\n }\n\n const data = await apiPost<FollowBatchResponse>(\"/api/ad-library/follow-batch\", body, {\n timeoutMs: BATCH_TIMEOUT_MS,\n });\n\n const hints: string[] = [];\n if (data.failed_count > 0) {\n const failed = data.results.filter((r) => r.status === \"failed\").map((r) => r.input);\n hints.push(\n `${data.failed_count} brand(s) couldn't be added: ${failed.join(\", \")}. Retry each with its website or Facebook/LinkedIn URL via \\`baker winning-ads follow\\`.`,\n );\n }\n if (data.ambiguous_count > 0) {\n const ambiguous = data.results.filter((r) => r.status === \"ambiguous\").map((r) => r.input);\n hints.push(\n `${data.ambiguous_count} brand(s) matched multiple advertisers: ${ambiguous.join(\", \")}. Re-run \\`baker winning-ads follow\\` with an exact domain/URL to pick one.`,\n );\n }\n if (data.added_count > 0) {\n hints.push(\n \"Newly added brands are ingesting now — their winners fill in over the next few minutes. Check `baker winning-ads following` or `baker winning-ads feed`.\",\n );\n }\n\n writeJson({ ok: true, data, hints: hints.length > 0 ? hints : undefined });\n } catch (err) {\n reportError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAU9B,IAAM,mBAAmB;AAQlB,SAAS,qBAAqB,OAAmD;AACtF,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,SAAmB,CAAC;AAC1B,aAAW,UAAU,UAAU,MAAM,OAAO,GAAG;AAC7C,UAAM,MAAM,OAAO,YAAY;AAC/B,QAAI,KAAK,IAAI,GAAG,GAAG;AACjB;AAAA,IACF;AACA,SAAK,IAAI,GAAG;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AACA,SAAO,EAAE,OAAO;AAClB;AAEA,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa,wFAAmF,gBAAgB;AAAA,MAChH,UAAU;AAAA,IACZ;AAAA,EACF;AACF,CAAC;AAEM,IAAM,2BAA2B,cAAc;AAAA,EACpD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI;AACF,YAAM,OAAO,qBAAqB,EAAE,SAAS,OAAO,KAAK,WAAW,EAAE,EAAE,CAAC;AACzE,UAAI,KAAK,OAAO,WAAW,GAAG;AAC5B,kBAAU;AAAA,UACR,IAAI;AAAA,UACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,yCAAyC;AAAA,QACvF,CAAC;AACD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,UAAI,KAAK,OAAO,SAAS,kBAAkB;AACzC,kBAAU;AAAA,UACR,IAAI;AAAA,UACJ,OAAO;AAAA,YACL,MAAM;AAAA,YACN,SAAS,oBAAoB,KAAK,OAAO,MAAM,qBAAqB,gBAAgB;AAAA,UACtF;AAAA,QACF,CAAC;AACD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,OAAO,MAAM,QAA6B,gCAAgC,MAAM;AAAA,QACpF,WAAW;AAAA,MACb,CAAC;AAED,YAAM,QAAkB,CAAC;AACzB,UAAI,KAAK,eAAe,GAAG;AACzB,cAAM,SAAS,KAAK,QAAQ,OAAO,CAAC,MAAM,EAAE,WAAW,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AACnF,cAAM;AAAA,UACJ,GAAG,KAAK,YAAY,gCAAgC,OAAO,KAAK,IAAI,CAAC;AAAA,QACvE;AAAA,MACF;AACA,UAAI,KAAK,kBAAkB,GAAG;AAC5B,cAAM,YAAY,KAAK,QAAQ,OAAO,CAAC,MAAM,EAAE,WAAW,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AACzF,cAAM;AAAA,UACJ,GAAG,KAAK,eAAe,2CAA2C,UAAU,KAAK,IAAI,CAAC;AAAA,QACxF;AAAA,MACF;AACA,UAAI,KAAK,cAAc,GAAG;AACxB,cAAM;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAEA,gBAAU,EAAE,IAAI,MAAM,MAAM,OAAO,MAAM,SAAS,IAAI,QAAQ,OAAU,CAAC;AAAA,IAC3E,SAAS,KAAK;AACZ,kBAAY,GAAG;AAAA,IACjB;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,113 @@
1
+ import {
2
+ reportError,
3
+ splitList
4
+ } from "./chunk-OIL6PU5W.js";
5
+ import {
6
+ apiGet
7
+ } from "./chunk-CUL3VB4L.js";
8
+ import "./chunk-6YYSUISH.js";
9
+ import "./chunk-I4FTS5EE.js";
10
+ import {
11
+ applyFieldMask,
12
+ registerSchema,
13
+ writeJson,
14
+ writeOutput
15
+ } from "./chunk-MYTDK3AL.js";
16
+ import "./chunk-YQSBHWOI.js";
17
+
18
+ // src/commands/winning-ads/following.ts
19
+ import { defineCommand } from "citty";
20
+ registerSchema({
21
+ command: "winning-ads.following",
22
+ description: "List the brands you follow in your ad-dna library, with each one's status (ready vs still adding) and cached ad counts. A brand still adding has counts that are a lie in progress; one with `discovery_failed` has counts that are short because we couldn't finish looking, which is not the same as it running no ads.",
23
+ args: {}
24
+ });
25
+ function displayStatus(status) {
26
+ return status === "ready" ? "ready" : "adding\u2026";
27
+ }
28
+ function compactFollowed(record) {
29
+ return {
30
+ followed_id: String(record.followed_id ?? ""),
31
+ advertiser_id: String(record.advertiser_id ?? ""),
32
+ label: String(record.label ?? ""),
33
+ status: displayStatus(record.status),
34
+ active_ad_count: record.active_ad_count ?? null,
35
+ total_ad_count: record.total_ad_count ?? null,
36
+ family_count: record.family_count ?? null,
37
+ adding_discovered: record.adding_discovered ?? null,
38
+ adding_enqueued: record.adding_enqueued ?? null,
39
+ adding_ingested: record.adding_ingested ?? null,
40
+ // Without this a brand we failed to finish looking at is indistinguishable
41
+ // from one that genuinely runs no ads — both read `ready` with 0 ads.
42
+ discovery_failed: record.discovery_failed ?? null
43
+ };
44
+ }
45
+ function followingHints(records) {
46
+ const hints = [];
47
+ const label = (r) => String(r.label ?? r.advertiser_id ?? "");
48
+ const incomplete = records.filter((r) => r.discovery_failed === true && r.status !== "adding\u2026");
49
+ if (incomplete.length > 0) {
50
+ hints.push(
51
+ `${incomplete.length} brand(s) couldn't be fully added: ${incomplete.map(label).join(", ")}. Their counts are incomplete \u2014 re-run \`baker winning-ads follow <domain>\` for each to try again.`
52
+ );
53
+ }
54
+ const adding = records.filter((r) => r.status === "adding\u2026");
55
+ if (adding.length > 0) {
56
+ hints.push(
57
+ `${adding.length} brand(s) are still being added: ${adding.map(label).join(", ")}. Their ad counts fill in over the next few minutes \u2014 don't report them as final, and don't re-follow to speed it up.`
58
+ );
59
+ }
60
+ return hints;
61
+ }
62
+ function followingNormalizer(record, full) {
63
+ const compact = compactFollowed(record);
64
+ if (!full) {
65
+ return compact;
66
+ }
67
+ return {
68
+ ...compact,
69
+ image_url: record.image_url ?? null,
70
+ platforms: Array.isArray(record.platforms) ? record.platforms : []
71
+ };
72
+ }
73
+ var followingCommand = defineCommand({
74
+ meta: {
75
+ name: "following",
76
+ description: "List brands you follow, with status (ready / adding\u2026) and cached counts. A brand's counts are only final once it is ready. Example: baker winning-ads following --output md"
77
+ },
78
+ args: {
79
+ output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
80
+ fields: { type: "string", description: "Comma-separated field names to include", required: false },
81
+ full: { type: "boolean", description: "Include image + platforms", required: false, default: false }
82
+ },
83
+ run: async ({ args }) => {
84
+ try {
85
+ const data = await apiGet("/api/ad-library/following");
86
+ const output = args.output || "json";
87
+ const full = args.full;
88
+ const rawList = Array.isArray(data?.following) ? data.following : [];
89
+ const following = rawList.map((f) => followingNormalizer(f, full));
90
+ const hints = followingHints(following);
91
+ if (output === "json") {
92
+ const fields = splitList(args.fields);
93
+ const rows = fields.length > 0 ? following.map((f) => applyFieldMask(f, fields)) : following;
94
+ writeJson({ ok: true, data: { following: rows }, hints: hints.length > 0 ? hints : void 0 });
95
+ return;
96
+ }
97
+ writeOutput(
98
+ { ok: true, data: rawList, hints: hints.length > 0 ? hints : void 0 },
99
+ output,
100
+ args.fields ? args.fields.split(",") : void 0,
101
+ full,
102
+ followingNormalizer
103
+ );
104
+ } catch (err) {
105
+ reportError(err);
106
+ }
107
+ }
108
+ });
109
+ export {
110
+ followingCommand,
111
+ followingHints
112
+ };
113
+ //# sourceMappingURL=following-VDU3BHC4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/winning-ads/following.ts"],"sourcesContent":["import type { FollowingListResponse } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../client.ts\";\nimport { applyFieldMask, type OutputFormat, writeJson, writeOutput } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { reportError, splitList } from \"./shared.ts\";\n\nregisterSchema({\n command: \"winning-ads.following\",\n description:\n \"List the brands you follow in your ad-dna library, with each one's status (ready vs still adding) and cached ad counts. A brand still adding has counts that are a lie in progress; one with `discovery_failed` has counts that are short because we couldn't finish looking, which is not the same as it running no ads.\",\n args: {},\n});\n\n/**\n * Turn the corpus status enum into plain product language. Both unsettled\n * stages read as \"adding…\" — the distinction between enumerating a brand's ads\n * and processing them is ours to manage, not something to explain here.\n */\nfunction displayStatus(status: unknown): string {\n return status === \"ready\" ? \"ready\" : \"adding…\";\n}\n\nfunction compactFollowed(record: Record<string, unknown>): Record<string, unknown> {\n return {\n followed_id: String(record.followed_id ?? \"\"),\n advertiser_id: String(record.advertiser_id ?? \"\"),\n label: String(record.label ?? \"\"),\n status: displayStatus(record.status),\n active_ad_count: (record.active_ad_count as number) ?? null,\n total_ad_count: (record.total_ad_count as number) ?? null,\n family_count: (record.family_count as number) ?? null,\n adding_discovered: (record.adding_discovered as number) ?? null,\n adding_enqueued: (record.adding_enqueued as number) ?? null,\n adding_ingested: (record.adding_ingested as number) ?? null,\n // Without this a brand we failed to finish looking at is indistinguishable\n // from one that genuinely runs no ads — both read `ready` with 0 ads.\n discovery_failed: (record.discovery_failed as boolean) ?? null,\n };\n}\n\n/**\n * Steer on the two states a caller would otherwise misread: a brand still\n * filling in (its counts are a lie in progress) and one we couldn't finish\n * (its counts are short, and re-following is the retry).\n */\nexport function followingHints(records: Array<Record<string, unknown>>): string[] {\n const hints: string[] = [];\n const label = (r: Record<string, unknown>) => String(r.label ?? r.advertiser_id ?? \"\");\n\n const incomplete = records.filter((r) => r.discovery_failed === true && r.status !== \"adding…\");\n if (incomplete.length > 0) {\n hints.push(\n `${incomplete.length} brand(s) couldn't be fully added: ${incomplete.map(label).join(\", \")}. Their counts are incomplete — re-run \\`baker winning-ads follow <domain>\\` for each to try again.`,\n );\n }\n\n const adding = records.filter((r) => r.status === \"adding…\");\n if (adding.length > 0) {\n hints.push(\n `${adding.length} brand(s) are still being added: ${adding.map(label).join(\", \")}. Their ad counts fill in over the next few minutes — don't report them as final, and don't re-follow to speed it up.`,\n );\n }\n return hints;\n}\n\nfunction followingNormalizer(record: Record<string, unknown>, full: boolean): Record<string, unknown> {\n const compact = compactFollowed(record);\n if (!full) {\n return compact;\n }\n return {\n ...compact,\n image_url: (record.image_url as string) ?? null,\n platforms: Array.isArray(record.platforms) ? record.platforms : [],\n };\n}\n\nexport const followingCommand = defineCommand({\n meta: {\n name: \"following\",\n description:\n \"List brands you follow, with status (ready / adding…) and cached counts. A brand's counts are only final once it is ready. Example: baker winning-ads following --output md\",\n },\n args: {\n output: { type: \"string\", description: \"Output format: json|files|md\", required: false, default: \"json\" },\n fields: { type: \"string\", description: \"Comma-separated field names to include\", required: false },\n full: { type: \"boolean\", description: \"Include image + platforms\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const data = await apiGet<FollowingListResponse>(\"/api/ad-library/following\");\n const output = (args.output as OutputFormat) || \"json\";\n const full = args.full as boolean;\n const rawList = Array.isArray(data?.following) ? data.following : [];\n\n const following = rawList.map((f) => followingNormalizer(f as unknown as Record<string, unknown>, full));\n const hints = followingHints(following);\n\n if (output === \"json\") {\n const fields = splitList(args.fields as string | undefined);\n const rows = fields.length > 0 ? following.map((f) => applyFieldMask(f, fields)) : following;\n writeJson({ ok: true, data: { following: rows }, hints: hints.length > 0 ? hints : undefined });\n return;\n }\n // `md`/`files` print rows and nothing else, so the envelope's hints are\n // what carry the steering — `writeOutput` sends them to stderr, which\n // keeps stdout parseable for anything reading the rows.\n writeOutput(\n { ok: true, data: rawList, hints: hints.length > 0 ? hints : undefined },\n output,\n args.fields ? (args.fields as string).split(\",\") : undefined,\n full,\n followingNormalizer,\n );\n } catch (err) {\n reportError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,34 @@
1
+ import {
2
+ fetchJson,
3
+ fontsAdoptCommand,
4
+ fontsCheckCommand,
5
+ fontsCommand,
6
+ fontsFetchCommand,
7
+ lookupGoogleCss
8
+ } from "./chunk-5VPJNNJL.js";
9
+ import "./chunk-2FGKJY63.js";
10
+ import "./chunk-YFPLNMPZ.js";
11
+ import "./chunk-FEG6MN4H.js";
12
+ import "./chunk-TNOSX3PJ.js";
13
+ import "./chunk-SYULM665.js";
14
+ import "./chunk-3VXQYDJN.js";
15
+ import "./chunk-W4SA4CMR.js";
16
+ import "./chunk-JXMZEOHV.js";
17
+ import "./chunk-O6XZIQXZ.js";
18
+ import "./chunk-GXDLWBOY.js";
19
+ import "./chunk-GIWHHCD6.js";
20
+ import "./chunk-UI6BKYQD.js";
21
+ import "./chunk-I2DNBEV6.js";
22
+ import "./chunk-6YYSUISH.js";
23
+ import "./chunk-I4FTS5EE.js";
24
+ import "./chunk-MYTDK3AL.js";
25
+ import "./chunk-YQSBHWOI.js";
26
+ export {
27
+ fetchJson,
28
+ fontsAdoptCommand,
29
+ fontsCheckCommand,
30
+ fontsCommand,
31
+ fontsFetchCommand,
32
+ lookupGoogleCss
33
+ };
34
+ //# sourceMappingURL=fonts-NBIQAVQN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,168 @@
1
+ import {
2
+ exitWithServiceReadError
3
+ } from "./chunk-V6XXXEXZ.js";
4
+ import {
5
+ failWriteValidation,
6
+ keywordEntries,
7
+ microsFlag,
8
+ requireCustomerId
9
+ } from "./chunk-RR3KT2E7.js";
10
+ import "./chunk-ERSX3MKH.js";
11
+ import "./chunk-WHWNXLTD.js";
12
+ import "./chunk-4NZ47VXO.js";
13
+ import "./chunk-D5FY4FAK.js";
14
+ import "./chunk-DUPURL26.js";
15
+ import {
16
+ googleKeywordForecastRequestSchema
17
+ } from "./chunk-SEPPFM5S.js";
18
+ import {
19
+ getManagerIdForCustomer,
20
+ writeJsonEnvelope
21
+ } from "./chunk-EIGXX6KI.js";
22
+ import "./chunk-FEG6MN4H.js";
23
+ import "./chunk-TNOSX3PJ.js";
24
+ import "./chunk-AIRIT4GF.js";
25
+ import "./chunk-3VXQYDJN.js";
26
+ import "./chunk-W4SA4CMR.js";
27
+ import "./chunk-JXMZEOHV.js";
28
+ import "./chunk-UI6BKYQD.js";
29
+ import "./chunk-I2DNBEV6.js";
30
+ import {
31
+ apiPost
32
+ } from "./chunk-CUL3VB4L.js";
33
+ import "./chunk-6YYSUISH.js";
34
+ import "./chunk-I4FTS5EE.js";
35
+ import {
36
+ registerSchema
37
+ } from "./chunk-MYTDK3AL.js";
38
+ import "./chunk-YQSBHWOI.js";
39
+
40
+ // src/commands/ads/google/keywords/forecast.ts
41
+ import { defineCommand } from "citty";
42
+ var ARGS = {
43
+ "customer-id": { type: "string", description: "Google Ads customer ID (10 digits, no dashes)" },
44
+ text: {
45
+ type: "string",
46
+ description: 'Keywords to forecast, comma-separated, optional ":MATCH_TYPE" suffix each (e.g. "solar panels:PHRASE,placas solares")'
47
+ },
48
+ file: { type: "string", description: "Text file with one keyword[:MATCH_TYPE] per line" },
49
+ "match-type": { type: "string", description: "Default match type: EXACT | PHRASE | BROAD" },
50
+ "max-cpc": {
51
+ type: "string",
52
+ description: "Max CPC bid in major currency units \u2014 Manual CPC (or the ceiling under Maximize clicks)"
53
+ },
54
+ "daily-spend": {
55
+ type: "string",
56
+ description: "Daily spend in major currency units \u2014 Maximize clicks / Maximize conversions (or the daily budget under Manual CPC)"
57
+ },
58
+ strategy: {
59
+ type: "string",
60
+ description: "MANUAL_CPC | MAXIMIZE_CLICKS | MAXIMIZE_CONVERSIONS (default: MANUAL_CPC with --max-cpc alone, else MAXIMIZE_CLICKS)"
61
+ },
62
+ location: { type: "string", description: "Geo target id(s), comma-separated (see `keywords locations`)" },
63
+ language: { type: "string", description: "Language id (see `keywords languages`)" },
64
+ start: {
65
+ type: "string",
66
+ description: "First day forecast, YYYY-MM-DD (future). With --end; default: the 30 days from tomorrow"
67
+ },
68
+ end: { type: "string", description: "Last day forecast, YYYY-MM-DD (within a year)" },
69
+ currency: { type: "string", description: "Currency for the money figures (default: the account's)" }
70
+ };
71
+ registerSchema({
72
+ command: "ads.google.keywords.forecast",
73
+ description: 'Forecast clicks, cost, conversions and average CPC / CPA for a set of keywords under one bidding strategy, over a period (Keyword Planner, v25). Start here: `baker ads google keywords forecast --customer-id 1234567890 --text "solar panels:PHRASE,placas solares:EXACT" --max-cpc 1.5 --location 2724 --language 1003`. Returns { source: "keyword_planner_forecast", period, forecast_* } \u2014 Google\'s prediction for the whole period, never an account result.',
74
+ args: Object.fromEntries(
75
+ Object.entries(ARGS).map(([name, arg]) => [
76
+ name,
77
+ { type: arg.type, description: arg.description, required: false }
78
+ ])
79
+ )
80
+ });
81
+ function amount(args, flag) {
82
+ return args[flag] === void 0 ? void 0 : microsFlag(args[flag], `--${flag}`);
83
+ }
84
+ function namedStrategy(args, maxCpc, spend) {
85
+ if (typeof args.strategy === "string") return args.strategy.toUpperCase();
86
+ return maxCpc !== void 0 && spend === void 0 ? "MANUAL_CPC" : "MAXIMIZE_CLICKS";
87
+ }
88
+ function forecastBidding(args) {
89
+ const maxCpc = amount(args, "max-cpc");
90
+ const spend = amount(args, "daily-spend");
91
+ const strategy = namedStrategy(args, maxCpc, spend);
92
+ if (strategy === "MANUAL_CPC") {
93
+ if (maxCpc === void 0) return { ok: false, message: "Manual CPC needs --max-cpc" };
94
+ return { ok: true, bidding: { strategy, maxCpcBidMicros: maxCpc, ...spend ? { dailyBudgetMicros: spend } : {} } };
95
+ }
96
+ if (strategy !== "MAXIMIZE_CLICKS" && strategy !== "MAXIMIZE_CONVERSIONS") {
97
+ return {
98
+ ok: false,
99
+ message: `--strategy ${strategy} is not one Google forecasts: MANUAL_CPC | MAXIMIZE_CLICKS | MAXIMIZE_CONVERSIONS`
100
+ };
101
+ }
102
+ if (spend === void 0) return { ok: false, message: `${strategy} needs --daily-spend` };
103
+ if (strategy === "MAXIMIZE_CONVERSIONS") return { ok: true, bidding: { strategy, dailyTargetSpendMicros: spend } };
104
+ return {
105
+ ok: true,
106
+ bidding: { strategy, dailyTargetSpendMicros: spend, ...maxCpc ? { maxCpcBidCeilingMicros: maxCpc } : {} }
107
+ };
108
+ }
109
+ function hints(data) {
110
+ const out = [
111
+ `Google's prediction for ${data.period.startDate}\u2013${data.period.endDate}, not an account result: quote it as a forecast.`
112
+ ];
113
+ if (data.forecast_clicks === null && data.forecast_cost_micros === null) {
114
+ out.push(
115
+ "Google forecast nothing for these keywords \u2014 too little search volume in the chosen locations, or the bid is too low to win auctions."
116
+ );
117
+ }
118
+ return out;
119
+ }
120
+ var forecastCommand = defineCommand({
121
+ meta: {
122
+ name: "forecast",
123
+ description: `Forecast clicks, cost and conversions for keywords under one bidding strategy (Keyword Planner).
124
+
125
+ Examples:
126
+ baker ads google keywords forecast --customer-id 1234567890 --text "solar panels:PHRASE,placas solares:EXACT" --max-cpc 1.5 --location 2724 --language 1003
127
+ baker ads google keywords forecast --customer-id 1234567890 --text "crm software" --match-type BROAD --daily-spend 20 --strategy MAXIMIZE_CONVERSIONS --start 2026-11-01 --end 2026-11-30`
128
+ },
129
+ args: ARGS,
130
+ run: async ({ args, rawArgs }) => {
131
+ const customerId = requireCustomerId(args);
132
+ const keywords = keywordEntries(args, rawArgs);
133
+ const bidding = forecastBidding(args);
134
+ if (!bidding.ok) failWriteValidation(bidding.message);
135
+ const managerId = getManagerIdForCustomer(customerId);
136
+ const request = googleKeywordForecastRequestSchema.safeParse({
137
+ customerId,
138
+ ...managerId ? { managerId } : {},
139
+ adGroups: [{ keywords }],
140
+ ...args.location ? {
141
+ locationIds: String(args.location).split(",").map((id) => id.trim())
142
+ } : {},
143
+ ...args.language ? { languageId: String(args.language) } : {},
144
+ bidding: bidding.bidding,
145
+ ...args.start ? { startDate: args.start } : {},
146
+ ...args.end ? { endDate: args.end } : {},
147
+ ...args.currency ? { currencyCode: String(args.currency).toUpperCase() } : {}
148
+ });
149
+ if (!request.success) {
150
+ const issue = request.error.issues[0];
151
+ failWriteValidation(issue ? `${issue.path.join(".")}: ${issue.message}` : "Invalid forecast");
152
+ }
153
+ try {
154
+ const { data } = await apiPost(
155
+ "/api/ads/google/keywords/forecast",
156
+ request.data
157
+ );
158
+ writeJsonEnvelope({ ok: true, data, hints: hints(data) });
159
+ } catch (err) {
160
+ exitWithServiceReadError(err);
161
+ }
162
+ }
163
+ });
164
+ export {
165
+ forecastBidding,
166
+ forecastCommand
167
+ };
168
+ //# sourceMappingURL=forecast-2GJKBNBM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/google/keywords/forecast.ts"],"sourcesContent":["import {\n type GoogleForecastBidding,\n type GoogleKeywordForecastResponse,\n googleKeywordForecastRequestSchema,\n} from \"@baker/api/ads-google\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../../../client.ts\";\nimport { registerSchema } from \"../../../../schemas.ts\";\nimport { getManagerIdForCustomer } from \"../../cache.ts\";\nimport { writeJsonEnvelope } from \"../../output.ts\";\nimport { exitWithServiceReadError } from \"../service-read-errors.ts\";\nimport { failWriteValidation, keywordEntries, microsFlag, requireCustomerId } from \"../write-shared.ts\";\n\nconst ARGS = {\n \"customer-id\": { type: \"string\", description: \"Google Ads customer ID (10 digits, no dashes)\" },\n text: {\n type: \"string\",\n description:\n 'Keywords to forecast, comma-separated, optional \":MATCH_TYPE\" suffix each (e.g. \"solar panels:PHRASE,placas solares\")',\n },\n file: { type: \"string\", description: \"Text file with one keyword[:MATCH_TYPE] per line\" },\n \"match-type\": { type: \"string\", description: \"Default match type: EXACT | PHRASE | BROAD\" },\n \"max-cpc\": {\n type: \"string\",\n description: \"Max CPC bid in major currency units — Manual CPC (or the ceiling under Maximize clicks)\",\n },\n \"daily-spend\": {\n type: \"string\",\n description:\n \"Daily spend in major currency units — Maximize clicks / Maximize conversions (or the daily budget under Manual CPC)\",\n },\n strategy: {\n type: \"string\",\n description:\n \"MANUAL_CPC | MAXIMIZE_CLICKS | MAXIMIZE_CONVERSIONS (default: MANUAL_CPC with --max-cpc alone, else MAXIMIZE_CLICKS)\",\n },\n location: { type: \"string\", description: \"Geo target id(s), comma-separated (see `keywords locations`)\" },\n language: { type: \"string\", description: \"Language id (see `keywords languages`)\" },\n start: {\n type: \"string\",\n description: \"First day forecast, YYYY-MM-DD (future). With --end; default: the 30 days from tomorrow\",\n },\n end: { type: \"string\", description: \"Last day forecast, YYYY-MM-DD (within a year)\" },\n currency: { type: \"string\", description: \"Currency for the money figures (default: the account's)\" },\n} as const;\n\nregisterSchema({\n command: \"ads.google.keywords.forecast\",\n description:\n 'Forecast clicks, cost, conversions and average CPC / CPA for a set of keywords under one bidding strategy, over a period (Keyword Planner, v25). Start here: `baker ads google keywords forecast --customer-id 1234567890 --text \"solar panels:PHRASE,placas solares:EXACT\" --max-cpc 1.5 --location 2724 --language 1003`. Returns { source: \"keyword_planner_forecast\", period, forecast_* } — Google\\'s prediction for the whole period, never an account result.',\n args: Object.fromEntries(\n Object.entries(ARGS).map(([name, arg]) => [\n name,\n { type: arg.type, description: arg.description, required: false },\n ]),\n ),\n});\n\ntype BiddingResult = { ok: true; bidding: GoogleForecastBidding } | { ok: false; message: string };\n\nfunction amount(args: Record<string, unknown>, flag: \"max-cpc\" | \"daily-spend\"): number | undefined {\n return args[flag] === undefined ? undefined : microsFlag(args[flag], `--${flag}`);\n}\n\nfunction namedStrategy(args: Record<string, unknown>, maxCpc: number | undefined, spend: number | undefined): string {\n if (typeof args.strategy === \"string\") return args.strategy.toUpperCase();\n return maxCpc !== undefined && spend === undefined ? \"MANUAL_CPC\" : \"MAXIMIZE_CLICKS\";\n}\n\n/** The forecast's one bidding strategy, read off the flags. */\nexport function forecastBidding(args: Record<string, unknown>): BiddingResult {\n const maxCpc = amount(args, \"max-cpc\");\n const spend = amount(args, \"daily-spend\");\n const strategy = namedStrategy(args, maxCpc, spend);\n if (strategy === \"MANUAL_CPC\") {\n if (maxCpc === undefined) return { ok: false, message: \"Manual CPC needs --max-cpc\" };\n return { ok: true, bidding: { strategy, maxCpcBidMicros: maxCpc, ...(spend ? { dailyBudgetMicros: spend } : {}) } };\n }\n if (strategy !== \"MAXIMIZE_CLICKS\" && strategy !== \"MAXIMIZE_CONVERSIONS\") {\n return {\n ok: false,\n message: `--strategy ${strategy} is not one Google forecasts: MANUAL_CPC | MAXIMIZE_CLICKS | MAXIMIZE_CONVERSIONS`,\n };\n }\n if (spend === undefined) return { ok: false, message: `${strategy} needs --daily-spend` };\n if (strategy === \"MAXIMIZE_CONVERSIONS\") return { ok: true, bidding: { strategy, dailyTargetSpendMicros: spend } };\n return {\n ok: true,\n bidding: { strategy, dailyTargetSpendMicros: spend, ...(maxCpc ? { maxCpcBidCeilingMicros: maxCpc } : {}) },\n };\n}\n\nfunction hints(data: GoogleKeywordForecastResponse): string[] {\n const out = [\n `Google's prediction for ${data.period.startDate}–${data.period.endDate}, not an account result: quote it as a forecast.`,\n ];\n if (data.forecast_clicks === null && data.forecast_cost_micros === null) {\n out.push(\n \"Google forecast nothing for these keywords — too little search volume in the chosen locations, or the bid is too low to win auctions.\",\n );\n }\n return out;\n}\n\nexport const forecastCommand = defineCommand({\n meta: {\n name: \"forecast\",\n description: `Forecast clicks, cost and conversions for keywords under one bidding strategy (Keyword Planner).\n\nExamples:\n baker ads google keywords forecast --customer-id 1234567890 --text \"solar panels:PHRASE,placas solares:EXACT\" --max-cpc 1.5 --location 2724 --language 1003\n baker ads google keywords forecast --customer-id 1234567890 --text \"crm software\" --match-type BROAD --daily-spend 20 --strategy MAXIMIZE_CONVERSIONS --start 2026-11-01 --end 2026-11-30`,\n },\n args: ARGS,\n run: async ({ args, rawArgs }) => {\n const customerId = requireCustomerId(args);\n const keywords = keywordEntries(args, rawArgs);\n const bidding = forecastBidding(args);\n if (!bidding.ok) failWriteValidation(bidding.message);\n const managerId = getManagerIdForCustomer(customerId);\n const request = googleKeywordForecastRequestSchema.safeParse({\n customerId,\n ...(managerId ? { managerId } : {}),\n adGroups: [{ keywords }],\n ...(args.location\n ? {\n locationIds: String(args.location)\n .split(\",\")\n .map((id) => id.trim()),\n }\n : {}),\n ...(args.language ? { languageId: String(args.language) } : {}),\n bidding: bidding.bidding,\n ...(args.start ? { startDate: args.start } : {}),\n ...(args.end ? { endDate: args.end } : {}),\n ...(args.currency ? { currencyCode: String(args.currency).toUpperCase() } : {}),\n });\n if (!request.success) {\n const issue = request.error.issues[0];\n failWriteValidation(issue ? `${issue.path.join(\".\")}: ${issue.message}` : \"Invalid forecast\");\n }\n try {\n const { data } = await apiPost<{ ok: true; data: GoogleKeywordForecastResponse }>(\n \"/api/ads/google/keywords/forecast\",\n request.data,\n );\n writeJsonEnvelope({ ok: true, data, hints: hints(data) });\n } catch (err) {\n exitWithServiceReadError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,104 @@
1
+ import {
2
+ handleLinkedinError,
3
+ resolveAccountIdArg
4
+ } from "./chunk-IREMSVKW.js";
5
+ import {
6
+ writeAdsJson
7
+ } from "./chunk-EIGXX6KI.js";
8
+ import {
9
+ NO_CACHE_ARG
10
+ } from "./chunk-ZNQRDLSS.js";
11
+ import "./chunk-O6XZIQXZ.js";
12
+ import "./chunk-GXDLWBOY.js";
13
+ import "./chunk-GIWHHCD6.js";
14
+ import "./chunk-UI6BKYQD.js";
15
+ import "./chunk-I2DNBEV6.js";
16
+ import {
17
+ apiPost
18
+ } from "./chunk-CUL3VB4L.js";
19
+ import "./chunk-6YYSUISH.js";
20
+ import "./chunk-I4FTS5EE.js";
21
+ import "./chunk-MYTDK3AL.js";
22
+ import "./chunk-YQSBHWOI.js";
23
+
24
+ // src/commands/ads/linkedin/forecast.ts
25
+ import { readFileSync } from "fs";
26
+ import { defineCommand } from "citty";
27
+ function loadTargeting(args) {
28
+ const inline = args.targeting;
29
+ if (inline) {
30
+ try {
31
+ return JSON.parse(inline);
32
+ } catch {
33
+ handleLinkedinError(new Error("--targeting must be valid JSON."));
34
+ }
35
+ }
36
+ const file = args["targeting-file"];
37
+ if (file) {
38
+ try {
39
+ return JSON.parse(readFileSync(file, "utf-8"));
40
+ } catch (e) {
41
+ handleLinkedinError(
42
+ new Error(`Failed to read --targeting-file: ${e instanceof Error ? e.message : "I/O error"}`)
43
+ );
44
+ }
45
+ }
46
+ handleLinkedinError(new Error("Pass --targeting-file <path> or --targeting '{...JSON...}'"));
47
+ }
48
+ function parseMoney(raw) {
49
+ if (!raw) return void 0;
50
+ const m = /^(\d+(?:\.\d+)?)(?:\s+([A-Z]{3}))?$/.exec(raw.trim());
51
+ if (!m) {
52
+ handleLinkedinError(new Error(`Invalid money "${raw}". Use "100" or "100 EUR".`));
53
+ }
54
+ return { amount: m[1] ?? "0", currencyCode: m[2] ?? "USD" };
55
+ }
56
+ var forecastCommand = defineCommand({
57
+ meta: {
58
+ name: "forecast",
59
+ description: `Forecast reach + impressions + clicks + spend for a hypothetical campaign.
60
+
61
+ Wraps /rest/adSupplyForecasts. Useful for greenfield (\xA714) \u2014 answers
62
+ "if we launch with this budget + targeting + objective, what's the expected delivery?"
63
+
64
+ Examples:
65
+ baker ads linkedin forecast --account-id 503001492 --objective LEAD_GENERATION --cost-type CPC \\
66
+ --daily-budget "200 USD" --bid "8 USD" --targeting-file targeting.json`
67
+ },
68
+ args: {
69
+ "account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
70
+ "account-urn": { type: "string", description: "Alias for --account-id" },
71
+ objective: { type: "string", description: "Objective type", required: true },
72
+ "cost-type": { type: "string", description: "CPC | CPM | CPV | CPS", required: true },
73
+ "daily-budget": { type: "string", description: "e.g. '200 USD' or '200'" },
74
+ "total-budget": { type: "string", description: "e.g. '6000 USD'" },
75
+ bid: { type: "string", description: "Bid e.g. '8 USD'" },
76
+ targeting: { type: "string", description: "Inline JSON targetingCriteria" },
77
+ "targeting-file": { type: "string", description: "Path to JSON file with targetingCriteria" },
78
+ "no-cache": NO_CACHE_ARG,
79
+ output: { type: "string", description: "json", default: "json" }
80
+ },
81
+ run: async ({ args }) => {
82
+ const accountId = resolveAccountIdArg(args);
83
+ const targetingCriteria = loadTargeting(args);
84
+ try {
85
+ const data = await apiPost("/api/ads/linkedin/forecast", {
86
+ accountId,
87
+ objectiveType: String(args.objective),
88
+ costType: String(args["cost-type"]).toUpperCase(),
89
+ targetingCriteria,
90
+ dailyBudget: parseMoney(args["daily-budget"]),
91
+ totalBudget: parseMoney(args["total-budget"]),
92
+ bid: parseMoney(args.bid),
93
+ skipCache: Boolean(args["no-cache"])
94
+ });
95
+ writeAdsJson({ ok: true, data });
96
+ } catch (err) {
97
+ handleLinkedinError(err);
98
+ }
99
+ }
100
+ });
101
+ export {
102
+ forecastCommand
103
+ };
104
+ //# sourceMappingURL=forecast-76MUJBPO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/linkedin/forecast.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiPost } from \"../../../client.ts\";\nimport { writeAdsJson } from \"../output.ts\";\nimport { handleLinkedinError, resolveAccountIdArg } from \"./shared.ts\";\n\ninterface ForecastResult {\n impressions?: { min?: number; max?: number };\n reach?: { min?: number; max?: number };\n clicks?: { min?: number; max?: number };\n costInLocalCurrency?: { min?: string; max?: string };\n costInUsd?: { min?: string; max?: string };\n ctr?: { min?: number; max?: number };\n}\n\nfunction loadTargeting(args: Record<string, unknown>): unknown {\n const inline = args.targeting as string | undefined;\n if (inline) {\n try {\n return JSON.parse(inline);\n } catch {\n handleLinkedinError(new Error(\"--targeting must be valid JSON.\"));\n }\n }\n const file = args[\"targeting-file\"] as string | undefined;\n if (file) {\n try {\n return JSON.parse(readFileSync(file, \"utf-8\"));\n } catch (e) {\n handleLinkedinError(\n new Error(`Failed to read --targeting-file: ${e instanceof Error ? e.message : \"I/O error\"}`),\n );\n }\n }\n handleLinkedinError(new Error(\"Pass --targeting-file <path> or --targeting '{...JSON...}'\"));\n}\n\nfunction parseMoney(raw: string | undefined): { amount: string; currencyCode: string } | undefined {\n if (!raw) return undefined;\n // Accept either \"100 USD\" or just \"100\" (defaults to USD).\n const m = /^(\\d+(?:\\.\\d+)?)(?:\\s+([A-Z]{3}))?$/.exec(raw.trim());\n if (!m) {\n handleLinkedinError(new Error(`Invalid money \"${raw}\". Use \"100\" or \"100 EUR\".`));\n }\n return { amount: m[1] ?? \"0\", currencyCode: m[2] ?? \"USD\" };\n}\n\nexport const forecastCommand = defineCommand({\n meta: {\n name: \"forecast\",\n description: `Forecast reach + impressions + clicks + spend for a hypothetical campaign.\n\nWraps /rest/adSupplyForecasts. Useful for greenfield (§14) — answers\n\"if we launch with this budget + targeting + objective, what's the expected delivery?\"\n\nExamples:\n baker ads linkedin forecast --account-id 503001492 --objective LEAD_GENERATION --cost-type CPC \\\\\n --daily-budget \"200 USD\" --bid \"8 USD\" --targeting-file targeting.json`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n objective: { type: \"string\", description: \"Objective type\", required: true },\n \"cost-type\": { type: \"string\", description: \"CPC | CPM | CPV | CPS\", required: true },\n \"daily-budget\": { type: \"string\", description: \"e.g. '200 USD' or '200'\" },\n \"total-budget\": { type: \"string\", description: \"e.g. '6000 USD'\" },\n bid: { type: \"string\", description: \"Bid e.g. '8 USD'\" },\n targeting: { type: \"string\", description: \"Inline JSON targetingCriteria\" },\n \"targeting-file\": { type: \"string\", description: \"Path to JSON file with targetingCriteria\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json\", default: \"json\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n const targetingCriteria = loadTargeting(args);\n try {\n const data = await apiPost<ForecastResult>(\"/api/ads/linkedin/forecast\", {\n accountId,\n objectiveType: String(args.objective),\n costType: String(args[\"cost-type\"]).toUpperCase(),\n targetingCriteria,\n dailyBudget: parseMoney(args[\"daily-budget\"] as string | undefined),\n totalBudget: parseMoney(args[\"total-budget\"] as string | undefined),\n bid: parseMoney(args.bid as string | undefined),\n skipCache: Boolean(args[\"no-cache\"]),\n });\n writeAdsJson({ ok: true, data });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAe9B,SAAS,cAAc,MAAwC;AAC7D,QAAM,SAAS,KAAK;AACpB,MAAI,QAAQ;AACV,QAAI;AACF,aAAO,KAAK,MAAM,MAAM;AAAA,IAC1B,QAAQ;AACN,0BAAoB,IAAI,MAAM,iCAAiC,CAAC;AAAA,IAClE;AAAA,EACF;AACA,QAAM,OAAO,KAAK,gBAAgB;AAClC,MAAI,MAAM;AACR,QAAI;AACF,aAAO,KAAK,MAAM,aAAa,MAAM,OAAO,CAAC;AAAA,IAC/C,SAAS,GAAG;AACV;AAAA,QACE,IAAI,MAAM,oCAAoC,aAAa,QAAQ,EAAE,UAAU,WAAW,EAAE;AAAA,MAC9F;AAAA,IACF;AAAA,EACF;AACA,sBAAoB,IAAI,MAAM,4DAA4D,CAAC;AAC7F;AAEA,SAAS,WAAW,KAA+E;AACjG,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,IAAI,sCAAsC,KAAK,IAAI,KAAK,CAAC;AAC/D,MAAI,CAAC,GAAG;AACN,wBAAoB,IAAI,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAAA,EAClF;AACA,SAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC,KAAK,MAAM;AAC5D;AAEO,IAAM,kBAAkB,cAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQf;AAAA,EACA,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,kDAAkD;AAAA,IAC/F,eAAe,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,IACvE,WAAW,EAAE,MAAM,UAAU,aAAa,kBAAkB,UAAU,KAAK;AAAA,IAC3E,aAAa,EAAE,MAAM,UAAU,aAAa,yBAAyB,UAAU,KAAK;AAAA,IACpF,gBAAgB,EAAE,MAAM,UAAU,aAAa,0BAA0B;AAAA,IACzE,gBAAgB,EAAE,MAAM,UAAU,aAAa,kBAAkB;AAAA,IACjE,KAAK,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,IACvD,WAAW,EAAE,MAAM,UAAU,aAAa,gCAAgC;AAAA,IAC1E,kBAAkB,EAAE,MAAM,UAAU,aAAa,2CAA2C;AAAA,IAC5F,YAAY;AAAA,IACZ,QAAQ,EAAE,MAAM,UAAU,aAAa,QAAQ,SAAS,OAAO;AAAA,EACjE;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,oBAAoB,IAAI;AAC1C,UAAM,oBAAoB,cAAc,IAAI;AAC5C,QAAI;AACF,YAAM,OAAO,MAAM,QAAwB,8BAA8B;AAAA,QACvE;AAAA,QACA,eAAe,OAAO,KAAK,SAAS;AAAA,QACpC,UAAU,OAAO,KAAK,WAAW,CAAC,EAAE,YAAY;AAAA,QAChD;AAAA,QACA,aAAa,WAAW,KAAK,cAAc,CAAuB;AAAA,QAClE,aAAa,WAAW,KAAK,cAAc,CAAuB;AAAA,QAClE,KAAK,WAAW,KAAK,GAAyB;AAAA,QAC9C,WAAW,QAAQ,KAAK,UAAU,CAAC;AAAA,MACrC,CAAC;AACD,mBAAa,EAAE,IAAI,MAAM,KAAK,CAAC;AAAA,IACjC,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}