@koda-sl/baker-cli 0.544.0 → 0.545.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/{account-QG2AFCRO.js → account-6GKPLNDY.js} +5 -5
- package/dist/{account-reads-2QJQU63B.js → account-reads-X36NPCX5.js} +4 -4
- package/dist/{account-users-TTWSAGAL.js → account-users-FGL3DZES.js} +5 -5
- package/dist/{accounts-CN32WCRF.js → accounts-PKSW3DBQ.js} +4 -4
- package/dist/{accounts-RFJ4MENH.js → accounts-S5C6MZFO.js} +8 -8
- package/dist/{actions-SYRCIDHV.js → actions-ARN3OFB7.js} +18 -18
- package/dist/{activecampaign-NASTXUEK.js → activecampaign-3YJC3H2R.js} +5 -5
- package/dist/{add-GU5YOXPC.js → add-CNYKQD7B.js} +3 -3
- package/dist/{add-KN6SPCY5.js → add-IABKHM5N.js} +4 -4
- package/dist/{ads-I6WMPAO3.js → ads-UXHJCUTX.js} +7 -7
- package/dist/{advertisers-I7UCHETO.js → advertisers-UT7EJ6YS.js} +6 -6
- package/dist/{analytics-BG72H654.js → analytics-COUVH7MV.js} +4 -4
- package/dist/{analytics-AWBWIVXW.js → analytics-EHUUNMGZ.js} +11 -11
- package/dist/{assign-2H3AMY7Q.js → assign-FWT5QQDF.js} +4 -4
- package/dist/{audience-size-3J4WYUTM.js → audience-size-YI2RLIG7.js} +4 -4
- package/dist/{audit-QC4VORTD.js → audit-BPRRCIWN.js} +4 -4
- package/dist/{autocomplete-B7YVYISF.js → autocomplete-OD6SHZZH.js} +6 -6
- package/dist/{avatars-LUCFVVCN.js → avatars-FFFPCH6D.js} +4 -4
- package/dist/{bid-pricing-4BJ4HU3F.js → bid-pricing-JF557IO2.js} +5 -5
- package/dist/{brand-KTM3OQNE.js → brand-ZUYJWKI3.js} +2 -2
- package/dist/{brief-UVCG76J2.js → brief-CJDBD5GJ.js} +13 -13
- package/dist/{campaign-groups-FUJEB5LG.js → campaign-groups-VCT6ZH66.js} +10 -10
- package/dist/{campaign-writes-Z3CJKYW3.js → campaign-writes-YOHDMYDT.js} +4 -4
- package/dist/{campaigns-CGYH7I2R.js → campaigns-7EGRZ3V6.js} +13 -13
- package/dist/{campaigns-QUZN5AFK.js → campaigns-ORK5BYAM.js} +5 -5
- package/dist/{canvas-2DIDJAD4.js → canvas-FW5F3KZJ.js} +13 -13
- package/dist/{capabilities-VQF723CB.js → capabilities-ISW7XT44.js} +4 -4
- package/dist/{changes-QVXOKFLJ.js → changes-HXVZUJMH.js} +4 -4
- package/dist/{chatgpt-NVMLRIZY.js → chatgpt-UXJPCGZU.js} +2 -2
- package/dist/{chats-BWMB3I6F.js → chats-FH3DQNYD.js} +4 -4
- package/dist/{check-6B2L74FJ.js → check-QC5RHS3Z.js} +6 -6
- package/dist/{chunk-4GLSV5AI.js → chunk-2AC5GJHC.js} +2 -2
- package/dist/{chunk-7RXR34EN.js → chunk-2VSUMGJV.js} +2 -2
- package/dist/{chunk-3RWSYI6N.js → chunk-4S5ZAG4S.js} +2 -2
- package/dist/{chunk-BSGVRSNK.js → chunk-5MMJPUBH.js} +3 -3
- package/dist/{chunk-HZO5DOF7.js → chunk-5Y2XPKW2.js} +2 -2
- package/dist/{chunk-FNGBUOPW.js → chunk-6HCYCMIH.js} +2 -2
- package/dist/{chunk-Z7BNOHTY.js → chunk-6R2BQ6FK.js} +2 -2
- package/dist/{chunk-GJHN3B2Y.js → chunk-7P74QKVC.js} +3 -3
- package/dist/{chunk-PGXUR32U.js → chunk-7SJU6PQ7.js} +3 -3
- package/dist/{chunk-XTZVZHTN.js → chunk-A37TIYFD.js} +2 -2
- package/dist/{chunk-PFO26LK5.js → chunk-A6NVGPCZ.js} +2 -2
- package/dist/{chunk-5NGVIBIX.js → chunk-AK7CL5IW.js} +2 -2
- package/dist/{chunk-3KIRDKVB.js → chunk-AOT3UZBM.js} +4 -4
- package/dist/{chunk-JOXEB2AB.js → chunk-D2ZAZGQH.js} +5 -5
- package/dist/{chunk-LMB44RJE.js → chunk-DYTBVVQX.js} +8 -5
- package/dist/chunk-DYTBVVQX.js.map +1 -0
- package/dist/{chunk-G2PHP2JX.js → chunk-EB76M4ZH.js} +2 -2
- package/dist/{chunk-HHQYP6RM.js → chunk-EOMY5SUJ.js} +2 -2
- package/dist/{chunk-GFBEO33K.js → chunk-EY5WWPPZ.js} +6 -6
- package/dist/{chunk-V2SU2SVZ.js → chunk-EZKT5YGX.js} +2 -2
- package/dist/{chunk-RD63FPG6.js → chunk-FVDC6AKZ.js} +2 -2
- package/dist/{chunk-4THPTXKA.js → chunk-GQAKWQAV.js} +2 -2
- package/dist/{chunk-I6YWF2RA.js → chunk-HETNOUE4.js} +3 -3
- package/dist/{chunk-CDKO55S4.js → chunk-HFAT5S5B.js} +2 -2
- package/dist/{chunk-MVWR7JNJ.js → chunk-HQ3I2QVT.js} +2 -2
- package/dist/{chunk-WV3FKE7F.js → chunk-IN5UCEJD.js} +2 -2
- package/dist/{chunk-AM4WK3UM.js → chunk-JLLGXYOZ.js} +2 -2
- package/dist/{chunk-RLAUWWGJ.js → chunk-KBZRG6IK.js} +2 -2
- package/dist/{chunk-7IU4WGGY.js → chunk-KCRBAMFU.js} +2 -2
- package/dist/{chunk-PKZA7XCB.js → chunk-KTY7H44G.js} +3 -3
- package/dist/{chunk-5RX473E3.js → chunk-LKOMEXUB.js} +3 -3
- package/dist/{chunk-ATD3QB46.js → chunk-LVKAMWKJ.js} +3 -3
- package/dist/{chunk-CBQMSX2T.js → chunk-LWCGQNVU.js} +2 -2
- package/dist/{chunk-Y2AKJYI4.js → chunk-MLJKPUWP.js} +4 -4
- package/dist/{chunk-Y2AKJYI4.js.map → chunk-MLJKPUWP.js.map} +1 -1
- package/dist/{chunk-TI4UL56R.js → chunk-MSMTG6OC.js} +6 -3
- package/dist/{chunk-TI4UL56R.js.map → chunk-MSMTG6OC.js.map} +1 -1
- package/dist/{chunk-IJPIIQAX.js → chunk-N4AIJQ4W.js} +2 -2
- package/dist/{chunk-LUIV5R2Z.js → chunk-OKB2EAJH.js} +5 -5
- package/dist/{chunk-SVSWJ56A.js → chunk-OT2MN5UR.js} +2 -2
- package/dist/{chunk-VFL6B6F6.js → chunk-OZR3KUJ3.js} +2 -2
- package/dist/{chunk-3TZW2FOS.js → chunk-PXGR3VGW.js} +3 -3
- package/dist/{chunk-NFXW6C6I.js → chunk-R65V26HH.js} +12 -6
- package/dist/chunk-R65V26HH.js.map +1 -0
- package/dist/{chunk-D3LTHRZZ.js → chunk-RXOQZA4K.js} +3 -3
- package/dist/{chunk-XJSEDW63.js → chunk-SEHJ7Y7J.js} +2 -2
- package/dist/{chunk-UIPSSTMA.js → chunk-SNWFM2DB.js} +2 -2
- package/dist/{chunk-ZFAZ2V5P.js → chunk-TAGRKRFI.js} +2 -2
- package/dist/{chunk-6SM5TZO4.js → chunk-TP2NS5SG.js} +3 -3
- package/dist/{chunk-JFNI5SEG.js → chunk-UOXC3XA5.js} +2 -2
- package/dist/{chunk-RJS47NTI.js → chunk-UQA6Z23M.js} +3 -3
- package/dist/{chunk-BKIHYRQL.js → chunk-V2XA5SIO.js} +7 -4
- package/dist/{chunk-BKIHYRQL.js.map → chunk-V2XA5SIO.js.map} +1 -1
- package/dist/{chunk-APCZKTQZ.js → chunk-WJ5AHR4K.js} +8 -8
- package/dist/chunk-X32MFGWW.js +15 -0
- package/dist/{chunk-PFBQERWX.js.map → chunk-X32MFGWW.js.map} +1 -1
- package/dist/{chunk-CMXG4X3S.js → chunk-YEISVDKW.js} +2 -2
- package/dist/{chunk-FMUOZSE2.js → chunk-YNLWSP5E.js} +2 -2
- package/dist/{chunk-YGDRGBII.js → chunk-ZUUVWWB5.js} +2 -2
- package/dist/{chunk-3BI2PHW4.js → chunk-ZVAZFHH7.js} +2 -2
- package/dist/{claim-XWJJMUON.js → claim-FBL5VBYZ.js} +4 -4
- package/dist/cli.js +32 -32
- package/dist/{companies-KVOWGAFU.js → companies-URRCAJZE.js} +4 -4
- package/dist/{company-OVTBZSTS.js → company-LDCNUPHZ.js} +4 -4
- package/dist/{complete-3H62J4CN.js → complete-3UGPO444.js} +4 -4
- package/dist/{config-3GCILBEL.js → config-3VK74MY6.js} +2 -2
- package/dist/{connect-EZS7NDMA.js → connect-M5KPZQWE.js} +7 -7
- package/dist/{conversation-CCW2J2G6.js → conversation-S7YANZJR.js} +4 -4
- package/dist/{conversion-upload-command-XD5AISWW.js → conversion-upload-command-HFZYKVXA.js} +4 -4
- package/dist/{conversions-VFSX6NYO.js → conversions-QZL4DSJO.js} +9 -9
- package/dist/{create-4RGSS522.js → create-56PJRLMA.js} +4 -4
- package/dist/{create-YDCC3X5V.js → create-OE5MRW3X.js} +3 -3
- package/dist/{create-GOH2JUIY.js → create-RL7PRIDY.js} +4 -4
- package/dist/{create-C7Z47BYL.js → create-Y6YVJ5L4.js} +4 -4
- package/dist/{creatives-HJ2R6HRF.js → creatives-ESVH63AP.js} +10 -10
- package/dist/{creatives-PWUBAVOB.js → creatives-URHXATY6.js} +12 -12
- package/dist/{credentials-45X7PJJK.js → credentials-O6QSB7ZR.js} +4 -4
- package/dist/{critique-4J45TRYU.js → critique-EWJBOCXQ.js} +4 -4
- package/dist/{critique-KIPVWRUA.js → critique-PTGGXRFG.js} +9 -9
- package/dist/{crm-ZXHUGF52.js → crm-F6RGNQH5.js} +6 -6
- package/dist/{crm-LSG3A4RY.js → crm-GLPOO22Q.js} +5 -5
- package/dist/{currency-T7VUQVAZ.js → currency-CHBV6WIO.js} +4 -4
- package/dist/{customers-7GQW7NND.js → customers-Q76FCWYO.js} +6 -6
- package/dist/{delete-T3QRUC5I.js → delete-ODFDZCL3.js} +4 -4
- package/dist/{delete-U3ZMLXWY.js → delete-OVMPDGWQ.js} +3 -3
- package/dist/{delete-C5Z6CJJA.js → delete-XN7N4S4H.js} +4 -4
- package/dist/{demographics-YQRCDSKX.js → demographics-IY5RI55Z.js} +4 -4
- package/dist/{discard-2FRCNBDP.js → discard-GKIA5FML.js} +4 -4
- package/dist/{discover-HRNBTN4K.js → discover-ZU2DAV23.js} +4 -4
- package/dist/{domain-ND56WWT5.js → domain-WGXA7OXV.js} +4 -4
- package/dist/{download-B62FEVDK.js → download-DYYNUGLX.js} +3 -3
- package/dist/{draft-GIJCJIQ5.js → draft-6EHV5NAN.js} +15 -8
- package/dist/draft-6EHV5NAN.js.map +1 -0
- package/dist/{draft-4BEMU7EY.js → draft-EWGNZUU4.js} +10 -5
- package/dist/draft-EWGNZUU4.js.map +1 -0
- package/dist/{draft-ZTOUHIXC.js → draft-EX2I6UJB.js} +16 -13
- package/dist/draft-EX2I6UJB.js.map +1 -0
- package/dist/{draft-RK3ZAUBF.js → draft-FSZMTGWI.js} +12 -6
- package/dist/draft-FSZMTGWI.js.map +1 -0
- package/dist/{draft-TZ2MQ24O.js → draft-GKI6MB7L.js} +18 -11
- package/dist/draft-GKI6MB7L.js.map +1 -0
- package/dist/{draft-6E7EQUCU.js → draft-P3YJZY74.js} +9 -6
- package/dist/draft-P3YJZY74.js.map +1 -0
- package/dist/{draft-AWTS2LBX.js → draft-R7BNWMBR.js} +20 -8
- package/dist/draft-R7BNWMBR.js.map +1 -0
- package/dist/{draft-ZNJHDOJT.js → draft-VYIRZO3E.js} +5 -5
- package/dist/{experiments-CQMEMZXO.js → experiments-6DOKWFH4.js} +5 -5
- package/dist/{facets-FVJHPNQE.js → facets-ZU5DT2QW.js} +4 -4
- package/dist/{feedback-Q4GYVI7P.js → feedback-RIUBM557.js} +13 -13
- package/dist/{feedback-record-UKZPC3QP.js → feedback-record-3VVAUCOH.js} +14 -14
- package/dist/{fetch-SIP2BCYJ.js → fetch-T6TZCU74.js} +4 -4
- package/dist/{fit-6Y6SHLP5.js → fit-YPOHTM7Y.js} +6 -6
- package/dist/{flows-6654JFGC.js → flows-CKVEZFF2.js} +11 -11
- package/dist/{fonts-SM5HLEP4.js → fonts-3J3UVZ2E.js} +6 -6
- package/dist/{forecast-4TS6PIGA.js → forecast-372Q6KQZ.js} +4 -4
- package/dist/{forecast-7I6YKTYU.js → forecast-JEAFUR2O.js} +5 -5
- package/dist/{funnel-ITXHCKXM.js → funnel-FBTNPTS7.js} +5 -5
- package/dist/{ga4-SBHUQKGK.js → ga4-GDMHIFBU.js} +12 -12
- package/dist/{get-VQJIQ4P3.js → get-5N5FCGNH.js} +4 -4
- package/dist/{get-EJ5Q72W7.js → get-EXHUQT65.js} +5 -5
- package/dist/{google-HSIRHXDB.js → google-JHTOX6WM.js} +22 -22
- package/dist/{google-ads-KC3IMYTU.js → google-ads-ZAYRCG2D.js} +4 -4
- package/dist/{history-F765U4J7.js → history-4ULZ4BVV.js} +4 -4
- package/dist/{history-AWPJ7C35.js → history-6J3XRNTZ.js} +4 -4
- package/dist/{hubspot-VJOE2XCP.js → hubspot-ZEHWWJHK.js} +8 -8
- package/dist/{ideas-E4AWTXNN.js → ideas-SB6546GI.js} +5 -5
- package/dist/{images-WLAJPXFL.js → images-LEZYVE7R.js} +4 -4
- package/dist/{ingest-43DTZJHV.js → ingest-4OOTCOLO.js} +3 -3
- package/dist/{ingest-B5OOTIAS.js → ingest-KNJCCIBG.js} +4 -4
- package/dist/{inspect-WGGPJUS6.js → inspect-MHKEYNIC.js} +4 -4
- package/dist/{intent-5XO232DG.js → intent-5QUPPZNI.js} +4 -4
- package/dist/{keyword-gap-ZGMK7SMK.js → keyword-gap-IG3EFLDH.js} +4 -4
- package/dist/{keyword-metrics-TOUOQ7SS.js → keyword-metrics-EL7MO3H6.js} +6 -6
- package/dist/{keywords-for-site-PJHOSSLF.js → keywords-for-site-I7KJLZ2I.js} +6 -6
- package/dist/{landing-ILHRRFYD.js → landing-Z3QGJYM3.js} +2 -2
- package/dist/{languages-U4HA5KQC.js → languages-LNHWSCMT.js} +4 -4
- package/dist/{leads-ZDH4PLRE.js → leads-WQCTZYKT.js} +4 -4
- package/dist/{learn-WTREPVV2.js → learn-6KW6TUVL.js} +5 -5
- package/dist/{line-item-writes-PYADJHLW.js → line-item-writes-B2KSP36W.js} +4 -4
- package/dist/{line-items-OYCJMB6Y.js → line-items-3ICE5DBI.js} +5 -5
- package/dist/{link-CLG2FSJ3.js → link-QRQ34ZDH.js} +4 -4
- package/dist/{linkedin-FTZZWW6D.js → linkedin-D4RKHQPS.js} +34 -32
- package/dist/linkedin-D4RKHQPS.js.map +1 -0
- package/dist/{linkedin-person-DVBTOKLI.js → linkedin-person-Y5TCUOXS.js} +4 -4
- package/dist/{list-OBB6Q2SO.js → list-6HZVHA6T.js} +3 -3
- package/dist/{list-SW63CXEC.js → list-CHYJ53JD.js} +4 -4
- package/dist/{list-4IE7K3OE.js → list-XAMJSOGI.js} +5 -5
- package/dist/{locations-PYZEJPW3.js → locations-KVAAO7LD.js} +4 -4
- package/dist/{log-PKFKZQXD.js → log-PLXGA74X.js} +4 -4
- package/dist/{make-5MCL4B3T.js → make-EP4YSN26.js} +16 -16
- package/dist/{map-JB2OYS7G.js → map-CAFMAMPP.js} +5 -5
- package/dist/{mcp-GS7AO7K5.js → mcp-DDWSXLU7.js} +3 -3
- package/dist/{media-sources-JFLZPZAO.js → media-sources-J5FXYPV5.js} +2 -2
- package/dist/{members-E6EJAZZ4.js → members-ZA7S5KWP.js} +4 -4
- package/dist/{meta-X46LC3GI.js → meta-XVPSGNHU.js} +2 -2
- package/dist/{metrics-76BTT3Y3.js → metrics-MXGA3EFS.js} +4 -4
- package/dist/{normalize-UQIN6KDH.js → normalize-ZHM2ZVXZ.js} +4 -4
- package/dist/{options-YWD3K4UJ.js → options-JTMDZECY.js} +7 -7
- package/dist/{organization-ZACAD7FF.js → organization-5OJEJEQV.js} +4 -4
- package/dist/{performance-DFQVCUDZ.js → performance-AHVTOYTM.js} +4 -4
- package/dist/{performance-KBH3O4O4.js → performance-S273NSUB.js} +5 -5
- package/dist/{plan-2Q6SOHMD.js → plan-FRRE4YQC.js} +2 -2
- package/dist/{promoted-tweet-writes-Q45KVTGM.js → promoted-tweet-writes-UF6LYMH4.js} +4 -4
- package/dist/{promoted-tweets-4PAYET4L.js → promoted-tweets-Z4GG6D7P.js} +3 -3
- package/dist/{publish-TOOCBLS6.js → publish-YQ6MHS7P.js} +4 -4
- package/dist/{query-GSBZKWHE.js → query-FT2BA3WH.js} +5 -5
- package/dist/{read-DF3UPNBM.js → read-7ZFZAJSQ.js} +2 -2
- package/dist/{reddit-2BOIPZLW.js → reddit-YWYRZBL2.js} +5 -5
- package/dist/{refresh-2YQGTF2Q.js → refresh-TEXTTECA.js} +3 -3
- package/dist/{release-6SQOFLTQ.js → release-3JDETBZI.js} +4 -4
- package/dist/{relevant-pages-OMYH3PSP.js → relevant-pages-OCHLUV5K.js} +4 -4
- package/dist/{remove-REVQUCGW.js → remove-KZTSU4K2.js} +3 -3
- package/dist/{reopen-3JFASZ7Z.js → reopen-GIJSFNDH.js} +4 -4
- package/dist/{rerun-HAD2SZDF.js → rerun-6UZNOPUG.js} +15 -15
- package/dist/{research-GTEAD4OK.js → research-TMKG4NQJ.js} +16 -16
- package/dist/{research-DT7UTJQT.js → research-XA2IJ2XV.js} +3 -3
- package/dist/{reset-7VYYVMHY.js → reset-7VL6WJLE.js} +3 -3
- package/dist/{reset-TPMUZBN3.js → reset-HLZ6JHGY.js} +3 -3
- package/dist/{resolve-7DTGRVQ5.js → resolve-H2QW3U5Y.js} +4 -4
- package/dist/{retry-AE76A5JL.js → retry-MIZ67MPP.js} +3 -3
- package/dist/{retry-WVVMZBJT.js → retry-WSWW6EJT.js} +3 -3
- package/dist/{revenue-TXR2Z3LQ.js → revenue-LTU7HRT2.js} +5 -5
- package/dist/{rules-FDJ5YESR.js → rules-BGBCUUPH.js} +6 -6
- package/dist/{rules-add-T2AQ3C4P.js → rules-add-SZT2MSOD.js} +6 -6
- package/dist/{run-N4A75YWN.js → run-FHGT4UQ7.js} +4 -4
- package/dist/{run-VT5OCURD.js → run-XUDGECLL.js} +15 -15
- package/dist/{scaffold-ad-FINQYGF2.js → scaffold-ad-VXNO3SQP.js} +11 -11
- package/dist/{scaffold-static-ad-YDDFTTNN.js → scaffold-static-ad-FT55VV3T.js} +19 -19
- package/dist/{scaffold-video-2CCS7CK4.js → scaffold-video-V7WX5AWZ.js} +10 -10
- package/dist/{schedule-XZVUL4CA.js → schedule-BNRLEFMZ.js} +3 -3
- package/dist/{scheduled-agents-35PY445V.js → scheduled-agents-MAXXXJ7W.js} +11 -11
- package/dist/{schema-JT3464PC.js → schema-YADPD54K.js} +5 -5
- package/dist/{search-VDSV554K.js → search-56ORG4PL.js} +3 -3
- package/dist/{select-EWUA34ZM.js → select-DON4DMNM.js} +12 -12
- package/dist/{set-prompt-ZX364V7V.js → set-prompt-J22TUCRU.js} +9 -9
- package/dist/{setup-links-BI6GPN5F.js → setup-links-CHODCBYH.js} +4 -4
- package/dist/{shopify-RALHX5OB.js → shopify-FCYU4AR6.js} +34 -12
- package/dist/shopify-FCYU4AR6.js.map +1 -0
- package/dist/{site-WKS57PJL.js → site-BF3Q26W5.js} +5 -5
- package/dist/{sources-VUKEO4WE.js → sources-SLCYAWTZ.js} +7 -7
- package/dist/{sources-ECE62RFF.js → sources-VHHC6YQM.js} +6 -6
- package/dist/{stale-PSJNR6EY.js → stale-GLVTL2ZK.js} +11 -11
- package/dist/{status-SJKGPDXC.js → status-E3RA644P.js} +4 -4
- package/dist/{sync-UW5ANNQZ.js → sync-6QCDDJMO.js} +3 -3
- package/dist/{sync-definition-3L7K7QWS.js → sync-definition-DXNHGY5E.js} +10 -10
- package/dist/{tag-manager-5ORFHLM4.js → tag-manager-74CGUGXX.js} +9 -9
- package/dist/{tags-7ZWYNXJD.js → tags-AMZSQJJ2.js} +4 -4
- package/dist/{tags-6H4JKL2B.js → tags-KW7PG2TR.js} +4 -4
- package/dist/{tags-2CDXVME5.js → tags-MGV5KG6I.js} +4 -4
- package/dist/{tags-WFN43UES.js → tags-TM27EIAL.js} +4 -4
- package/dist/{tags-BYZCEK5V.js → tags-VWGKVGZD.js} +4 -4
- package/dist/{targeting-criteria-QIFK56RP.js → targeting-criteria-FT3G4HAW.js} +3 -3
- package/dist/{targets-OVQQEF6E.js → targets-XLVHWO6Z.js} +4 -4
- package/dist/{testimonials-H6SAGYMM.js → testimonials-INXY7CXU.js} +6 -6
- package/dist/{themes-BQP3HK74.js → themes-R3A6IVQN.js} +4 -4
- package/dist/{top-companies-672JEIYA.js → top-companies-MNX3GBCP.js} +4 -4
- package/dist/{transcript-QRDDL4MX.js → transcript-GIAOWCTO.js} +4 -4
- package/dist/{translate-2IHE5YDI.js → translate-JEQ4K4AH.js} +14 -14
- package/dist/{triggers-JMMH4YDD.js → triggers-KDXLDZ23.js} +4 -4
- package/dist/{unlink-AYBNJEJP.js → unlink-PNBSDLBQ.js} +4 -4
- package/dist/{unstage-XMOGDPZ4.js → unstage-X2PDLT5O.js} +4 -4
- package/dist/{update-UX6PTFXZ.js → update-4JGHSQVZ.js} +4 -4
- package/dist/{update-CMJUZH3K.js → update-4XUQN4LK.js} +4 -4
- package/dist/{update-3NNT6EAS.js → update-TJTDFWER.js} +4 -4
- package/dist/{update-YIUE3QBL.js → update-URU4TO2F.js} +3 -3
- package/dist/{upload-OY35RO5V.js → upload-TO5EPTVD.js} +4 -4
- package/dist/{url-options-5ADN3SYO.js → url-options-YZ6UG3NY.js} +4 -4
- package/dist/{url-params-DUEOK2Y3.js → url-params-533CWJH3.js} +4 -4
- package/dist/{validate-SFVCHAGI.js → validate-XF6HU7D4.js} +12 -12
- package/dist/{videos-OGMX2BDQ.js → videos-KYZ4CUOB.js} +6 -6
- package/dist/{viewer-check-K6UC5PCF.js → viewer-check-U5GUU34Z.js} +7 -7
- package/dist/{web-JKCYPZK5.js → web-ZYMSMIV6.js} +4 -4
- package/dist/{winning-ads-J3WR3ENK.js → winning-ads-BCN5RVAE.js} +3 -3
- package/dist/{write-commands-FGWCJHLH.js → write-commands-5Z5A3D3M.js} +2 -2
- package/dist/{write-commands-UTM7PPK5.js → write-commands-7DTFGM6E.js} +2 -2
- package/dist/{write-commands-RSN3MPBW.js → write-commands-PZZ72PNL.js} +5 -5
- package/dist/{x-F44WG5LV.js → x-DLEZYTAU.js} +6 -6
- package/package.json +1 -1
- package/dist/chunk-LMB44RJE.js.map +0 -1
- package/dist/chunk-NFXW6C6I.js.map +0 -1
- package/dist/chunk-PFBQERWX.js +0 -10
- package/dist/draft-4BEMU7EY.js.map +0 -1
- package/dist/draft-6E7EQUCU.js.map +0 -1
- package/dist/draft-AWTS2LBX.js.map +0 -1
- package/dist/draft-GIJCJIQ5.js.map +0 -1
- package/dist/draft-RK3ZAUBF.js.map +0 -1
- package/dist/draft-TZ2MQ24O.js.map +0 -1
- package/dist/draft-ZTOUHIXC.js.map +0 -1
- package/dist/linkedin-FTZZWW6D.js.map +0 -1
- package/dist/shopify-RALHX5OB.js.map +0 -1
- /package/dist/{account-QG2AFCRO.js.map → account-6GKPLNDY.js.map} +0 -0
- /package/dist/{account-reads-2QJQU63B.js.map → account-reads-X36NPCX5.js.map} +0 -0
- /package/dist/{account-users-TTWSAGAL.js.map → account-users-FGL3DZES.js.map} +0 -0
- /package/dist/{accounts-CN32WCRF.js.map → accounts-PKSW3DBQ.js.map} +0 -0
- /package/dist/{accounts-RFJ4MENH.js.map → accounts-S5C6MZFO.js.map} +0 -0
- /package/dist/{actions-SYRCIDHV.js.map → actions-ARN3OFB7.js.map} +0 -0
- /package/dist/{activecampaign-NASTXUEK.js.map → activecampaign-3YJC3H2R.js.map} +0 -0
- /package/dist/{add-GU5YOXPC.js.map → add-CNYKQD7B.js.map} +0 -0
- /package/dist/{add-KN6SPCY5.js.map → add-IABKHM5N.js.map} +0 -0
- /package/dist/{ads-I6WMPAO3.js.map → ads-UXHJCUTX.js.map} +0 -0
- /package/dist/{advertisers-I7UCHETO.js.map → advertisers-UT7EJ6YS.js.map} +0 -0
- /package/dist/{analytics-BG72H654.js.map → analytics-COUVH7MV.js.map} +0 -0
- /package/dist/{analytics-AWBWIVXW.js.map → analytics-EHUUNMGZ.js.map} +0 -0
- /package/dist/{assign-2H3AMY7Q.js.map → assign-FWT5QQDF.js.map} +0 -0
- /package/dist/{audience-size-3J4WYUTM.js.map → audience-size-YI2RLIG7.js.map} +0 -0
- /package/dist/{audit-QC4VORTD.js.map → audit-BPRRCIWN.js.map} +0 -0
- /package/dist/{autocomplete-B7YVYISF.js.map → autocomplete-OD6SHZZH.js.map} +0 -0
- /package/dist/{avatars-LUCFVVCN.js.map → avatars-FFFPCH6D.js.map} +0 -0
- /package/dist/{bid-pricing-4BJ4HU3F.js.map → bid-pricing-JF557IO2.js.map} +0 -0
- /package/dist/{brand-KTM3OQNE.js.map → brand-ZUYJWKI3.js.map} +0 -0
- /package/dist/{brief-UVCG76J2.js.map → brief-CJDBD5GJ.js.map} +0 -0
- /package/dist/{campaign-groups-FUJEB5LG.js.map → campaign-groups-VCT6ZH66.js.map} +0 -0
- /package/dist/{campaign-writes-Z3CJKYW3.js.map → campaign-writes-YOHDMYDT.js.map} +0 -0
- /package/dist/{campaigns-CGYH7I2R.js.map → campaigns-7EGRZ3V6.js.map} +0 -0
- /package/dist/{campaigns-QUZN5AFK.js.map → campaigns-ORK5BYAM.js.map} +0 -0
- /package/dist/{canvas-2DIDJAD4.js.map → canvas-FW5F3KZJ.js.map} +0 -0
- /package/dist/{capabilities-VQF723CB.js.map → capabilities-ISW7XT44.js.map} +0 -0
- /package/dist/{changes-QVXOKFLJ.js.map → changes-HXVZUJMH.js.map} +0 -0
- /package/dist/{chatgpt-NVMLRIZY.js.map → chatgpt-UXJPCGZU.js.map} +0 -0
- /package/dist/{chats-BWMB3I6F.js.map → chats-FH3DQNYD.js.map} +0 -0
- /package/dist/{check-6B2L74FJ.js.map → check-QC5RHS3Z.js.map} +0 -0
- /package/dist/{chunk-4GLSV5AI.js.map → chunk-2AC5GJHC.js.map} +0 -0
- /package/dist/{chunk-7RXR34EN.js.map → chunk-2VSUMGJV.js.map} +0 -0
- /package/dist/{chunk-3RWSYI6N.js.map → chunk-4S5ZAG4S.js.map} +0 -0
- /package/dist/{chunk-BSGVRSNK.js.map → chunk-5MMJPUBH.js.map} +0 -0
- /package/dist/{chunk-HZO5DOF7.js.map → chunk-5Y2XPKW2.js.map} +0 -0
- /package/dist/{chunk-FNGBUOPW.js.map → chunk-6HCYCMIH.js.map} +0 -0
- /package/dist/{chunk-Z7BNOHTY.js.map → chunk-6R2BQ6FK.js.map} +0 -0
- /package/dist/{chunk-GJHN3B2Y.js.map → chunk-7P74QKVC.js.map} +0 -0
- /package/dist/{chunk-PGXUR32U.js.map → chunk-7SJU6PQ7.js.map} +0 -0
- /package/dist/{chunk-XTZVZHTN.js.map → chunk-A37TIYFD.js.map} +0 -0
- /package/dist/{chunk-PFO26LK5.js.map → chunk-A6NVGPCZ.js.map} +0 -0
- /package/dist/{chunk-5NGVIBIX.js.map → chunk-AK7CL5IW.js.map} +0 -0
- /package/dist/{chunk-3KIRDKVB.js.map → chunk-AOT3UZBM.js.map} +0 -0
- /package/dist/{chunk-JOXEB2AB.js.map → chunk-D2ZAZGQH.js.map} +0 -0
- /package/dist/{chunk-G2PHP2JX.js.map → chunk-EB76M4ZH.js.map} +0 -0
- /package/dist/{chunk-HHQYP6RM.js.map → chunk-EOMY5SUJ.js.map} +0 -0
- /package/dist/{chunk-GFBEO33K.js.map → chunk-EY5WWPPZ.js.map} +0 -0
- /package/dist/{chunk-V2SU2SVZ.js.map → chunk-EZKT5YGX.js.map} +0 -0
- /package/dist/{chunk-RD63FPG6.js.map → chunk-FVDC6AKZ.js.map} +0 -0
- /package/dist/{chunk-4THPTXKA.js.map → chunk-GQAKWQAV.js.map} +0 -0
- /package/dist/{chunk-I6YWF2RA.js.map → chunk-HETNOUE4.js.map} +0 -0
- /package/dist/{chunk-CDKO55S4.js.map → chunk-HFAT5S5B.js.map} +0 -0
- /package/dist/{chunk-MVWR7JNJ.js.map → chunk-HQ3I2QVT.js.map} +0 -0
- /package/dist/{chunk-WV3FKE7F.js.map → chunk-IN5UCEJD.js.map} +0 -0
- /package/dist/{chunk-AM4WK3UM.js.map → chunk-JLLGXYOZ.js.map} +0 -0
- /package/dist/{chunk-RLAUWWGJ.js.map → chunk-KBZRG6IK.js.map} +0 -0
- /package/dist/{chunk-7IU4WGGY.js.map → chunk-KCRBAMFU.js.map} +0 -0
- /package/dist/{chunk-PKZA7XCB.js.map → chunk-KTY7H44G.js.map} +0 -0
- /package/dist/{chunk-5RX473E3.js.map → chunk-LKOMEXUB.js.map} +0 -0
- /package/dist/{chunk-ATD3QB46.js.map → chunk-LVKAMWKJ.js.map} +0 -0
- /package/dist/{chunk-CBQMSX2T.js.map → chunk-LWCGQNVU.js.map} +0 -0
- /package/dist/{chunk-IJPIIQAX.js.map → chunk-N4AIJQ4W.js.map} +0 -0
- /package/dist/{chunk-LUIV5R2Z.js.map → chunk-OKB2EAJH.js.map} +0 -0
- /package/dist/{chunk-SVSWJ56A.js.map → chunk-OT2MN5UR.js.map} +0 -0
- /package/dist/{chunk-VFL6B6F6.js.map → chunk-OZR3KUJ3.js.map} +0 -0
- /package/dist/{chunk-3TZW2FOS.js.map → chunk-PXGR3VGW.js.map} +0 -0
- /package/dist/{chunk-D3LTHRZZ.js.map → chunk-RXOQZA4K.js.map} +0 -0
- /package/dist/{chunk-XJSEDW63.js.map → chunk-SEHJ7Y7J.js.map} +0 -0
- /package/dist/{chunk-UIPSSTMA.js.map → chunk-SNWFM2DB.js.map} +0 -0
- /package/dist/{chunk-ZFAZ2V5P.js.map → chunk-TAGRKRFI.js.map} +0 -0
- /package/dist/{chunk-6SM5TZO4.js.map → chunk-TP2NS5SG.js.map} +0 -0
- /package/dist/{chunk-JFNI5SEG.js.map → chunk-UOXC3XA5.js.map} +0 -0
- /package/dist/{chunk-RJS47NTI.js.map → chunk-UQA6Z23M.js.map} +0 -0
- /package/dist/{chunk-APCZKTQZ.js.map → chunk-WJ5AHR4K.js.map} +0 -0
- /package/dist/{chunk-CMXG4X3S.js.map → chunk-YEISVDKW.js.map} +0 -0
- /package/dist/{chunk-FMUOZSE2.js.map → chunk-YNLWSP5E.js.map} +0 -0
- /package/dist/{chunk-YGDRGBII.js.map → chunk-ZUUVWWB5.js.map} +0 -0
- /package/dist/{chunk-3BI2PHW4.js.map → chunk-ZVAZFHH7.js.map} +0 -0
- /package/dist/{claim-XWJJMUON.js.map → claim-FBL5VBYZ.js.map} +0 -0
- /package/dist/{companies-KVOWGAFU.js.map → companies-URRCAJZE.js.map} +0 -0
- /package/dist/{company-OVTBZSTS.js.map → company-LDCNUPHZ.js.map} +0 -0
- /package/dist/{complete-3H62J4CN.js.map → complete-3UGPO444.js.map} +0 -0
- /package/dist/{config-3GCILBEL.js.map → config-3VK74MY6.js.map} +0 -0
- /package/dist/{connect-EZS7NDMA.js.map → connect-M5KPZQWE.js.map} +0 -0
- /package/dist/{conversation-CCW2J2G6.js.map → conversation-S7YANZJR.js.map} +0 -0
- /package/dist/{conversion-upload-command-XD5AISWW.js.map → conversion-upload-command-HFZYKVXA.js.map} +0 -0
- /package/dist/{conversions-VFSX6NYO.js.map → conversions-QZL4DSJO.js.map} +0 -0
- /package/dist/{create-4RGSS522.js.map → create-56PJRLMA.js.map} +0 -0
- /package/dist/{create-YDCC3X5V.js.map → create-OE5MRW3X.js.map} +0 -0
- /package/dist/{create-GOH2JUIY.js.map → create-RL7PRIDY.js.map} +0 -0
- /package/dist/{create-C7Z47BYL.js.map → create-Y6YVJ5L4.js.map} +0 -0
- /package/dist/{creatives-HJ2R6HRF.js.map → creatives-ESVH63AP.js.map} +0 -0
- /package/dist/{creatives-PWUBAVOB.js.map → creatives-URHXATY6.js.map} +0 -0
- /package/dist/{credentials-45X7PJJK.js.map → credentials-O6QSB7ZR.js.map} +0 -0
- /package/dist/{critique-4J45TRYU.js.map → critique-EWJBOCXQ.js.map} +0 -0
- /package/dist/{critique-KIPVWRUA.js.map → critique-PTGGXRFG.js.map} +0 -0
- /package/dist/{crm-ZXHUGF52.js.map → crm-F6RGNQH5.js.map} +0 -0
- /package/dist/{crm-LSG3A4RY.js.map → crm-GLPOO22Q.js.map} +0 -0
- /package/dist/{currency-T7VUQVAZ.js.map → currency-CHBV6WIO.js.map} +0 -0
- /package/dist/{customers-7GQW7NND.js.map → customers-Q76FCWYO.js.map} +0 -0
- /package/dist/{delete-T3QRUC5I.js.map → delete-ODFDZCL3.js.map} +0 -0
- /package/dist/{delete-U3ZMLXWY.js.map → delete-OVMPDGWQ.js.map} +0 -0
- /package/dist/{delete-C5Z6CJJA.js.map → delete-XN7N4S4H.js.map} +0 -0
- /package/dist/{demographics-YQRCDSKX.js.map → demographics-IY5RI55Z.js.map} +0 -0
- /package/dist/{discard-2FRCNBDP.js.map → discard-GKIA5FML.js.map} +0 -0
- /package/dist/{discover-HRNBTN4K.js.map → discover-ZU2DAV23.js.map} +0 -0
- /package/dist/{domain-ND56WWT5.js.map → domain-WGXA7OXV.js.map} +0 -0
- /package/dist/{download-B62FEVDK.js.map → download-DYYNUGLX.js.map} +0 -0
- /package/dist/{draft-ZNJHDOJT.js.map → draft-VYIRZO3E.js.map} +0 -0
- /package/dist/{experiments-CQMEMZXO.js.map → experiments-6DOKWFH4.js.map} +0 -0
- /package/dist/{facets-FVJHPNQE.js.map → facets-ZU5DT2QW.js.map} +0 -0
- /package/dist/{feedback-Q4GYVI7P.js.map → feedback-RIUBM557.js.map} +0 -0
- /package/dist/{feedback-record-UKZPC3QP.js.map → feedback-record-3VVAUCOH.js.map} +0 -0
- /package/dist/{fetch-SIP2BCYJ.js.map → fetch-T6TZCU74.js.map} +0 -0
- /package/dist/{fit-6Y6SHLP5.js.map → fit-YPOHTM7Y.js.map} +0 -0
- /package/dist/{flows-6654JFGC.js.map → flows-CKVEZFF2.js.map} +0 -0
- /package/dist/{fonts-SM5HLEP4.js.map → fonts-3J3UVZ2E.js.map} +0 -0
- /package/dist/{forecast-4TS6PIGA.js.map → forecast-372Q6KQZ.js.map} +0 -0
- /package/dist/{forecast-7I6YKTYU.js.map → forecast-JEAFUR2O.js.map} +0 -0
- /package/dist/{funnel-ITXHCKXM.js.map → funnel-FBTNPTS7.js.map} +0 -0
- /package/dist/{ga4-SBHUQKGK.js.map → ga4-GDMHIFBU.js.map} +0 -0
- /package/dist/{get-VQJIQ4P3.js.map → get-5N5FCGNH.js.map} +0 -0
- /package/dist/{get-EJ5Q72W7.js.map → get-EXHUQT65.js.map} +0 -0
- /package/dist/{google-HSIRHXDB.js.map → google-JHTOX6WM.js.map} +0 -0
- /package/dist/{google-ads-KC3IMYTU.js.map → google-ads-ZAYRCG2D.js.map} +0 -0
- /package/dist/{history-F765U4J7.js.map → history-4ULZ4BVV.js.map} +0 -0
- /package/dist/{history-AWPJ7C35.js.map → history-6J3XRNTZ.js.map} +0 -0
- /package/dist/{hubspot-VJOE2XCP.js.map → hubspot-ZEHWWJHK.js.map} +0 -0
- /package/dist/{ideas-E4AWTXNN.js.map → ideas-SB6546GI.js.map} +0 -0
- /package/dist/{images-WLAJPXFL.js.map → images-LEZYVE7R.js.map} +0 -0
- /package/dist/{ingest-43DTZJHV.js.map → ingest-4OOTCOLO.js.map} +0 -0
- /package/dist/{ingest-B5OOTIAS.js.map → ingest-KNJCCIBG.js.map} +0 -0
- /package/dist/{inspect-WGGPJUS6.js.map → inspect-MHKEYNIC.js.map} +0 -0
- /package/dist/{intent-5XO232DG.js.map → intent-5QUPPZNI.js.map} +0 -0
- /package/dist/{keyword-gap-ZGMK7SMK.js.map → keyword-gap-IG3EFLDH.js.map} +0 -0
- /package/dist/{keyword-metrics-TOUOQ7SS.js.map → keyword-metrics-EL7MO3H6.js.map} +0 -0
- /package/dist/{keywords-for-site-PJHOSSLF.js.map → keywords-for-site-I7KJLZ2I.js.map} +0 -0
- /package/dist/{landing-ILHRRFYD.js.map → landing-Z3QGJYM3.js.map} +0 -0
- /package/dist/{languages-U4HA5KQC.js.map → languages-LNHWSCMT.js.map} +0 -0
- /package/dist/{leads-ZDH4PLRE.js.map → leads-WQCTZYKT.js.map} +0 -0
- /package/dist/{learn-WTREPVV2.js.map → learn-6KW6TUVL.js.map} +0 -0
- /package/dist/{line-item-writes-PYADJHLW.js.map → line-item-writes-B2KSP36W.js.map} +0 -0
- /package/dist/{line-items-OYCJMB6Y.js.map → line-items-3ICE5DBI.js.map} +0 -0
- /package/dist/{link-CLG2FSJ3.js.map → link-QRQ34ZDH.js.map} +0 -0
- /package/dist/{linkedin-person-DVBTOKLI.js.map → linkedin-person-Y5TCUOXS.js.map} +0 -0
- /package/dist/{list-OBB6Q2SO.js.map → list-6HZVHA6T.js.map} +0 -0
- /package/dist/{list-SW63CXEC.js.map → list-CHYJ53JD.js.map} +0 -0
- /package/dist/{list-4IE7K3OE.js.map → list-XAMJSOGI.js.map} +0 -0
- /package/dist/{locations-PYZEJPW3.js.map → locations-KVAAO7LD.js.map} +0 -0
- /package/dist/{log-PKFKZQXD.js.map → log-PLXGA74X.js.map} +0 -0
- /package/dist/{make-5MCL4B3T.js.map → make-EP4YSN26.js.map} +0 -0
- /package/dist/{map-JB2OYS7G.js.map → map-CAFMAMPP.js.map} +0 -0
- /package/dist/{mcp-GS7AO7K5.js.map → mcp-DDWSXLU7.js.map} +0 -0
- /package/dist/{media-sources-JFLZPZAO.js.map → media-sources-J5FXYPV5.js.map} +0 -0
- /package/dist/{members-E6EJAZZ4.js.map → members-ZA7S5KWP.js.map} +0 -0
- /package/dist/{meta-X46LC3GI.js.map → meta-XVPSGNHU.js.map} +0 -0
- /package/dist/{metrics-76BTT3Y3.js.map → metrics-MXGA3EFS.js.map} +0 -0
- /package/dist/{normalize-UQIN6KDH.js.map → normalize-ZHM2ZVXZ.js.map} +0 -0
- /package/dist/{options-YWD3K4UJ.js.map → options-JTMDZECY.js.map} +0 -0
- /package/dist/{organization-ZACAD7FF.js.map → organization-5OJEJEQV.js.map} +0 -0
- /package/dist/{performance-DFQVCUDZ.js.map → performance-AHVTOYTM.js.map} +0 -0
- /package/dist/{performance-KBH3O4O4.js.map → performance-S273NSUB.js.map} +0 -0
- /package/dist/{plan-2Q6SOHMD.js.map → plan-FRRE4YQC.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-Q45KVTGM.js.map → promoted-tweet-writes-UF6LYMH4.js.map} +0 -0
- /package/dist/{promoted-tweets-4PAYET4L.js.map → promoted-tweets-Z4GG6D7P.js.map} +0 -0
- /package/dist/{publish-TOOCBLS6.js.map → publish-YQ6MHS7P.js.map} +0 -0
- /package/dist/{query-GSBZKWHE.js.map → query-FT2BA3WH.js.map} +0 -0
- /package/dist/{read-DF3UPNBM.js.map → read-7ZFZAJSQ.js.map} +0 -0
- /package/dist/{reddit-2BOIPZLW.js.map → reddit-YWYRZBL2.js.map} +0 -0
- /package/dist/{refresh-2YQGTF2Q.js.map → refresh-TEXTTECA.js.map} +0 -0
- /package/dist/{release-6SQOFLTQ.js.map → release-3JDETBZI.js.map} +0 -0
- /package/dist/{relevant-pages-OMYH3PSP.js.map → relevant-pages-OCHLUV5K.js.map} +0 -0
- /package/dist/{remove-REVQUCGW.js.map → remove-KZTSU4K2.js.map} +0 -0
- /package/dist/{reopen-3JFASZ7Z.js.map → reopen-GIJSFNDH.js.map} +0 -0
- /package/dist/{rerun-HAD2SZDF.js.map → rerun-6UZNOPUG.js.map} +0 -0
- /package/dist/{research-GTEAD4OK.js.map → research-TMKG4NQJ.js.map} +0 -0
- /package/dist/{research-DT7UTJQT.js.map → research-XA2IJ2XV.js.map} +0 -0
- /package/dist/{reset-7VYYVMHY.js.map → reset-7VL6WJLE.js.map} +0 -0
- /package/dist/{reset-TPMUZBN3.js.map → reset-HLZ6JHGY.js.map} +0 -0
- /package/dist/{resolve-7DTGRVQ5.js.map → resolve-H2QW3U5Y.js.map} +0 -0
- /package/dist/{retry-AE76A5JL.js.map → retry-MIZ67MPP.js.map} +0 -0
- /package/dist/{retry-WVVMZBJT.js.map → retry-WSWW6EJT.js.map} +0 -0
- /package/dist/{revenue-TXR2Z3LQ.js.map → revenue-LTU7HRT2.js.map} +0 -0
- /package/dist/{rules-FDJ5YESR.js.map → rules-BGBCUUPH.js.map} +0 -0
- /package/dist/{rules-add-T2AQ3C4P.js.map → rules-add-SZT2MSOD.js.map} +0 -0
- /package/dist/{run-N4A75YWN.js.map → run-FHGT4UQ7.js.map} +0 -0
- /package/dist/{run-VT5OCURD.js.map → run-XUDGECLL.js.map} +0 -0
- /package/dist/{scaffold-ad-FINQYGF2.js.map → scaffold-ad-VXNO3SQP.js.map} +0 -0
- /package/dist/{scaffold-static-ad-YDDFTTNN.js.map → scaffold-static-ad-FT55VV3T.js.map} +0 -0
- /package/dist/{scaffold-video-2CCS7CK4.js.map → scaffold-video-V7WX5AWZ.js.map} +0 -0
- /package/dist/{schedule-XZVUL4CA.js.map → schedule-BNRLEFMZ.js.map} +0 -0
- /package/dist/{scheduled-agents-35PY445V.js.map → scheduled-agents-MAXXXJ7W.js.map} +0 -0
- /package/dist/{schema-JT3464PC.js.map → schema-YADPD54K.js.map} +0 -0
- /package/dist/{search-VDSV554K.js.map → search-56ORG4PL.js.map} +0 -0
- /package/dist/{select-EWUA34ZM.js.map → select-DON4DMNM.js.map} +0 -0
- /package/dist/{set-prompt-ZX364V7V.js.map → set-prompt-J22TUCRU.js.map} +0 -0
- /package/dist/{setup-links-BI6GPN5F.js.map → setup-links-CHODCBYH.js.map} +0 -0
- /package/dist/{site-WKS57PJL.js.map → site-BF3Q26W5.js.map} +0 -0
- /package/dist/{sources-VUKEO4WE.js.map → sources-SLCYAWTZ.js.map} +0 -0
- /package/dist/{sources-ECE62RFF.js.map → sources-VHHC6YQM.js.map} +0 -0
- /package/dist/{stale-PSJNR6EY.js.map → stale-GLVTL2ZK.js.map} +0 -0
- /package/dist/{status-SJKGPDXC.js.map → status-E3RA644P.js.map} +0 -0
- /package/dist/{sync-UW5ANNQZ.js.map → sync-6QCDDJMO.js.map} +0 -0
- /package/dist/{sync-definition-3L7K7QWS.js.map → sync-definition-DXNHGY5E.js.map} +0 -0
- /package/dist/{tag-manager-5ORFHLM4.js.map → tag-manager-74CGUGXX.js.map} +0 -0
- /package/dist/{tags-7ZWYNXJD.js.map → tags-AMZSQJJ2.js.map} +0 -0
- /package/dist/{tags-6H4JKL2B.js.map → tags-KW7PG2TR.js.map} +0 -0
- /package/dist/{tags-2CDXVME5.js.map → tags-MGV5KG6I.js.map} +0 -0
- /package/dist/{tags-WFN43UES.js.map → tags-TM27EIAL.js.map} +0 -0
- /package/dist/{tags-BYZCEK5V.js.map → tags-VWGKVGZD.js.map} +0 -0
- /package/dist/{targeting-criteria-QIFK56RP.js.map → targeting-criteria-FT3G4HAW.js.map} +0 -0
- /package/dist/{targets-OVQQEF6E.js.map → targets-XLVHWO6Z.js.map} +0 -0
- /package/dist/{testimonials-H6SAGYMM.js.map → testimonials-INXY7CXU.js.map} +0 -0
- /package/dist/{themes-BQP3HK74.js.map → themes-R3A6IVQN.js.map} +0 -0
- /package/dist/{top-companies-672JEIYA.js.map → top-companies-MNX3GBCP.js.map} +0 -0
- /package/dist/{transcript-QRDDL4MX.js.map → transcript-GIAOWCTO.js.map} +0 -0
- /package/dist/{translate-2IHE5YDI.js.map → translate-JEQ4K4AH.js.map} +0 -0
- /package/dist/{triggers-JMMH4YDD.js.map → triggers-KDXLDZ23.js.map} +0 -0
- /package/dist/{unlink-AYBNJEJP.js.map → unlink-PNBSDLBQ.js.map} +0 -0
- /package/dist/{unstage-XMOGDPZ4.js.map → unstage-X2PDLT5O.js.map} +0 -0
- /package/dist/{update-UX6PTFXZ.js.map → update-4JGHSQVZ.js.map} +0 -0
- /package/dist/{update-CMJUZH3K.js.map → update-4XUQN4LK.js.map} +0 -0
- /package/dist/{update-3NNT6EAS.js.map → update-TJTDFWER.js.map} +0 -0
- /package/dist/{update-YIUE3QBL.js.map → update-URU4TO2F.js.map} +0 -0
- /package/dist/{upload-OY35RO5V.js.map → upload-TO5EPTVD.js.map} +0 -0
- /package/dist/{url-options-5ADN3SYO.js.map → url-options-YZ6UG3NY.js.map} +0 -0
- /package/dist/{url-params-DUEOK2Y3.js.map → url-params-533CWJH3.js.map} +0 -0
- /package/dist/{validate-SFVCHAGI.js.map → validate-XF6HU7D4.js.map} +0 -0
- /package/dist/{videos-OGMX2BDQ.js.map → videos-KYZ4CUOB.js.map} +0 -0
- /package/dist/{viewer-check-K6UC5PCF.js.map → viewer-check-U5GUU34Z.js.map} +0 -0
- /package/dist/{web-JKCYPZK5.js.map → web-ZYMSMIV6.js.map} +0 -0
- /package/dist/{winning-ads-J3WR3ENK.js.map → winning-ads-BCN5RVAE.js.map} +0 -0
- /package/dist/{write-commands-FGWCJHLH.js.map → write-commands-5Z5A3D3M.js.map} +0 -0
- /package/dist/{write-commands-UTM7PPK5.js.map → write-commands-7DTFGM6E.js.map} +0 -0
- /package/dist/{write-commands-RSN3MPBW.js.map → write-commands-PZZ72PNL.js.map} +0 -0
- /package/dist/{x-F44WG5LV.js.map → x-DLEZYTAU.js.map} +0 -0
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
buildAdsQueryContext,
|
|
8
8
|
warnDefaults
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-FVDC6AKZ.js";
|
|
10
|
+
import "./chunk-SNWFM2DB.js";
|
|
11
11
|
import {
|
|
12
12
|
buildQueryCacheKey,
|
|
13
13
|
cacheGet,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
writeAdsJson,
|
|
20
20
|
writeAdsOutput
|
|
21
21
|
} from "./chunk-MGWAZXY6.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-MSMTG6OC.js";
|
|
23
23
|
import {
|
|
24
24
|
ApiError,
|
|
25
25
|
apiPost
|
|
@@ -169,4 +169,4 @@ export {
|
|
|
169
169
|
discoverCommand,
|
|
170
170
|
stampDiscoverResponse
|
|
171
171
|
};
|
|
172
|
-
//# sourceMappingURL=discover-
|
|
172
|
+
//# sourceMappingURL=discover-ZU2DAV23.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
failSite
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-TAGRKRFI.js";
|
|
4
|
+
import "./chunk-R65V26HH.js";
|
|
5
5
|
import "./chunk-QV6AST5T.js";
|
|
6
6
|
import "./chunk-WCU362Z6.js";
|
|
7
7
|
import "./chunk-GIWHHCD6.js";
|
|
8
8
|
import "./chunk-SOPVIIUW.js";
|
|
9
9
|
import "./chunk-G4FG5EQO.js";
|
|
10
10
|
import "./chunk-NSBNIPIW.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-MSMTG6OC.js";
|
|
12
12
|
import {
|
|
13
13
|
apiGet,
|
|
14
14
|
apiPost
|
|
@@ -98,4 +98,4 @@ var domainCommand = defineCommand({
|
|
|
98
98
|
export {
|
|
99
99
|
domainCommand
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=domain-
|
|
101
|
+
//# sourceMappingURL=domain-WGXA7OXV.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
videosDownloadResponseSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-R65V26HH.js";
|
|
4
4
|
import "./chunk-QV6AST5T.js";
|
|
5
5
|
import "./chunk-WCU362Z6.js";
|
|
6
6
|
import "./chunk-GIWHHCD6.js";
|
|
7
7
|
import "./chunk-SOPVIIUW.js";
|
|
8
8
|
import "./chunk-G4FG5EQO.js";
|
|
9
9
|
import "./chunk-NSBNIPIW.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-MSMTG6OC.js";
|
|
11
11
|
import {
|
|
12
12
|
ApiError,
|
|
13
13
|
apiPost,
|
|
@@ -169,4 +169,4 @@ export {
|
|
|
169
169
|
downloadLibraryVideo,
|
|
170
170
|
saveVideoFile
|
|
171
171
|
};
|
|
172
|
-
//# sourceMappingURL=download-
|
|
172
|
+
//# sourceMappingURL=download-DYYNUGLX.js.map
|
|
@@ -9,8 +9,9 @@ import {
|
|
|
9
9
|
writeJsonEnvelope
|
|
10
10
|
} from "./chunk-MGWAZXY6.js";
|
|
11
11
|
import {
|
|
12
|
-
CHAT_READ_ARG
|
|
13
|
-
|
|
12
|
+
CHAT_READ_ARG,
|
|
13
|
+
DRAFT_FULL_ARG
|
|
14
|
+
} from "./chunk-X32MFGWW.js";
|
|
14
15
|
import {
|
|
15
16
|
apiPost
|
|
16
17
|
} from "./chunk-B2OHCWYB.js";
|
|
@@ -125,14 +126,18 @@ registerSchema({
|
|
|
125
126
|
description: "Review every Meta op staged on this chat, one line each: ref \xB7 kind \xB7 summary \xB7 what it waits on, and after a publish \u2713 applied \u2192 id or \u2717 failed: <error>. `draft show <ref>` prints one op's full payload.",
|
|
126
127
|
args: {
|
|
127
128
|
json: { type: "boolean", description: "Raw JSON envelope instead of the readable list", required: false },
|
|
129
|
+
full: { type: "boolean", description: DRAFT_FULL_ARG.description, required: false },
|
|
128
130
|
chat: { type: "string", description: "Read another chat's draft instead of this one", required: false }
|
|
129
131
|
}
|
|
130
132
|
});
|
|
131
|
-
async function listDraft(json, chat) {
|
|
133
|
+
async function listDraft(json, chat, full = false) {
|
|
132
134
|
try {
|
|
133
135
|
const chatId = resolveChatId(chat);
|
|
134
|
-
const response = await apiPost("/api/ads/meta/draft", {
|
|
135
|
-
|
|
136
|
+
const response = await apiPost("/api/ads/meta/draft", {
|
|
137
|
+
chatId,
|
|
138
|
+
...full ? { full: true } : {}
|
|
139
|
+
});
|
|
140
|
+
if (json || full || !response.ok || !response.data) {
|
|
136
141
|
writeJsonEnvelope(response);
|
|
137
142
|
return;
|
|
138
143
|
}
|
|
@@ -145,14 +150,15 @@ async function listDraft(json, chat) {
|
|
|
145
150
|
var listCommand = defineCommand({
|
|
146
151
|
meta: {
|
|
147
152
|
name: "list",
|
|
148
|
-
description: "Show every Meta write op staged in this chat, one line each (ref \xB7 kind \xB7 summary \xB7 dependencies \xB7 post-publish result); --json for the raw envelope. Publishing reaches the real ad account, so review this before you finish. Example: baker ads meta draft"
|
|
153
|
+
description: "Show every Meta write op staged in this chat, one line each (ref \xB7 kind \xB7 summary \xB7 dependencies \xB7 post-publish result); --json for the raw envelope, --full for every op's payload too. Publishing reaches the real ad account, so review this before you finish. Example: baker ads meta draft"
|
|
149
154
|
},
|
|
150
155
|
args: {
|
|
151
156
|
json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable list" },
|
|
157
|
+
full: DRAFT_FULL_ARG,
|
|
152
158
|
chat: CHAT_READ_ARG
|
|
153
159
|
},
|
|
154
160
|
run: async ({ args }) => {
|
|
155
|
-
await listDraft(args.json === true, args.chat);
|
|
161
|
+
await listDraft(args.json === true, args.chat, args.full === true);
|
|
156
162
|
}
|
|
157
163
|
});
|
|
158
164
|
var showCommand = defineCommand({
|
|
@@ -226,6 +232,7 @@ var metaDraftCommand = defineCommand({
|
|
|
226
232
|
// citty prints help for a flag the parent does not know instead of forwarding it.
|
|
227
233
|
args: {
|
|
228
234
|
json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable list" },
|
|
235
|
+
full: DRAFT_FULL_ARG,
|
|
229
236
|
chat: CHAT_READ_ARG
|
|
230
237
|
},
|
|
231
238
|
subCommands: { list: listCommand, show: showCommand, remove: removeCommand, clear: clearCommand },
|
|
@@ -237,4 +244,4 @@ var metaDraftCommand = defineCommand({
|
|
|
237
244
|
export {
|
|
238
245
|
metaDraftCommand
|
|
239
246
|
};
|
|
240
|
-
//# sourceMappingURL=draft-
|
|
247
|
+
//# sourceMappingURL=draft-6EHV5NAN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/meta/draft.ts","../src/commands/ads/meta/draft-status.ts"],"sourcesContent":["import type {\n MetaDraftClearResponse,\n MetaDraftListResponse,\n MetaDraftRemoveResponse,\n MetaDraftShowResponse,\n} from \"@baker/api/ads-meta\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../../client.ts\";\nimport { requireChatId, resolveChatId } from \"../../../env.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { CHAT_READ_ARG, DRAFT_FULL_ARG } from \"../../chat-arg.ts\";\nimport { hintLines } from \"../hints.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { renderDraftStatus } from \"./draft-status.ts\";\nimport { handleMetaError } from \"./shared.ts\";\n\nregisterSchema({\n command: \"ads.meta.draft\",\n description:\n \"Review every Meta op staged on this chat, one line each: ref · kind · summary · what it waits on, and after a publish ✓ applied → id or ✗ failed: <error>. `draft show <ref>` prints one op's full payload.\",\n args: {\n json: { type: \"boolean\", description: \"Raw JSON envelope instead of the readable list\", required: false },\n full: { type: \"boolean\", description: DRAFT_FULL_ARG.description, required: false },\n chat: { type: \"string\", description: \"Read another chat's draft instead of this one\", required: false },\n },\n});\n\n/**\n * The readable one-line-per-op view is the default, like the Google, LinkedIn and X drafts;\n * `--json` (or `--output json`) returns the raw envelope for tools.\n */\nasync function listDraft(json: boolean, chat?: unknown, full = false): Promise<void> {\n try {\n const chatId = resolveChatId(chat);\n const response = await apiPost<{ ok: boolean; data?: MetaDraftListResponse }>(\"/api/ads/meta/draft\", {\n chatId,\n ...(full ? { full: true } : {}),\n });\n if (json || full || !response.ok || !response.data) {\n writeJsonEnvelope(response);\n return;\n }\n process.stdout.write(`${renderDraftStatus(response.data)}${hintLines(response)}\\n`);\n } catch (err) {\n handleMetaError(err);\n }\n}\n\nconst listCommand = defineCommand({\n meta: {\n name: \"list\",\n description:\n \"Show every Meta write op staged in this chat, one line each (ref · kind · summary · dependencies · post-publish result); --json for the raw envelope, --full for every op's payload too. Publishing reaches the real ad account, so review this before you finish. Example: baker ads meta draft\",\n },\n args: {\n json: { type: \"boolean\", description: \"Print the raw JSON envelope instead of the readable list\" },\n full: DRAFT_FULL_ARG,\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n await listDraft(args.json === true, args.chat, args.full === true);\n },\n});\n\nconst showCommand = defineCommand({\n meta: {\n name: \"show\",\n description:\n \"Print the full staged payload for one op — the receipt to verify a change looks right before publish (never truncated). Example: baker ads meta draft show meta_temp_abc123\",\n },\n args: {\n ref: { type: \"positional\", description: \"Op ref (meta_temp_* for creates, target id for updates)\", required: true },\n // `show` always prints the envelope; `--json` is the spelling `list` taught, so it is accepted here too.\n json: { type: \"boolean\", description: \"Accepted for symmetry with list; show always prints the JSON envelope\" },\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n try {\n const chatId = resolveChatId(args.chat);\n const response = await apiPost<{ ok: true; data: MetaDraftShowResponse }>(\"/api/ads/meta/draft/show\", {\n chatId,\n ref: args.ref,\n });\n writeJsonEnvelope(response);\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\nconst removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description:\n \"Drop one staged Meta op. Removing a create cascades to everything that depends on it. Example: baker ads meta draft remove meta_temp_abc123\",\n },\n args: {\n ref: { type: \"positional\", description: \"Op ref (meta_temp_* for creates, target id for updates)\", required: true },\n },\n run: async ({ args }) => {\n try {\n const chatId = requireChatId();\n const response = await apiPost<{ ok: true; data: MetaDraftRemoveResponse }>(\"/api/ads/meta/draft/remove\", {\n chatId,\n ref: args.ref,\n });\n writeJsonEnvelope(response);\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\nconst clearCommand = defineCommand({\n meta: {\n name: \"clear\",\n description:\n \"Discard ALL staged Meta ops in this chat's draft — nothing will apply on publish. Example: baker ads meta draft clear\",\n },\n run: async () => {\n try {\n const chatId = requireChatId();\n const response = await apiPost<{ ok: true; data: MetaDraftClearResponse }>(\"/api/ads/meta/draft/clear\", {\n chatId,\n });\n writeJsonEnvelope(response);\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\nexport const metaDraftCommand = defineCommand({\n meta: {\n name: \"draft\",\n description:\n \"Review and edit the Meta write ops staged in this chat BEFORE publish. Subcommands: list (default), show, remove, clear. Ops never hit Meta until the chat is published. `list` and `show` take --chat <id> to read an earlier chat's changes instead.\",\n },\n // Declared on the parent too: `default: \"list\"` dispatches the bare `draft --chat <id>` form, and\n // citty prints help for a flag the parent does not know instead of forwarding it.\n args: {\n json: { type: \"boolean\", description: \"Print the raw JSON envelope instead of the readable list\" },\n full: DRAFT_FULL_ARG,\n chat: CHAT_READ_ARG,\n },\n subCommands: { list: listCommand, show: showCommand, remove: removeCommand, clear: clearCommand },\n // `default` (not `run`) dispatches the bare invocation: citty falls through to `run`\n // after dispatching a subcommand, so a `run` here would list the draft a second time\n // on every `draft list` / `draft remove` / `draft clear`.\n default: \"list\",\n});\n","import type { MetaDraftListResponse, MetaDraftOpView } from \"@baker/api/ads-meta\";\n\n/**\n * Render the staged Meta draft as one line per op — ref, kind, summary, what it\n * waits on and, after a publish, what happened to it. The Google, LinkedIn and\n * X drafts already print a readable view by default; Meta printed the pretty\n * JSON envelope, and agents piped every read through python to get these same\n * columns back. Pure: takes the draft-list response, returns text.\n */\n\nconst STATUS_HEADINGS: Record<MetaDraftListResponse[\"status\"], string> = {\n active: \"staged\",\n publishing: \"publishing\",\n applied: \"published\",\n partial: \"published with failures\",\n discarded: \"discarded\",\n none: \"none\",\n};\n\nfunction plural(count: number, word: string): string {\n return `${count} ${word}${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction headingLine(draft: MetaDraftListResponse): string {\n const heading = STATUS_HEADINGS[draft.status];\n if (draft.status === \"active\" || draft.status === \"discarded\") {\n return `Meta Ads — ${plural(draft.count, \"change\")} ${heading} · ${draft.mode}`;\n }\n const counts = new Map<string, number>();\n for (const op of draft.ops) {\n const status = op.result?.status ?? \"pending\";\n counts.set(status, (counts.get(status) ?? 0) + 1);\n }\n const summary = [...counts].map(([status, count]) => `${count} ${status}`).join(\", \");\n return `Meta Ads — ${heading} · ${summary} · ${draft.mode}`;\n}\n\n/** A failed op: why, and what of it already reached Meta. */\nfunction failedPart(result: NonNullable<MetaDraftOpView[\"result\"]>): string {\n const landed = result.landed ? ` (${result.landed})` : \"\";\n return `✗ failed: ${result.error ?? \"no reason recorded\"}${landed}`;\n}\n\nfunction resultPart(op: MetaDraftOpView): string | undefined {\n const result = op.result;\n if (!result) {\n return undefined;\n }\n if (result.status === \"failed\") {\n return failedPart(result);\n }\n if (result.status === \"skipped\") {\n // Publish records either the dependency ref that did not apply or a plain reason; either way the op is finished.\n const because = result.skippedBecause;\n if (because && op.dependsOn.includes(because)) {\n return `✗ skipped: ${because} did not apply`;\n }\n return `✗ skipped: ${because ?? \"a change it needs did not apply\"}`;\n }\n const id = result.id ?? result.hash;\n const applied = `✓ ${result.status}${id ? ` → ${id}` : \"\"}`;\n const verification = result.verification;\n if (verification && verification.status !== \"confirmed\") {\n return `${applied} (read-back ${verification.status}${verification.note ? `: ${verification.note}` : \"\"})`;\n }\n return applied;\n}\n\nfunction opLine(op: MetaDraftOpView, showAccount: boolean): string {\n const parts = [op.ref, op.kind, op.summary];\n if (op.target && op.target !== op.ref) {\n parts.push(`target ${op.target}`);\n }\n if (showAccount) {\n parts.push(`account ${op.accountId}`);\n }\n if (op.dependsOn.length > 0) {\n parts.push(`after ${op.dependsOn.join(\", \")}`);\n }\n const result = resultPart(op);\n if (result) {\n parts.push(result);\n }\n // Creative copy and provider errors can carry line breaks; one op stays one line.\n return ` ${parts.join(\" · \").replace(/[\\r\\n]+/g, \" \")}`;\n}\n\nexport function renderDraftStatus(draft: MetaDraftListResponse): string {\n if (draft.status === \"none\" || draft.count === 0) {\n return \"No staged Meta changes on this chat.\";\n }\n const lines = [headingLine(draft)];\n if (draft.status === \"active\") {\n lines.push(\"Publishing makes every change real on the ad account.\");\n }\n lines.push(\"\");\n // A draft may span several ad accounts; the account is only noise when there is one.\n const showAccount = new Set(draft.ops.map((op) => op.accountId)).size > 1;\n for (const op of draft.ops) {\n lines.push(opLine(op, showAccount));\n }\n if (draft.advisories.length > 0) {\n lines.push(\"\", \"Advisories\");\n for (const advisory of draft.advisories) {\n lines.push(` ! ${advisory.ref}: ${advisory.message}`);\n }\n }\n lines.push(\"\", \"Full staged payload for one op: baker ads meta draft show <ref> · raw envelope: --json\");\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -10,8 +10,9 @@ import {
|
|
|
10
10
|
writeJsonEnvelope
|
|
11
11
|
} from "./chunk-MGWAZXY6.js";
|
|
12
12
|
import {
|
|
13
|
-
CHAT_READ_ARG
|
|
14
|
-
|
|
13
|
+
CHAT_READ_ARG,
|
|
14
|
+
DRAFT_FULL_ARG
|
|
15
|
+
} from "./chunk-X32MFGWW.js";
|
|
15
16
|
import "./chunk-SOPVIIUW.js";
|
|
16
17
|
import "./chunk-G4FG5EQO.js";
|
|
17
18
|
import {
|
|
@@ -114,6 +115,7 @@ async function run(call) {
|
|
|
114
115
|
}
|
|
115
116
|
var LIST_ARGS = {
|
|
116
117
|
json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable tree" },
|
|
118
|
+
full: DRAFT_FULL_ARG,
|
|
117
119
|
chat: CHAT_READ_ARG
|
|
118
120
|
};
|
|
119
121
|
registerSchema({
|
|
@@ -129,10 +131,12 @@ var listCommand = defineCommand({
|
|
|
129
131
|
args: LIST_ARGS,
|
|
130
132
|
run: async ({ args }) => {
|
|
131
133
|
try {
|
|
134
|
+
const full = args.full === true;
|
|
132
135
|
const draft = await apiPost("/api/ads/chatgpt/draft", {
|
|
133
|
-
chatId: resolveChatId(args.chat)
|
|
136
|
+
chatId: resolveChatId(args.chat),
|
|
137
|
+
...full ? { full: true } : {}
|
|
134
138
|
});
|
|
135
|
-
if (args.json === true) {
|
|
139
|
+
if (args.json === true || full) {
|
|
136
140
|
writeJsonEnvelope({ ok: true, data: draft });
|
|
137
141
|
return;
|
|
138
142
|
}
|
|
@@ -261,6 +265,7 @@ published, and discarding the chat drops all of it.
|
|
|
261
265
|
Examples:
|
|
262
266
|
baker ads chatgpt draft \u2014 the Campaign \u25B8 Ad group \u25B8 Ad tree
|
|
263
267
|
baker ads chatgpt draft show chatgpt_temp_ab12 \u2014 one change in full
|
|
268
|
+
baker ads chatgpt draft list --full \u2014 every change in full, in one call
|
|
264
269
|
baker ads chatgpt draft amend chatgpt_temp_ab12 '{"name":"New"}'
|
|
265
270
|
baker ads chatgpt draft remove chatgpt_temp_ab12
|
|
266
271
|
baker ads chatgpt draft clear`
|
|
@@ -280,4 +285,4 @@ Examples:
|
|
|
280
285
|
export {
|
|
281
286
|
draftCommand
|
|
282
287
|
};
|
|
283
|
-
//# sourceMappingURL=draft-
|
|
288
|
+
//# sourceMappingURL=draft-EWGNZUU4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/chatgpt/draft.ts","../src/commands/ads/chatgpt/draft-status.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type {\n ChatgptDraftClearResponse,\n ChatgptDraftListResponse,\n ChatgptDraftRemoveResponse,\n ChatgptDraftShowResponse,\n ChatgptDraftStageResponse,\n} from \"@baker/api/ads-chatgpt\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../../client.ts\";\nimport { requireChatId, resolveChatId } from \"../../../env.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { CHAT_READ_ARG, DRAFT_FULL_ARG } from \"../../chat-arg.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { renderChatgptDraftStatus } from \"./draft-status.ts\";\nimport { CHATGPT_ADS_REFERENCE, chatgptFailure } from \"./shared.ts\";\nimport { failWriteValidation, schemaArgs } from \"./write-shared.ts\";\n\n/**\n * Review and edit the ChatGPT Ads changes staged on this chat. Nothing staged\n * has reached ChatGPT Ads; it all applies when the chat is published.\n */\n\n/** The ChatGPT Ads routes answer with the payload itself; the envelope is the CLI's to add. */\nasync function run<T>(call: () => Promise<T>): Promise<void> {\n try {\n writeJsonEnvelope({ ok: true, data: await call() });\n } catch (err) {\n writeJsonEnvelope({ ...chatgptFailure(err, CHATGPT_ADS_REFERENCE.overview) });\n process.exit(1);\n }\n}\n\nconst LIST_ARGS = {\n json: { type: \"boolean\", description: \"Print the raw JSON envelope instead of the readable tree\" },\n full: DRAFT_FULL_ARG,\n chat: CHAT_READ_ARG,\n} as const;\n\nregisterSchema({\n command: \"ads.chatgpt.draft\",\n description:\n \"Review everything staged for ChatGPT Ads on this chat as a Campaign ▸ Ad group ▸ Ad tree. After a publish this is the authoritative record: `published · N applied`, or a `✗ … failed:` line per change that did not land, with ChatGPT Ads' reason.\",\n args: schemaArgs(LIST_ARGS),\n});\n\nconst listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"Review everything staged as a Campaign ▸ Ad group ▸ Ad tree. Example: baker ads chatgpt draft\",\n },\n args: LIST_ARGS,\n run: async ({ args }) => {\n try {\n const full = args.full === true;\n const draft = await apiPost<ChatgptDraftListResponse>(\"/api/ads/chatgpt/draft\", {\n chatId: resolveChatId(args.chat),\n ...(full ? { full: true } : {}),\n });\n if (args.json === true || full) {\n writeJsonEnvelope({ ok: true, data: draft });\n return;\n }\n process.stdout.write(`${renderChatgptDraftStatus(draft)}\\n`);\n } catch (err) {\n writeJsonEnvelope({ ...chatgptFailure(err, CHATGPT_ADS_REFERENCE.overview) });\n process.exit(1);\n }\n },\n});\n\nconst SHOW_ARGS = {\n ref: {\n type: \"positional\",\n description: \"Op ref (chatgpt_temp_* for creates), or the target id for a staged update\",\n required: true,\n },\n chat: CHAT_READ_ARG,\n} as const;\n\nregisterSchema({\n command: \"ads.chatgpt.draft.show\",\n description:\n \"The full staged payload, warnings and before-snapshot for one change — the receipt to check before publishing.\",\n args: schemaArgs(SHOW_ARGS),\n});\n\nconst showCommand = defineCommand({\n meta: {\n name: \"show\",\n description: \"Show one staged change in full. Example: baker ads chatgpt draft show chatgpt_temp_ab12\",\n },\n args: SHOW_ARGS,\n run: async ({ args }) => {\n await run(() =>\n apiPost<ChatgptDraftShowResponse>(\"/api/ads/chatgpt/draft/show\", {\n chatId: resolveChatId(args.chat),\n ref: String(args.ref),\n }),\n );\n },\n});\n\nconst AMEND_ARGS = {\n ref: { type: \"positional\", description: \"Op ref or target id\", required: true },\n patch: { type: \"positional\", description: \"JSON object, or @path to a file holding one\", required: true },\n} as const;\n\nregisterSchema({\n command: \"ads.chatgpt.draft.amend\",\n description:\n \"Change a staged op in place instead of removing and re-staging it. The patch merges into the payload (JSON merge-patch: `null` deletes a key; money is in micros) and the whole op re-validates.\",\n args: schemaArgs(AMEND_ARGS),\n});\n\nconst amendCommand = defineCommand({\n meta: {\n name: \"amend\",\n description: `Change a staged op in place. Money in the payload is micros: 20 = 20000000.\n\nExample:\n baker ads chatgpt draft amend chatgpt_temp_ab12 '{\"dailyBudgetMicros\": 30000000}'`,\n },\n args: AMEND_ARGS,\n run: async ({ args }) => {\n const raw = String(args.patch);\n let patch: unknown;\n try {\n patch = JSON.parse(raw.startsWith(\"@\") ? readFileSync(raw.slice(1), \"utf8\") : raw);\n } catch {\n failWriteValidation(\"patch must be a JSON object, or @path to a file holding one\");\n }\n if (patch === null || typeof patch !== \"object\" || Array.isArray(patch)) {\n failWriteValidation(\"patch must be a JSON object\");\n }\n await run(() =>\n apiPost<ChatgptDraftStageResponse>(\"/api/ads/chatgpt/draft/amend\", {\n chatId: requireChatId(),\n ref: String(args.ref),\n patch,\n }),\n );\n },\n});\n\nconst REMOVE_ARGS = { ref: { type: \"positional\", description: \"Op ref or target id\", required: true } } as const;\n\nregisterSchema({\n command: \"ads.chatgpt.draft.remove\",\n description: \"Drop one staged ChatGPT Ads change. Removing a create also drops everything staged under it.\",\n args: schemaArgs(REMOVE_ARGS),\n});\n\nconst removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description:\n \"Drop one staged change (and what depends on it). Example: baker ads chatgpt draft remove chatgpt_temp_ab12\",\n },\n args: REMOVE_ARGS,\n run: async ({ args }) => {\n await run(() =>\n apiPost<ChatgptDraftRemoveResponse>(\"/api/ads/chatgpt/draft/remove\", {\n chatId: requireChatId(),\n ref: String(args.ref),\n }),\n );\n },\n});\n\nregisterSchema({\n command: \"ads.chatgpt.draft.clear\",\n description:\n \"Drop every staged ChatGPT Ads change on this chat. Nothing reached ChatGPT Ads, so nothing needs reversing.\",\n args: {},\n});\n\nconst clearCommand = defineCommand({\n meta: {\n name: \"clear\",\n description: \"Drop every staged ChatGPT Ads change on this chat. Example: baker ads chatgpt draft clear\",\n },\n args: {},\n run: async () => {\n await run(() =>\n apiPost<ChatgptDraftClearResponse>(\"/api/ads/chatgpt/draft/clear\", {\n chatId: requireChatId(),\n }),\n );\n },\n});\n\nexport const draftCommand = defineCommand({\n meta: {\n name: \"draft\",\n description: `Review and edit the ChatGPT Ads changes staged on this chat.\n\nNothing staged has reached ChatGPT Ads. Everything applies when the chat is\npublished, and discarding the chat drops all of it.\n\nExamples:\n baker ads chatgpt draft — the Campaign ▸ Ad group ▸ Ad tree\n baker ads chatgpt draft show chatgpt_temp_ab12 — one change in full\n baker ads chatgpt draft list --full — every change in full, in one call\n baker ads chatgpt draft amend chatgpt_temp_ab12 '{\"name\":\"New\"}'\n baker ads chatgpt draft remove chatgpt_temp_ab12\n baker ads chatgpt draft clear`,\n },\n subCommands: {\n list: listCommand,\n show: showCommand,\n amend: amendCommand,\n remove: removeCommand,\n clear: clearCommand,\n },\n // A parent must never declare `run`: citty falls through to it after the\n // matched subcommand, so every edit would also print the whole draft.\n args: LIST_ARGS,\n default: \"list\",\n});\n","import type { ChatgptDraftListResponse, ChatgptDraftOpView, ChatgptDraftStatusNode } from \"@baker/api/ads-chatgpt\";\n\n/**\n * The staged ChatGPT Ads draft as a readable Campaign ▸ Ad group ▸ Ad tree.\n * After a publish its first line is the authoritative record: a draft still\n * reading `publishing` minutes later did not finish, whatever ChatGPT Ads shows.\n */\n\nconst OPERATION_LABELS: Record<string, { staged: string; done: string; notDone: string }> = {\n create: { staged: \"Creating\", done: \"Created\", notDone: \"Not created\" },\n update: { staged: \"Updating\", done: \"Updated\", notDone: \"Not updated\" },\n pause: { staged: \"Pausing\", done: \"Paused\", notDone: \"Not paused\" },\n resume: { staged: \"Resuming\", done: \"Resumed\", notDone: \"Not resumed\" },\n archive: { staged: \"Archiving\", done: \"Archived\", notDone: \"Not archived\" },\n};\n\nconst STATUS_HEADINGS: Record<string, string> = {\n active: \"staged\",\n publishing: \"publishing\",\n applied: \"published\",\n discarded: \"discarded\",\n};\n\nfunction badge(node: ChatgptDraftStatusNode): string {\n const label = node.operation ? OPERATION_LABELS[node.operation] : undefined;\n if (!label) {\n return node.existing ? \"on ChatGPT Ads\" : \"staged\";\n }\n if (node.outcome === \"applied\") {\n return label.done;\n }\n return node.outcome ? `${label.notDone} (${node.outcome})` : label.staged;\n}\n\nfunction renderNode(node: ChatgptDraftStatusNode, depth: number, out: string[]): void {\n const indent = \" \".repeat(depth);\n out.push(`${indent}${node.entity}: ${node.name} — ${badge(node)}`);\n for (const warning of node.warnings ?? []) {\n out.push(`${indent} ! ${warning}`);\n }\n for (const child of node.children) {\n renderNode(child, depth + 1, out);\n }\n}\n\nfunction didNotApply(op: ChatgptDraftOpView): boolean {\n return op.result?.status === \"failed\" || op.result?.status === \"skipped\";\n}\n\nfunction didApply(op: ChatgptDraftOpView): boolean {\n return op.result?.status === \"applied\" || op.result?.status === \"simulated\";\n}\n\nfunction headingLine(draft: ChatgptDraftListResponse): string {\n const heading = STATUS_HEADINGS[draft.status] ?? draft.status;\n if (draft.status !== \"applied\" && draft.status !== \"publishing\") {\n return `ChatGPT Ads: ${draft.count} change${draft.count === 1 ? \"\" : \"s\"} ${heading}`;\n }\n const applied = draft.ops.filter(didApply).length;\n const failed = draft.ops.filter(didNotApply).length;\n return `ChatGPT Ads: ${heading} · ${applied} applied${failed > 0 ? `, ${failed} failed` : \"\"}`;\n}\n\nexport function renderChatgptDraftStatus(draft: ChatgptDraftListResponse): string {\n if (draft.status === \"none\" || draft.count === 0) {\n return \"No ChatGPT Ads changes staged\";\n }\n const out = [headingLine(draft), \"\"];\n for (const node of draft.tree ?? []) {\n renderNode(node, 0, out);\n }\n const summaryByRef = new Map(draft.ops.map((op) => [op.ref, op.summary]));\n const problems = draft.ops.filter(didNotApply).map((op) => {\n if (op.result?.status === \"failed\") {\n return `✗ ${op.summary} — failed: ${op.result.error ?? \"ChatGPT Ads gave no reason\"}`;\n }\n const waitedOn = op.result?.skippedBecause;\n const parent = (waitedOn && summaryByRef.get(waitedOn)) ?? \"a change that did not apply\";\n return `✗ ${op.summary} — skipped: waiting on ${parent}, which did not apply`;\n });\n if (problems.length > 0) {\n out.push(\"\", ...problems);\n }\n return out.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadPatchArg,
|
|
3
3
|
requireTarget
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-HETNOUE4.js";
|
|
5
5
|
import {
|
|
6
6
|
handleLinkedinError
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-SEHJ7Y7J.js";
|
|
8
8
|
import "./chunk-3W4IORXH.js";
|
|
9
9
|
import "./chunk-4NZ47VXO.js";
|
|
10
10
|
import {
|
|
@@ -21,16 +21,17 @@ import "./chunk-SYLPRIFM.js";
|
|
|
21
21
|
import "./chunk-XBR7TSZN.js";
|
|
22
22
|
import "./chunk-DGUN7FUH.js";
|
|
23
23
|
import {
|
|
24
|
-
CHAT_READ_ARG
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
CHAT_READ_ARG,
|
|
25
|
+
DRAFT_FULL_ARG
|
|
26
|
+
} from "./chunk-X32MFGWW.js";
|
|
27
|
+
import "./chunk-R65V26HH.js";
|
|
27
28
|
import "./chunk-QV6AST5T.js";
|
|
28
29
|
import "./chunk-WCU362Z6.js";
|
|
29
30
|
import "./chunk-GIWHHCD6.js";
|
|
30
31
|
import "./chunk-SOPVIIUW.js";
|
|
31
32
|
import "./chunk-G4FG5EQO.js";
|
|
32
33
|
import "./chunk-NSBNIPIW.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-MSMTG6OC.js";
|
|
34
35
|
import {
|
|
35
36
|
apiPost
|
|
36
37
|
} from "./chunk-B2OHCWYB.js";
|
|
@@ -164,13 +165,14 @@ function renderDraftStatus(data) {
|
|
|
164
165
|
}
|
|
165
166
|
|
|
166
167
|
// src/commands/ads/linkedin/draft.ts
|
|
167
|
-
async function listDraft(json, chat) {
|
|
168
|
+
async function listDraft(json, chat, full = false) {
|
|
168
169
|
try {
|
|
169
170
|
const chatId = resolveChatId(chat);
|
|
170
171
|
const response = await apiPost("/api/ads/linkedin/draft", {
|
|
171
|
-
chatId
|
|
172
|
+
chatId,
|
|
173
|
+
...full ? { full: true } : {}
|
|
172
174
|
});
|
|
173
|
-
if (json || !response.ok || !response.data) {
|
|
175
|
+
if (json || full || !response.ok || !response.data) {
|
|
174
176
|
writeJsonEnvelope(response);
|
|
175
177
|
return;
|
|
176
178
|
}
|
|
@@ -183,14 +185,15 @@ async function listDraft(json, chat) {
|
|
|
183
185
|
var listCommand = defineCommand({
|
|
184
186
|
meta: {
|
|
185
187
|
name: "list",
|
|
186
|
-
description: "Review everything staged as a Campaign group \u25B8 Campaign \u25B8 Creative tree (--json for the raw envelope). Example: baker ads linkedin draft"
|
|
188
|
+
description: "Review everything staged as a Campaign group \u25B8 Campaign \u25B8 Creative tree (--json for the raw envelope, --full for every op's payload too). Example: baker ads linkedin draft"
|
|
187
189
|
},
|
|
188
190
|
args: {
|
|
189
191
|
json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable tree" },
|
|
192
|
+
full: DRAFT_FULL_ARG,
|
|
190
193
|
chat: CHAT_READ_ARG
|
|
191
194
|
},
|
|
192
195
|
run: async ({ args }) => {
|
|
193
|
-
await listDraft(args.json === true, args.chat);
|
|
196
|
+
await listDraft(args.json === true, args.chat, args.full === true);
|
|
194
197
|
}
|
|
195
198
|
});
|
|
196
199
|
var removeCommand = defineCommand({
|
|
@@ -292,7 +295,7 @@ var linkedinDraftCommand = defineCommand({
|
|
|
292
295
|
},
|
|
293
296
|
// Declared on the parent too: `default: "list"` dispatches the bare `draft --chat <id>` form, and
|
|
294
297
|
// citty prints help for a flag the parent does not know instead of forwarding it.
|
|
295
|
-
args: { chat: CHAT_READ_ARG },
|
|
298
|
+
args: { full: DRAFT_FULL_ARG, chat: CHAT_READ_ARG },
|
|
296
299
|
subCommands: {
|
|
297
300
|
list: listCommand,
|
|
298
301
|
remove: removeCommand,
|
|
@@ -307,4 +310,4 @@ var linkedinDraftCommand = defineCommand({
|
|
|
307
310
|
export {
|
|
308
311
|
linkedinDraftCommand
|
|
309
312
|
};
|
|
310
|
-
//# sourceMappingURL=draft-
|
|
313
|
+
//# sourceMappingURL=draft-EX2I6UJB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/linkedin/draft.ts","../src/commands/ads/linkedin/draft-status.ts"],"sourcesContent":["import type {\n LinkedinDraftAmendRequest,\n LinkedinDraftClearResponse,\n LinkedinDraftListResponse,\n LinkedinDraftRemoveResponse,\n LinkedinDraftShowRequest,\n LinkedinDraftShowResponse,\n LinkedinDraftStageResponse,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../../client.ts\";\nimport { requireChatId, resolveChatId } from \"../../../env.ts\";\nimport { CHAT_READ_ARG, DRAFT_FULL_ARG } from \"../../chat-arg.ts\";\nimport { hintLines } from \"../hints.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { renderDraftStatus } from \"./draft-status.ts\";\nimport { handleLinkedinError } from \"./shared.ts\";\nimport { loadPatchArg, requireTarget } from \"./write-shared.ts\";\n\n/**\n * List the staged draft. By default renders a readable Campaign group ▸ Campaign ▸ Creative status\n * tree so the agent can review everything it has staged at a glance; `--json` returns the raw\n * envelope for tools.\n */\nasync function listDraft(json: boolean, chat?: unknown, full = false): Promise<void> {\n try {\n const chatId = resolveChatId(chat);\n const response = await apiPost<{ ok: boolean; data?: LinkedinDraftListResponse }>(\"/api/ads/linkedin/draft\", {\n chatId,\n ...(full ? { full: true } : {}),\n });\n if (json || full || !response.ok || !response.data) {\n writeJsonEnvelope(response);\n return;\n }\n process.stdout.write(`${renderDraftStatus(response.data)}${hintLines(response)}\\n`);\n } catch (err) {\n handleLinkedinError(err);\n }\n}\n\nconst listCommand = defineCommand({\n meta: {\n name: \"list\",\n description:\n \"Review everything staged as a Campaign group ▸ Campaign ▸ Creative tree (--json for the raw envelope, --full for every op's payload too). Example: baker ads linkedin draft\",\n },\n args: {\n json: { type: \"boolean\", description: \"Print the raw JSON envelope instead of the readable tree\" },\n full: DRAFT_FULL_ARG,\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n await listDraft(args.json === true, args.chat, args.full === true);\n },\n});\n\nconst removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description:\n \"Drop one staged LinkedIn op. Removing a create cascades to everything that depends on it — except a company exclusion, which only loses the removed audience and keeps its companies (listed under `updated`). Example: baker ads linkedin draft remove li_temp_abc123\",\n },\n args: {\n ref: {\n type: \"positional\",\n description: \"Op ref (li_temp_* for creates, target id/URN for updates)\",\n required: true,\n },\n },\n run: async ({ args }) => {\n try {\n const chatId = requireChatId();\n const response = await apiPost<{ ok: true; data: LinkedinDraftRemoveResponse }>(\n \"/api/ads/linkedin/draft/remove\",\n { chatId, ref: args.ref },\n );\n writeJsonEnvelope(response);\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nconst clearCommand = defineCommand({\n meta: {\n name: \"clear\",\n description:\n \"Discard ALL staged LinkedIn ops in this chat's draft — nothing will apply on publish. Example: baker ads linkedin draft clear\",\n },\n run: async () => {\n try {\n const chatId = requireChatId();\n const response = await apiPost<{ ok: true; data: LinkedinDraftClearResponse }>(\"/api/ads/linkedin/draft/clear\", {\n chatId,\n });\n writeJsonEnvelope(response);\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nconst amendCommand = defineCommand({\n meta: {\n name: \"amend\",\n description:\n \"Update a staged op in place — merges a JSON patch into its payload (RFC-7386: objects deep-merge, null deletes a key, arrays/scalars replace) and re-validates. Use this instead of remove + re-create.\",\n },\n args: {\n ref: { type: \"positional\", description: \"Staged op ref (li_temp_*) or target id/URN\", required: true },\n file: { type: \"string\", description: \"JSON file with the patch object\" },\n patch: { type: \"string\", description: \"Inline JSON patch object\" },\n },\n run: async ({ args }) => {\n const ref = requireTarget(args as Record<string, unknown>, \"op\");\n const patch = loadPatchArg(args as Record<string, unknown>);\n try {\n const chatId = requireChatId();\n const body: LinkedinDraftAmendRequest = { chatId, ref, patch };\n const response = await apiPost<{ ok: true; data: LinkedinDraftStageResponse }>(\n \"/api/ads/linkedin/draft/amend\",\n body,\n );\n writeJsonEnvelope(response);\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nconst showCommand = defineCommand({\n meta: {\n name: \"show\",\n description:\n \"Print the full staged payload for one op — the receipt to verify a change looks right before publish (never truncated).\",\n },\n args: {\n ref: { type: \"positional\", description: \"Staged op ref (li_temp_*) or target id/URN\", required: true },\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n const ref = requireTarget(args as Record<string, unknown>, \"op\");\n try {\n const chatId = resolveChatId(args.chat);\n const body: LinkedinDraftShowRequest = { chatId, ref };\n const response = await apiPost<{ ok: true; data: LinkedinDraftShowResponse }>(\n \"/api/ads/linkedin/draft/show\",\n body,\n );\n writeJsonEnvelope(response);\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nexport const linkedinDraftCommand = defineCommand({\n meta: {\n name: \"draft\",\n description:\n \"Review and edit the LinkedIn write ops staged in this chat BEFORE publish. Subcommands: list (default), remove, clear, amend, show. Ops never hit LinkedIn until the chat is published. `list` and `show` take --chat <id> to read an earlier chat's changes instead.\",\n },\n // Declared on the parent too: `default: \"list\"` dispatches the bare `draft --chat <id>` form, and\n // citty prints help for a flag the parent does not know instead of forwarding it.\n args: { full: DRAFT_FULL_ARG, chat: CHAT_READ_ARG },\n subCommands: {\n list: listCommand,\n remove: removeCommand,\n clear: clearCommand,\n amend: amendCommand,\n show: showCommand,\n },\n // A parent must never declare `run`: citty falls through to it *after* running\n // the matched subcommand, so `draft show <ref>` would also re-list the draft.\n default: \"list\",\n});\n","import type { LinkedinDraftListResponse, LinkedinDraftStatusCollection, LinkedinDraftStatusNode } from \"@baker/api\";\n\n/**\n * Render the staged LinkedIn draft as a readable Campaign group ▸ Campaign ▸ Creative tree — the\n * CLI counterpart to `ads google draft list`'s campaign ▸ ad group ▸ ad tree, using the identical\n * node shape (`LinkedinDraftStatusNode` mirrors `GoogleDraftStatusNode`). Pure: takes the draft-list\n * response, returns text.\n */\n\nconst OPERATION_LABELS: Record<string, string> = {\n create: \"Creating\",\n update: \"Updating\",\n pause: \"Pausing\",\n resume: \"Resuming\",\n archive: \"Archiving\",\n delete: \"Deleting\",\n};\n\nfunction badge(node: LinkedinDraftStatusNode): string {\n const label = node.operation ? OPERATION_LABELS[node.operation] : undefined;\n if (label) {\n return label;\n }\n return node.existing ? \"on LinkedIn\" : \"staged\";\n}\n\nfunction collectionLine(collection: LinkedinDraftStatusCollection): string | undefined {\n const parts: string[] = [];\n if (collection.added > 0) {\n parts.push(`+${collection.added}`);\n }\n if (collection.existing > 0) {\n parts.push(`${collection.existing} existing`);\n }\n if (collection.removed > 0) {\n parts.push(`-${collection.removed}`);\n }\n return parts.length > 0 ? `${collection.label}: ${parts.join(\", \")}` : undefined;\n}\n\n/**\n * Every ad account the tree touches. A draft may legitimately span several, and\n * two accounts can hold identically-named campaigns — so the account is printed\n * on each node once there is more than one, and left off when there is not.\n */\nfunction accountsInTree(nodes: readonly LinkedinDraftStatusNode[]): Set<string> {\n const accounts = new Set<string>();\n const walk = (node: LinkedinDraftStatusNode): void => {\n accounts.add(node.accountId);\n for (const child of node.children) {\n walk(child);\n }\n };\n for (const node of nodes) {\n walk(node);\n }\n return accounts;\n}\n\nfunction renderNode(node: LinkedinDraftStatusNode, depth: number, lines: string[], showAccount: boolean): void {\n const indent = \" \".repeat(depth);\n const account = showAccount ? ` · account ${node.accountId}` : \"\";\n lines.push(`${indent}• ${node.name} · ${badge(node)}${account}`);\n for (const warning of node.warnings ?? []) {\n lines.push(`${indent} ⚠ ${warning}`);\n }\n for (const collection of node.collections) {\n const line = collectionLine(collection);\n if (line) {\n lines.push(`${indent} ${line}`);\n }\n }\n for (const child of node.children) {\n renderNode(child, depth + 1, lines, showAccount);\n }\n}\n\nfunction renderSection(title: string, nodes: LinkedinDraftStatusNode[], lines: string[], showAccount: boolean): void {\n if (nodes.length === 0) {\n return;\n }\n lines.push(\"\");\n lines.push(title);\n for (const node of nodes) {\n renderNode(node, 1, lines, showAccount);\n }\n}\n\n/** Campaign group ▸ Campaign ▸ Creative roots go under \"Campaigns\" (campaign group is the group parent). */\nconst CAMPAIGN_TREE_ENTITIES = new Set([\"campaignGroup\", \"campaign\", \"creative\"]);\n\n/**\n * What the publish did, once there is a publish to report.\n *\n * A published draft used to render exactly like a staged one — same count, same\n * tree, no mention of the outcome — so the surface an agent reaches for to see\n * what a publish did could not answer, and a publish that changed LinkedIn and\n * then failed to finish was indistinguishable from one that had not run yet.\n * The per-op results were in the response the whole time; only the renderer\n * dropped them.\n */\nfunction renderOutcome(data: LinkedinDraftListResponse, lines: string[]): void {\n const counts = new Map<string, number>();\n for (const op of data.ops ?? []) {\n const status = op.result?.status ?? \"pending\";\n counts.set(status, (counts.get(status) ?? 0) + 1);\n }\n const summary = [...counts].map(([status, count]) => `${count} ${status}`).join(\", \");\n lines.push(`LinkedIn Ads — published · ${summary || `${data.count} op(s)`} · ${data.mode}`);\n // A failure is the reason to read this at all, so it is named with its error\n // rather than left as a number to go and look up.\n for (const op of data.ops ?? []) {\n const status = op.result?.status;\n // An audience whose segment was created but whose rule or rows did not\n // land is `applied` with an error: it exists on LinkedIn and stays empty.\n if (status === \"applied\" && op.result?.error) {\n lines.push(` ⚠ ${op.summary} — applied in part: ${op.result.error}`);\n continue;\n }\n if (status !== \"failed\" && status !== \"skipped\") {\n continue;\n }\n const reason = op.result?.error ?? op.result?.skippedBecause ?? \"no reason recorded\";\n lines.push(` ✗ ${op.summary} — ${status}: ${reason}`);\n }\n}\n\nexport function renderDraftStatus(data: LinkedinDraftListResponse): string {\n if (data.status === \"none\" || data.count === 0) {\n return \"No staged LinkedIn changes on this chat.\";\n }\n const modeNote =\n data.mode === \"live\"\n ? \"Live — publishing writes directly to LinkedIn.\"\n : \"Simulated — publishing completes the whole draft without calling LinkedIn.\";\n const lines: string[] = [];\n if (data.status === \"applied\") {\n renderOutcome(data, lines);\n } else if (data.status === \"publishing\") {\n lines.push(`LinkedIn Ads — publishing ${data.count} change${data.count === 1 ? \"\" : \"s\"} · ${data.mode}`);\n } else {\n lines.push(`LinkedIn Ads — ${data.count} staged change${data.count === 1 ? \"\" : \"s\"} · ${data.mode}`);\n }\n lines.push(modeNote);\n\n const tree = data.tree ?? [];\n const showAccount = accountsInTree(tree).size > 1;\n renderSection(\n \"Campaigns\",\n tree.filter((node) => CAMPAIGN_TREE_ENTITIES.has(node.entity)),\n lines,\n showAccount,\n );\n const rest = tree.filter((node) => !CAMPAIGN_TREE_ENTITIES.has(node.entity));\n renderSection(\"Other\", rest, lines, showAccount);\n\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,12 +3,13 @@ import {
|
|
|
3
3
|
draftList,
|
|
4
4
|
loadJsonArg,
|
|
5
5
|
requireTarget
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-MLJKPUWP.js";
|
|
7
7
|
import "./chunk-D5FY4FAK.js";
|
|
8
8
|
import "./chunk-MGWAZXY6.js";
|
|
9
9
|
import {
|
|
10
|
-
CHAT_READ_ARG
|
|
11
|
-
|
|
10
|
+
CHAT_READ_ARG,
|
|
11
|
+
DRAFT_FULL_ARG
|
|
12
|
+
} from "./chunk-X32MFGWW.js";
|
|
12
13
|
import "./chunk-B2OHCWYB.js";
|
|
13
14
|
import "./chunk-SVUFNCOE.js";
|
|
14
15
|
import "./chunk-E54435XT.js";
|
|
@@ -24,6 +25,7 @@ registerSchema({
|
|
|
24
25
|
description: "Review and undo the Google Analytics changes staged on this chat. Use `list` to see everything staged, `show` to inspect one change in full before the chat completes, `amend` to correct one in place, and `remove`/`clear` to drop them. `list` and `show` take --chat <id> to read an earlier chat's changes instead.",
|
|
25
26
|
args: {
|
|
26
27
|
json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable list", required: false },
|
|
28
|
+
full: { type: "boolean", description: DRAFT_FULL_ARG.description, required: false },
|
|
27
29
|
chat: { type: "string", description: CHAT_READ_ARG.description, required: false }
|
|
28
30
|
}
|
|
29
31
|
});
|
|
@@ -34,13 +36,17 @@ var draftCommand = defineCommand({
|
|
|
34
36
|
},
|
|
35
37
|
subCommands: {
|
|
36
38
|
list: defineCommand({
|
|
37
|
-
meta: {
|
|
39
|
+
meta: {
|
|
40
|
+
name: "list",
|
|
41
|
+
description: "Review everything staged on this chat (--json for the raw envelope, --full for every change's payload too)"
|
|
42
|
+
},
|
|
38
43
|
args: {
|
|
39
44
|
json: { type: "boolean", description: "Print the raw JSON envelope", required: false },
|
|
45
|
+
full: DRAFT_FULL_ARG,
|
|
40
46
|
chat: CHAT_READ_ARG
|
|
41
47
|
},
|
|
42
48
|
run: async ({ args }) => {
|
|
43
|
-
await draftList(args.json === true, args.chat);
|
|
49
|
+
await draftList(args.json === true, args.chat, args.full === true);
|
|
44
50
|
}
|
|
45
51
|
}),
|
|
46
52
|
show: defineCommand({
|
|
@@ -97,4 +103,4 @@ var draftCommand = defineCommand({
|
|
|
97
103
|
export {
|
|
98
104
|
draftCommand
|
|
99
105
|
};
|
|
100
|
-
//# sourceMappingURL=draft-
|
|
106
|
+
//# sourceMappingURL=draft-FSZMTGWI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ga4/draft.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { CHAT_READ_ARG, DRAFT_FULL_ARG } from \"../chat-arg.ts\";\nimport { draftAction, draftList, loadJsonArg, requireTarget } from \"./shared.ts\";\n\nregisterSchema({\n command: \"ga4.draft\",\n description:\n \"Review and undo the Google Analytics changes staged on this chat. Use `list` to see everything staged, `show` to inspect one change in full before the chat completes, `amend` to correct one in place, and `remove`/`clear` to drop them. `list` and `show` take --chat <id> to read an earlier chat's changes instead.\",\n args: {\n json: { type: \"boolean\", description: \"Print the raw JSON envelope instead of the readable list\", required: false },\n full: { type: \"boolean\", description: DRAFT_FULL_ARG.description, required: false },\n chat: { type: \"string\", description: CHAT_READ_ARG.description, required: false },\n },\n});\n\nexport const draftCommand = defineCommand({\n meta: {\n name: \"draft\",\n description:\n \"List, show, amend, remove or clear the Google Analytics changes staged on this chat. `list` and `show` take --chat <id> to read an earlier chat's changes instead.\",\n },\n subCommands: {\n list: defineCommand({\n meta: {\n name: \"list\",\n description:\n \"Review everything staged on this chat (--json for the raw envelope, --full for every change's payload too)\",\n },\n args: {\n json: { type: \"boolean\", description: \"Print the raw JSON envelope\", required: false },\n full: DRAFT_FULL_ARG,\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n await draftList(args.json === true, args.chat, args.full === true);\n },\n }),\n show: defineCommand({\n meta: {\n name: \"show\",\n description:\n \"Print the full staged payload for one change, alongside how the property looks today — the receipt to verify it before the chat completes (never truncated).\",\n },\n args: {\n ref: { type: \"positional\", description: \"Staged ref or target id\", required: false },\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n await draftAction(\n \"/api/ga4/draft/show\",\n { ref: requireTarget(args as Record<string, unknown>, \"change\") },\n args.chat,\n );\n },\n }),\n amend: defineCommand({\n meta: {\n name: \"amend\",\n description:\n \"Update a staged change in place — merges a JSON patch into its payload (objects deep-merge, null deletes a key, arrays/scalars replace) and re-runs every check. Use this instead of remove + re-create.\",\n },\n args: {\n ref: { type: \"positional\", description: \"Staged ref or target id\", required: false },\n patch: { type: \"string\", description: \"Inline JSON patch object\", required: false },\n file: { type: \"string\", description: \"JSON file with the patch object\", required: false },\n },\n run: async ({ args }) => {\n await draftAction(\"/api/ga4/draft/amend\", {\n ref: requireTarget(args as Record<string, unknown>, \"change\"),\n patch: loadJsonArg(args as Record<string, unknown>, \"patch\"),\n });\n },\n }),\n remove: defineCommand({\n meta: { name: \"remove\", description: \"Remove one staged change\" },\n args: { ref: { type: \"positional\", description: \"Staged ref or target id\", required: false } },\n run: async ({ args }) => {\n await draftAction(\"/api/ga4/draft/remove\", {\n ref: requireTarget(args as Record<string, unknown>, \"change\"),\n });\n },\n }),\n clear: defineCommand({\n meta: { name: \"clear\", description: \"Discard all Google Analytics changes staged on this chat\" },\n run: async () => {\n await draftAction(\"/api/ga4/draft/clear\", {});\n },\n }),\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAK9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,MAAM,EAAE,MAAM,WAAW,aAAa,4DAA4D,UAAU,MAAM;AAAA,IAClH,MAAM,EAAE,MAAM,WAAW,aAAa,eAAe,aAAa,UAAU,MAAM;AAAA,IAClF,MAAM,EAAE,MAAM,UAAU,aAAa,cAAc,aAAa,UAAU,MAAM;AAAA,EAClF;AACF,CAAC;AAEM,IAAM,eAAe,cAAc;AAAA,EACxC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,aAAa;AAAA,IACX,MAAM,cAAc;AAAA,MAClB,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,MAAM,EAAE,MAAM,WAAW,aAAa,+BAA+B,UAAU,MAAM;AAAA,QACrF,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,cAAM,UAAU,KAAK,SAAS,MAAM,KAAK,MAAM,KAAK,SAAS,IAAI;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,IACD,MAAM,cAAc;AAAA,MAClB,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,KAAK,EAAE,MAAM,cAAc,aAAa,2BAA2B,UAAU,MAAM;AAAA,QACnF,MAAM;AAAA,MACR;AAAA,MACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,cAAM;AAAA,UACJ;AAAA,UACA,EAAE,KAAK,cAAc,MAAiC,QAAQ,EAAE;AAAA,UAChE,KAAK;AAAA,QACP;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,OAAO,cAAc;AAAA,MACnB,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,KAAK,EAAE,MAAM,cAAc,aAAa,2BAA2B,UAAU,MAAM;AAAA,QACnF,OAAO,EAAE,MAAM,UAAU,aAAa,4BAA4B,UAAU,MAAM;AAAA,QAClF,MAAM,EAAE,MAAM,UAAU,aAAa,mCAAmC,UAAU,MAAM;AAAA,MAC1F;AAAA,MACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,cAAM,YAAY,wBAAwB;AAAA,UACxC,KAAK,cAAc,MAAiC,QAAQ;AAAA,UAC5D,OAAO,YAAY,MAAiC,OAAO;AAAA,QAC7D,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,QAAQ,cAAc;AAAA,MACpB,MAAM,EAAE,MAAM,UAAU,aAAa,2BAA2B;AAAA,MAChE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,aAAa,2BAA2B,UAAU,MAAM,EAAE;AAAA,MAC7F,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,cAAM,YAAY,yBAAyB;AAAA,UACzC,KAAK,cAAc,MAAiC,QAAQ;AAAA,QAC9D,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,OAAO,cAAc;AAAA,MACnB,MAAM,EAAE,MAAM,SAAS,aAAa,2DAA2D;AAAA,MAC/F,KAAK,YAAY;AACf,cAAM,YAAY,wBAAwB,CAAC,CAAC;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
failWriteValidation
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OT2MN5UR.js";
|
|
4
4
|
import {
|
|
5
5
|
parseXApiError
|
|
6
6
|
} from "./chunk-FIN4ZXGJ.js";
|
|
@@ -10,16 +10,17 @@ import {
|
|
|
10
10
|
writeJsonEnvelope
|
|
11
11
|
} from "./chunk-MGWAZXY6.js";
|
|
12
12
|
import {
|
|
13
|
-
CHAT_READ_ARG
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
CHAT_READ_ARG,
|
|
14
|
+
DRAFT_FULL_ARG
|
|
15
|
+
} from "./chunk-X32MFGWW.js";
|
|
16
|
+
import "./chunk-R65V26HH.js";
|
|
16
17
|
import "./chunk-QV6AST5T.js";
|
|
17
18
|
import "./chunk-WCU362Z6.js";
|
|
18
19
|
import "./chunk-GIWHHCD6.js";
|
|
19
20
|
import "./chunk-SOPVIIUW.js";
|
|
20
21
|
import "./chunk-G4FG5EQO.js";
|
|
21
22
|
import "./chunk-NSBNIPIW.js";
|
|
22
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-MSMTG6OC.js";
|
|
23
24
|
import {
|
|
24
25
|
ApiError,
|
|
25
26
|
apiPost
|
|
@@ -152,14 +153,18 @@ registerSchema({
|
|
|
152
153
|
description: "Review everything staged for X Ads on this chat as a Campaign \u25B8 Ad group \u25B8 Ad tree. After a publish this is the authoritative record: `published \xB7 N applied`, or a `\u2717 \u2026 failed:` line per op that did not land.",
|
|
153
154
|
args: {
|
|
154
155
|
json: { type: "boolean", description: "Raw JSON envelope instead of the readable tree", required: false },
|
|
156
|
+
full: { type: "boolean", description: DRAFT_FULL_ARG.description, required: false },
|
|
155
157
|
chat: { type: "string", description: "Read another chat's draft instead of this one", required: false }
|
|
156
158
|
}
|
|
157
159
|
});
|
|
158
|
-
async function listDraft(json, chat) {
|
|
160
|
+
async function listDraft(json, chat, full = false) {
|
|
159
161
|
try {
|
|
160
162
|
const chatId = resolveChatId(chat);
|
|
161
|
-
const response = await apiPost("/api/ads/x/draft", {
|
|
162
|
-
|
|
163
|
+
const response = await apiPost("/api/ads/x/draft", {
|
|
164
|
+
chatId,
|
|
165
|
+
...full ? { full: true } : {}
|
|
166
|
+
});
|
|
167
|
+
if (json || full || !response.ok || !response.data) {
|
|
163
168
|
writeJsonEnvelope(response);
|
|
164
169
|
return;
|
|
165
170
|
}
|
|
@@ -176,10 +181,11 @@ var listCommand = defineCommand({
|
|
|
176
181
|
},
|
|
177
182
|
args: {
|
|
178
183
|
json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable tree" },
|
|
184
|
+
full: DRAFT_FULL_ARG,
|
|
179
185
|
chat: CHAT_READ_ARG
|
|
180
186
|
},
|
|
181
187
|
run: async ({ args }) => {
|
|
182
|
-
await listDraft(args.json === true, args.chat);
|
|
188
|
+
await listDraft(args.json === true, args.chat, args.full === true);
|
|
183
189
|
}
|
|
184
190
|
});
|
|
185
191
|
registerSchema({
|
|
@@ -313,6 +319,7 @@ and discarding the chat reverses all of it.
|
|
|
313
319
|
Examples:
|
|
314
320
|
baker ads x draft \u2014 the Campaign \u25B8 Ad group \u25B8 Ad tree
|
|
315
321
|
baker ads x draft show x_temp_abc123 \u2014 one op in full
|
|
322
|
+
baker ads x draft list --full \u2014 every op in full, in one call
|
|
316
323
|
baker ads x draft amend x_temp_abc '{"name":"New"}'
|
|
317
324
|
baker ads x draft remove x_temp_abc123
|
|
318
325
|
baker ads x draft clear`
|
|
@@ -326,10 +333,10 @@ Examples:
|
|
|
326
333
|
},
|
|
327
334
|
// A parent must never declare `run`: citty falls through to it AFTER running
|
|
328
335
|
// the matched subcommand, so every edit would also trigger a full list.
|
|
329
|
-
args: { json: { type: "boolean", description: "Raw JSON envelope" }, chat: CHAT_READ_ARG },
|
|
336
|
+
args: { json: { type: "boolean", description: "Raw JSON envelope" }, full: DRAFT_FULL_ARG, chat: CHAT_READ_ARG },
|
|
330
337
|
default: "list"
|
|
331
338
|
});
|
|
332
339
|
export {
|
|
333
340
|
draftCommand
|
|
334
341
|
};
|
|
335
|
-
//# sourceMappingURL=draft-
|
|
342
|
+
//# sourceMappingURL=draft-GKI6MB7L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/x/draft.ts","../src/commands/ads/x/draft-status.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type {\n XDraftClearResponse,\n XDraftListResponse,\n XDraftRemoveResponse,\n XDraftShowResponse,\n XDraftStageResponse,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../../client.ts\";\nimport { requireChatId, resolveChatId } from \"../../../env.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { CHAT_READ_ARG, DRAFT_FULL_ARG } from \"../../chat-arg.ts\";\nimport { writeAdsJson, writeJsonEnvelope } from \"../output.ts\";\nimport { renderDraftStatus } from \"./draft-status.ts\";\nimport { parseXApiError } from \"./error-parser.ts\";\nimport { failWriteValidation } from \"./write-shared.ts\";\n\nfunction handleDraftError(err: unknown): never {\n if (err instanceof ApiError) {\n writeAdsJson(parseXApiError(err.message, \"—\"));\n process.exit(1);\n }\n writeAdsJson({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\nregisterSchema({\n command: \"ads.x.draft\",\n description:\n \"Review everything staged for X Ads on this chat as a Campaign ▸ Ad group ▸ Ad tree. After a publish this is the authoritative record: `published · N applied`, or a `✗ … failed:` line per op that did not land.\",\n args: {\n json: { type: \"boolean\", description: \"Raw JSON envelope instead of the readable tree\", required: false },\n full: { type: \"boolean\", description: DRAFT_FULL_ARG.description, required: false },\n chat: { type: \"string\", description: \"Read another chat's draft instead of this one\", required: false },\n },\n});\n\nasync function listDraft(json: boolean, chat?: unknown, full = false): Promise<void> {\n try {\n const chatId = resolveChatId(chat);\n const response = await apiPost<{ ok: boolean; data?: XDraftListResponse }>(\"/api/ads/x/draft\", {\n chatId,\n ...(full ? { full: true } : {}),\n });\n if (json || full || !response.ok || !response.data) {\n writeJsonEnvelope(response);\n return;\n }\n process.stdout.write(`${renderDraftStatus(response.data)}\\n`);\n } catch (err) {\n handleDraftError(err);\n }\n}\n\nconst listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"Review everything staged as a Campaign ▸ Ad group ▸ Ad tree. Example: baker ads x draft\",\n },\n args: {\n json: { type: \"boolean\", description: \"Print the raw JSON envelope instead of the readable tree\" },\n full: DRAFT_FULL_ARG,\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n await listDraft(args.json === true, args.chat, args.full === true);\n },\n});\n\nregisterSchema({\n command: \"ads.x.draft.show\",\n description:\n \"The full staged payload, warnings and before-snapshot for one op — the receipt to check before publishing.\",\n args: {\n ref: {\n type: \"positional\",\n description: \"Op ref (x_temp_* for creates, the target id for updates)\",\n required: true,\n },\n chat: { type: \"string\", description: \"Read another chat's draft instead of this one\", required: false },\n },\n});\n\nconst showCommand = defineCommand({\n meta: {\n name: \"show\",\n description: \"Show one staged op in full. Example: baker ads x draft show x_temp_abc123\",\n },\n args: {\n ref: { type: \"positional\", description: \"Op ref, or the target id for a staged update\", required: true },\n chat: CHAT_READ_ARG,\n },\n run: async ({ args }) => {\n try {\n const chatId = resolveChatId(args.chat);\n const response = await apiPost<{ ok: boolean; data?: XDraftShowResponse }>(\"/api/ads/x/draft/show\", {\n chatId,\n ref: String(args.ref),\n });\n writeJsonEnvelope(response);\n } catch (err) {\n handleDraftError(err);\n }\n },\n});\n\nregisterSchema({\n command: \"ads.x.draft.amend\",\n description:\n \"Change a staged op in place instead of removing and re-staging it. The patch merges into the payload (JSON merge-patch: `null` deletes a key) and the whole op re-validates.\",\n args: {\n ref: { type: \"positional\", description: \"Op ref or target id\", required: true },\n patch: { type: \"positional\", description: \"JSON object, or @path to a file holding one\", required: true },\n },\n});\n\nconst amendCommand = defineCommand({\n meta: {\n name: \"amend\",\n description: `Change a staged op in place.\n\nExample:\n baker ads x draft amend x_temp_abc '{\"dailyBudgetAmountLocalMicro\": 20000000}'`,\n },\n args: {\n ref: { type: \"positional\", description: \"Op ref or target id\", required: true },\n patch: { type: \"positional\", description: \"JSON object, or @path to a file\", required: true },\n },\n run: async ({ args }) => {\n const raw = String(args.patch);\n let patch: unknown;\n try {\n patch = JSON.parse(raw.startsWith(\"@\") ? readFileSync(raw.slice(1), \"utf8\") : raw);\n } catch {\n failWriteValidation(\"patch must be a JSON object, or @path to a file holding one\");\n }\n if (patch === null || typeof patch !== \"object\" || Array.isArray(patch)) {\n failWriteValidation(\"patch must be a JSON object\");\n }\n try {\n const chatId = requireChatId();\n const response = await apiPost<{ ok: boolean; data?: XDraftStageResponse }>(\"/api/ads/x/draft/amend\", {\n chatId,\n ref: String(args.ref),\n patch,\n });\n writeJsonEnvelope(response);\n } catch (err) {\n handleDraftError(err);\n }\n },\n});\n\nregisterSchema({\n command: \"ads.x.draft.remove\",\n description: \"Drop one staged X op. Removing a create cascades to everything staged that depends on it.\",\n args: { ref: { type: \"positional\", description: \"Op ref or target id\", required: true } },\n});\n\nconst removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: \"Drop one staged op (cascades to its dependents). Example: baker ads x draft remove x_temp_abc123\",\n },\n args: { ref: { type: \"positional\", description: \"Op ref or target id\", required: true } },\n run: async ({ args }) => {\n try {\n const chatId = requireChatId();\n const response = await apiPost<{ ok: boolean; data?: XDraftRemoveResponse }>(\"/api/ads/x/draft/remove\", {\n chatId,\n ref: String(args.ref),\n });\n writeJsonEnvelope(response);\n } catch (err) {\n handleDraftError(err);\n }\n },\n});\n\nregisterSchema({\n command: \"ads.x.draft.clear\",\n description: \"Drop every staged X op on this chat. Nothing reached X, so nothing needs reversing.\",\n args: {},\n});\n\nconst clearCommand = defineCommand({\n meta: { name: \"clear\", description: \"Drop every staged X op on this chat. Example: baker ads x draft clear\" },\n args: {},\n run: async () => {\n try {\n const chatId = requireChatId();\n const response = await apiPost<{ ok: boolean; data?: XDraftClearResponse }>(\"/api/ads/x/draft/clear\", { chatId });\n writeJsonEnvelope(response);\n } catch (err) {\n handleDraftError(err);\n }\n },\n});\n\nexport const draftCommand = defineCommand({\n meta: {\n name: \"draft\",\n description: `Review and edit the X Ads changes staged on this chat.\n\nNothing staged has reached X. Everything applies when the chat is published,\nand discarding the chat reverses all of it.\n\nExamples:\n baker ads x draft — the Campaign ▸ Ad group ▸ Ad tree\n baker ads x draft show x_temp_abc123 — one op in full\n baker ads x draft list --full — every op in full, in one call\n baker ads x draft amend x_temp_abc '{\"name\":\"New\"}'\n baker ads x draft remove x_temp_abc123\n baker ads x draft clear`,\n },\n subCommands: {\n list: listCommand,\n show: showCommand,\n amend: amendCommand,\n remove: removeCommand,\n clear: clearCommand,\n },\n // A parent must never declare `run`: citty falls through to it AFTER running\n // the matched subcommand, so every edit would also trigger a full list.\n args: { json: { type: \"boolean\", description: \"Raw JSON envelope\" }, full: DRAFT_FULL_ARG, chat: CHAT_READ_ARG },\n default: \"list\",\n});\n","import type { XDraftListResponse, XDraftOpView, XDraftStatusCollection, XDraftStatusNode } from \"@baker/api\";\n\n/**\n * Render the staged X draft as a readable Campaign ▸ Ad group ▸ Ad tree — the\n * counterpart to the Google and LinkedIn renderers, using the identical node\n * shape. Pure: takes the draft-list response, returns text.\n */\n\nconst OPERATION_LABELS: Record<string, string> = {\n create: \"Creating\",\n update: \"Updating\",\n pause: \"Pausing\",\n resume: \"Resuming\",\n remove: \"Removing\",\n};\n\nfunction badge(node: XDraftStatusNode): string {\n const label = node.operation ? OPERATION_LABELS[node.operation] : undefined;\n return label ?? (node.existing ? \"on X\" : \"staged\");\n}\n\nfunction collectionLine(collection: XDraftStatusCollection): string | undefined {\n const parts: string[] = [];\n if (collection.added > 0) {\n parts.push(`+${collection.added}`);\n }\n if (collection.existing > 0) {\n parts.push(`${collection.existing} existing`);\n }\n if (collection.removed > 0) {\n parts.push(`-${collection.removed}`);\n }\n return parts.length > 0 ? `${collection.label}: ${parts.join(\", \")}` : undefined;\n}\n\n/**\n * Every ad account the tree touches. A draft may span several, and two accounts\n * can hold identically-named campaigns — so the account is printed on each node\n * once there is more than one, and left off when there is not.\n */\nfunction accountsInTree(nodes: readonly XDraftStatusNode[]): Set<string> {\n const accounts = new Set<string>();\n const walk = (node: XDraftStatusNode): void => {\n accounts.add(node.accountId);\n for (const child of node.children) {\n walk(child);\n }\n };\n for (const node of nodes) {\n walk(node);\n }\n return accounts;\n}\n\nfunction renderNode(node: XDraftStatusNode, depth: number, showAccount: boolean, out: string[]): void {\n const indent = \" \".repeat(depth);\n const account = showAccount ? ` [${node.accountId}]` : \"\";\n out.push(`${indent}${node.entity}: ${node.name} — ${badge(node)}${account}`);\n for (const collection of node.collections) {\n const line = collectionLine(collection);\n if (line) {\n out.push(`${indent} ${line}`);\n }\n }\n for (const warning of node.warnings ?? []) {\n out.push(`${indent} ! ${warning}`);\n }\n for (const child of node.children) {\n renderNode(child, depth + 1, showAccount, out);\n }\n}\n\nconst NO_CHANGES = \"No X Ads changes staged\";\n\nconst STATUS_HEADINGS: Record<string, string> = {\n active: \"staged\",\n publishing: \"publishing\",\n applied: \"published\",\n discarded: \"discarded\",\n};\n\nfunction didNotApply(op: XDraftOpView): boolean {\n return op.result?.status === \"failed\" || op.result?.status === \"skipped\";\n}\n\nfunction didApply(op: XDraftOpView): boolean {\n return op.result?.status === \"applied\" || op.result?.status === \"simulated\";\n}\n\n/**\n * The outcome line, which is the authoritative record after a publish: a draft\n * still reading `publishing` minutes later did not finish, whatever X shows.\n */\nfunction headingLine(draft: XDraftListResponse): string {\n const heading = STATUS_HEADINGS[draft.status] ?? draft.status;\n if (draft.status !== \"applied\" && draft.status !== \"publishing\") {\n return `X Ads: ${draft.count} change${draft.count === 1 ? \"\" : \"s\"} ${heading}`;\n }\n const applied = draft.ops.filter(didApply).length;\n const failed = draft.ops.filter(didNotApply).length;\n return `X Ads: ${heading} · ${applied} applied${failed > 0 ? `, ${failed} failed` : \"\"}`;\n}\n\nfunction problemLines(draft: XDraftListResponse): string[] {\n return draft.ops.filter(didNotApply).map((op) => {\n const reason =\n op.result?.error ?? `skipped: waiting on ${op.result?.skippedBecause ?? \"a change that did not apply\"}`;\n return `✗ ${op.summary} — failed: ${reason}`;\n });\n}\n\nexport function renderDraftStatus(draft: XDraftListResponse): string {\n if (draft.status === \"none\" || draft.count === 0) {\n return NO_CHANGES;\n }\n const out: string[] = [headingLine(draft), \"\"];\n const tree = draft.tree ?? [];\n const showAccount = accountsInTree(tree).size > 1;\n for (const node of tree) {\n renderNode(node, 0, showAccount, out);\n }\n const problems = problemLines(draft);\n if (problems.length > 0) {\n out.push(\"\", ...problems);\n }\n return out.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|