@koda-sl/baker-cli 0.387.0 → 0.389.0-dev.8065ad8f0
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.
- package/README.md +1090 -211
- package/canvas/tiktok-captions-composition/index.html +5 -6
- package/canvas/tiktok-captions-composition/meta.json +5 -0
- package/dist/account-CLOKMTTC.js +49 -0
- package/dist/account-CLOKMTTC.js.map +1 -0
- package/dist/account-V5Y2QHAK.js +79 -0
- package/dist/account-V5Y2QHAK.js.map +1 -0
- package/dist/account-XFK6VX2R.js +80 -0
- package/dist/account-XFK6VX2R.js.map +1 -0
- package/dist/account-reads-S5VXX2QU.js +218 -0
- package/dist/account-reads-S5VXX2QU.js.map +1 -0
- package/dist/account-writes-Y7EQXDXF.js +66 -0
- package/dist/account-writes-Y7EQXDXF.js.map +1 -0
- package/dist/accounts-7YD457YN.js +114 -0
- package/dist/accounts-7YD457YN.js.map +1 -0
- package/dist/accounts-BJ3X5JQT.js +115 -0
- package/dist/accounts-BJ3X5JQT.js.map +1 -0
- package/dist/accounts-LOJ4WLIX.js +77 -0
- package/dist/accounts-LOJ4WLIX.js.map +1 -0
- package/dist/accounts-RYBDLQ6H.js +75 -0
- package/dist/accounts-RYBDLQ6H.js.map +1 -0
- package/dist/accounts-UO4XBWM2.js +611 -0
- package/dist/accounts-UO4XBWM2.js.map +1 -0
- package/dist/actions-3AW3R63U.js +55 -0
- package/dist/actions-3AW3R63U.js.map +1 -0
- package/dist/active-entities-R6GZIO6Z.js +103 -0
- package/dist/active-entities-R6GZIO6Z.js.map +1 -0
- package/dist/activities-ESBF3GFS.js +74 -0
- package/dist/activities-ESBF3GFS.js.map +1 -0
- package/dist/ad-group-writes-I225OYDZ.js +170 -0
- package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
- package/dist/ad-groups-O35MWNF6.js +68 -0
- package/dist/ad-groups-O35MWNF6.js.map +1 -0
- package/dist/ad-writes-SS5YZO5W.js +174 -0
- package/dist/ad-writes-SS5YZO5W.js.map +1 -0
- package/dist/add-43DUOVNR.js +104 -0
- package/dist/add-43DUOVNR.js.map +1 -0
- package/dist/add-IE5WDELB.js +302 -0
- package/dist/add-IE5WDELB.js.map +1 -0
- package/dist/add-QZHAWUBA.js +97 -0
- package/dist/add-QZHAWUBA.js.map +1 -0
- package/dist/add-TGQIVVXH.js +105 -0
- package/dist/add-TGQIVVXH.js.map +1 -0
- package/dist/add-accounts-6QYPOPR2.js +91 -0
- package/dist/add-accounts-6QYPOPR2.js.map +1 -0
- package/dist/ads-AUSRB4GU.js +128 -0
- package/dist/ads-AUSRB4GU.js.map +1 -0
- package/dist/ads-COYOTEKE.js +77 -0
- package/dist/ads-COYOTEKE.js.map +1 -0
- package/dist/ads-MALHYD2D.js +40 -0
- package/dist/ads-MALHYD2D.js.map +1 -0
- package/dist/ads-XZCMSPM5.js +113 -0
- package/dist/ads-XZCMSPM5.js.map +1 -0
- package/dist/adsets-AKR75THA.js +176 -0
- package/dist/adsets-AKR75THA.js.map +1 -0
- package/dist/advertisers-52FMMBTQ.js +120 -0
- package/dist/advertisers-52FMMBTQ.js.map +1 -0
- package/dist/advertisers-BCGKUMEH.js +125 -0
- package/dist/advertisers-BCGKUMEH.js.map +1 -0
- package/dist/analytics-JPDBKETM.js +1980 -0
- package/dist/analytics-JPDBKETM.js.map +1 -0
- package/dist/analytics-YVQ6H4BG.js +433 -0
- package/dist/analytics-YVQ6H4BG.js.map +1 -0
- package/dist/animate-JXIT77Y5.js +480 -0
- package/dist/animate-JXIT77Y5.js.map +1 -0
- package/dist/assign-66NTWTR2.js +77 -0
- package/dist/assign-66NTWTR2.js.map +1 -0
- package/dist/audience-size-LVQJWQAS.js +94 -0
- package/dist/audience-size-LVQJWQAS.js.map +1 -0
- package/dist/audiences-DC3IOG34.js +85 -0
- package/dist/audiences-DC3IOG34.js.map +1 -0
- package/dist/audiences-NEW3LLQR.js +268 -0
- package/dist/audiences-NEW3LLQR.js.map +1 -0
- package/dist/audiences-NYGMBGQ3.js +79 -0
- package/dist/audiences-NYGMBGQ3.js.map +1 -0
- package/dist/audit-UIPMTI5C.js +88 -0
- package/dist/audit-UIPMTI5C.js.map +1 -0
- package/dist/audit-XGN2OFLN.js +151 -0
- package/dist/audit-XGN2OFLN.js.map +1 -0
- package/dist/autocomplete-LVPDV3JE.js +111 -0
- package/dist/autocomplete-LVPDV3JE.js.map +1 -0
- package/dist/avatars-S6NSLMJK.js +38 -0
- package/dist/avatars-S6NSLMJK.js.map +1 -0
- package/dist/bid-pricing-2LYULXU2.js +99 -0
- package/dist/bid-pricing-2LYULXU2.js.map +1 -0
- package/dist/brand-WWHUZ72R.js +22 -0
- package/dist/brand-WWHUZ72R.js.map +1 -0
- package/dist/brief-XY3TFWBC.js +492 -0
- package/dist/brief-XY3TFWBC.js.map +1 -0
- package/dist/businesses-J7OP7MSK.js +53 -0
- package/dist/businesses-J7OP7MSK.js.map +1 -0
- package/dist/campaign-groups-N4TZ2F3L.js +95 -0
- package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
- package/dist/campaign-writes-5XA727KI.js +170 -0
- package/dist/campaign-writes-5XA727KI.js.map +1 -0
- package/dist/campaign-writes-7YFRQIQT.js +165 -0
- package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
- package/dist/campaigns-JPYNVFQI.js +76 -0
- package/dist/campaigns-JPYNVFQI.js.map +1 -0
- package/dist/campaigns-L43ZUKAI.js +107 -0
- package/dist/campaigns-L43ZUKAI.js.map +1 -0
- package/dist/campaigns-OD7Z332M.js +109 -0
- package/dist/campaigns-OD7Z332M.js.map +1 -0
- package/dist/campaigns-R4DXIR2Q.js +110 -0
- package/dist/campaigns-R4DXIR2Q.js.map +1 -0
- package/dist/canvas-J7SLIVL7.js +46 -0
- package/dist/canvas-J7SLIVL7.js.map +1 -0
- package/dist/capabilities-FVTZAFPV.js +144 -0
- package/dist/capabilities-FVTZAFPV.js.map +1 -0
- package/dist/cards-7H32TNMO.js +85 -0
- package/dist/cards-7H32TNMO.js.map +1 -0
- package/dist/catalog-OTICZPJA.js +64 -0
- package/dist/catalog-OTICZPJA.js.map +1 -0
- package/dist/catalogs-ABCQLCDU.js +128 -0
- package/dist/catalogs-ABCQLCDU.js.map +1 -0
- package/dist/changes-7ZIGNUW6.js +135 -0
- package/dist/changes-7ZIGNUW6.js.map +1 -0
- package/dist/chatgpt-B3NHRJUE.js +47 -0
- package/dist/chatgpt-B3NHRJUE.js.map +1 -0
- package/dist/chats-E7DBRHBF.js +262 -0
- package/dist/chats-E7DBRHBF.js.map +1 -0
- package/dist/chunk-2CV7LX23.js +474 -0
- package/dist/chunk-2CV7LX23.js.map +1 -0
- package/dist/chunk-2HCI5BXB.js +479 -0
- package/dist/chunk-2HCI5BXB.js.map +1 -0
- package/dist/chunk-2SQJL7ZN.js +56 -0
- package/dist/chunk-2SQJL7ZN.js.map +1 -0
- package/dist/chunk-2Y5V23PU.js +29 -0
- package/dist/chunk-2Y5V23PU.js.map +1 -0
- package/dist/chunk-32CPGJPL.js +149 -0
- package/dist/chunk-32CPGJPL.js.map +1 -0
- package/dist/chunk-3ACMDRSE.js +39 -0
- package/dist/chunk-3ACMDRSE.js.map +1 -0
- package/dist/chunk-3CIXGQJS.js +150 -0
- package/dist/chunk-3CIXGQJS.js.map +1 -0
- package/dist/chunk-3U7TDBIB.js +275 -0
- package/dist/chunk-3U7TDBIB.js.map +1 -0
- package/dist/chunk-3UDSYYND.js +42 -0
- package/dist/chunk-3UDSYYND.js.map +1 -0
- package/dist/chunk-3ZWWXAQZ.js +150 -0
- package/dist/chunk-3ZWWXAQZ.js.map +1 -0
- package/dist/chunk-4MH6LONO.js +274 -0
- package/dist/chunk-4MH6LONO.js.map +1 -0
- package/dist/chunk-4NZ47VXO.js +137 -0
- package/dist/chunk-4NZ47VXO.js.map +1 -0
- package/dist/chunk-564AEU2Q.js +541 -0
- package/dist/chunk-564AEU2Q.js.map +1 -0
- package/dist/chunk-5HYSKH77.js +315 -0
- package/dist/chunk-5HYSKH77.js.map +1 -0
- package/dist/chunk-5MBPIONY.js +29 -0
- package/dist/chunk-5MBPIONY.js.map +1 -0
- package/dist/chunk-5OVOLYY3.js +74 -0
- package/dist/chunk-5OVOLYY3.js.map +1 -0
- package/dist/chunk-66USKCVY.js +4410 -0
- package/dist/chunk-66USKCVY.js.map +1 -0
- package/dist/chunk-6I7SYEYN.js +166 -0
- package/dist/chunk-6I7SYEYN.js.map +1 -0
- package/dist/chunk-6O7ISBC7.js +65 -0
- package/dist/chunk-6O7ISBC7.js.map +1 -0
- package/dist/chunk-752S7JF6.js +35 -0
- package/dist/chunk-752S7JF6.js.map +1 -0
- package/dist/chunk-77DN7R35.js +228 -0
- package/dist/chunk-77DN7R35.js.map +1 -0
- package/dist/chunk-7F7MFMLI.js +175 -0
- package/dist/chunk-7F7MFMLI.js.map +1 -0
- package/dist/chunk-7THBBTJJ.js +183 -0
- package/dist/chunk-7THBBTJJ.js.map +1 -0
- package/dist/chunk-7XU3HKMX.js +1599 -0
- package/dist/chunk-7XU3HKMX.js.map +1 -0
- package/dist/chunk-A2CBZLQ6.js +111 -0
- package/dist/chunk-A2CBZLQ6.js.map +1 -0
- package/dist/chunk-AFJGYJ7Z.js +45 -0
- package/dist/chunk-AFJGYJ7Z.js.map +1 -0
- package/dist/chunk-AR7PU7BB.js +76 -0
- package/dist/chunk-AR7PU7BB.js.map +1 -0
- package/dist/chunk-ASL7JFBD.js +96 -0
- package/dist/chunk-ASL7JFBD.js.map +1 -0
- package/dist/chunk-AUSKKFVH.js +84 -0
- package/dist/chunk-AUSKKFVH.js.map +1 -0
- package/dist/chunk-B52DCYL2.js +159 -0
- package/dist/chunk-B52DCYL2.js.map +1 -0
- package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
- package/dist/chunk-BVM5IRZW.js.map +1 -0
- package/dist/chunk-CAMX6OHF.js +3182 -0
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/chunk-CYBLKMXQ.js +310 -0
- package/dist/chunk-CYBLKMXQ.js.map +1 -0
- package/dist/chunk-CZENWCBS.js +333 -0
- package/dist/chunk-CZENWCBS.js.map +1 -0
- package/dist/chunk-D5FY4FAK.js +24 -0
- package/dist/chunk-D5FY4FAK.js.map +1 -0
- package/dist/chunk-DGCUPJZD.js +39 -0
- package/dist/chunk-DGCUPJZD.js.map +1 -0
- package/dist/chunk-DNCLWSHO.js +41 -0
- package/dist/chunk-DNCLWSHO.js.map +1 -0
- package/dist/chunk-DX4GIDO7.js +296 -0
- package/dist/chunk-DX4GIDO7.js.map +1 -0
- package/dist/chunk-EDLZGTGN.js +216 -0
- package/dist/chunk-EDLZGTGN.js.map +1 -0
- package/dist/chunk-EDNKALM6.js +304 -0
- package/dist/chunk-EDNKALM6.js.map +1 -0
- package/dist/chunk-EDNX3AOS.js +76 -0
- package/dist/chunk-EDNX3AOS.js.map +1 -0
- package/dist/chunk-EF5DP6EB.js +52 -0
- package/dist/chunk-EF5DP6EB.js.map +1 -0
- package/dist/chunk-ERSX3MKH.js +34 -0
- package/dist/chunk-ERSX3MKH.js.map +1 -0
- package/dist/chunk-F3IJSR7O.js +346 -0
- package/dist/chunk-F3IJSR7O.js.map +1 -0
- package/dist/chunk-FKOECEVC.js +126 -0
- package/dist/chunk-FKOECEVC.js.map +1 -0
- package/dist/chunk-FWT55B3O.js +509 -0
- package/dist/chunk-FWT55B3O.js.map +1 -0
- package/dist/chunk-FYWWTMXP.js +2902 -0
- package/dist/chunk-FYWWTMXP.js.map +1 -0
- package/dist/chunk-FZGCAW46.js +64 -0
- package/dist/chunk-FZGCAW46.js.map +1 -0
- package/dist/chunk-G7AFVTUS.js +106 -0
- package/dist/chunk-G7AFVTUS.js.map +1 -0
- package/dist/chunk-GIW7ABMM.js +74 -0
- package/dist/chunk-GIW7ABMM.js.map +1 -0
- package/dist/chunk-GIWHHCD6.js +145 -0
- package/dist/chunk-GIWHHCD6.js.map +1 -0
- package/dist/chunk-GRQ2AXDX.js +9 -0
- package/dist/chunk-GRQ2AXDX.js.map +1 -0
- package/dist/chunk-GXDLWBOY.js +73 -0
- package/dist/chunk-GXDLWBOY.js.map +1 -0
- package/dist/chunk-GYABNLWW.js +629 -0
- package/dist/chunk-GYABNLWW.js.map +1 -0
- package/dist/chunk-H7MLHG2I.js +94 -0
- package/dist/chunk-H7MLHG2I.js.map +1 -0
- package/dist/chunk-H7XVKLIY.js +206 -0
- package/dist/chunk-H7XVKLIY.js.map +1 -0
- package/dist/chunk-HAE4WWFQ.js +455 -0
- package/dist/chunk-HAE4WWFQ.js.map +1 -0
- package/dist/chunk-HDHWIEJJ.js +136 -0
- package/dist/chunk-HDHWIEJJ.js.map +1 -0
- package/dist/chunk-HJTIBTF7.js +98 -0
- package/dist/chunk-HJTIBTF7.js.map +1 -0
- package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
- package/dist/chunk-HLXWKMTK.js.map +1 -0
- package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
- package/dist/chunk-HREWXNTO.js.map +1 -0
- package/dist/chunk-HYXKRNRV.js +176 -0
- package/dist/chunk-HYXKRNRV.js.map +1 -0
- package/dist/chunk-I3DIZWN5.js +97 -0
- package/dist/chunk-I3DIZWN5.js.map +1 -0
- package/dist/chunk-IJMWEO4P.js +57 -0
- package/dist/chunk-IJMWEO4P.js.map +1 -0
- package/dist/chunk-IOCSDFF2.js +23992 -0
- package/dist/chunk-IOCSDFF2.js.map +1 -0
- package/dist/chunk-IVIJJXXT.js +62 -0
- package/dist/chunk-IVIJJXXT.js.map +1 -0
- package/dist/chunk-J57GWTPK.js +106 -0
- package/dist/chunk-J57GWTPK.js.map +1 -0
- package/dist/chunk-JPK34QPS.js +134 -0
- package/dist/chunk-JPK34QPS.js.map +1 -0
- package/dist/chunk-JRCFCIE3.js +188 -0
- package/dist/chunk-JRCFCIE3.js.map +1 -0
- package/dist/chunk-JUAIGJ2A.js +76 -0
- package/dist/chunk-JUAIGJ2A.js.map +1 -0
- package/dist/chunk-K5OQES4V.js +58 -0
- package/dist/chunk-K5OQES4V.js.map +1 -0
- package/dist/chunk-KBS5GH4T.js +1626 -0
- package/dist/chunk-KBS5GH4T.js.map +1 -0
- package/dist/chunk-KIGGMKAE.js +66 -0
- package/dist/chunk-KIGGMKAE.js.map +1 -0
- package/dist/chunk-KKJ4KJCW.js +29 -0
- package/dist/chunk-KKJ4KJCW.js.map +1 -0
- package/dist/chunk-KLK6KQLQ.js +55 -0
- package/dist/chunk-KLK6KQLQ.js.map +1 -0
- package/dist/chunk-KXGG6EQM.js +382 -0
- package/dist/chunk-KXGG6EQM.js.map +1 -0
- package/dist/chunk-KXRKPZZY.js +169 -0
- package/dist/chunk-KXRKPZZY.js.map +1 -0
- package/dist/chunk-KZUHRZ2C.js +5187 -0
- package/dist/chunk-KZUHRZ2C.js.map +1 -0
- package/dist/chunk-L45A3IYV.js +1079 -0
- package/dist/chunk-L45A3IYV.js.map +1 -0
- package/dist/chunk-LA6PPSNA.js +65 -0
- package/dist/chunk-LA6PPSNA.js.map +1 -0
- package/dist/chunk-LEIQAHWF.js +25 -0
- package/dist/chunk-LEIQAHWF.js.map +1 -0
- package/dist/chunk-LERWCRY5.js +297 -0
- package/dist/chunk-LERWCRY5.js.map +1 -0
- package/dist/chunk-LLPFY3NI.js +207 -0
- package/dist/chunk-LLPFY3NI.js.map +1 -0
- package/dist/chunk-M6UNISGO.js +66 -0
- package/dist/chunk-M6UNISGO.js.map +1 -0
- package/dist/chunk-MDATIJPM.js +92 -0
- package/dist/chunk-MDATIJPM.js.map +1 -0
- package/dist/chunk-MGKHFGLV.js +75 -0
- package/dist/chunk-MGKHFGLV.js.map +1 -0
- package/dist/chunk-MZWC6HHA.js +455 -0
- package/dist/chunk-MZWC6HHA.js.map +1 -0
- package/dist/chunk-N3XJ434P.js +197 -0
- package/dist/chunk-N3XJ434P.js.map +1 -0
- package/dist/chunk-NFSLRRIE.js +77 -0
- package/dist/chunk-NFSLRRIE.js.map +1 -0
- package/dist/chunk-NHU33T2S.js +60 -0
- package/dist/chunk-NHU33T2S.js.map +1 -0
- package/dist/chunk-NJEZM4OB.js +51 -0
- package/dist/chunk-NJEZM4OB.js.map +1 -0
- package/dist/chunk-O6QKCJE4.js +455 -0
- package/dist/chunk-O6QKCJE4.js.map +1 -0
- package/dist/chunk-OFFAMC5H.js +225 -0
- package/dist/chunk-OFFAMC5H.js.map +1 -0
- package/dist/chunk-OHGTCFFE.js +57 -0
- package/dist/chunk-OHGTCFFE.js.map +1 -0
- package/dist/chunk-P4NSJS54.js +20 -0
- package/dist/chunk-P4NSJS54.js.map +1 -0
- package/dist/chunk-P5T7OZKV.js +26 -0
- package/dist/chunk-P5T7OZKV.js.map +1 -0
- package/dist/chunk-PFBQERWX.js +10 -0
- package/dist/chunk-PFBQERWX.js.map +1 -0
- package/dist/chunk-PUPEGICD.js +103 -0
- package/dist/chunk-PUPEGICD.js.map +1 -0
- package/dist/chunk-Q6ULQMWG.js +41 -0
- package/dist/chunk-Q6ULQMWG.js.map +1 -0
- package/dist/chunk-QO23YHLK.js +84 -0
- package/dist/chunk-QO23YHLK.js.map +1 -0
- package/dist/chunk-QSGIWV4P.js +337 -0
- package/dist/chunk-QSGIWV4P.js.map +1 -0
- package/dist/chunk-R4Y5P3PB.js +19 -0
- package/dist/chunk-R4Y5P3PB.js.map +1 -0
- package/dist/chunk-R5OQM7FF.js +179 -0
- package/dist/chunk-R5OQM7FF.js.map +1 -0
- package/dist/chunk-RODLBWIR.js +592 -0
- package/dist/chunk-RODLBWIR.js.map +1 -0
- package/dist/chunk-RY7TYEIX.js +504 -0
- package/dist/chunk-RY7TYEIX.js.map +1 -0
- package/dist/chunk-S4LZ7KTG.js +160 -0
- package/dist/chunk-S4LZ7KTG.js.map +1 -0
- package/dist/chunk-SHTESUB6.js +1442 -0
- package/dist/chunk-SHTESUB6.js.map +1 -0
- package/dist/chunk-SJH4EOZH.js +23 -0
- package/dist/chunk-SJH4EOZH.js.map +1 -0
- package/dist/chunk-SMIENBNX.js +6212 -0
- package/dist/chunk-SMIENBNX.js.map +1 -0
- package/dist/chunk-T7GT22KA.js +494 -0
- package/dist/chunk-T7GT22KA.js.map +1 -0
- package/dist/chunk-T7M4WFNV.js +172 -0
- package/dist/chunk-T7M4WFNV.js.map +1 -0
- package/dist/chunk-TIFVHGQL.js +6683 -0
- package/dist/chunk-TIFVHGQL.js.map +1 -0
- package/dist/chunk-TMIDUSOR.js +665 -0
- package/dist/chunk-TMIDUSOR.js.map +1 -0
- package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
- package/dist/chunk-U6VRBDNQ.js +1830 -0
- package/dist/chunk-U6VRBDNQ.js.map +1 -0
- package/dist/chunk-U7BBXM67.js +1743 -0
- package/dist/chunk-U7BBXM67.js.map +1 -0
- package/dist/chunk-UI6BKYQD.js +225 -0
- package/dist/chunk-UI6BKYQD.js.map +1 -0
- package/dist/chunk-UOI5S62H.js +846 -0
- package/dist/chunk-UOI5S62H.js.map +1 -0
- package/dist/chunk-USL5ARRE.js +26 -0
- package/dist/chunk-USL5ARRE.js.map +1 -0
- package/dist/chunk-UYC45JNS.js +139 -0
- package/dist/chunk-UYC45JNS.js.map +1 -0
- package/dist/chunk-VNKVBY54.js +363 -0
- package/dist/chunk-VNKVBY54.js.map +1 -0
- package/dist/chunk-VS4C7VAR.js +533 -0
- package/dist/chunk-VS4C7VAR.js.map +1 -0
- package/dist/chunk-VZMDYVNS.js +3151 -0
- package/dist/chunk-VZMDYVNS.js.map +1 -0
- package/dist/chunk-W4W4ZRBP.js +191 -0
- package/dist/chunk-W4W4ZRBP.js.map +1 -0
- package/dist/chunk-WN4KX7GE.js +25 -0
- package/dist/chunk-WN4KX7GE.js.map +1 -0
- package/dist/chunk-WNFTXSGR.js +111 -0
- package/dist/chunk-WNFTXSGR.js.map +1 -0
- package/dist/chunk-WOTDHRNF.js +2109 -0
- package/dist/chunk-WOTDHRNF.js.map +1 -0
- package/dist/chunk-XGWKTYXQ.js +67 -0
- package/dist/chunk-XGWKTYXQ.js.map +1 -0
- package/dist/chunk-XIGIJJSF.js +66 -0
- package/dist/chunk-XIGIJJSF.js.map +1 -0
- package/dist/chunk-XNUXB63I.js +817 -0
- package/dist/chunk-XNUXB63I.js.map +1 -0
- package/dist/chunk-XQ3CCNJD.js +610 -0
- package/dist/chunk-XQ3CCNJD.js.map +1 -0
- package/dist/chunk-XX6ZMCY5.js +4227 -0
- package/dist/chunk-XX6ZMCY5.js.map +1 -0
- package/dist/chunk-Y362QH54.js +98 -0
- package/dist/chunk-Y362QH54.js.map +1 -0
- package/dist/chunk-Y4T6ATDQ.js +74 -0
- package/dist/chunk-Y4T6ATDQ.js.map +1 -0
- package/dist/chunk-YQSBHWOI.js +41 -0
- package/dist/chunk-YU26SDNT.js +46 -0
- package/dist/chunk-YU26SDNT.js.map +1 -0
- package/dist/chunk-YULENNA7.js +501 -0
- package/dist/chunk-YULENNA7.js.map +1 -0
- package/dist/chunk-Z3ENMCFE.js +94 -0
- package/dist/chunk-Z3ENMCFE.js.map +1 -0
- package/dist/chunk-ZH7ZM3ZM.js +125 -0
- package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
- package/dist/chunk-ZIXHS6AM.js +42 -0
- package/dist/chunk-ZIXHS6AM.js.map +1 -0
- package/dist/chunk-ZLLJKSNS.js +96 -0
- package/dist/chunk-ZLLJKSNS.js.map +1 -0
- package/dist/claim-LF6VQ7OR.js +197 -0
- package/dist/claim-LF6VQ7OR.js.map +1 -0
- package/dist/cli.js +104 -70041
- package/dist/cli.js.map +1 -1
- package/dist/client-26SAJ46D.js +19 -0
- package/dist/code-MOWYJMDH.js +76 -0
- package/dist/code-MOWYJMDH.js.map +1 -0
- package/dist/companies-6HSK5BLK.js +195 -0
- package/dist/companies-6HSK5BLK.js.map +1 -0
- package/dist/complete-2PUAFQEC.js +81 -0
- package/dist/complete-2PUAFQEC.js.map +1 -0
- package/dist/config-X6GKOVQ6.js +88 -0
- package/dist/config-X6GKOVQ6.js.map +1 -0
- package/dist/connect-RXPMAJQI.js +42 -0
- package/dist/content-UYZC4AKN.js +85 -0
- package/dist/content-UYZC4AKN.js.map +1 -0
- package/dist/conversation-Y3NB2VDI.js +93 -0
- package/dist/conversation-Y3NB2VDI.js.map +1 -0
- package/dist/conversion-report-R4GJWWTK.js +125 -0
- package/dist/conversion-report-R4GJWWTK.js.map +1 -0
- package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
- package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
- package/dist/conversion-writes-WHFFUWWL.js +120 -0
- package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
- package/dist/conversions-K7C32DPW.js +135 -0
- package/dist/conversions-K7C32DPW.js.map +1 -0
- package/dist/conversions-OXJAX5GB.js +76 -0
- package/dist/conversions-OXJAX5GB.js.map +1 -0
- package/dist/countries-PBXNB3BR.js +82 -0
- package/dist/countries-PBXNB3BR.js.map +1 -0
- package/dist/create-AJ4KPSJ4.js +59 -0
- package/dist/create-AJ4KPSJ4.js.map +1 -0
- package/dist/create-ALKOAD5J.js +138 -0
- package/dist/create-ALKOAD5J.js.map +1 -0
- package/dist/create-HTKZMXKB.js +207 -0
- package/dist/create-HTKZMXKB.js.map +1 -0
- package/dist/create-TZMAOFBR.js +236 -0
- package/dist/create-TZMAOFBR.js.map +1 -0
- package/dist/creatives-MBTZTIAA.js +51 -0
- package/dist/creatives-MBTZTIAA.js.map +1 -0
- package/dist/creatives-OZHVU4WB.js +182 -0
- package/dist/creatives-OZHVU4WB.js.map +1 -0
- package/dist/creatives-VMGY5SU4.js +87 -0
- package/dist/creatives-VMGY5SU4.js.map +1 -0
- package/dist/credentials-FY4UH6TF.js +287 -0
- package/dist/credentials-FY4UH6TF.js.map +1 -0
- package/dist/critique-2UTP4DR3.js +216 -0
- package/dist/critique-2UTP4DR3.js.map +1 -0
- package/dist/critique-B3H7QFM2.js +1449 -0
- package/dist/critique-B3H7QFM2.js.map +1 -0
- package/dist/crm-2IBLUHDB.js +318 -0
- package/dist/crm-2IBLUHDB.js.map +1 -0
- package/dist/crm-YMYO4U53.js +224 -0
- package/dist/crm-YMYO4U53.js.map +1 -0
- package/dist/crop-U3AD4DDR.js +113 -0
- package/dist/crop-U3AD4DDR.js.map +1 -0
- package/dist/currency-S6KWZSZ6.js +88 -0
- package/dist/currency-S6KWZSZ6.js.map +1 -0
- package/dist/custom-conversions-FABS6YVT.js +125 -0
- package/dist/custom-conversions-FABS6YVT.js.map +1 -0
- package/dist/customers-P6LLLJHK.js +56 -0
- package/dist/decide-YTHCBKM6.js +199 -0
- package/dist/decide-YTHCBKM6.js.map +1 -0
- package/dist/delete-B2TDEW7H.js +63 -0
- package/dist/delete-B2TDEW7H.js.map +1 -0
- package/dist/delete-DZUDLYPC.js +69 -0
- package/dist/delete-DZUDLYPC.js.map +1 -0
- package/dist/delete-NZGZP4YP.js +71 -0
- package/dist/delete-NZGZP4YP.js.map +1 -0
- package/dist/delete-SDOZNDWQ.js +54 -0
- package/dist/delete-SDOZNDWQ.js.map +1 -0
- package/dist/delete-VQMU56OH.js +71 -0
- package/dist/delete-VQMU56OH.js.map +1 -0
- package/dist/delete-WKQPMVAM.js +66 -0
- package/dist/delete-WKQPMVAM.js.map +1 -0
- package/dist/demographics-Q3DCXULY.js +138 -0
- package/dist/demographics-Q3DCXULY.js.map +1 -0
- package/dist/describe-JNTCQZNL.js +97 -0
- package/dist/describe-JNTCQZNL.js.map +1 -0
- package/dist/describe-MT4334NG.js +97 -0
- package/dist/describe-MT4334NG.js.map +1 -0
- package/dist/dimensions-FEZUJRAG.js +101 -0
- package/dist/dimensions-FEZUJRAG.js.map +1 -0
- package/dist/discard-NEZM5CHF.js +66 -0
- package/dist/discard-NEZM5CHF.js.map +1 -0
- package/dist/discover-4GD7QSF5.js +93 -0
- package/dist/discover-4GD7QSF5.js.map +1 -0
- package/dist/discover-6K3IOYXR.js +172 -0
- package/dist/discover-6K3IOYXR.js.map +1 -0
- package/dist/domain-7Y256IDR.js +98 -0
- package/dist/domain-7Y256IDR.js.map +1 -0
- package/dist/download-L27HWEOE.js +299 -0
- package/dist/download-L27HWEOE.js.map +1 -0
- package/dist/draft-25G2P2TE.js +281 -0
- package/dist/draft-25G2P2TE.js.map +1 -0
- package/dist/draft-F6TUGXAY.js +307 -0
- package/dist/draft-F6TUGXAY.js.map +1 -0
- package/dist/draft-KLULNBWP.js +233 -0
- package/dist/draft-KLULNBWP.js.map +1 -0
- package/dist/draft-LY5ZPF73.js +217 -0
- package/dist/draft-LY5ZPF73.js.map +1 -0
- package/dist/draft-M4ZHDQ46.js +306 -0
- package/dist/draft-M4ZHDQ46.js.map +1 -0
- package/dist/draft-MI7RWY2K.js +100 -0
- package/dist/draft-MI7RWY2K.js.map +1 -0
- package/dist/draft-P4IVYTY3.js +103 -0
- package/dist/draft-P4IVYTY3.js.map +1 -0
- package/dist/draft-QQMCVDDS.js +328 -0
- package/dist/draft-QQMCVDDS.js.map +1 -0
- package/dist/engine/index.d.ts +213 -127
- package/dist/engine/index.js +18 -4
- package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
- package/dist/env-FBTHZKGN.js.map +1 -0
- package/dist/experiment-HDYTJPUY.js +1397 -0
- package/dist/experiment-HDYTJPUY.js.map +1 -0
- package/dist/export-TS5GYEMA.js +168 -0
- package/dist/export-TS5GYEMA.js.map +1 -0
- package/dist/extract-QVQFUOIK.js +113 -0
- package/dist/extract-QVQFUOIK.js.map +1 -0
- package/dist/facets-7MBSM7BP.js +114 -0
- package/dist/facets-7MBSM7BP.js.map +1 -0
- package/dist/favorites-7QP7BY5K.js +178 -0
- package/dist/favorites-7QP7BY5K.js.map +1 -0
- package/dist/feed-EETRO2FG.js +177 -0
- package/dist/feed-EETRO2FG.js.map +1 -0
- package/dist/feedback-PLMFRAQW.js +66 -0
- package/dist/feedback-PLMFRAQW.js.map +1 -0
- package/dist/feedback-record-QEHHGVYC.js +177 -0
- package/dist/feedback-record-QEHHGVYC.js.map +1 -0
- package/dist/fetch-QE3EB756.js +176 -0
- package/dist/fetch-QE3EB756.js.map +1 -0
- package/dist/fetch-Z7O3ZL4D.js +139 -0
- package/dist/fetch-Z7O3ZL4D.js.map +1 -0
- package/dist/find-KAQ6JDMO.js +134 -0
- package/dist/find-KAQ6JDMO.js.map +1 -0
- package/dist/fit-MY5GVZZZ.js +45 -0
- package/dist/fit-MY5GVZZZ.js.map +1 -0
- package/dist/flows-C67KEMDU.js +247 -0
- package/dist/flows-C67KEMDU.js.map +1 -0
- package/dist/follow-IX4XVK5Y.js +94 -0
- package/dist/follow-IX4XVK5Y.js.map +1 -0
- package/dist/follow-competitors-UZBUOYTH.js +112 -0
- package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
- package/dist/following-VGOIUCIZ.js +113 -0
- package/dist/following-VGOIUCIZ.js.map +1 -0
- package/dist/fonts-UR7XZ5XZ.js +34 -0
- package/dist/fonts-UR7XZ5XZ.js.map +1 -0
- package/dist/forecast-3F4SZNAK.js +104 -0
- package/dist/forecast-3F4SZNAK.js.map +1 -0
- package/dist/forecast-K5E7CTKX.js +168 -0
- package/dist/forecast-K5E7CTKX.js.map +1 -0
- package/dist/funding-H5YO37OW.js +85 -0
- package/dist/funding-H5YO37OW.js.map +1 -0
- package/dist/funnel-2PPEPAMY.js +394 -0
- package/dist/funnel-2PPEPAMY.js.map +1 -0
- package/dist/ga4-YHJ2XMLC.js +55 -0
- package/dist/ga4-YHJ2XMLC.js.map +1 -0
- package/dist/generate-M2ZX5DMI.js +262 -0
- package/dist/generate-M2ZX5DMI.js.map +1 -0
- package/dist/get-4EYKCZ6F.js +59 -0
- package/dist/get-4EYKCZ6F.js.map +1 -0
- package/dist/get-637GALM2.js +63 -0
- package/dist/get-637GALM2.js.map +1 -0
- package/dist/get-AZARFR6O.js +61 -0
- package/dist/get-AZARFR6O.js.map +1 -0
- package/dist/get-BPMEHRUG.js +56 -0
- package/dist/get-BPMEHRUG.js.map +1 -0
- package/dist/get-MQ6MMIZ7.js +78 -0
- package/dist/get-MQ6MMIZ7.js.map +1 -0
- package/dist/get-N4BPOQCB.js +63 -0
- package/dist/get-N4BPOQCB.js.map +1 -0
- package/dist/get-RPZHLQ56.js +92 -0
- package/dist/get-RPZHLQ56.js.map +1 -0
- package/dist/gif-6PRTB2VR.js +94 -0
- package/dist/gif-6PRTB2VR.js.map +1 -0
- package/dist/google-52JRH7X3.js +136 -0
- package/dist/google-52JRH7X3.js.map +1 -0
- package/dist/google-X2AQR3RB.js +3190 -0
- package/dist/google-X2AQR3RB.js.map +1 -0
- package/dist/google-ads-PWX7OF5Z.js +195 -0
- package/dist/google-ads-PWX7OF5Z.js.map +1 -0
- package/dist/group-AAZ5QKC3.js +43 -0
- package/dist/group-AAZ5QKC3.js.map +1 -0
- package/dist/group-GSYCZORC.js +43 -0
- package/dist/group-GSYCZORC.js.map +1 -0
- package/dist/gsc-TS5T7ML2.js +30 -0
- package/dist/gsc-TS5T7ML2.js.map +1 -0
- package/dist/history-EW6LFFCX.js +67 -0
- package/dist/history-EW6LFFCX.js.map +1 -0
- package/dist/history-XI5ABCFO.js +133 -0
- package/dist/history-XI5ABCFO.js.map +1 -0
- package/dist/hubspot-AVUOILRE.js +779 -0
- package/dist/hubspot-AVUOILRE.js.map +1 -0
- package/dist/icon-K75KI6BV.js +137 -0
- package/dist/icon-K75KI6BV.js.map +1 -0
- package/dist/ideas-L3SZSIZP.js +35 -0
- package/dist/ideas-L3SZSIZP.js.map +1 -0
- package/dist/images-CD53I2W5.js +90 -0
- package/dist/images-CD53I2W5.js.map +1 -0
- package/dist/improve-L3BW4EQG.js +86 -0
- package/dist/improve-L3BW4EQG.js.map +1 -0
- package/dist/ingest-KRJOYTCQ.js +107 -0
- package/dist/ingest-KRJOYTCQ.js.map +1 -0
- package/dist/ingest-WE3SPPND.js +23 -0
- package/dist/ingest-WE3SPPND.js.map +1 -0
- package/dist/insights-PELVD4RY.js +122 -0
- package/dist/insights-PELVD4RY.js.map +1 -0
- package/dist/insights-XCA4BUJW.js +423 -0
- package/dist/insights-XCA4BUJW.js.map +1 -0
- package/dist/inspect-QKETG5UJ.js +189 -0
- package/dist/inspect-QKETG5UJ.js.map +1 -0
- package/dist/inspiration-Y2J2PUPC.js +53 -0
- package/dist/inspiration-Y2J2PUPC.js.map +1 -0
- package/dist/intent-YJOJGNVJ.js +95 -0
- package/dist/intent-YJOJGNVJ.js.map +1 -0
- package/dist/job-E2U4FS5P.js +202 -0
- package/dist/job-E2U4FS5P.js.map +1 -0
- package/dist/job-create-DFYCHVQ7.js +109 -0
- package/dist/job-create-DFYCHVQ7.js.map +1 -0
- package/dist/job-status-FFPMTSHB.js +74 -0
- package/dist/job-status-FFPMTSHB.js.map +1 -0
- package/dist/keep-GYZS2UTL.js +78 -0
- package/dist/keep-GYZS2UTL.js.map +1 -0
- package/dist/keyword-gap-QU7O7UKC.js +130 -0
- package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
- package/dist/keyword-metrics-HLCM3QU7.js +197 -0
- package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
- package/dist/keywords-for-site-BDKPQKWB.js +128 -0
- package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
- package/dist/landing-4K6XYNFM.js +28 -0
- package/dist/landing-4K6XYNFM.js.map +1 -0
- package/dist/landings-F7LOAEJE.js +151 -0
- package/dist/landings-F7LOAEJE.js.map +1 -0
- package/dist/languages-P3ZM6R2A.js +40 -0
- package/dist/languages-P3ZM6R2A.js.map +1 -0
- package/dist/languages-XEJKTIFP.js +55 -0
- package/dist/languages-XEJKTIFP.js.map +1 -0
- package/dist/launches-TCFAYUA5.js +19 -0
- package/dist/launches-TCFAYUA5.js.map +1 -0
- package/dist/layerize-ZSKFIPZA.js +190 -0
- package/dist/layerize-ZSKFIPZA.js.map +1 -0
- package/dist/leads-GDF4S2AM.js +90 -0
- package/dist/leads-GDF4S2AM.js.map +1 -0
- package/dist/leads-TPB5OFSQ.js +293 -0
- package/dist/leads-TPB5OFSQ.js.map +1 -0
- package/dist/learn-NMFEA5H5.js +203 -0
- package/dist/learn-NMFEA5H5.js.map +1 -0
- package/dist/library-IP2UKNRU.js +109 -0
- package/dist/library-IP2UKNRU.js.map +1 -0
- package/dist/lighthouse-57XBJRCO.js +75 -0
- package/dist/lighthouse-57XBJRCO.js.map +1 -0
- package/dist/line-item-writes-O6SSS5NQ.js +208 -0
- package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
- package/dist/line-items-ZZAKH3YZ.js +103 -0
- package/dist/line-items-ZZAKH3YZ.js.map +1 -0
- package/dist/link-CRY57R3E.js +64 -0
- package/dist/link-CRY57R3E.js.map +1 -0
- package/dist/linkedin-WC7LGYPP.js +1008 -0
- package/dist/linkedin-WC7LGYPP.js.map +1 -0
- package/dist/list-6IKPWQGG.js +57 -0
- package/dist/list-6IKPWQGG.js.map +1 -0
- package/dist/list-CAUH3BMG.js +65 -0
- package/dist/list-CAUH3BMG.js.map +1 -0
- package/dist/list-CWAKX5TH.js +63 -0
- package/dist/list-CWAKX5TH.js.map +1 -0
- package/dist/list-FJ5FSVL6.js +151 -0
- package/dist/list-FJ5FSVL6.js.map +1 -0
- package/dist/list-GTOSN7DP.js +50 -0
- package/dist/list-GTOSN7DP.js.map +1 -0
- package/dist/list-HLJP4NVE.js +51 -0
- package/dist/list-HLJP4NVE.js.map +1 -0
- package/dist/list-LCUPF7EF.js +76 -0
- package/dist/list-LCUPF7EF.js.map +1 -0
- package/dist/list-NH4ZRZTL.js +303 -0
- package/dist/list-NH4ZRZTL.js.map +1 -0
- package/dist/locations-2BYWKIYA.js +67 -0
- package/dist/locations-2BYWKIYA.js.map +1 -0
- package/dist/locations-LVVDOSXO.js +40 -0
- package/dist/locations-LVVDOSXO.js.map +1 -0
- package/dist/log-6JOWOY5G.js +92 -0
- package/dist/log-6JOWOY5G.js.map +1 -0
- package/dist/logo-AJK2TDQU.js +18 -0
- package/dist/logo-AJK2TDQU.js.map +1 -0
- package/dist/lookup-H5GEM77H.js +22 -0
- package/dist/lookup-H5GEM77H.js.map +1 -0
- package/dist/make-N3WZ6OSS.js +640 -0
- package/dist/make-N3WZ6OSS.js.map +1 -0
- package/dist/map-4KOYFHAN.js +404 -0
- package/dist/map-4KOYFHAN.js.map +1 -0
- package/dist/mcp-LSS2DHYL.js +463 -0
- package/dist/mcp-LSS2DHYL.js.map +1 -0
- package/dist/media-JBCN6V4X.js +15 -0
- package/dist/media-JBCN6V4X.js.map +1 -0
- package/dist/media-RAGEJTZX.js +89 -0
- package/dist/media-RAGEJTZX.js.map +1 -0
- package/dist/media-sources-GSPAV7HT.js +32 -0
- package/dist/media-sources-GSPAV7HT.js.map +1 -0
- package/dist/members-GUUVEK2Y.js +44 -0
- package/dist/members-GUUVEK2Y.js.map +1 -0
- package/dist/meta-Z37ZR3PJ.js +69 -0
- package/dist/meta-Z37ZR3PJ.js.map +1 -0
- package/dist/metrics-KW6SDULI.js +152 -0
- package/dist/metrics-KW6SDULI.js.map +1 -0
- package/dist/models-5J4WFUD3.js +155 -0
- package/dist/models-5J4WFUD3.js.map +1 -0
- package/dist/normalize-DSFVTRXN.js +806 -0
- package/dist/normalize-DSFVTRXN.js.map +1 -0
- package/dist/normalize-EUDI5HEM.js +141 -0
- package/dist/normalize-EUDI5HEM.js.map +1 -0
- package/dist/options-P4PPJQH4.js +121 -0
- package/dist/options-P4PPJQH4.js.map +1 -0
- package/dist/output-DTCLVPUF.js +24 -0
- package/dist/output-DTCLVPUF.js.map +1 -0
- package/dist/page-N2ZO3O7F.js +105 -0
- package/dist/page-N2ZO3O7F.js.map +1 -0
- package/dist/pages-FQ4CBAJ2.js +66 -0
- package/dist/pages-FQ4CBAJ2.js.map +1 -0
- package/dist/performance-A66LYIZX.js +24 -0
- package/dist/performance-A66LYIZX.js.map +1 -0
- package/dist/pinterest-NV5XTNJE.js +96 -0
- package/dist/pinterest-NV5XTNJE.js.map +1 -0
- package/dist/pixels-CTJ43FZ4.js +108 -0
- package/dist/pixels-CTJ43FZ4.js.map +1 -0
- package/dist/pixels-HKINGZCH.js +60 -0
- package/dist/pixels-HKINGZCH.js.map +1 -0
- package/dist/plan-ZYTWLGWK.js +207 -0
- package/dist/plan-ZYTWLGWK.js.map +1 -0
- package/dist/preview-5ROBOQG7.js +169 -0
- package/dist/preview-5ROBOQG7.js.map +1 -0
- package/dist/profile-Q3PHR6FU.js +159 -0
- package/dist/profile-Q3PHR6FU.js.map +1 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
- package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
- package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
- package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
- package/dist/properties-WLL6M2P6.js +101 -0
- package/dist/properties-WLL6M2P6.js.map +1 -0
- package/dist/publish-KHNR5ARF.js +322 -0
- package/dist/publish-KHNR5ARF.js.map +1 -0
- package/dist/query-A34J7BGX.js +61 -0
- package/dist/query-A34J7BGX.js.map +1 -0
- package/dist/query-IYZN5KHO.js +236 -0
- package/dist/query-IYZN5KHO.js.map +1 -0
- package/dist/query-UN2P6DBA.js +247 -0
- package/dist/query-UN2P6DBA.js.map +1 -0
- package/dist/questionnaire-Z2ZIKNBV.js +93 -0
- package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
- package/dist/read-GM7PQYJA.js +141 -0
- package/dist/read-GM7PQYJA.js.map +1 -0
- package/dist/reddit-5NPFULGD.js +26 -0
- package/dist/reddit-5NPFULGD.js.map +1 -0
- package/dist/refresh-FGXW4Y4X.js +94 -0
- package/dist/refresh-FGXW4Y4X.js.map +1 -0
- package/dist/release-OKZMC73N.js +60 -0
- package/dist/release-OKZMC73N.js.map +1 -0
- package/dist/relevant-pages-J76ZKNKF.js +99 -0
- package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
- package/dist/remove-CA2J6ACH.js +50 -0
- package/dist/remove-CA2J6ACH.js.map +1 -0
- package/dist/remove-GOYW2G4R.js +48 -0
- package/dist/remove-GOYW2G4R.js.map +1 -0
- package/dist/reopen-XPKSOE6O.js +63 -0
- package/dist/reopen-XPKSOE6O.js.map +1 -0
- package/dist/rerun-QA6ISKVO.js +86 -0
- package/dist/rerun-QA6ISKVO.js.map +1 -0
- package/dist/research-FZ63UZTE.js +62 -0
- package/dist/research-FZ63UZTE.js.map +1 -0
- package/dist/research-YGQQ6CNG.js +262 -0
- package/dist/research-YGQQ6CNG.js.map +1 -0
- package/dist/reset-BGPZ4HMA.js +54 -0
- package/dist/reset-BGPZ4HMA.js.map +1 -0
- package/dist/reset-HTD6LCIT.js +54 -0
- package/dist/reset-HTD6LCIT.js.map +1 -0
- package/dist/resolve-NRDZ6N2B.js +121 -0
- package/dist/resolve-NRDZ6N2B.js.map +1 -0
- package/dist/retry-PF4BGKJV.js +60 -0
- package/dist/retry-PF4BGKJV.js.map +1 -0
- package/dist/retry-XL26JDAV.js +62 -0
- package/dist/retry-XL26JDAV.js.map +1 -0
- package/dist/retry-failed-BEFWRV4Z.js +45 -0
- package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
- package/dist/run-3ZDGCCTH.js +61 -0
- package/dist/run-3ZDGCCTH.js.map +1 -0
- package/dist/run-EMJLI7LR.js +65 -0
- package/dist/run-EMJLI7LR.js.map +1 -0
- package/dist/scaffold-ad-QW75LLYR.js +1550 -0
- package/dist/scaffold-ad-QW75LLYR.js.map +1 -0
- package/dist/scaffold-static-ad-S3UOKLJ3.js +973 -0
- package/dist/scaffold-static-ad-S3UOKLJ3.js.map +1 -0
- package/dist/scaffold-video-3BJQOUAA.js +874 -0
- package/dist/scaffold-video-3BJQOUAA.js.map +1 -0
- package/dist/schedule-KQ7UIR3N.js +66 -0
- package/dist/schedule-KQ7UIR3N.js.map +1 -0
- package/dist/schedule-PKPNSISL.js +61 -0
- package/dist/schedule-PKPNSISL.js.map +1 -0
- package/dist/scheduled-agents-LP5LITA3.js +49 -0
- package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
- package/dist/schema-B6J6VPTO.js +132 -0
- package/dist/schema-B6J6VPTO.js.map +1 -0
- package/dist/schema-QXTDLZVC.js +63 -0
- package/dist/schema-QXTDLZVC.js.map +1 -0
- package/dist/scrape-7YKJWFZE.js +2241 -0
- package/dist/scrape-7YKJWFZE.js.map +1 -0
- package/dist/screenshot-ZHBSG3SI.js +102 -0
- package/dist/screenshot-ZHBSG3SI.js.map +1 -0
- package/dist/search-332KFYZ6.js +224 -0
- package/dist/search-332KFYZ6.js.map +1 -0
- package/dist/search-4PBMXXUY.js +91 -0
- package/dist/search-4PBMXXUY.js.map +1 -0
- package/dist/search-6WNUKCMP.js +174 -0
- package/dist/search-6WNUKCMP.js.map +1 -0
- package/dist/search-AVNUU6TJ.js +26 -0
- package/dist/search-AVNUU6TJ.js.map +1 -0
- package/dist/search-F5INRFFK.js +92 -0
- package/dist/search-F5INRFFK.js.map +1 -0
- package/dist/search-copy-DZVBYG2B.js +168 -0
- package/dist/search-copy-DZVBYG2B.js.map +1 -0
- package/dist/seeds-5JTQN5WI.js +101 -0
- package/dist/seeds-5JTQN5WI.js.map +1 -0
- package/dist/select-2V6CHATD.js +96 -0
- package/dist/select-2V6CHATD.js.map +1 -0
- package/dist/sends-3L6QBS46.js +309 -0
- package/dist/sends-3L6QBS46.js.map +1 -0
- package/dist/sequences-YKFV7BDH.js +146 -0
- package/dist/sequences-YKFV7BDH.js.map +1 -0
- package/dist/set-prompt-XGZXW63I.js +188 -0
- package/dist/set-prompt-XGZXW63I.js.map +1 -0
- package/dist/setup-links-6H5ONDCQ.js +141 -0
- package/dist/setup-links-6H5ONDCQ.js.map +1 -0
- package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
- package/dist/shared-QAMP7FZV.js.map +1 -0
- package/dist/shopify-D3GNV5O6.js +3715 -0
- package/dist/shopify-D3GNV5O6.js.map +1 -0
- package/dist/site-TBPERLY3.js +177 -0
- package/dist/site-TBPERLY3.js.map +1 -0
- package/dist/sitemaps-XPGLW24S.js +87 -0
- package/dist/sitemaps-XPGLW24S.js.map +1 -0
- package/dist/sites-WMBY2HJV.js +101 -0
- package/dist/sites-WMBY2HJV.js.map +1 -0
- package/dist/skills-3HEILQCU.js +47 -0
- package/dist/skills-3HEILQCU.js.map +1 -0
- package/dist/sources-JFQKTK2L.js +421 -0
- package/dist/sources-JFQKTK2L.js.map +1 -0
- package/dist/sources-Q3I6DDV7.js +30 -0
- package/dist/sources-Q3I6DDV7.js.map +1 -0
- package/dist/stale-4SERZW2D.js +66 -0
- package/dist/stale-4SERZW2D.js.map +1 -0
- package/dist/stats-GNILHSKK.js +34 -0
- package/dist/stats-GNILHSKK.js.map +1 -0
- package/dist/status-LIZWJYS4.js +62 -0
- package/dist/status-LIZWJYS4.js.map +1 -0
- package/dist/sticker-KCV3VZHY.js +94 -0
- package/dist/sticker-KCV3VZHY.js.map +1 -0
- package/dist/stock-VTORKR4C.js +179 -0
- package/dist/stock-VTORKR4C.js.map +1 -0
- package/dist/studio-QCRA6BY5.js +49 -0
- package/dist/studio-QCRA6BY5.js.map +1 -0
- package/dist/sync-455DB46Y.js +54 -0
- package/dist/sync-455DB46Y.js.map +1 -0
- package/dist/sync-A4KKQ3B6.js +265 -0
- package/dist/sync-A4KKQ3B6.js.map +1 -0
- package/dist/sync-ULKWDFXM.js +54 -0
- package/dist/sync-ULKWDFXM.js.map +1 -0
- package/dist/sync-definition-YTBLMLX2.js +55 -0
- package/dist/sync-definition-YTBLMLX2.js.map +1 -0
- package/dist/tag-manager-E7QTXBWQ.js +43 -0
- package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
- package/dist/tags-4Q4I5GQJ.js +20 -0
- package/dist/tags-4Q4I5GQJ.js.map +1 -0
- package/dist/tags-AMEVAQZ4.js +26 -0
- package/dist/tags-AMEVAQZ4.js.map +1 -0
- package/dist/tags-DPLOLH3E.js +20 -0
- package/dist/tags-DPLOLH3E.js.map +1 -0
- package/dist/tags-LDHXONR3.js +224 -0
- package/dist/tags-LDHXONR3.js.map +1 -0
- package/dist/tags-UW3WJTAQ.js +20 -0
- package/dist/tags-UW3WJTAQ.js.map +1 -0
- package/dist/targeting-constants-D64YO3E7.js +118 -0
- package/dist/targeting-constants-D64YO3E7.js.map +1 -0
- package/dist/targeting-criteria-BP6VJA7X.js +113 -0
- package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
- package/dist/targets-CQWO2UXD.js +102 -0
- package/dist/targets-CQWO2UXD.js.map +1 -0
- package/dist/templates-WZSTNRNZ.js +178 -0
- package/dist/templates-WZSTNRNZ.js.map +1 -0
- package/dist/testimonials-ETHSNWUH.js +32 -0
- package/dist/testimonials-ETHSNWUH.js.map +1 -0
- package/dist/themes-YU663LQH.js +94 -0
- package/dist/themes-YU663LQH.js.map +1 -0
- package/dist/top-companies-KTXHS472.js +108 -0
- package/dist/top-companies-KTXHS472.js.map +1 -0
- package/dist/translate-6QAJ5ZUU.js +600 -0
- package/dist/translate-6QAJ5ZUU.js.map +1 -0
- package/dist/triggers-4EDFLNGH.js +141 -0
- package/dist/triggers-4EDFLNGH.js.map +1 -0
- package/dist/tweets-ZUKQAAUQ.js +123 -0
- package/dist/tweets-ZUKQAAUQ.js.map +1 -0
- package/dist/unfollow-A4JVCJBF.js +46 -0
- package/dist/unfollow-A4JVCJBF.js.map +1 -0
- package/dist/unlink-KY2OEKMD.js +67 -0
- package/dist/unlink-KY2OEKMD.js.map +1 -0
- package/dist/unstage-FHUG67RI.js +84 -0
- package/dist/unstage-FHUG67RI.js.map +1 -0
- package/dist/unstage-ZRLLCSQF.js +95 -0
- package/dist/unstage-ZRLLCSQF.js.map +1 -0
- package/dist/update-27LGM65V.js +63 -0
- package/dist/update-27LGM65V.js.map +1 -0
- package/dist/update-AIY46I2Q.js +155 -0
- package/dist/update-AIY46I2Q.js.map +1 -0
- package/dist/update-QYD2XZFM.js +142 -0
- package/dist/update-QYD2XZFM.js.map +1 -0
- package/dist/update-W2OSRNFO.js +98 -0
- package/dist/update-W2OSRNFO.js.map +1 -0
- package/dist/upload-JGBTSKGH.js +126 -0
- package/dist/upload-JGBTSKGH.js.map +1 -0
- package/dist/upload-XEHWYMJG.js +150 -0
- package/dist/upload-XEHWYMJG.js.map +1 -0
- package/dist/upscale-I5P2OHTN.js +109 -0
- package/dist/upscale-I5P2OHTN.js.map +1 -0
- package/dist/url-options-QHGA42RP.js +130 -0
- package/dist/url-options-QHGA42RP.js.map +1 -0
- package/dist/url-params-NWSUHWRE.js +98 -0
- package/dist/url-params-NWSUHWRE.js.map +1 -0
- package/dist/use-U4HG2NF3.js +95 -0
- package/dist/use-U4HG2NF3.js.map +1 -0
- package/dist/validate-DOQ6AI62.js +91 -0
- package/dist/validate-DOQ6AI62.js.map +1 -0
- package/dist/variant-FOVE6URJ.js +338 -0
- package/dist/variant-FOVE6URJ.js.map +1 -0
- package/dist/videos-DP3VCSYG.js +39 -0
- package/dist/videos-DP3VCSYG.js.map +1 -0
- package/dist/view-HRI3FHCH.js +121 -0
- package/dist/view-HRI3FHCH.js.map +1 -0
- package/dist/viewer-check-JYUE24M6.js +68 -0
- package/dist/viewer-check-JYUE24M6.js.map +1 -0
- package/dist/web-AFUIWPFU.js +140 -0
- package/dist/web-AFUIWPFU.js.map +1 -0
- package/dist/winners-SMMDN6LW.js +113 -0
- package/dist/winners-SMMDN6LW.js.map +1 -0
- package/dist/winning-ads-PCIJUYVA.js +84 -0
- package/dist/winning-ads-PCIJUYVA.js.map +1 -0
- package/dist/write-commands-7Z34WG2J.js +206 -0
- package/dist/write-commands-7Z34WG2J.js.map +1 -0
- package/dist/write-commands-BLT2SEC4.js +713 -0
- package/dist/write-commands-BLT2SEC4.js.map +1 -0
- package/dist/write-commands-N4FSGRVQ.js +743 -0
- package/dist/write-commands-N4FSGRVQ.js.map +1 -0
- package/dist/write-commands-Q4MQ3BGM.js +1015 -0
- package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
- package/dist/x-AUOZJNWE.js +47 -0
- package/dist/x-AUOZJNWE.js.map +1 -0
- package/package.json +9 -2
- package/dist/chunk-FGHMWBUD.js +0 -9989
- package/dist/chunk-FGHMWBUD.js.map +0 -1
- package/dist/chunk-HJEMOSPH.js +0 -1292
- package/dist/chunk-HJEMOSPH.js.map +0 -1
- package/dist/chunk-MF7YA62W.js.map +0 -1
- package/dist/chunk-VZEDAFAR.js.map +0 -1
- package/dist/chunk-XHC4LMK4.js.map +0 -1
- package/dist/client-GR6YL3YX.js +0 -17
- package/dist/output-NMQXZF3Z.js +0 -18
- /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
- /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
- /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
- /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
- /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hintLines,
|
|
3
|
+
splitHints
|
|
4
|
+
} from "./chunk-D5FY4FAK.js";
|
|
5
|
+
import {
|
|
6
|
+
isNotConnectedError,
|
|
7
|
+
writeJsonEnvelope
|
|
8
|
+
} from "./chunk-BVM5IRZW.js";
|
|
9
|
+
import {
|
|
10
|
+
ApiError,
|
|
11
|
+
apiPost
|
|
12
|
+
} from "./chunk-HREWXNTO.js";
|
|
13
|
+
import {
|
|
14
|
+
requireChatId,
|
|
15
|
+
resolveChatId
|
|
16
|
+
} from "./chunk-O6QKCJE4.js";
|
|
17
|
+
|
|
18
|
+
// src/commands/ga4/shared.ts
|
|
19
|
+
import { readFileSync } from "fs";
|
|
20
|
+
function failValidation(message) {
|
|
21
|
+
writeJsonEnvelope({ ok: false, error: { code: "VALIDATION_ERROR", message } });
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
function requireTarget(args, entity) {
|
|
25
|
+
const positional = Array.isArray(args._) ? args._[0] : void 0;
|
|
26
|
+
const target = args.id ?? args.target ?? positional;
|
|
27
|
+
if (typeof target !== "string" || target.length === 0) {
|
|
28
|
+
failValidation(`pass the ${entity} id as the positional argument`);
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
}
|
|
32
|
+
function readJsonSource(args, flag) {
|
|
33
|
+
const inline = args[flag];
|
|
34
|
+
const file = args.file;
|
|
35
|
+
const raw = typeof file === "string" && file.length > 0 ? readFileSync(file, "utf8") : typeof inline === "string" && inline.length > 0 ? inline : void 0;
|
|
36
|
+
if (raw === void 0) {
|
|
37
|
+
failValidation(`pass --${flag} with inline JSON or --file with a path to a JSON file`);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(raw);
|
|
41
|
+
} catch {
|
|
42
|
+
return failValidation(`--${flag} is not valid JSON`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function asObject(value, flag, index) {
|
|
46
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
47
|
+
failValidation(
|
|
48
|
+
index === void 0 ? `--${flag} must be a JSON object` : `--${flag}[${index}] must be a JSON object`
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
function loadJsonArg(args, flag = "json") {
|
|
54
|
+
return asObject(readJsonSource(args, flag), flag);
|
|
55
|
+
}
|
|
56
|
+
function loadJsonPayloads(args) {
|
|
57
|
+
const parsed = readJsonSource(args, "json");
|
|
58
|
+
if (!Array.isArray(parsed)) {
|
|
59
|
+
return [asObject(parsed, "json")];
|
|
60
|
+
}
|
|
61
|
+
if (parsed.length === 0) {
|
|
62
|
+
failValidation("--json is an empty list \u2014 pass at least one definition");
|
|
63
|
+
}
|
|
64
|
+
return parsed.map((entry, index) => asObject(entry, "json", index));
|
|
65
|
+
}
|
|
66
|
+
var RETRYABLE_CODES = /* @__PURE__ */ new Set(["RATE_LIMITED", "UNAVAILABLE", "INTERNAL_ERROR", "NETWORK_ERROR", "TIMEOUT"]);
|
|
67
|
+
function handleError(err) {
|
|
68
|
+
if (err instanceof ApiError) {
|
|
69
|
+
const readOnly = err.code === "FORBIDDEN" && /read the property but not change it/i.test(err.message);
|
|
70
|
+
writeJsonEnvelope({
|
|
71
|
+
ok: false,
|
|
72
|
+
error: {
|
|
73
|
+
code: err.code,
|
|
74
|
+
message: err.message,
|
|
75
|
+
...readOnly ? {
|
|
76
|
+
fix: {
|
|
77
|
+
action: "reconnect",
|
|
78
|
+
explanation: "The Google Analytics connection is read-only. Ask the user to reconnect Google Analytics \u2014 in the dashboard, Brain \u2192 Integrations \u2192 Platforms \u2192 Google Analytics \u2014 which grants the permission to change the property. Reporting (`baker ga4 query`, `baker ga4 audit`) keeps working meanwhile, so carry on with the rest of the job and tell them what you will set up once they have reconnected. Don't claim anything was configured."
|
|
79
|
+
}
|
|
80
|
+
} : err.code === "UNAUTHORIZED" || err.code === "FORBIDDEN" && isNotConnectedError(err.code, err.message) ? {
|
|
81
|
+
fix: {
|
|
82
|
+
action: "request_connection",
|
|
83
|
+
explanation: 'Google Analytics is not connected for this company yet, or no property has been picked. Don\'t send the user to Settings \u2014 call the `request_connection` tool with { platform: "google-analytics", reason } and they connect and pick their property from inside the chat. If the `request_connection` call fails, say so plainly and give the exact route: dashboard \u2192 Brain \u2192 Integrations \u2192 Platforms \u2192 Google Analytics. Then carry on with the rest of the task.'
|
|
84
|
+
}
|
|
85
|
+
} : {},
|
|
86
|
+
retryable: RETRYABLE_CODES.has(err.code)
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
writeJsonEnvelope({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error", retryable: true } });
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
var STAGE_HINTS = [
|
|
95
|
+
"Staged only \u2014 nothing has changed in Google Analytics yet. These apply when the chat completes, and an applied change takes effect on the property immediately: there is no version to publish afterwards and no undo. Say the changes are ready and take effect when the user completes the chat \u2014 not that they are done already."
|
|
96
|
+
];
|
|
97
|
+
var WARNING_HINT = "Read the warnings above before telling the user this is ready.";
|
|
98
|
+
async function stageOp(op) {
|
|
99
|
+
const chatId = requireChatId();
|
|
100
|
+
try {
|
|
101
|
+
const { data, hints } = splitHints(await apiPost("/api/ga4/draft/stage", { chatId, op }));
|
|
102
|
+
writeJsonEnvelope({
|
|
103
|
+
ok: true,
|
|
104
|
+
data,
|
|
105
|
+
hints: [...hints, ...STAGE_HINTS, ...data.warnings.length > 0 ? [WARNING_HINT] : []]
|
|
106
|
+
});
|
|
107
|
+
} catch (err) {
|
|
108
|
+
handleError(err);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function stageOps(ops) {
|
|
112
|
+
const [only] = ops;
|
|
113
|
+
if (ops.length === 1 && only) {
|
|
114
|
+
await stageOp(only);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const chatId = requireChatId();
|
|
118
|
+
try {
|
|
119
|
+
const { data, hints } = splitHints(
|
|
120
|
+
await apiPost("/api/ga4/draft/stage-batch", { chatId, ops })
|
|
121
|
+
);
|
|
122
|
+
writeJsonEnvelope({
|
|
123
|
+
ok: true,
|
|
124
|
+
data,
|
|
125
|
+
hints: [...hints, ...STAGE_HINTS, ...data.ops.some((op) => op.warnings.length > 0) ? [WARNING_HINT] : []]
|
|
126
|
+
});
|
|
127
|
+
} catch (err) {
|
|
128
|
+
handleError(err);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async function draftAction(path, body, chat) {
|
|
132
|
+
const chatId = resolveChatId(chat);
|
|
133
|
+
try {
|
|
134
|
+
const { data, hints } = splitHints(await apiPost(path, { chatId, ...body }));
|
|
135
|
+
writeJsonEnvelope({ ok: true, data, ...hints.length > 0 ? { hints } : {} });
|
|
136
|
+
return data;
|
|
137
|
+
} catch (err) {
|
|
138
|
+
handleError(err);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function renderDraft(response) {
|
|
142
|
+
if (response.count === 0) {
|
|
143
|
+
return "No Google Analytics changes staged on this chat.";
|
|
144
|
+
}
|
|
145
|
+
const lines = [
|
|
146
|
+
response.status === "discarded" ? `${response.count} Google Analytics change(s) discarded with their chat \u2014 none will apply` : `${response.count} staged Google Analytics change(s)`,
|
|
147
|
+
...response.ops.map((op) => {
|
|
148
|
+
const status = op.result ? ` [${op.result.status}]` : "";
|
|
149
|
+
return ` ${op.ref} ${op.summary}${status}`;
|
|
150
|
+
})
|
|
151
|
+
];
|
|
152
|
+
if (response.status === "applied") {
|
|
153
|
+
const failed = response.ops.filter((op) => op.result?.status !== "applied");
|
|
154
|
+
lines.push(
|
|
155
|
+
"",
|
|
156
|
+
failed.length === 0 ? "All applied \u2014 these are in effect on the property now." : `${failed.length} of ${response.count} did not apply. The rest are in effect on the property.`
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
if (response.publishError) {
|
|
160
|
+
lines.push("", response.publishError);
|
|
161
|
+
}
|
|
162
|
+
return lines.join("\n");
|
|
163
|
+
}
|
|
164
|
+
async function draftList(json, chat) {
|
|
165
|
+
const chatId = resolveChatId(chat);
|
|
166
|
+
try {
|
|
167
|
+
const response = await apiPost("/api/ga4/draft", { chatId });
|
|
168
|
+
const { data, hints } = splitHints(response);
|
|
169
|
+
if (json) {
|
|
170
|
+
writeJsonEnvelope({ ok: true, data, ...hints.length > 0 ? { hints } : {} });
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
process.stdout.write(`${renderDraft(data)}${hintLines(response)}
|
|
174
|
+
`);
|
|
175
|
+
} catch (err) {
|
|
176
|
+
handleError(err);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export {
|
|
181
|
+
failValidation,
|
|
182
|
+
requireTarget,
|
|
183
|
+
loadJsonArg,
|
|
184
|
+
loadJsonPayloads,
|
|
185
|
+
handleError,
|
|
186
|
+
stageOp,
|
|
187
|
+
stageOps,
|
|
188
|
+
draftAction,
|
|
189
|
+
draftList
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=chunk-W4W4ZRBP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ga4/shared.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { Ga4DraftListResponse, Ga4DraftStageBatchResponse, Ga4DraftStageResponse } from \"@baker/api/ga4\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { requireChatId, resolveChatId } from \"../../env.ts\";\nimport { isNotConnectedError } from \"../../error-handler.ts\";\nimport { hintLines, splitHints } from \"../ads/hints.ts\";\nimport { writeJsonEnvelope } from \"../ads/output.ts\";\n\n/**\n * Shared plumbing for the staged Google Analytics write commands. These NEVER\n * change the property directly: each stages a change onto this chat's draft, the\n * user reviews the whole set in the Analytics tab, and it applies when the chat\n * completes.\n */\n\nexport function failValidation(message: string): never {\n writeJsonEnvelope({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\nexport function requireTarget(args: Record<string, unknown>, entity: string): string {\n const positional = Array.isArray(args._) ? args._[0] : undefined;\n const target = args.id ?? args.target ?? positional;\n if (typeof target !== \"string\" || target.length === 0) {\n failValidation(`pass the ${entity} id as the positional argument`);\n }\n return target;\n}\n\nfunction readJsonSource(args: Record<string, unknown>, flag: \"patch\" | \"json\"): unknown {\n const inline = args[flag];\n const file = args.file;\n const raw =\n typeof file === \"string\" && file.length > 0\n ? readFileSync(file, \"utf8\")\n : typeof inline === \"string\" && inline.length > 0\n ? inline\n : undefined;\n if (raw === undefined) {\n failValidation(`pass --${flag} with inline JSON or --file with a path to a JSON file`);\n }\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return failValidation(`--${flag} is not valid JSON`);\n }\n}\n\nfunction asObject(value: unknown, flag: string, index?: number): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n failValidation(\n index === undefined ? `--${flag} must be a JSON object` : `--${flag}[${index}] must be a JSON object`,\n );\n }\n return value as Record<string, unknown>;\n}\n\n/** `--json '<inline>'` or `--file <path>` → a parsed object. */\nexport function loadJsonArg(args: Record<string, unknown>, flag: \"patch\" | \"json\" = \"json\"): Record<string, unknown> {\n return asObject(readJsonSource(args, flag), flag);\n}\n\n/**\n * The same, but a JSON **array** is allowed and means \"stage all of these\n * together\".\n *\n * This is the only way to keep a bulk job cheap. Every stage call reads the\n * whole property first — the property, its data streams, its key events, its\n * custom definitions and its retention window — because that read is what the\n * duplicate and immutability refusals are derived from. One call per definition\n * therefore multiplies a routine \"make these eight parameters reportable\" into\n * roughly fifty Admin API reads against a quota Google counts per project.\n */\nexport function loadJsonPayloads(args: Record<string, unknown>): Record<string, unknown>[] {\n const parsed = readJsonSource(args, \"json\");\n if (!Array.isArray(parsed)) {\n return [asObject(parsed, \"json\")];\n }\n if (parsed.length === 0) {\n failValidation(\"--json is an empty list — pass at least one definition\");\n }\n return parsed.map((entry, index) => asObject(entry, \"json\", index));\n}\n\nconst RETRYABLE_CODES = new Set([\"RATE_LIMITED\", \"UNAVAILABLE\", \"INTERNAL_ERROR\", \"NETWORK_ERROR\", \"TIMEOUT\"]);\n\n/**\n * The one error shape for the whole family.\n *\n * Two different 403s reach here and they need opposite responses, which is why\n * the fix is keyed to the message and not just the status:\n * - \"no Google Analytics connection / no property picked\" → the in-chat connect\n * form, same as every other family.\n * - \"this connection can read but not change the property\" → a RECONNECT, which\n * is what every connection made before Baker could configure GA4 needs. The\n * backend's message already says so, so it is passed through as the fix\n * explanation rather than being replaced with the connect-form wording, which\n * would send the user to set up a connection they already have.\n */\nexport function handleError(err: unknown): never {\n if (err instanceof ApiError) {\n const readOnly = err.code === \"FORBIDDEN\" && /read the property but not change it/i.test(err.message);\n writeJsonEnvelope({\n ok: false,\n error: {\n code: err.code,\n message: err.message,\n ...(readOnly\n ? {\n fix: {\n action: \"reconnect\",\n explanation:\n \"The Google Analytics connection is read-only. Ask the user to reconnect Google Analytics — in the \" +\n \"dashboard, Brain → Integrations → Platforms → Google Analytics — which grants the permission to change \" +\n \"the property. Reporting (`baker ga4 query`, `baker ga4 audit`) keeps working meanwhile, so carry \" +\n \"on with the rest of the job and tell them what you will set up once they have reconnected. Don't \" +\n \"claim anything was configured.\",\n },\n }\n : err.code === \"UNAUTHORIZED\" || (err.code === \"FORBIDDEN\" && isNotConnectedError(err.code, err.message))\n ? {\n fix: {\n action: \"request_connection\",\n explanation:\n \"Google Analytics is not connected for this company yet, or no property has been picked. Don't \" +\n 'send the user to Settings — call the `request_connection` tool with { platform: \"google-analytics\", ' +\n \"reason } and they connect and pick their property from inside the chat. If the \" +\n \"`request_connection` call fails, say so plainly and give the exact route: dashboard → Brain → \" +\n \"Integrations → Platforms → Google Analytics. Then carry on with the rest of the task.\",\n },\n }\n : {}),\n retryable: RETRYABLE_CODES.has(err.code),\n },\n });\n process.exit(1);\n }\n writeJsonEnvelope({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\", retryable: true } });\n process.exit(1);\n}\n\n/** Nudges returned after a stage so the agent's next step is obvious. */\nconst STAGE_HINTS = [\n \"Staged only — nothing has changed in Google Analytics yet. These apply when the chat completes, and an applied \" +\n \"change takes effect on the property immediately: there is no version to publish afterwards and no undo. Say \" +\n \"the changes are ready and take effect when the user completes the chat — not that they are done already.\",\n];\n\nconst WARNING_HINT = \"Read the warnings above before telling the user this is ready.\";\n\nexport async function stageOp(op: Record<string, unknown>): Promise<void> {\n const chatId = requireChatId();\n try {\n const { data, hints } = splitHints(await apiPost<Ga4DraftStageResponse>(\"/api/ga4/draft/stage\", { chatId, op }));\n writeJsonEnvelope({\n ok: true,\n data,\n hints: [...hints, ...STAGE_HINTS, ...(data.warnings.length > 0 ? [WARNING_HINT] : [])],\n });\n } catch (err) {\n handleError(err);\n }\n}\n\n/**\n * Stage several changes as ONE request against ONE read of the property.\n *\n * All-or-nothing: if any one of them is refused, none of them stage — which is\n * the honest outcome, since the refusals are things like \"two of these claim the\n * same parameter name\" that only mean anything about the set as a whole. A\n * single op falls through to the plain path so its envelope is unchanged.\n */\nexport async function stageOps(ops: Record<string, unknown>[]): Promise<void> {\n const [only] = ops;\n if (ops.length === 1 && only) {\n await stageOp(only);\n return;\n }\n const chatId = requireChatId();\n try {\n const { data, hints } = splitHints(\n await apiPost<Ga4DraftStageBatchResponse>(\"/api/ga4/draft/stage-batch\", { chatId, ops }),\n );\n writeJsonEnvelope({\n ok: true,\n data,\n hints: [...hints, ...STAGE_HINTS, ...(data.ops.some((op) => op.warnings.length > 0) ? [WARNING_HINT] : [])],\n });\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function draftAction(\n path: string,\n body: Record<string, unknown>,\n chat?: unknown,\n): Promise<Record<string, unknown>> {\n const chatId = resolveChatId(chat);\n try {\n const { data, hints } = splitHints(await apiPost<Record<string, unknown>>(path, { chatId, ...body }));\n writeJsonEnvelope({ ok: true, data, ...(hints.length > 0 ? { hints } : {}) });\n return data;\n } catch (err) {\n handleError(err);\n }\n}\n\n/** A compact, readable view of everything staged on this chat. */\nexport function renderDraft(response: Ga4DraftListResponse): string {\n if (response.count === 0) {\n return \"No Google Analytics changes staged on this chat.\";\n }\n const lines = [\n response.status === \"discarded\"\n ? `${response.count} Google Analytics change(s) discarded with their chat — none will apply`\n : `${response.count} staged Google Analytics change(s)`,\n ...response.ops.map((op) => {\n const status = op.result ? ` [${op.result.status}]` : \"\";\n return ` ${op.ref} ${op.summary}${status}`;\n }),\n ];\n if (response.status === \"applied\") {\n const failed = response.ops.filter((op) => op.result?.status !== \"applied\");\n lines.push(\n \"\",\n failed.length === 0\n ? \"All applied — these are in effect on the property now.\"\n : `${failed.length} of ${response.count} did not apply. The rest are in effect on the property.`,\n );\n }\n if (response.publishError) {\n lines.push(\"\", response.publishError);\n }\n return lines.join(\"\\n\");\n}\n\nexport async function draftList(json: boolean, chat?: unknown): Promise<void> {\n const chatId = resolveChatId(chat);\n try {\n const response = await apiPost<Ga4DraftListResponse>(\"/api/ga4/draft\", { chatId });\n const { data, hints } = splitHints(response);\n if (json) {\n writeJsonEnvelope({ ok: true, data, ...(hints.length > 0 ? { hints } : {}) });\n return;\n }\n process.stdout.write(`${renderDraft(data)}${hintLines(response)}\\n`);\n } catch (err) {\n handleError(err);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/commands/avatars/wait.ts
|
|
2
|
+
var WAIT_TIMEOUT_MS = 9e4;
|
|
3
|
+
var WAIT_INTERVAL_MS = 3e3;
|
|
4
|
+
function shouldKeepWaiting(avatar, elapsedMs) {
|
|
5
|
+
if (avatar.status === "ready") return { done: true, reason: "ready" };
|
|
6
|
+
if (avatar.status === "error" || avatar.status === "archived") return { done: true, reason: "settled" };
|
|
7
|
+
if (avatar.needsFace) return { done: true, reason: "needs-face" };
|
|
8
|
+
if (elapsedMs >= WAIT_TIMEOUT_MS) return { done: false, reason: "expired" };
|
|
9
|
+
return { done: false, reason: "building" };
|
|
10
|
+
}
|
|
11
|
+
async function waitForSheet(first, read, sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))) {
|
|
12
|
+
const startedAt = Date.now();
|
|
13
|
+
let latest = first;
|
|
14
|
+
while (!shouldKeepWaiting(latest, Date.now() - startedAt).done) {
|
|
15
|
+
if (shouldKeepWaiting(latest, Date.now() - startedAt).reason === "expired") return latest;
|
|
16
|
+
await sleep(WAIT_INTERVAL_MS);
|
|
17
|
+
latest = await read();
|
|
18
|
+
}
|
|
19
|
+
return latest;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
waitForSheet
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-WN4KX7GE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/avatars/wait.ts"],"sourcesContent":["import type { AvatarStatus } from \"@baker/api\";\n\n/**\n * Waiting for an avatar's identity sheet, inside the command rather than in the agent.\n *\n * The sheet is a ~30s render, and the agent is told never to sleep on it — right, because\n * a turn spent standing still is a turn the user watches do nothing. But when the only\n * work left DEPENDS on that avatar, \"do the next piece of work\" names work that does not\n * exist, and the observed turn simply ended: the user had to come back and say \"ya está\n * lista\" for the clip to be made.\n *\n * A command that blocks internally is the sanctioned shape for this — it has its own\n * deadline and returns the moment the thing is ready, which a polling loop written by the\n * agent does neither of.\n */\n\n/** How long to keep asking before giving up. Twice the sheet's usual render. */\nexport const WAIT_TIMEOUT_MS = 90_000;\n/** Gap between reads. Short enough to return promptly, long enough not to hammer. */\nexport const WAIT_INTERVAL_MS = 3_000;\n\nexport type WaitDecision =\n | { done: true; reason: \"ready\" | \"settled\" | \"needs-face\" }\n | { done: false; reason: \"building\" | \"expired\" };\n\n/** Just enough of an avatar to know whether waiting on it can ever end. */\nexport interface WaitSubject {\n status: AvatarStatus;\n /**\n * The build is parked on a face the user has not picked yet.\n *\n * `generating` normally means a render is running. This is the one case where it\n * does not: the casting portraits are in front of the user and nothing starts until\n * they answer.\n */\n needsFace?: boolean;\n}\n\n/**\n * Whether to stop waiting on this avatar, given how long we have waited.\n *\n * `error` and `archived` stop it too: both are settled states, and waiting out the\n * deadline for one of them would burn 90 seconds to learn what the first read said.\n *\n * So does an avatar waiting on its face. Nothing is rendering, so the only thing that\n * can happen here is the deadline expiring — and it is the user's own turn to act, not\n * the agent's. Observed: an agent blocked the full 90 seconds twice, concluded the\n * avatar was broken, and deleted the one the user was at that moment picking a face for.\n */\nexport function shouldKeepWaiting(avatar: WaitSubject, elapsedMs: number): WaitDecision {\n if (avatar.status === \"ready\") return { done: true, reason: \"ready\" };\n if (avatar.status === \"error\" || avatar.status === \"archived\") return { done: true, reason: \"settled\" };\n if (avatar.needsFace) return { done: true, reason: \"needs-face\" };\n if (elapsedMs >= WAIT_TIMEOUT_MS) return { done: false, reason: \"expired\" };\n return { done: false, reason: \"building\" };\n}\n\n/**\n * Re-reads the avatar until its sheet settles, or the deadline passes.\n *\n * Returns whatever the last read said either way — an expired wait is not a failure, it\n * is a slow render, and the caller's own hints already say what a still-building avatar\n * can and cannot be used for.\n */\nexport async function waitForSheet<T extends WaitSubject>(\n first: T,\n read: () => Promise<T>,\n sleep: (ms: number) => Promise<void> = (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n): Promise<T> {\n const startedAt = Date.now();\n let latest = first;\n while (!shouldKeepWaiting(latest, Date.now() - startedAt).done) {\n if (shouldKeepWaiting(latest, Date.now() - startedAt).reason === \"expired\") return latest;\n await sleep(WAIT_INTERVAL_MS);\n latest = await read();\n }\n return latest;\n}\n"],"mappings":";AAiBO,IAAM,kBAAkB;AAExB,IAAM,mBAAmB;AA8BzB,SAAS,kBAAkB,QAAqB,WAAiC;AACtF,MAAI,OAAO,WAAW,QAAS,QAAO,EAAE,MAAM,MAAM,QAAQ,QAAQ;AACpE,MAAI,OAAO,WAAW,WAAW,OAAO,WAAW,WAAY,QAAO,EAAE,MAAM,MAAM,QAAQ,UAAU;AACtG,MAAI,OAAO,UAAW,QAAO,EAAE,MAAM,MAAM,QAAQ,aAAa;AAChE,MAAI,aAAa,gBAAiB,QAAO,EAAE,MAAM,OAAO,QAAQ,UAAU;AAC1E,SAAO,EAAE,MAAM,OAAO,QAAQ,WAAW;AAC3C;AASA,eAAsB,aACpB,OACA,MACA,QAAuC,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC,GACnF;AACZ,QAAM,YAAY,KAAK,IAAI;AAC3B,MAAI,SAAS;AACb,SAAO,CAAC,kBAAkB,QAAQ,KAAK,IAAI,IAAI,SAAS,EAAE,MAAM;AAC9D,QAAI,kBAAkB,QAAQ,KAAK,IAAI,IAAI,SAAS,EAAE,WAAW,UAAW,QAAO;AACnF,UAAM,MAAM,gBAAgB;AAC5B,aAAS,MAAM,KAAK;AAAA,EACtB;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import {
|
|
2
|
+
reportError,
|
|
3
|
+
splitList
|
|
4
|
+
} from "./chunk-752S7JF6.js";
|
|
5
|
+
import {
|
|
6
|
+
apiGet
|
|
7
|
+
} from "./chunk-HREWXNTO.js";
|
|
8
|
+
import {
|
|
9
|
+
registerSchema,
|
|
10
|
+
writeJson
|
|
11
|
+
} from "./chunk-WOTDHRNF.js";
|
|
12
|
+
|
|
13
|
+
// src/commands/winning-ads/launches.ts
|
|
14
|
+
import { defineCommand } from "citty";
|
|
15
|
+
registerSchema({
|
|
16
|
+
command: "winning-ads.launches",
|
|
17
|
+
description: 'What the brands you follow (or the ones named) launched in the last N days and which of those ads still run, each with its stage (new, testing, killed_early\u2026), and the tests each brand decided in that window (the version kept, what differed). The "what did competitors launch last week" report. Compact by default; --full lists every launch.',
|
|
18
|
+
args: {
|
|
19
|
+
since: { type: "number", description: "Days to look back, 1-90 (default 7)", required: false, default: 7 },
|
|
20
|
+
advertiser: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: "Comma list of advertiser ids instead of every followed brand",
|
|
23
|
+
required: false
|
|
24
|
+
},
|
|
25
|
+
platform: { type: "string", description: "Only this platform: meta|linkedin|tiktok|google", required: false },
|
|
26
|
+
full: { type: "boolean", description: "List every launch", required: false, default: false }
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
var COMPACT_LAUNCHES = 10;
|
|
30
|
+
function compactLaunches(report, full) {
|
|
31
|
+
return {
|
|
32
|
+
since_days: report.since_days,
|
|
33
|
+
advertisers: report.advertisers.map((b) => ({
|
|
34
|
+
advertiser_id: b.advertiser_id,
|
|
35
|
+
label: b.label,
|
|
36
|
+
launched: b.launched,
|
|
37
|
+
still_running: b.still_running,
|
|
38
|
+
launches: (full ? b.launches : b.launches.slice(0, COMPACT_LAUNCHES)).map((l) => ({
|
|
39
|
+
ad_id: l.ad_id,
|
|
40
|
+
platform: l.platform,
|
|
41
|
+
format: l.format,
|
|
42
|
+
headline: l.headline,
|
|
43
|
+
first_seen_at: l.first_seen_at,
|
|
44
|
+
stage: l.stage,
|
|
45
|
+
idea: l.idea ?? null,
|
|
46
|
+
...full ? { media_url: l.media_url } : {}
|
|
47
|
+
})),
|
|
48
|
+
tests_decided: (b.tests_decided ?? []).map((t) => ({
|
|
49
|
+
concept: t.concept,
|
|
50
|
+
versions: t.versions,
|
|
51
|
+
kept_ad_id: t.winner_ad_id,
|
|
52
|
+
decided_at: t.decided_at ?? null,
|
|
53
|
+
what_differed: t.what_differed
|
|
54
|
+
}))
|
|
55
|
+
}))
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
var IDEA_HINT = "Idea: whether each launch was a `new` idea (the first day of its concept), another version of one the brand was still `testing`, or a version built on a `winner` it had already kept. Many launches and no new idea means the brand is iterating on what works, not testing new directions: say so.";
|
|
59
|
+
function launchesHints(report, named) {
|
|
60
|
+
if (!named && report.following_count === 0) {
|
|
61
|
+
return ["You follow no brands yet: `baker winning-ads follow <domain>` adds one, or pass --advertiser <id>."];
|
|
62
|
+
}
|
|
63
|
+
if (report.advertisers.length === 0) {
|
|
64
|
+
return [`No launches in the last ${report.since_days} days. Widen the window with --since 30.`];
|
|
65
|
+
}
|
|
66
|
+
const withIdeas = report.advertisers.some((b) => b.launches.some((l) => l.idea));
|
|
67
|
+
return [
|
|
68
|
+
...withIdeas ? [IDEA_HINT] : [],
|
|
69
|
+
"Stages: new \u22647 days, testing \u226421 days, proven \u226460 days, evergreen beyond, killed_early = stopped within 2 weeks (a lost test). tests_decided is what each brand learned in the window: the version it kept (kept_ad_id) and what differed. `baker winning-ads search --survived-test` finds the versions brands kept across the library."
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
var launchesCommand = defineCommand({
|
|
73
|
+
meta: {
|
|
74
|
+
name: "launches",
|
|
75
|
+
description: "What competitors launched lately and what still runs. Start here: baker winning-ads launches --since 7 (every followed brand), or --advertiser adv_1,adv_2"
|
|
76
|
+
},
|
|
77
|
+
args: {
|
|
78
|
+
since: { type: "string", description: "Days to look back, 1-90 (default 7)", required: false },
|
|
79
|
+
advertiser: { type: "string", description: "Comma list of advertiser ids", required: false },
|
|
80
|
+
platform: { type: "string", description: "Only this platform: meta|linkedin|tiktok|google", required: false },
|
|
81
|
+
full: { type: "boolean", description: "List every launch", required: false, default: false }
|
|
82
|
+
},
|
|
83
|
+
run: async ({ args }) => {
|
|
84
|
+
try {
|
|
85
|
+
const named = splitList(args.advertiser);
|
|
86
|
+
const params = { since_days: String(args.since ?? 7) };
|
|
87
|
+
if (named.length > 0) {
|
|
88
|
+
params.advertiser = named.join(",");
|
|
89
|
+
}
|
|
90
|
+
if (args.platform) {
|
|
91
|
+
params.platform = String(args.platform);
|
|
92
|
+
}
|
|
93
|
+
const report = await apiGet("/api/ad-library/launches", params);
|
|
94
|
+
writeJson({
|
|
95
|
+
ok: true,
|
|
96
|
+
data: compactLaunches(report, Boolean(args.full)),
|
|
97
|
+
hints: launchesHints(report, named.length > 0)
|
|
98
|
+
});
|
|
99
|
+
} catch (err) {
|
|
100
|
+
reportError(err);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
export {
|
|
106
|
+
compactLaunches,
|
|
107
|
+
IDEA_HINT,
|
|
108
|
+
launchesHints,
|
|
109
|
+
launchesCommand
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=chunk-WNFTXSGR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/winning-ads/launches.ts"],"sourcesContent":["import type { AdvertiserLaunches } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { reportError, splitList } from \"./shared.ts\";\n\nregisterSchema({\n command: \"winning-ads.launches\",\n description:\n 'What the brands you follow (or the ones named) launched in the last N days and which of those ads still run, each with its stage (new, testing, killed_early…), and the tests each brand decided in that window (the version kept, what differed). The \"what did competitors launch last week\" report. Compact by default; --full lists every launch.',\n args: {\n since: { type: \"number\", description: \"Days to look back, 1-90 (default 7)\", required: false, default: 7 },\n advertiser: {\n type: \"string\",\n description: \"Comma list of advertiser ids instead of every followed brand\",\n required: false,\n },\n platform: { type: \"string\", description: \"Only this platform: meta|linkedin|tiktok|google\", required: false },\n full: { type: \"boolean\", description: \"List every launch\", required: false, default: false },\n },\n});\n\nconst COMPACT_LAUNCHES = 10;\n\ntype LaunchesResponse = AdvertiserLaunches & { following_count?: number };\n\nexport function compactLaunches(report: AdvertiserLaunches, full: boolean) {\n return {\n since_days: report.since_days,\n advertisers: report.advertisers.map((b) => ({\n advertiser_id: b.advertiser_id,\n label: b.label,\n launched: b.launched,\n still_running: b.still_running,\n launches: (full ? b.launches : b.launches.slice(0, COMPACT_LAUNCHES)).map((l) => ({\n ad_id: l.ad_id,\n platform: l.platform,\n format: l.format,\n headline: l.headline,\n first_seen_at: l.first_seen_at,\n stage: l.stage,\n idea: l.idea ?? null,\n ...(full ? { media_url: l.media_url } : {}),\n })),\n tests_decided: (b.tests_decided ?? []).map((t) => ({\n concept: t.concept,\n versions: t.versions,\n kept_ad_id: t.winner_ad_id,\n decided_at: t.decided_at ?? null,\n what_differed: t.what_differed,\n })),\n })),\n };\n}\n\n/** How to read a launch's idea; the profile says the same. */\nexport const IDEA_HINT =\n \"Idea: whether each launch was a `new` idea (the first day of its concept), another version of one the brand was still `testing`, or a version built on a `winner` it had already kept. Many launches and no new idea means the brand is iterating on what works, not testing new directions: say so.\";\n\nexport function launchesHints(report: LaunchesResponse, named: boolean): string[] {\n if (!named && report.following_count === 0) {\n return [\"You follow no brands yet: `baker winning-ads follow <domain>` adds one, or pass --advertiser <id>.\"];\n }\n if (report.advertisers.length === 0) {\n return [`No launches in the last ${report.since_days} days. Widen the window with --since 30.`];\n }\n const withIdeas = report.advertisers.some((b) => b.launches.some((l) => l.idea));\n return [\n ...(withIdeas ? [IDEA_HINT] : []),\n \"Stages: new ≤7 days, testing ≤21 days, proven ≤60 days, evergreen beyond, killed_early = stopped within 2 weeks (a lost test). tests_decided is what each brand learned in the window: the version it kept (kept_ad_id) and what differed. `baker winning-ads search --survived-test` finds the versions brands kept across the library.\",\n ];\n}\n\nexport const launchesCommand = defineCommand({\n meta: {\n name: \"launches\",\n description:\n \"What competitors launched lately and what still runs. Start here: baker winning-ads launches --since 7 (every followed brand), or --advertiser adv_1,adv_2\",\n },\n args: {\n since: { type: \"string\", description: \"Days to look back, 1-90 (default 7)\", required: false },\n advertiser: { type: \"string\", description: \"Comma list of advertiser ids\", required: false },\n platform: { type: \"string\", description: \"Only this platform: meta|linkedin|tiktok|google\", required: false },\n full: { type: \"boolean\", description: \"List every launch\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const named = splitList(args.advertiser as string | undefined);\n const params: Record<string, string> = { since_days: String(args.since ?? 7) };\n if (named.length > 0) {\n params.advertiser = named.join(\",\");\n }\n if (args.platform) {\n params.platform = String(args.platform);\n }\n const report = await apiGet<LaunchesResponse>(\"/api/ad-library/launches\", params);\n writeJson({\n ok: true,\n data: compactLaunches(report, Boolean(args.full)),\n hints: launchesHints(report, named.length > 0),\n });\n } catch (err) {\n reportError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
|