@koda-sl/baker-cli 0.495.0 → 0.497.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 +25 -4
- package/dist/account-ZKJFX2GK.js +80 -0
- package/dist/account-ZKJFX2GK.js.map +1 -0
- package/dist/account-users-SZCYHVBM.js +62 -0
- package/dist/account-users-SZCYHVBM.js.map +1 -0
- package/dist/accounts-5DFYKYSM.js +78 -0
- package/dist/accounts-5DFYKYSM.js.map +1 -0
- package/dist/accounts-OGAIQNE6.js +612 -0
- package/dist/accounts-OGAIQNE6.js.map +1 -0
- package/dist/actions-FMNJSOBA.js +55 -0
- package/dist/activecampaign-LYYYH6XD.js +936 -0
- package/dist/activecampaign-LYYYH6XD.js.map +1 -0
- package/dist/add-AOQLZRPC.js +80 -0
- package/dist/add-AOQLZRPC.js.map +1 -0
- package/dist/add-HWXEPSZF.js +105 -0
- package/dist/add-HWXEPSZF.js.map +1 -0
- package/dist/add-VDZPGZF5.js +148 -0
- package/dist/add-VDZPGZF5.js.map +1 -0
- package/dist/add-YYP3O536.js +303 -0
- package/dist/add-YYP3O536.js.map +1 -0
- package/dist/ads-OLXSDPD6.js +40 -0
- package/dist/advertisers-STYAIX72.js +121 -0
- package/dist/advertisers-STYAIX72.js.map +1 -0
- package/dist/analytics-6WBK4VFO.js +1977 -0
- package/dist/analytics-6WBK4VFO.js.map +1 -0
- package/dist/analytics-DHB325DM.js +434 -0
- package/dist/analytics-DHB325DM.js.map +1 -0
- package/dist/assign-BFXHYTMF.js +78 -0
- package/dist/assign-BFXHYTMF.js.map +1 -0
- package/dist/audience-size-XWHZV2GH.js +74 -0
- package/dist/audience-size-XWHZV2GH.js.map +1 -0
- package/dist/audit-IYGRU7LD.js +152 -0
- package/dist/audit-IYGRU7LD.js.map +1 -0
- package/dist/autocomplete-SDDSJTAF.js +112 -0
- package/dist/autocomplete-SDDSJTAF.js.map +1 -0
- package/dist/avatars-I4H3NMEJ.js +38 -0
- package/dist/bid-pricing-OVYBDRMV.js +101 -0
- package/dist/bid-pricing-OVYBDRMV.js.map +1 -0
- package/dist/brand-3V7ECY7D.js +22 -0
- package/dist/brief-U2W7KMFC.js +539 -0
- package/dist/brief-U2W7KMFC.js.map +1 -0
- package/dist/campaign-groups-FJHBVUA3.js +97 -0
- package/dist/campaign-groups-FJHBVUA3.js.map +1 -0
- package/dist/campaign-writes-XKYYMZML.js +166 -0
- package/dist/campaign-writes-XKYYMZML.js.map +1 -0
- package/dist/campaigns-E5UW4I3X.js +111 -0
- package/dist/campaigns-E5UW4I3X.js.map +1 -0
- package/dist/campaigns-MCB76NPQ.js +107 -0
- package/dist/canvas-JCNKMGCG.js +46 -0
- package/dist/capabilities-CLTZCXCZ.js +145 -0
- package/dist/capabilities-CLTZCXCZ.js.map +1 -0
- package/dist/chatgpt-XFZ42NXC.js +47 -0
- package/dist/chats-DTJSBDWO.js +277 -0
- package/dist/chats-DTJSBDWO.js.map +1 -0
- package/dist/check-CZTS64AW.js +105 -0
- package/dist/check-CZTS64AW.js.map +1 -0
- package/dist/chunk-2YTBPRRG.js +207 -0
- package/dist/chunk-3SNCMEJB.js +97 -0
- package/dist/chunk-7QGFO35A.js +23 -0
- package/dist/chunk-AV7ALENU.js +191 -0
- package/dist/chunk-BRLFQ4VX.js +604 -0
- package/dist/chunk-CAZGM2NX.js +92 -0
- package/dist/chunk-CAZGM2NX.js.map +1 -0
- package/dist/chunk-DJE7UXYT.js +831 -0
- package/dist/chunk-EFWXYUSK.js +139 -0
- package/dist/chunk-EONSZAZB.js +3868 -0
- package/dist/chunk-FALJQCWL.js +661 -0
- package/dist/chunk-FALJQCWL.js.map +1 -0
- package/dist/chunk-FG3MV2XM.js +89 -0
- package/dist/chunk-FKG476GH.js +392 -0
- package/dist/chunk-FUGQSIYG.js +297 -0
- package/dist/chunk-G4OFH3MX.js +455 -0
- package/dist/chunk-G4OFH3MX.js.map +1 -0
- package/dist/chunk-GZ4A2VYW.js +39 -0
- package/dist/chunk-GZ4A2VYW.js.map +1 -0
- package/dist/chunk-HPLHAHG5.js +275 -0
- package/dist/chunk-I24YT2KG.js +122 -0
- package/dist/chunk-IFDZZOUC.js +903 -0
- package/dist/chunk-JVVUI55M.js +455 -0
- package/dist/chunk-KKSHEPBY.js +363 -0
- package/dist/chunk-KQ7RCLGC.js +547 -0
- package/dist/chunk-L7WMS5PW.js +172 -0
- package/dist/chunk-LBRO4MTL.js +19 -0
- package/dist/chunk-LNRPOULW.js +224 -0
- package/dist/chunk-LX6WC2XZ.js +942 -0
- package/dist/chunk-MMGTJBM6.js +142 -0
- package/dist/chunk-NZS3KEQ2.js +97 -0
- package/dist/chunk-NZS3KEQ2.js.map +1 -0
- package/dist/chunk-O37VU7FG.js +6799 -0
- package/dist/chunk-O37VU7FG.js.map +1 -0
- package/dist/chunk-OEZYSL3U.js +51 -0
- package/dist/chunk-OOVHBMQB.js +103 -0
- package/dist/chunk-PTH7VWKK.js +159 -0
- package/dist/chunk-PYD6IGW6.js +401 -0
- package/dist/chunk-PYD6IGW6.js.map +1 -0
- package/dist/chunk-QE2E4EYJ.js +349 -0
- package/dist/chunk-QE2E4EYJ.js.map +1 -0
- package/dist/chunk-QZF4BVKL.js +66 -0
- package/dist/chunk-RITUSBYO.js +61 -0
- package/dist/chunk-SSTL3A7Z.js +206 -0
- package/dist/chunk-SZNGQ2GF.js +64 -0
- package/dist/chunk-SZNGQ2GF.js.map +1 -0
- package/dist/chunk-TD4SO6TR.js +169 -0
- package/dist/chunk-UZ4RTOFG.js +91 -0
- package/dist/chunk-VAX7PFQV.js +592 -0
- package/dist/chunk-VDRSZK4P.js +494 -0
- package/dist/chunk-VNU2EYD4.js +344 -0
- package/dist/chunk-WT4WDIXA.js +156 -0
- package/dist/chunk-XEX23CIB.js +160 -0
- package/dist/chunk-XXDF25BW.js +8939 -0
- package/dist/chunk-YJ3LSFMX.js +249 -0
- package/dist/chunk-YVK5RT3B.js +197 -0
- package/dist/chunk-YWWRLZUR.js +433 -0
- package/dist/chunk-Z4S5BCVZ.js +57 -0
- package/dist/chunk-ZYGK7GAK.js +1079 -0
- package/dist/claim-TSFPWTQY.js +198 -0
- package/dist/claim-TSFPWTQY.js.map +1 -0
- package/dist/cli.js +38 -37
- package/dist/cli.js.map +1 -1
- package/dist/companies-P7FZNJQV.js +196 -0
- package/dist/companies-P7FZNJQV.js.map +1 -0
- package/dist/complete-SYDIHMD5.js +82 -0
- package/dist/complete-SYDIHMD5.js.map +1 -0
- package/dist/connect-COS6G45S.js +43 -0
- package/dist/conversation-UJOWMJRH.js +94 -0
- package/dist/conversation-UJOWMJRH.js.map +1 -0
- package/dist/conversions-ONOIEILU.js +138 -0
- package/dist/conversions-ONOIEILU.js.map +1 -0
- package/dist/create-DPQRYQXK.js +208 -0
- package/dist/create-DPQRYQXK.js.map +1 -0
- package/dist/create-JD76Z4A4.js +60 -0
- package/dist/create-JD76Z4A4.js.map +1 -0
- package/dist/create-NOT3HGP2.js +133 -0
- package/dist/create-NOT3HGP2.js.map +1 -0
- package/dist/create-ZYEB7SHF.js +236 -0
- package/dist/create-ZYEB7SHF.js.map +1 -0
- package/dist/creatives-LRSELC7Y.js +221 -0
- package/dist/creatives-LRSELC7Y.js.map +1 -0
- package/dist/creatives-SEQHJD2M.js +58 -0
- package/dist/credentials-LHPTUVVA.js +288 -0
- package/dist/credentials-LHPTUVVA.js.map +1 -0
- package/dist/critique-Q7GSZ5RP.js +1459 -0
- package/dist/critique-Q7GSZ5RP.js.map +1 -0
- package/dist/critique-RR2XOQCE.js +228 -0
- package/dist/critique-RR2XOQCE.js.map +1 -0
- package/dist/crm-J7EU32PL.js +319 -0
- package/dist/crm-J7EU32PL.js.map +1 -0
- package/dist/crm-MC444ZVU.js +225 -0
- package/dist/crm-MC444ZVU.js.map +1 -0
- package/dist/customers-LMSX33FO.js +57 -0
- package/dist/delete-BQBVATMF.js +55 -0
- package/dist/delete-BQBVATMF.js.map +1 -0
- package/dist/delete-K7A3AUPH.js +65 -0
- package/dist/delete-K7A3AUPH.js.map +1 -0
- package/dist/delete-VV2ICIHF.js +67 -0
- package/dist/delete-VV2ICIHF.js.map +1 -0
- package/dist/demographics-7GWUXXS6.js +139 -0
- package/dist/demographics-7GWUXXS6.js.map +1 -0
- package/dist/discard-3CLZ4DPD.js +67 -0
- package/dist/discard-3CLZ4DPD.js.map +1 -0
- package/dist/domain-ZS74BSE6.js +99 -0
- package/dist/domain-ZS74BSE6.js.map +1 -0
- package/dist/draft-J3B33RAZ.js +308 -0
- package/dist/draft-J3B33RAZ.js.map +1 -0
- package/dist/draft-MZLWVX3D.js +218 -0
- package/dist/draft-MZLWVX3D.js.map +1 -0
- package/dist/draft-R56PIXCV.js +333 -0
- package/dist/draft-R56PIXCV.js.map +1 -0
- package/dist/experiment-7RJ5X2LL.js +1397 -0
- package/dist/experiments-NOSJJMYI.js +234 -0
- package/dist/experiments-NOSJJMYI.js.map +1 -0
- package/dist/facets-E6SHYUAI.js +115 -0
- package/dist/facets-E6SHYUAI.js.map +1 -0
- package/dist/feedback-HXCQBV7S.js +107 -0
- package/dist/feedback-HXCQBV7S.js.map +1 -0
- package/dist/feedback-record-GXPYXNT6.js +261 -0
- package/dist/feedback-record-GXPYXNT6.js.map +1 -0
- package/dist/fetch-HMUGSRE4.js +177 -0
- package/dist/fetch-HMUGSRE4.js.map +1 -0
- package/dist/find-2EPXK5RF.js +134 -0
- package/dist/fit-W7UNFZT5.js +63 -0
- package/dist/flows-SO5J3M3X.js +248 -0
- package/dist/flows-SO5J3M3X.js.map +1 -0
- package/dist/fonts-N42UYWTX.js +37 -0
- package/dist/forecast-24LGJVLC.js +119 -0
- package/dist/forecast-24LGJVLC.js.map +1 -0
- package/dist/funnel-NYT36B3C.js +395 -0
- package/dist/funnel-NYT36B3C.js.map +1 -0
- package/dist/ga4-6EIQC2TG.js +55 -0
- package/dist/get-KAGO4EC5.js +80 -0
- package/dist/get-KAGO4EC5.js.map +1 -0
- package/dist/get-PZX27LQY.js +38 -0
- package/dist/get-PZX27LQY.js.map +1 -0
- package/dist/get-R5JAFHTH.js +57 -0
- package/dist/get-R5JAFHTH.js.map +1 -0
- package/dist/google-O5OI6QFU.js +136 -0
- package/dist/google-ads-6X4BHGUR.js +196 -0
- package/dist/google-ads-6X4BHGUR.js.map +1 -0
- package/dist/gsc-BM3T2GDL.js +30 -0
- package/dist/history-LGOWYLBE.js +134 -0
- package/dist/history-LGOWYLBE.js.map +1 -0
- package/dist/hubspot-LJB3ETUT.js +780 -0
- package/dist/hubspot-LJB3ETUT.js.map +1 -0
- package/dist/icon-B7DG53S5.js +137 -0
- package/dist/ideas-DYN2DMFN.js +41 -0
- package/dist/images-EQCUXEHF.js +92 -0
- package/dist/ingest-B46AY3QU.js +24 -0
- package/dist/ingest-T7ZS2R4U.js +108 -0
- package/dist/ingest-T7ZS2R4U.js.map +1 -0
- package/dist/inspect-BSNGAT2S.js +190 -0
- package/dist/inspect-BSNGAT2S.js.map +1 -0
- package/dist/inspiration-TCCKM4R7.js +53 -0
- package/dist/keyword-metrics-KNTIN4ZK.js +198 -0
- package/dist/keyword-metrics-KNTIN4ZK.js.map +1 -0
- package/dist/keywords-for-site-S4MXGXWR.js +129 -0
- package/dist/keywords-for-site-S4MXGXWR.js.map +1 -0
- package/dist/landing-WVPA7NBR.js +28 -0
- package/dist/leads-EINV5FK3.js +113 -0
- package/dist/leads-EINV5FK3.js.map +1 -0
- package/dist/learn-7Z2VR6MS.js +205 -0
- package/dist/learn-7Z2VR6MS.js.map +1 -0
- package/dist/line-item-writes-Z3TIB5KZ.js +209 -0
- package/dist/line-item-writes-Z3TIB5KZ.js.map +1 -0
- package/dist/line-items-OEWYOPFP.js +103 -0
- package/dist/link-KYHUIPJE.js +65 -0
- package/dist/link-KYHUIPJE.js.map +1 -0
- package/dist/linkedin-JVB4HXJC.js +1314 -0
- package/dist/linkedin-JVB4HXJC.js.map +1 -0
- package/dist/list-EORTO73V.js +93 -0
- package/dist/list-EORTO73V.js.map +1 -0
- package/dist/list-QQVLURKH.js +152 -0
- package/dist/list-QQVLURKH.js.map +1 -0
- package/dist/list-QWGKRUSM.js +65 -0
- package/dist/list-QWGKRUSM.js.map +1 -0
- package/dist/list-WRBWQASJ.js +50 -0
- package/dist/list-Z6NMNK3T.js +304 -0
- package/dist/list-Z6NMNK3T.js.map +1 -0
- package/dist/log-RUMKYPYK.js +93 -0
- package/dist/log-RUMKYPYK.js.map +1 -0
- package/dist/logo-QTSBKP2J.js +18 -0
- package/dist/make-IJGCQA7C.js +1354 -0
- package/dist/make-IJGCQA7C.js.map +1 -0
- package/dist/map-QZHIJFQT.js +434 -0
- package/dist/map-QZHIJFQT.js.map +1 -0
- package/dist/mcp-ZH2XDV5P.js +715 -0
- package/dist/mcp-ZH2XDV5P.js.map +1 -0
- package/dist/media-sources-SQ2RPDBO.js +35 -0
- package/dist/media-sources-SQ2RPDBO.js.map +1 -0
- package/dist/members-4YX7JEZM.js +45 -0
- package/dist/members-4YX7JEZM.js.map +1 -0
- package/dist/normalize-ABIWLRIT.js +142 -0
- package/dist/normalize-ABIWLRIT.js.map +1 -0
- package/dist/options-SVCQVTNE.js +123 -0
- package/dist/options-SVCQVTNE.js.map +1 -0
- package/dist/organization-FNKDC742.js +947 -0
- package/dist/organization-FNKDC742.js.map +1 -0
- package/dist/performance-HTU5FR2K.js +25 -0
- package/dist/plan-W2K45F7K.js +207 -0
- package/dist/posts-3DAPTBH2.js +34 -0
- package/dist/posts-3DAPTBH2.js.map +1 -0
- package/dist/promoted-tweet-writes-DD3CJNWW.js +181 -0
- package/dist/promoted-tweet-writes-DD3CJNWW.js.map +1 -0
- package/dist/promoted-tweets-TTWN5OMW.js +119 -0
- package/dist/publish-Z62KGDJ2.js +342 -0
- package/dist/publish-Z62KGDJ2.js.map +1 -0
- package/dist/reddit-6C3PT5CT.js +27 -0
- package/dist/refresh-HCQXVFVR.js +95 -0
- package/dist/refresh-HCQXVFVR.js.map +1 -0
- package/dist/refresh-ZCGH64OZ.js +42 -0
- package/dist/refresh-ZCGH64OZ.js.map +1 -0
- package/dist/release-FIHW2HCH.js +61 -0
- package/dist/release-FIHW2HCH.js.map +1 -0
- package/dist/remove-CBR7NVMI.js +51 -0
- package/dist/remove-CBR7NVMI.js.map +1 -0
- package/dist/remove-PUZP5GWN.js +49 -0
- package/dist/remove-PUZP5GWN.js.map +1 -0
- package/dist/reopen-EJGLRQWR.js +64 -0
- package/dist/reopen-EJGLRQWR.js.map +1 -0
- package/dist/rerun-TVBZXASH.js +91 -0
- package/dist/rerun-TVBZXASH.js.map +1 -0
- package/dist/research-L25D4WHQ.js +263 -0
- package/dist/research-L25D4WHQ.js.map +1 -0
- package/dist/research-YCMMQVK6.js +62 -0
- package/dist/reset-HKKCWKZ7.js +55 -0
- package/dist/reset-HKKCWKZ7.js.map +1 -0
- package/dist/reset-SRL6I6GP.js +55 -0
- package/dist/reset-SRL6I6GP.js.map +1 -0
- package/dist/resolve-POMTTAFR.js +122 -0
- package/dist/resolve-POMTTAFR.js.map +1 -0
- package/dist/retry-MEPTOAV2.js +61 -0
- package/dist/retry-MEPTOAV2.js.map +1 -0
- package/dist/retry-RNGM3KKA.js +63 -0
- package/dist/retry-RNGM3KKA.js.map +1 -0
- package/dist/revenue-X4KPTSAM.js +89 -0
- package/dist/revenue-X4KPTSAM.js.map +1 -0
- package/dist/rules-VK7YA23Q.js +97 -0
- package/dist/rules-VK7YA23Q.js.map +1 -0
- package/dist/rules-add-VG7AT6EG.js +463 -0
- package/dist/rules-add-VG7AT6EG.js.map +1 -0
- package/dist/run-DIDQSZU7.js +67 -0
- package/dist/run-DIDQSZU7.js.map +1 -0
- package/dist/run-SR7DJ7M5.js +66 -0
- package/dist/scaffold-ad-46GTFUMP.js +1512 -0
- package/dist/scaffold-ad-46GTFUMP.js.map +1 -0
- package/dist/scaffold-static-ad-U63V4UHR.js +1006 -0
- package/dist/scaffold-static-ad-U63V4UHR.js.map +1 -0
- package/dist/scaffold-video-4DNTURH6.js +884 -0
- package/dist/scaffold-video-4DNTURH6.js.map +1 -0
- package/dist/schedule-JO66N7XO.js +62 -0
- package/dist/schedule-JO66N7XO.js.map +1 -0
- package/dist/schedule-JZBIX6LH.js +67 -0
- package/dist/schedule-JZBIX6LH.js.map +1 -0
- package/dist/scheduled-agents-N63EZNY6.js +50 -0
- package/dist/schema-B2XANMEY.js +133 -0
- package/dist/schema-B2XANMEY.js.map +1 -0
- package/dist/schema-C6SGBNA6.js +69 -0
- package/dist/search-7GHS3OUZ.js +51 -0
- package/dist/search-7GHS3OUZ.js.map +1 -0
- package/dist/search-W5HZUJA2.js +175 -0
- package/dist/search-W5HZUJA2.js.map +1 -0
- package/dist/select-LMGLNFWB.js +102 -0
- package/dist/select-LMGLNFWB.js.map +1 -0
- package/dist/set-prompt-M5E3UZDM.js +194 -0
- package/dist/set-prompt-M5E3UZDM.js.map +1 -0
- package/dist/setup-links-ERBQSKAB.js +142 -0
- package/dist/setup-links-ERBQSKAB.js.map +1 -0
- package/dist/site-PNVFJRYK.js +178 -0
- package/dist/site-PNVFJRYK.js.map +1 -0
- package/dist/sources-DMZJPLKC.js +455 -0
- package/dist/sources-DMZJPLKC.js.map +1 -0
- package/dist/sources-HN3GCEDX.js +30 -0
- package/dist/stale-VWN25WTL.js +72 -0
- package/dist/stale-VWN25WTL.js.map +1 -0
- package/dist/stats-CVF6AC7R.js +34 -0
- package/dist/status-SF7DTPCJ.js +63 -0
- package/dist/status-SF7DTPCJ.js.map +1 -0
- package/dist/stock-4LPQ6SM7.js +179 -0
- package/dist/studio-NZ6WQ7OE.js +49 -0
- package/dist/suggest-WMMEQCUH.js +66 -0
- package/dist/suggest-WMMEQCUH.js.map +1 -0
- package/dist/sync-F7VNZLWY.js +55 -0
- package/dist/sync-F7VNZLWY.js.map +1 -0
- package/dist/sync-HVNDPBOD.js +55 -0
- package/dist/sync-HVNDPBOD.js.map +1 -0
- package/dist/sync-definition-CKEUYKWN.js +65 -0
- package/dist/tag-KTQ2FV5C.js +57 -0
- package/dist/tag-KTQ2FV5C.js.map +1 -0
- package/dist/tag-manager-FLXXLNKP.js +43 -0
- package/dist/tags-EUOOSAKN.js +26 -0
- package/dist/tags-KOMAP2G5.js +21 -0
- package/dist/tags-KOMAP2G5.js.map +1 -0
- package/dist/tags-TKXJGTR3.js +21 -0
- package/dist/tags-TKXJGTR3.js.map +1 -0
- package/dist/tags-VWIPDCUA.js +225 -0
- package/dist/tags-VWIPDCUA.js.map +1 -0
- package/dist/tags-XAB4HWGW.js +21 -0
- package/dist/tags-XAB4HWGW.js.map +1 -0
- package/dist/targeting-criteria-HE7K52WN.js +113 -0
- package/dist/targets-NA4XPDBF.js +104 -0
- package/dist/targets-NA4XPDBF.js.map +1 -0
- package/dist/testimonials-3Q5XM7JD.js +32 -0
- package/dist/top-companies-TKO4QGPJ.js +109 -0
- package/dist/top-companies-TKO4QGPJ.js.map +1 -0
- package/dist/translate-YVIZ5T44.js +605 -0
- package/dist/translate-YVIZ5T44.js.map +1 -0
- package/dist/triggers-QX7VW7UO.js +143 -0
- package/dist/triggers-QX7VW7UO.js.map +1 -0
- package/dist/unlink-64SRPUNG.js +68 -0
- package/dist/unlink-64SRPUNG.js.map +1 -0
- package/dist/unstage-5X2MOUMF.js +86 -0
- package/dist/unstage-5X2MOUMF.js.map +1 -0
- package/dist/update-22ZBHURE.js +81 -0
- package/dist/update-22ZBHURE.js.map +1 -0
- package/dist/update-2LTPSGWT.js +99 -0
- package/dist/update-2LTPSGWT.js.map +1 -0
- package/dist/update-DOKS7ATM.js +189 -0
- package/dist/update-DOKS7ATM.js.map +1 -0
- package/dist/update-FB6X463M.js +64 -0
- package/dist/update-FB6X463M.js.map +1 -0
- package/dist/update-QIZ7XFAM.js +153 -0
- package/dist/update-QIZ7XFAM.js.map +1 -0
- package/dist/upload-XJ7TUVIK.js +127 -0
- package/dist/upload-XJ7TUVIK.js.map +1 -0
- package/dist/url-params-KLQOLNPS.js +99 -0
- package/dist/url-params-KLQOLNPS.js.map +1 -0
- package/dist/validate-YTBJBG44.js +118 -0
- package/dist/validate-YTBJBG44.js.map +1 -0
- package/dist/videos-WAPUPJVT.js +39 -0
- package/dist/viewer-check-GHQA3UY2.js +81 -0
- package/dist/web-6JMWERTT.js +141 -0
- package/dist/web-6JMWERTT.js.map +1 -0
- package/dist/winning-ads-XCVUAIOU.js +86 -0
- package/dist/write-commands-N74CDMQM.js +1493 -0
- package/dist/write-commands-N74CDMQM.js.map +1 -0
- package/dist/x-SI4KYDEY.js +47 -0
- package/package.json +1 -1
- package/dist/account-UHNR5KTE.js +0 -79
- package/dist/account-UHNR5KTE.js.map +0 -1
- package/dist/accounts-KMLXHADA.js +0 -77
- package/dist/accounts-KMLXHADA.js.map +0 -1
- package/dist/accounts-QDGNTSTV.js +0 -611
- package/dist/accounts-QDGNTSTV.js.map +0 -1
- package/dist/actions-QL5UD2W4.js +0 -55
- package/dist/activecampaign-5OD45ROS.js +0 -935
- package/dist/activecampaign-5OD45ROS.js.map +0 -1
- package/dist/add-2F7BEVYD.js +0 -105
- package/dist/add-2F7BEVYD.js.map +0 -1
- package/dist/add-6K6LO7CM.js +0 -104
- package/dist/add-6K6LO7CM.js.map +0 -1
- package/dist/add-LYDJZDGO.js +0 -302
- package/dist/add-LYDJZDGO.js.map +0 -1
- package/dist/ads-DHPJFU52.js +0 -40
- package/dist/advertisers-23LU7GTV.js +0 -120
- package/dist/advertisers-23LU7GTV.js.map +0 -1
- package/dist/analytics-DVD4OBBR.js +0 -1976
- package/dist/analytics-DVD4OBBR.js.map +0 -1
- package/dist/analytics-HO2SLL4W.js +0 -433
- package/dist/analytics-HO2SLL4W.js.map +0 -1
- package/dist/assign-CLKJKH2B.js +0 -77
- package/dist/assign-CLKJKH2B.js.map +0 -1
- package/dist/audience-size-NNYYXODL.js +0 -73
- package/dist/audience-size-NNYYXODL.js.map +0 -1
- package/dist/audit-KB4P2XGS.js +0 -151
- package/dist/audit-KB4P2XGS.js.map +0 -1
- package/dist/autocomplete-VZD2SMTE.js +0 -111
- package/dist/autocomplete-VZD2SMTE.js.map +0 -1
- package/dist/avatars-FKOO6VZ2.js +0 -38
- package/dist/bid-pricing-6LLXOLLI.js +0 -100
- package/dist/bid-pricing-6LLXOLLI.js.map +0 -1
- package/dist/brand-NNWHBIAX.js +0 -22
- package/dist/brief-CPJQWT6W.js +0 -538
- package/dist/brief-CPJQWT6W.js.map +0 -1
- package/dist/campaign-groups-YPYNXOWU.js +0 -95
- package/dist/campaign-groups-YPYNXOWU.js.map +0 -1
- package/dist/campaign-writes-UJ4L2O6G.js +0 -165
- package/dist/campaign-writes-UJ4L2O6G.js.map +0 -1
- package/dist/campaigns-HLBZRH5A.js +0 -107
- package/dist/campaigns-N44ZDGB5.js +0 -109
- package/dist/campaigns-N44ZDGB5.js.map +0 -1
- package/dist/canvas-D64GLWUO.js +0 -46
- package/dist/capabilities-LWXCWMIY.js +0 -144
- package/dist/capabilities-LWXCWMIY.js.map +0 -1
- package/dist/chatgpt-YI6YNACI.js +0 -47
- package/dist/chats-7WGC2CVW.js +0 -276
- package/dist/chats-7WGC2CVW.js.map +0 -1
- package/dist/check-EH6BXWWL.js +0 -104
- package/dist/check-EH6BXWWL.js.map +0 -1
- package/dist/chunk-237WE5LX.js +0 -455
- package/dist/chunk-237WE5LX.js.map +0 -1
- package/dist/chunk-2B772ZEA.js +0 -169
- package/dist/chunk-2KRK667G.js +0 -51
- package/dist/chunk-2TVXJPGR.js +0 -103
- package/dist/chunk-3AMLOCXY.js +0 -392
- package/dist/chunk-3B5LPK6D.js +0 -658
- package/dist/chunk-3B5LPK6D.js.map +0 -1
- package/dist/chunk-3N5A44NQ.js +0 -122
- package/dist/chunk-3WAYZQNV.js +0 -61
- package/dist/chunk-5A257KJA.js +0 -160
- package/dist/chunk-6QGS3RQP.js +0 -363
- package/dist/chunk-AFD32O4A.js +0 -494
- package/dist/chunk-AW2GKIGS.js +0 -433
- package/dist/chunk-CYSBNCPX.js +0 -55
- package/dist/chunk-CYSBNCPX.js.map +0 -1
- package/dist/chunk-DAO63OOP.js +0 -6352
- package/dist/chunk-DAO63OOP.js.map +0 -1
- package/dist/chunk-EMQUW6JB.js +0 -942
- package/dist/chunk-EW3JEKIV.js +0 -139
- package/dist/chunk-FBFWMTOP.js +0 -19
- package/dist/chunk-GXDLWBOY.js +0 -73
- package/dist/chunk-GXDLWBOY.js.map +0 -1
- package/dist/chunk-GXGYTFZA.js +0 -8939
- package/dist/chunk-I7J7YQXZ.js +0 -142
- package/dist/chunk-IBY44U2M.js +0 -1079
- package/dist/chunk-IFXGCI33.js +0 -297
- package/dist/chunk-IKLHXGMF.js +0 -91
- package/dist/chunk-IYTPWAN3.js +0 -604
- package/dist/chunk-J3CWAERS.js +0 -3868
- package/dist/chunk-JH2L5CQD.js +0 -206
- package/dist/chunk-JUVVCA7B.js +0 -97
- package/dist/chunk-MK6XJUCQ.js +0 -197
- package/dist/chunk-N3I6ZXR7.js +0 -66
- package/dist/chunk-NBO2NSAW.js +0 -592
- package/dist/chunk-NEU5QD2C.js +0 -249
- package/dist/chunk-NKIBXOHT.js +0 -344
- package/dist/chunk-OE3MIV4F.js +0 -547
- package/dist/chunk-P2MFWJR3.js +0 -903
- package/dist/chunk-PHCIFBP3.js +0 -89
- package/dist/chunk-PTUXBO5O.js +0 -224
- package/dist/chunk-Q3LXLWZY.js +0 -275
- package/dist/chunk-Q5WBTVA7.js +0 -455
- package/dist/chunk-RDEAVCMF.js +0 -399
- package/dist/chunk-RDEAVCMF.js.map +0 -1
- package/dist/chunk-RGMKXNQP.js +0 -23
- package/dist/chunk-RZTKCCUL.js +0 -831
- package/dist/chunk-TTKBNBQF.js +0 -156
- package/dist/chunk-VB3XUR6A.js +0 -207
- package/dist/chunk-XCKINS7K.js +0 -57
- package/dist/chunk-Y6GKV7CU.js +0 -346
- package/dist/chunk-Y6GKV7CU.js.map +0 -1
- package/dist/chunk-Z2GQREJY.js +0 -159
- package/dist/chunk-ZDAVSTEE.js +0 -172
- package/dist/chunk-ZXCSOVS5.js +0 -191
- package/dist/claim-SVDCQ2AI.js +0 -197
- package/dist/claim-SVDCQ2AI.js.map +0 -1
- package/dist/companies-BYMYQK6A.js +0 -195
- package/dist/companies-BYMYQK6A.js.map +0 -1
- package/dist/complete-NEH3MWRI.js +0 -81
- package/dist/complete-NEH3MWRI.js.map +0 -1
- package/dist/connect-5PGL7ZOM.js +0 -42
- package/dist/conversation-CSOKJXDW.js +0 -93
- package/dist/conversation-CSOKJXDW.js.map +0 -1
- package/dist/conversions-4JOTTFEH.js +0 -135
- package/dist/conversions-4JOTTFEH.js.map +0 -1
- package/dist/create-2XYMBULY.js +0 -207
- package/dist/create-2XYMBULY.js.map +0 -1
- package/dist/create-56PTZABQ.js +0 -235
- package/dist/create-56PTZABQ.js.map +0 -1
- package/dist/create-D6S6TGWY.js +0 -59
- package/dist/create-D6S6TGWY.js.map +0 -1
- package/dist/create-SMW4O5PC.js +0 -132
- package/dist/create-SMW4O5PC.js.map +0 -1
- package/dist/creatives-OO76DAFS.js +0 -58
- package/dist/creatives-VJUYWJL6.js +0 -182
- package/dist/creatives-VJUYWJL6.js.map +0 -1
- package/dist/credentials-2ONYUJW6.js +0 -287
- package/dist/credentials-2ONYUJW6.js.map +0 -1
- package/dist/critique-NDDFSGPE.js +0 -1458
- package/dist/critique-NDDFSGPE.js.map +0 -1
- package/dist/critique-YXZVMLZ4.js +0 -227
- package/dist/critique-YXZVMLZ4.js.map +0 -1
- package/dist/crm-Q6CEP5XV.js +0 -224
- package/dist/crm-Q6CEP5XV.js.map +0 -1
- package/dist/crm-WRONZYDH.js +0 -318
- package/dist/crm-WRONZYDH.js.map +0 -1
- package/dist/customers-2EFYSCU2.js +0 -56
- package/dist/delete-7WEVC3FS.js +0 -66
- package/dist/delete-7WEVC3FS.js.map +0 -1
- package/dist/delete-RBWK255M.js +0 -54
- package/dist/delete-RBWK255M.js.map +0 -1
- package/dist/delete-VN4WWMQF.js +0 -64
- package/dist/delete-VN4WWMQF.js.map +0 -1
- package/dist/demographics-I5XZ435C.js +0 -138
- package/dist/demographics-I5XZ435C.js.map +0 -1
- package/dist/discard-XJLIXTNM.js +0 -66
- package/dist/discard-XJLIXTNM.js.map +0 -1
- package/dist/domain-M7AEGAYI.js +0 -98
- package/dist/domain-M7AEGAYI.js.map +0 -1
- package/dist/draft-5DQI4W5F.js +0 -306
- package/dist/draft-5DQI4W5F.js.map +0 -1
- package/dist/draft-7IIYHSY2.js +0 -332
- package/dist/draft-7IIYHSY2.js.map +0 -1
- package/dist/draft-CN6GKVBF.js +0 -217
- package/dist/draft-CN6GKVBF.js.map +0 -1
- package/dist/experiment-IDDWRCJ7.js +0 -1397
- package/dist/facets-ZLZ6LIHN.js +0 -114
- package/dist/facets-ZLZ6LIHN.js.map +0 -1
- package/dist/feedback-7LEX2P5Q.js +0 -106
- package/dist/feedback-7LEX2P5Q.js.map +0 -1
- package/dist/feedback-record-P4JJ63KA.js +0 -260
- package/dist/feedback-record-P4JJ63KA.js.map +0 -1
- package/dist/fetch-MIVCEHXZ.js +0 -176
- package/dist/fetch-MIVCEHXZ.js.map +0 -1
- package/dist/find-VHN34MWL.js +0 -134
- package/dist/fit-SS6HSZPU.js +0 -62
- package/dist/flows-UTIIHDNE.js +0 -247
- package/dist/flows-UTIIHDNE.js.map +0 -1
- package/dist/fonts-YPNN7ZJP.js +0 -36
- package/dist/forecast-OBSHG2GJ.js +0 -118
- package/dist/forecast-OBSHG2GJ.js.map +0 -1
- package/dist/funnel-Z2VLXUEQ.js +0 -394
- package/dist/funnel-Z2VLXUEQ.js.map +0 -1
- package/dist/ga4-ZPAEF2G2.js +0 -55
- package/dist/get-MDAO6I7T.js +0 -56
- package/dist/get-MDAO6I7T.js.map +0 -1
- package/dist/get-ZB553BSH.js +0 -79
- package/dist/get-ZB553BSH.js.map +0 -1
- package/dist/google-C3X7O2UO.js +0 -136
- package/dist/google-ads-FTWL772L.js +0 -195
- package/dist/google-ads-FTWL772L.js.map +0 -1
- package/dist/gsc-SDDHGTZK.js +0 -30
- package/dist/history-WKJYKDMG.js +0 -133
- package/dist/history-WKJYKDMG.js.map +0 -1
- package/dist/hubspot-EPHVEPOO.js +0 -779
- package/dist/hubspot-EPHVEPOO.js.map +0 -1
- package/dist/icon-MYPDC6FM.js +0 -137
- package/dist/ideas-3PBH7VEX.js +0 -40
- package/dist/images-J35C3WG4.js +0 -92
- package/dist/ingest-5QOPUKFE.js +0 -107
- package/dist/ingest-5QOPUKFE.js.map +0 -1
- package/dist/ingest-OKUYP632.js +0 -23
- package/dist/inspect-PMNCP6MV.js +0 -189
- package/dist/inspect-PMNCP6MV.js.map +0 -1
- package/dist/inspiration-QAL7NS7G.js +0 -53
- package/dist/keyword-metrics-R752SJIT.js +0 -197
- package/dist/keyword-metrics-R752SJIT.js.map +0 -1
- package/dist/keywords-for-site-7UWPJYQF.js +0 -128
- package/dist/keywords-for-site-7UWPJYQF.js.map +0 -1
- package/dist/landing-CBVIOGJ5.js +0 -28
- package/dist/leads-LIJS6Y5W.js +0 -90
- package/dist/leads-LIJS6Y5W.js.map +0 -1
- package/dist/learn-N6QV7GXA.js +0 -204
- package/dist/learn-N6QV7GXA.js.map +0 -1
- package/dist/line-item-writes-3WPJXKIL.js +0 -208
- package/dist/line-item-writes-3WPJXKIL.js.map +0 -1
- package/dist/line-items-ZOFKOGAA.js +0 -103
- package/dist/link-DDRQKOUL.js +0 -64
- package/dist/link-DDRQKOUL.js.map +0 -1
- package/dist/linkedin-UWZCF66X.js +0 -1057
- package/dist/linkedin-UWZCF66X.js.map +0 -1
- package/dist/list-5PLXVPLB.js +0 -151
- package/dist/list-5PLXVPLB.js.map +0 -1
- package/dist/list-RC2NX6AX.js +0 -50
- package/dist/list-VSJISE7U.js +0 -303
- package/dist/list-VSJISE7U.js.map +0 -1
- package/dist/list-WTVOBQYX.js +0 -64
- package/dist/list-WTVOBQYX.js.map +0 -1
- package/dist/log-YKKPROLZ.js +0 -92
- package/dist/log-YKKPROLZ.js.map +0 -1
- package/dist/logo-WE2UELX6.js +0 -18
- package/dist/make-RNOWBLZQ.js +0 -1353
- package/dist/make-RNOWBLZQ.js.map +0 -1
- package/dist/map-WTDPQLVO.js +0 -433
- package/dist/map-WTDPQLVO.js.map +0 -1
- package/dist/mcp-XJNSCPP3.js +0 -714
- package/dist/mcp-XJNSCPP3.js.map +0 -1
- package/dist/media-sources-JGBDDXZ5.js +0 -32
- package/dist/media-sources-JGBDDXZ5.js.map +0 -1
- package/dist/members-O3BTMRXX.js +0 -44
- package/dist/members-O3BTMRXX.js.map +0 -1
- package/dist/normalize-R5AYLA2J.js +0 -141
- package/dist/normalize-R5AYLA2J.js.map +0 -1
- package/dist/options-AILRY7JY.js +0 -122
- package/dist/options-AILRY7JY.js.map +0 -1
- package/dist/organization-KJJXZLVK.js +0 -946
- package/dist/organization-KJJXZLVK.js.map +0 -1
- package/dist/performance-7YU4HOGH.js +0 -24
- package/dist/plan-ZC4JY4IG.js +0 -207
- package/dist/promoted-tweet-writes-TNELWPVG.js +0 -180
- package/dist/promoted-tweet-writes-TNELWPVG.js.map +0 -1
- package/dist/promoted-tweets-76WKUFJQ.js +0 -119
- package/dist/publish-BKLHCKHB.js +0 -341
- package/dist/publish-BKLHCKHB.js.map +0 -1
- package/dist/reddit-YK3YUZEI.js +0 -26
- package/dist/refresh-WIII7KXB.js +0 -94
- package/dist/refresh-WIII7KXB.js.map +0 -1
- package/dist/release-ZHXYQI7G.js +0 -60
- package/dist/release-ZHXYQI7G.js.map +0 -1
- package/dist/remove-NOX4BXWK.js +0 -50
- package/dist/remove-NOX4BXWK.js.map +0 -1
- package/dist/remove-VLWRCOEZ.js +0 -48
- package/dist/remove-VLWRCOEZ.js.map +0 -1
- package/dist/reopen-NLWKK5HB.js +0 -63
- package/dist/reopen-NLWKK5HB.js.map +0 -1
- package/dist/rerun-DZWQNMZQ.js +0 -90
- package/dist/rerun-DZWQNMZQ.js.map +0 -1
- package/dist/research-Q3P76RHN.js +0 -62
- package/dist/research-UDZBCDNX.js +0 -262
- package/dist/research-UDZBCDNX.js.map +0 -1
- package/dist/reset-5UHFX7QY.js +0 -54
- package/dist/reset-5UHFX7QY.js.map +0 -1
- package/dist/reset-MTRJQUP7.js +0 -54
- package/dist/reset-MTRJQUP7.js.map +0 -1
- package/dist/resolve-DA72VT7Q.js +0 -121
- package/dist/resolve-DA72VT7Q.js.map +0 -1
- package/dist/retry-LQUBX5TK.js +0 -62
- package/dist/retry-LQUBX5TK.js.map +0 -1
- package/dist/retry-U6F4CS6O.js +0 -60
- package/dist/retry-U6F4CS6O.js.map +0 -1
- package/dist/rules-VS5PZ7VO.js +0 -96
- package/dist/rules-VS5PZ7VO.js.map +0 -1
- package/dist/rules-add-LMVZYDXE.js +0 -462
- package/dist/rules-add-LMVZYDXE.js.map +0 -1
- package/dist/run-6PRA2YSD.js +0 -65
- package/dist/run-R6COFNOR.js +0 -66
- package/dist/run-R6COFNOR.js.map +0 -1
- package/dist/scaffold-ad-3OVJ7VZQ.js +0 -1511
- package/dist/scaffold-ad-3OVJ7VZQ.js.map +0 -1
- package/dist/scaffold-static-ad-DDRA3Q5I.js +0 -1005
- package/dist/scaffold-static-ad-DDRA3Q5I.js.map +0 -1
- package/dist/scaffold-video-3JZYFYFU.js +0 -883
- package/dist/scaffold-video-3JZYFYFU.js.map +0 -1
- package/dist/schedule-BRSYHMKR.js +0 -66
- package/dist/schedule-BRSYHMKR.js.map +0 -1
- package/dist/schedule-ED2YDUPY.js +0 -61
- package/dist/schedule-ED2YDUPY.js.map +0 -1
- package/dist/scheduled-agents-5P67MVGX.js +0 -50
- package/dist/schema-4XVKERSA.js +0 -132
- package/dist/schema-4XVKERSA.js.map +0 -1
- package/dist/schema-RRAQW3OS.js +0 -69
- package/dist/search-Y2UMIQ57.js +0 -174
- package/dist/search-Y2UMIQ57.js.map +0 -1
- package/dist/select-OZ4E6VLF.js +0 -101
- package/dist/select-OZ4E6VLF.js.map +0 -1
- package/dist/set-prompt-O4YAE4CE.js +0 -193
- package/dist/set-prompt-O4YAE4CE.js.map +0 -1
- package/dist/setup-links-2GJYCV2A.js +0 -141
- package/dist/setup-links-2GJYCV2A.js.map +0 -1
- package/dist/site-47B6V2UX.js +0 -177
- package/dist/site-47B6V2UX.js.map +0 -1
- package/dist/sources-DXPZAPQ7.js +0 -454
- package/dist/sources-DXPZAPQ7.js.map +0 -1
- package/dist/sources-NDXYTASG.js +0 -30
- package/dist/stale-VLVBO2L6.js +0 -71
- package/dist/stale-VLVBO2L6.js.map +0 -1
- package/dist/stats-37OFAMPW.js +0 -34
- package/dist/status-4ODD46XY.js +0 -62
- package/dist/status-4ODD46XY.js.map +0 -1
- package/dist/stock-6R5E7MJX.js +0 -179
- package/dist/studio-LEIGL3Q7.js +0 -49
- package/dist/sync-EKGEWE53.js +0 -54
- package/dist/sync-EKGEWE53.js.map +0 -1
- package/dist/sync-TKNVBUDM.js +0 -54
- package/dist/sync-TKNVBUDM.js.map +0 -1
- package/dist/sync-definition-M5R3H3TP.js +0 -64
- package/dist/tag-manager-3Q55PBEW.js +0 -43
- package/dist/tags-4N5UUUN6.js +0 -26
- package/dist/tags-5NHIAD5A.js +0 -20
- package/dist/tags-5NHIAD5A.js.map +0 -1
- package/dist/tags-UUKWSWCN.js +0 -20
- package/dist/tags-UUKWSWCN.js.map +0 -1
- package/dist/tags-VK7B5DJF.js +0 -20
- package/dist/tags-VK7B5DJF.js.map +0 -1
- package/dist/tags-XAHIB3WA.js +0 -224
- package/dist/tags-XAHIB3WA.js.map +0 -1
- package/dist/targeting-criteria-AVARWV2G.js +0 -113
- package/dist/targets-6RYLQRID.js +0 -103
- package/dist/targets-6RYLQRID.js.map +0 -1
- package/dist/testimonials-6TF6BOFN.js +0 -32
- package/dist/top-companies-45EHRCJD.js +0 -108
- package/dist/top-companies-45EHRCJD.js.map +0 -1
- package/dist/translate-VHLBACCE.js +0 -604
- package/dist/translate-VHLBACCE.js.map +0 -1
- package/dist/triggers-ERQONJNO.js +0 -142
- package/dist/triggers-ERQONJNO.js.map +0 -1
- package/dist/unlink-TPDO6JNF.js +0 -67
- package/dist/unlink-TPDO6JNF.js.map +0 -1
- package/dist/unstage-YKKQQ7LW.js +0 -85
- package/dist/unstage-YKKQQ7LW.js.map +0 -1
- package/dist/update-43WU6X7R.js +0 -63
- package/dist/update-43WU6X7R.js.map +0 -1
- package/dist/update-CAHLAXWO.js +0 -98
- package/dist/update-CAHLAXWO.js.map +0 -1
- package/dist/update-NGH6YADN.js +0 -152
- package/dist/update-NGH6YADN.js.map +0 -1
- package/dist/update-SPJIHHLE.js +0 -188
- package/dist/update-SPJIHHLE.js.map +0 -1
- package/dist/upload-ACESIZIZ.js +0 -126
- package/dist/upload-ACESIZIZ.js.map +0 -1
- package/dist/url-params-MIXEDBF7.js +0 -98
- package/dist/url-params-MIXEDBF7.js.map +0 -1
- package/dist/validate-XJJA7ULE.js +0 -117
- package/dist/validate-XJJA7ULE.js.map +0 -1
- package/dist/videos-LBXPG7WC.js +0 -39
- package/dist/viewer-check-7VJ3GUZX.js +0 -80
- package/dist/web-EWQJC2SD.js +0 -140
- package/dist/web-EWQJC2SD.js.map +0 -1
- package/dist/winning-ads-SAOJAKEQ.js +0 -86
- package/dist/write-commands-QPDE4GWW.js +0 -1024
- package/dist/write-commands-QPDE4GWW.js.map +0 -1
- package/dist/x-LXOJPCRF.js +0 -47
- /package/dist/{actions-QL5UD2W4.js.map → actions-FMNJSOBA.js.map} +0 -0
- /package/dist/{ads-DHPJFU52.js.map → ads-OLXSDPD6.js.map} +0 -0
- /package/dist/{avatars-FKOO6VZ2.js.map → avatars-I4H3NMEJ.js.map} +0 -0
- /package/dist/{brand-NNWHBIAX.js.map → brand-3V7ECY7D.js.map} +0 -0
- /package/dist/{campaigns-HLBZRH5A.js.map → campaigns-MCB76NPQ.js.map} +0 -0
- /package/dist/{canvas-D64GLWUO.js.map → canvas-JCNKMGCG.js.map} +0 -0
- /package/dist/{chatgpt-YI6YNACI.js.map → chatgpt-XFZ42NXC.js.map} +0 -0
- /package/dist/{chunk-VB3XUR6A.js.map → chunk-2YTBPRRG.js.map} +0 -0
- /package/dist/{chunk-JUVVCA7B.js.map → chunk-3SNCMEJB.js.map} +0 -0
- /package/dist/{chunk-RGMKXNQP.js.map → chunk-7QGFO35A.js.map} +0 -0
- /package/dist/{chunk-ZXCSOVS5.js.map → chunk-AV7ALENU.js.map} +0 -0
- /package/dist/{chunk-IYTPWAN3.js.map → chunk-BRLFQ4VX.js.map} +0 -0
- /package/dist/{chunk-RZTKCCUL.js.map → chunk-DJE7UXYT.js.map} +0 -0
- /package/dist/{chunk-EW3JEKIV.js.map → chunk-EFWXYUSK.js.map} +0 -0
- /package/dist/{chunk-J3CWAERS.js.map → chunk-EONSZAZB.js.map} +0 -0
- /package/dist/{chunk-PHCIFBP3.js.map → chunk-FG3MV2XM.js.map} +0 -0
- /package/dist/{chunk-3AMLOCXY.js.map → chunk-FKG476GH.js.map} +0 -0
- /package/dist/{chunk-IFXGCI33.js.map → chunk-FUGQSIYG.js.map} +0 -0
- /package/dist/{chunk-Q3LXLWZY.js.map → chunk-HPLHAHG5.js.map} +0 -0
- /package/dist/{chunk-3N5A44NQ.js.map → chunk-I24YT2KG.js.map} +0 -0
- /package/dist/{chunk-P2MFWJR3.js.map → chunk-IFDZZOUC.js.map} +0 -0
- /package/dist/{chunk-Q5WBTVA7.js.map → chunk-JVVUI55M.js.map} +0 -0
- /package/dist/{chunk-6QGS3RQP.js.map → chunk-KKSHEPBY.js.map} +0 -0
- /package/dist/{chunk-OE3MIV4F.js.map → chunk-KQ7RCLGC.js.map} +0 -0
- /package/dist/{chunk-ZDAVSTEE.js.map → chunk-L7WMS5PW.js.map} +0 -0
- /package/dist/{chunk-FBFWMTOP.js.map → chunk-LBRO4MTL.js.map} +0 -0
- /package/dist/{chunk-PTUXBO5O.js.map → chunk-LNRPOULW.js.map} +0 -0
- /package/dist/{chunk-EMQUW6JB.js.map → chunk-LX6WC2XZ.js.map} +0 -0
- /package/dist/{chunk-I7J7YQXZ.js.map → chunk-MMGTJBM6.js.map} +0 -0
- /package/dist/{chunk-2KRK667G.js.map → chunk-OEZYSL3U.js.map} +0 -0
- /package/dist/{chunk-2TVXJPGR.js.map → chunk-OOVHBMQB.js.map} +0 -0
- /package/dist/{chunk-Z2GQREJY.js.map → chunk-PTH7VWKK.js.map} +0 -0
- /package/dist/{chunk-N3I6ZXR7.js.map → chunk-QZF4BVKL.js.map} +0 -0
- /package/dist/{chunk-3WAYZQNV.js.map → chunk-RITUSBYO.js.map} +0 -0
- /package/dist/{chunk-JH2L5CQD.js.map → chunk-SSTL3A7Z.js.map} +0 -0
- /package/dist/{chunk-2B772ZEA.js.map → chunk-TD4SO6TR.js.map} +0 -0
- /package/dist/{chunk-IKLHXGMF.js.map → chunk-UZ4RTOFG.js.map} +0 -0
- /package/dist/{chunk-NBO2NSAW.js.map → chunk-VAX7PFQV.js.map} +0 -0
- /package/dist/{chunk-AFD32O4A.js.map → chunk-VDRSZK4P.js.map} +0 -0
- /package/dist/{chunk-NKIBXOHT.js.map → chunk-VNU2EYD4.js.map} +0 -0
- /package/dist/{chunk-TTKBNBQF.js.map → chunk-WT4WDIXA.js.map} +0 -0
- /package/dist/{chunk-5A257KJA.js.map → chunk-XEX23CIB.js.map} +0 -0
- /package/dist/{chunk-GXGYTFZA.js.map → chunk-XXDF25BW.js.map} +0 -0
- /package/dist/{chunk-NEU5QD2C.js.map → chunk-YJ3LSFMX.js.map} +0 -0
- /package/dist/{chunk-MK6XJUCQ.js.map → chunk-YVK5RT3B.js.map} +0 -0
- /package/dist/{chunk-AW2GKIGS.js.map → chunk-YWWRLZUR.js.map} +0 -0
- /package/dist/{chunk-XCKINS7K.js.map → chunk-Z4S5BCVZ.js.map} +0 -0
- /package/dist/{chunk-IBY44U2M.js.map → chunk-ZYGK7GAK.js.map} +0 -0
- /package/dist/{connect-5PGL7ZOM.js.map → connect-COS6G45S.js.map} +0 -0
- /package/dist/{creatives-OO76DAFS.js.map → creatives-SEQHJD2M.js.map} +0 -0
- /package/dist/{customers-2EFYSCU2.js.map → customers-LMSX33FO.js.map} +0 -0
- /package/dist/{experiment-IDDWRCJ7.js.map → experiment-7RJ5X2LL.js.map} +0 -0
- /package/dist/{find-VHN34MWL.js.map → find-2EPXK5RF.js.map} +0 -0
- /package/dist/{fit-SS6HSZPU.js.map → fit-W7UNFZT5.js.map} +0 -0
- /package/dist/{fonts-YPNN7ZJP.js.map → fonts-N42UYWTX.js.map} +0 -0
- /package/dist/{ga4-ZPAEF2G2.js.map → ga4-6EIQC2TG.js.map} +0 -0
- /package/dist/{google-C3X7O2UO.js.map → google-O5OI6QFU.js.map} +0 -0
- /package/dist/{gsc-SDDHGTZK.js.map → gsc-BM3T2GDL.js.map} +0 -0
- /package/dist/{icon-MYPDC6FM.js.map → icon-B7DG53S5.js.map} +0 -0
- /package/dist/{ideas-3PBH7VEX.js.map → ideas-DYN2DMFN.js.map} +0 -0
- /package/dist/{images-J35C3WG4.js.map → images-EQCUXEHF.js.map} +0 -0
- /package/dist/{ingest-OKUYP632.js.map → ingest-B46AY3QU.js.map} +0 -0
- /package/dist/{inspiration-QAL7NS7G.js.map → inspiration-TCCKM4R7.js.map} +0 -0
- /package/dist/{landing-CBVIOGJ5.js.map → landing-WVPA7NBR.js.map} +0 -0
- /package/dist/{line-items-ZOFKOGAA.js.map → line-items-OEWYOPFP.js.map} +0 -0
- /package/dist/{list-RC2NX6AX.js.map → list-WRBWQASJ.js.map} +0 -0
- /package/dist/{logo-WE2UELX6.js.map → logo-QTSBKP2J.js.map} +0 -0
- /package/dist/{performance-7YU4HOGH.js.map → performance-HTU5FR2K.js.map} +0 -0
- /package/dist/{plan-ZC4JY4IG.js.map → plan-W2K45F7K.js.map} +0 -0
- /package/dist/{promoted-tweets-76WKUFJQ.js.map → promoted-tweets-TTWN5OMW.js.map} +0 -0
- /package/dist/{reddit-YK3YUZEI.js.map → reddit-6C3PT5CT.js.map} +0 -0
- /package/dist/{research-Q3P76RHN.js.map → research-YCMMQVK6.js.map} +0 -0
- /package/dist/{run-6PRA2YSD.js.map → run-SR7DJ7M5.js.map} +0 -0
- /package/dist/{scheduled-agents-5P67MVGX.js.map → scheduled-agents-N63EZNY6.js.map} +0 -0
- /package/dist/{schema-RRAQW3OS.js.map → schema-C6SGBNA6.js.map} +0 -0
- /package/dist/{sources-NDXYTASG.js.map → sources-HN3GCEDX.js.map} +0 -0
- /package/dist/{stats-37OFAMPW.js.map → stats-CVF6AC7R.js.map} +0 -0
- /package/dist/{stock-6R5E7MJX.js.map → stock-4LPQ6SM7.js.map} +0 -0
- /package/dist/{studio-LEIGL3Q7.js.map → studio-NZ6WQ7OE.js.map} +0 -0
- /package/dist/{sync-definition-M5R3H3TP.js.map → sync-definition-CKEUYKWN.js.map} +0 -0
- /package/dist/{tag-manager-3Q55PBEW.js.map → tag-manager-FLXXLNKP.js.map} +0 -0
- /package/dist/{tags-4N5UUUN6.js.map → tags-EUOOSAKN.js.map} +0 -0
- /package/dist/{targeting-criteria-AVARWV2G.js.map → targeting-criteria-HE7K52WN.js.map} +0 -0
- /package/dist/{testimonials-6TF6BOFN.js.map → testimonials-3Q5XM7JD.js.map} +0 -0
- /package/dist/{videos-LBXPG7WC.js.map → videos-WAPUPJVT.js.map} +0 -0
- /package/dist/{viewer-check-7VJ3GUZX.js.map → viewer-check-GHQA3UY2.js.map} +0 -0
- /package/dist/{winning-ads-SAOJAKEQ.js.map → winning-ads-XCVUAIOU.js.map} +0 -0
- /package/dist/{x-LXOJPCRF.js.map → x-SI4KYDEY.js.map} +0 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import {
|
|
2
|
+
csvOrJson,
|
|
3
|
+
handleLinkedinError,
|
|
4
|
+
resolveAccountIdArg,
|
|
5
|
+
resolveStatusFilter,
|
|
6
|
+
statusesArgDescription
|
|
7
|
+
} from "./chunk-2YTBPRRG.js";
|
|
8
|
+
import {
|
|
9
|
+
writeAdsOutput,
|
|
10
|
+
writeJsonEnvelope
|
|
11
|
+
} from "./chunk-2VIZ4UUZ.js";
|
|
12
|
+
import {
|
|
13
|
+
NO_CACHE_ARG
|
|
14
|
+
} from "./chunk-U6RONIJC.js";
|
|
15
|
+
import {
|
|
16
|
+
shapeListRows
|
|
17
|
+
} from "./chunk-65Y3RCWP.js";
|
|
18
|
+
import "./chunk-O37VU7FG.js";
|
|
19
|
+
import "./chunk-CAZGM2NX.js";
|
|
20
|
+
import "./chunk-NZS3KEQ2.js";
|
|
21
|
+
import "./chunk-GIWHHCD6.js";
|
|
22
|
+
import "./chunk-XQIOCIDO.js";
|
|
23
|
+
import "./chunk-WTJSMYY2.js";
|
|
24
|
+
import {
|
|
25
|
+
apiGet
|
|
26
|
+
} from "./chunk-6YLNY6CK.js";
|
|
27
|
+
import "./chunk-D5NEIESR.js";
|
|
28
|
+
import "./chunk-57KKVDDR.js";
|
|
29
|
+
import "./chunk-QANGHND7.js";
|
|
30
|
+
import "./chunk-YQSBHWOI.js";
|
|
31
|
+
|
|
32
|
+
// src/commands/ads/linkedin/creatives.ts
|
|
33
|
+
import { defineCommand } from "citty";
|
|
34
|
+
function asRecord(value) {
|
|
35
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
36
|
+
}
|
|
37
|
+
function asString(value) {
|
|
38
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
39
|
+
}
|
|
40
|
+
function creativeDestination(content) {
|
|
41
|
+
if (!content) return { format: "unknown" };
|
|
42
|
+
const reference = asString(content.reference);
|
|
43
|
+
if (reference) return { format: "post", postUrn: reference };
|
|
44
|
+
const textAd = asRecord(content.textAd);
|
|
45
|
+
if (textAd) return { format: "text", landingUrl: asString(textAd.landingPage) };
|
|
46
|
+
const spotlight = asRecord(content.spotlight);
|
|
47
|
+
if (spotlight) return { format: "spotlight", landingUrl: asString(spotlight.landingPage) };
|
|
48
|
+
if (asRecord(content.follower)) return { format: "follower" };
|
|
49
|
+
if (asRecord(content.jobs)) return { format: "jobs" };
|
|
50
|
+
return { format: "unknown" };
|
|
51
|
+
}
|
|
52
|
+
var COMPACT_COLUMNS = [
|
|
53
|
+
"id",
|
|
54
|
+
"urn",
|
|
55
|
+
"campaign",
|
|
56
|
+
"intendedStatus",
|
|
57
|
+
"isServing",
|
|
58
|
+
"reviewStatus",
|
|
59
|
+
"format",
|
|
60
|
+
"landingUrl",
|
|
61
|
+
"postUrn",
|
|
62
|
+
"leadForm",
|
|
63
|
+
"leadFormButton"
|
|
64
|
+
];
|
|
65
|
+
function leadFormUrn(destination) {
|
|
66
|
+
const id = destination?.match(/(\d+)$/)?.[1];
|
|
67
|
+
return id ? `urn:li:leadGenForm:${id}` : void 0;
|
|
68
|
+
}
|
|
69
|
+
function compactRow(row) {
|
|
70
|
+
const destination = creativeDestination(row.content);
|
|
71
|
+
const leadForm = leadFormUrn(row.leadgenCallToAction?.destination);
|
|
72
|
+
return {
|
|
73
|
+
id: row.id,
|
|
74
|
+
urn: row.urn,
|
|
75
|
+
campaign: row.campaign,
|
|
76
|
+
intendedStatus: row.intendedStatus,
|
|
77
|
+
isServing: row.isServing,
|
|
78
|
+
reviewStatus: row.reviewStatus,
|
|
79
|
+
format: destination.format,
|
|
80
|
+
...destination.landingUrl ? { landingUrl: destination.landingUrl } : {},
|
|
81
|
+
...destination.postUrn ? { postUrn: destination.postUrn } : {},
|
|
82
|
+
...leadForm ? { leadForm, leadFormButton: row.leadgenCallToAction?.label } : {}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function unmappedShapeWarnings(rows, rawContentReturned) {
|
|
86
|
+
const unmapped = rows.filter((row) => row.content && creativeDestination(row.content).format === "unknown");
|
|
87
|
+
if (unmapped.length === 0) return [];
|
|
88
|
+
const remedy = rawContentReturned ? "Their raw content is in this response \u2014 read it directly; this command cannot resolve a destination for them." : "Re-read those with --full before drawing any conclusion about where they point.";
|
|
89
|
+
return [
|
|
90
|
+
{
|
|
91
|
+
code: "UNMAPPED_CREATIVE_CONTENT",
|
|
92
|
+
message: `${unmapped.length} of ${rows.length} creatives have a content shape this command can't read, so their destination is missing (ids: ${unmapped.slice(0, 5).map((row) => row.id).join(", ")}). ${remedy}`
|
|
93
|
+
}
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
var listArgs = {
|
|
97
|
+
"account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
|
|
98
|
+
"account-urn": { type: "string", description: "Alias for --account-id" },
|
|
99
|
+
"campaign-id": { type: "string", description: "Filter by campaign ID" },
|
|
100
|
+
"all-statuses": { type: "boolean", description: "Drop the default ACTIVE filter" },
|
|
101
|
+
statuses: { type: "string", description: statusesArgDescription("creatives") },
|
|
102
|
+
fields: {
|
|
103
|
+
type: "string",
|
|
104
|
+
description: "CSV of dotted paths to return instead of the compact row, e.g. id,content.textAd.landingPage"
|
|
105
|
+
},
|
|
106
|
+
full: { type: "boolean", description: "Return the complete raw records, including the opaque 'content' block" },
|
|
107
|
+
limit: { type: "string", description: "Max rows (default: 500)" },
|
|
108
|
+
"no-cache": NO_CACHE_ARG,
|
|
109
|
+
output: { type: "string", description: "json|csv|jsonl|md", default: "json" }
|
|
110
|
+
};
|
|
111
|
+
var creativesListCommand = defineCommand({
|
|
112
|
+
meta: {
|
|
113
|
+
name: "list",
|
|
114
|
+
description: "List LinkedIn creatives (ads). Runs by default when no subcommand is given."
|
|
115
|
+
},
|
|
116
|
+
args: listArgs,
|
|
117
|
+
run: async ({ args }) => {
|
|
118
|
+
const accountId = resolveAccountIdArg(args);
|
|
119
|
+
try {
|
|
120
|
+
const params = { "account-id": accountId };
|
|
121
|
+
const statuses = resolveStatusFilter(args, "creatives");
|
|
122
|
+
if (statuses) params.statuses = statuses.join(",");
|
|
123
|
+
if (args["campaign-id"]) params["campaign-id"] = String(args["campaign-id"]);
|
|
124
|
+
if (args.limit) params.limit = String(args.limit);
|
|
125
|
+
if (args["no-cache"]) params["skip-cache"] = "true";
|
|
126
|
+
const data = await apiGet("/api/ads/linkedin/creatives", params);
|
|
127
|
+
const shaped = shapeListRows(data, args, {
|
|
128
|
+
row: compactRow,
|
|
129
|
+
columns: COMPACT_COLUMNS
|
|
130
|
+
});
|
|
131
|
+
const fmt = csvOrJson(args);
|
|
132
|
+
if (fmt !== "json") {
|
|
133
|
+
writeAdsOutput(shaped.rows, fmt, shaped.fields, shaped.hints);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const warnings = unmappedShapeWarnings(data, args.full === true);
|
|
137
|
+
writeJsonEnvelope({
|
|
138
|
+
ok: true,
|
|
139
|
+
data: shaped.rows,
|
|
140
|
+
...warnings.length > 0 ? { warnings } : {},
|
|
141
|
+
...shaped.hints ? { hints: shaped.hints } : {}
|
|
142
|
+
});
|
|
143
|
+
} catch (err) {
|
|
144
|
+
handleLinkedinError(err);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
var creativesGetCommand = defineCommand({
|
|
149
|
+
meta: {
|
|
150
|
+
name: "get",
|
|
151
|
+
description: `Read one ad as LinkedIn holds it: headline, intro text, landing URL, the lead gen form it opens, its review verdict (with rejection reasons) and why it is not serving (notServingBecause \u2014 e.g. FORM_HOLD, UNDER_REVIEW, CAMPAIGN_STOPPED).
|
|
152
|
+
The listing can only name a post-based ad's post; this is where its headline and link come back.
|
|
153
|
+
Example: baker ads linkedin creatives get 1584704523`
|
|
154
|
+
},
|
|
155
|
+
args: {
|
|
156
|
+
id: { type: "positional", description: "Creative id or urn:li:sponsoredCreative:N", required: true },
|
|
157
|
+
"account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
|
|
158
|
+
"account-urn": { type: "string", description: "Alias for --account-id" }
|
|
159
|
+
},
|
|
160
|
+
run: async ({ args }) => {
|
|
161
|
+
const accountId = resolveAccountIdArg(args);
|
|
162
|
+
try {
|
|
163
|
+
const data = await apiGet("/api/ads/linkedin/creative", {
|
|
164
|
+
"account-id": accountId,
|
|
165
|
+
"creative-id": String(args.id)
|
|
166
|
+
});
|
|
167
|
+
writeJsonEnvelope({ ok: true, data });
|
|
168
|
+
} catch (err) {
|
|
169
|
+
handleLinkedinError(err);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
var creativesCommand = defineCommand({
|
|
174
|
+
meta: {
|
|
175
|
+
name: "creatives",
|
|
176
|
+
description: `List LinkedIn creatives (ads), or stage writes (create/update/pause/resume/duplicate).
|
|
177
|
+
|
|
178
|
+
Defaults to ACTIVE intended-status. Pass --all-statuses or --statuses ACTIVE,PAUSED to widen.
|
|
179
|
+
|
|
180
|
+
Rows are compact by default: id, urn, campaign, status, review status, format, and
|
|
181
|
+
the resolved destination (landingUrl, or postUrn for post-based ads), and for a
|
|
182
|
+
lead gen ad the form it opens (leadForm, leadFormButton). Use --fields
|
|
183
|
+
for specific dotted paths, or --full for the complete raw records.
|
|
184
|
+
|
|
185
|
+
Post-based ads (image, video, carousel, document, article, event, TLA) report a
|
|
186
|
+
postUrn, not a landingUrl \u2014 their destination lives in the post itself.
|
|
187
|
+
Use 'reviewStatus' to spot rejected/pending creatives during an audit.
|
|
188
|
+
|
|
189
|
+
Write subcommands stage ops on this chat's draft \u2014 media comes from the Baker
|
|
190
|
+
library and is uploaded to LinkedIn only at publish.
|
|
191
|
+
|
|
192
|
+
Examples:
|
|
193
|
+
baker ads linkedin creatives --account-id 503001492
|
|
194
|
+
baker ads linkedin creatives --account-id 503001492 --fields id,intendedStatus,content.textAd.landingPage
|
|
195
|
+
baker ads linkedin creatives create --campaign 1234 --format image --image-id <bakerImageId> --intro "\u2026" --headline "Book a demo" --landing-url https://example.com --cta REQUEST_DEMO
|
|
196
|
+
baker ads linkedin creatives get 1584704523 # one ad: headline, landing URL, form, review, why not serving
|
|
197
|
+
baker ads linkedin creatives pause urn:li:sponsoredCreative:789`
|
|
198
|
+
},
|
|
199
|
+
subCommands: {
|
|
200
|
+
list: creativesListCommand,
|
|
201
|
+
get: creativesGetCommand,
|
|
202
|
+
create: () => import("./write-commands-N74CDMQM.js").then((m) => m.creativesCreateCommand),
|
|
203
|
+
update: () => import("./write-commands-N74CDMQM.js").then((m) => m.creativesUpdateCommand),
|
|
204
|
+
pause: () => import("./write-commands-N74CDMQM.js").then((m) => m.creativesPauseCommand),
|
|
205
|
+
resume: () => import("./write-commands-N74CDMQM.js").then((m) => m.creativesResumeCommand),
|
|
206
|
+
duplicate: () => import("./write-commands-N74CDMQM.js").then((m) => m.creativesDuplicateCommand),
|
|
207
|
+
delete: () => import("./write-commands-N74CDMQM.js").then((m) => m.creativesDeleteCommand)
|
|
208
|
+
},
|
|
209
|
+
// A parent must never declare `run`: citty falls through to it *after* running
|
|
210
|
+
// the matched subcommand, so every write would also trigger a full live list.
|
|
211
|
+
// `args` stays here so citty's subcommand scan knows which flags take a value.
|
|
212
|
+
args: listArgs,
|
|
213
|
+
default: "list"
|
|
214
|
+
});
|
|
215
|
+
export {
|
|
216
|
+
compactRow,
|
|
217
|
+
creativeDestination,
|
|
218
|
+
creativesCommand,
|
|
219
|
+
unmappedShapeWarnings
|
|
220
|
+
};
|
|
221
|
+
//# sourceMappingURL=creatives-LRSELC7Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/linkedin/creatives.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiGet } from \"../../../client.ts\";\nimport { shapeListRows } from \"../list-rows.ts\";\nimport { writeAdsOutput, writeJsonEnvelope } from \"../output.ts\";\nimport type { AdsWarning } from \"../types.ts\";\nimport {\n csvOrJson,\n handleLinkedinError,\n resolveAccountIdArg,\n resolveStatusFilter,\n statusesArgDescription,\n} from \"./shared.ts\";\n\ninterface LinkedinCreativeRow {\n id: string;\n urn: string;\n account: string;\n campaign?: string;\n intendedStatus?: string;\n isServing?: boolean;\n reviewStatus?: string;\n type?: string;\n content?: Record<string, unknown>;\n leadgenCallToAction?: { destination?: string; label?: string };\n createdAt?: number;\n}\n\n/**\n * The shape of a creative's `content` depends on its format, and LinkedIn wraps\n * each one differently. Callers overwhelmingly want one thing from it — where\n * the ad sends people — so resolve that here instead of making every reader\n * re-learn the union.\n *\n * Post-based ads (image, video, carousel, document, article, event, TLA) only\n * carry a post reference: their destination lives inside the post and is not\n * readable — or writable — through the ads API.\n */\nexport interface CreativeDestination {\n format: string;\n landingUrl?: string;\n postUrn?: string;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nexport function creativeDestination(content: Record<string, unknown> | undefined): CreativeDestination {\n if (!content) return { format: \"unknown\" };\n\n const reference = asString(content.reference);\n if (reference) return { format: \"post\", postUrn: reference };\n\n const textAd = asRecord(content.textAd);\n if (textAd) return { format: \"text\", landingUrl: asString(textAd.landingPage) };\n\n const spotlight = asRecord(content.spotlight);\n if (spotlight) return { format: \"spotlight\", landingUrl: asString(spotlight.landingPage) };\n\n if (asRecord(content.follower)) return { format: \"follower\" };\n if (asRecord(content.jobs)) return { format: \"jobs\" };\n\n return { format: \"unknown\" };\n}\n\n/**\n * Every column a compact row can carry, in order. `compactRow` omits the destination\n * keys it has no value for, so the tabular writers cannot infer the header from a row:\n * a first row that is post-based would drop `landingUrl` from every later row.\n */\nconst COMPACT_COLUMNS = [\n \"id\",\n \"urn\",\n \"campaign\",\n \"intendedStatus\",\n \"isServing\",\n \"reviewStatus\",\n \"format\",\n \"landingUrl\",\n \"postUrn\",\n \"leadForm\",\n \"leadFormButton\",\n] as const;\n\n/** LinkedIn hands the creative's form back as `urn:li:adForm:N`; every other command names it `urn:li:leadGenForm:N`. */\nfunction leadFormUrn(destination: string | undefined): string | undefined {\n const id = destination?.match(/(\\d+)$/)?.[1];\n return id ? `urn:li:leadGenForm:${id}` : undefined;\n}\n\n/** The fields worth spending context on by default — everything else needs --fields or --full. */\nexport function compactRow(row: LinkedinCreativeRow): Record<string, unknown> {\n const destination = creativeDestination(row.content);\n const leadForm = leadFormUrn(row.leadgenCallToAction?.destination);\n return {\n id: row.id,\n urn: row.urn,\n campaign: row.campaign,\n intendedStatus: row.intendedStatus,\n isServing: row.isServing,\n reviewStatus: row.reviewStatus,\n format: destination.format,\n ...(destination.landingUrl ? { landingUrl: destination.landingUrl } : {}),\n ...(destination.postUrn ? { postUrn: destination.postUrn } : {}),\n ...(leadForm ? { leadForm, leadFormButton: row.leadgenCallToAction?.label } : {}),\n };\n}\n\n/**\n * `content` crosses the wire as an unvalidated bag, so if LinkedIn renames a\n * wrapper key nothing else in the stack would notice — the destination would\n * just quietly stop resolving. Counting the shapes this mapper couldn't read is\n * the cheapest signal that the contract moved.\n */\nexport function unmappedShapeWarnings(rows: LinkedinCreativeRow[], rawContentReturned: boolean): AdsWarning[] {\n const unmapped = rows.filter((row) => row.content && creativeDestination(row.content).format === \"unknown\");\n if (unmapped.length === 0) return [];\n // Under --full the caller already holds the raw `content`, so \"re-read with\n // --full\" is a dead end — point them at what they are already holding.\n const remedy = rawContentReturned\n ? \"Their raw content is in this response — read it directly; this command cannot resolve a destination for them.\"\n : \"Re-read those with --full before drawing any conclusion about where they point.\";\n return [\n {\n code: \"UNMAPPED_CREATIVE_CONTENT\",\n message: `${unmapped.length} of ${rows.length} creatives have a content shape this command can't read, so their destination is missing (ids: ${unmapped\n .slice(0, 5)\n .map((row) => row.id)\n .join(\", \")}). ${remedy}`,\n },\n ];\n}\n\nconst listArgs = {\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n \"campaign-id\": { type: \"string\", description: \"Filter by campaign ID\" },\n \"all-statuses\": { type: \"boolean\", description: \"Drop the default ACTIVE filter\" },\n statuses: { type: \"string\", description: statusesArgDescription(\"creatives\") },\n fields: {\n type: \"string\",\n description: \"CSV of dotted paths to return instead of the compact row, e.g. id,content.textAd.landingPage\",\n },\n full: { type: \"boolean\", description: \"Return the complete raw records, including the opaque 'content' block\" },\n limit: { type: \"string\", description: \"Max rows (default: 500)\" },\n \"no-cache\": NO_CACHE_ARG,\n output: { type: \"string\", description: \"json|csv|jsonl|md\", default: \"json\" },\n} as const;\n\nconst creativesListCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List LinkedIn creatives (ads). Runs by default when no subcommand is given.\",\n },\n args: listArgs,\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n const statuses = resolveStatusFilter(args, \"creatives\");\n if (statuses) params.statuses = statuses.join(\",\");\n if (args[\"campaign-id\"]) params[\"campaign-id\"] = String(args[\"campaign-id\"]);\n if (args.limit) params.limit = String(args.limit);\n if (args[\"no-cache\"]) params[\"skip-cache\"] = \"true\";\n\n const data = await apiGet<LinkedinCreativeRow[]>(\"/api/ads/linkedin/creatives\", params);\n const shaped = shapeListRows(data, args as Record<string, unknown>, {\n row: compactRow,\n columns: COMPACT_COLUMNS,\n });\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(shaped.rows, fmt, shaped.fields, shaped.hints);\n return;\n }\n const warnings = unmappedShapeWarnings(data, args.full === true);\n writeJsonEnvelope({\n ok: true,\n data: shaped.rows,\n ...(warnings.length > 0 ? { warnings } : {}),\n ...(shaped.hints ? { hints: shaped.hints } : {}),\n });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nconst creativesGetCommand = defineCommand({\n meta: {\n name: \"get\",\n description: `Read one ad as LinkedIn holds it: headline, intro text, landing URL, the lead gen form it opens, its review verdict (with rejection reasons) and why it is not serving (notServingBecause — e.g. FORM_HOLD, UNDER_REVIEW, CAMPAIGN_STOPPED).\nThe listing can only name a post-based ad's post; this is where its headline and link come back.\nExample: baker ads linkedin creatives get 1584704523`,\n },\n args: {\n id: { type: \"positional\", description: \"Creative id or urn:li:sponsoredCreative:N\", required: true },\n \"account-id\": { type: \"string\", description: \"Numeric account ID or urn:li:sponsoredAccount:N\" },\n \"account-urn\": { type: \"string\", description: \"Alias for --account-id\" },\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const data = await apiGet<Record<string, unknown>>(\"/api/ads/linkedin/creative\", {\n \"account-id\": accountId,\n \"creative-id\": String(args.id),\n });\n writeJsonEnvelope({ ok: true, data });\n } catch (err) {\n handleLinkedinError(err);\n }\n },\n});\n\nexport const creativesCommand = defineCommand({\n meta: {\n name: \"creatives\",\n description: `List LinkedIn creatives (ads), or stage writes (create/update/pause/resume/duplicate).\n\nDefaults to ACTIVE intended-status. Pass --all-statuses or --statuses ACTIVE,PAUSED to widen.\n\nRows are compact by default: id, urn, campaign, status, review status, format, and\nthe resolved destination (landingUrl, or postUrn for post-based ads), and for a\nlead gen ad the form it opens (leadForm, leadFormButton). Use --fields\nfor specific dotted paths, or --full for the complete raw records.\n\nPost-based ads (image, video, carousel, document, article, event, TLA) report a\npostUrn, not a landingUrl — their destination lives in the post itself.\nUse 'reviewStatus' to spot rejected/pending creatives during an audit.\n\nWrite subcommands stage ops on this chat's draft — media comes from the Baker\nlibrary and is uploaded to LinkedIn only at publish.\n\nExamples:\n baker ads linkedin creatives --account-id 503001492\n baker ads linkedin creatives --account-id 503001492 --fields id,intendedStatus,content.textAd.landingPage\n baker ads linkedin creatives create --campaign 1234 --format image --image-id <bakerImageId> --intro \"…\" --headline \"Book a demo\" --landing-url https://example.com --cta REQUEST_DEMO\n baker ads linkedin creatives get 1584704523 # one ad: headline, landing URL, form, review, why not serving\n baker ads linkedin creatives pause urn:li:sponsoredCreative:789`,\n },\n subCommands: {\n list: creativesListCommand,\n get: creativesGetCommand,\n create: () => import(\"./write-commands.ts\").then((m) => m.creativesCreateCommand),\n update: () => import(\"./write-commands.ts\").then((m) => m.creativesUpdateCommand),\n pause: () => import(\"./write-commands.ts\").then((m) => m.creativesPauseCommand),\n resume: () => import(\"./write-commands.ts\").then((m) => m.creativesResumeCommand),\n duplicate: () => import(\"./write-commands.ts\").then((m) => m.creativesDuplicateCommand),\n delete: () => import(\"./write-commands.ts\").then((m) => m.creativesDeleteCommand),\n },\n // A parent must never declare `run`: citty falls through to it *after* running\n // the matched subcommand, so every write would also trigger a full live list.\n // `args` stays here so citty's subcommand scan knows which flags take a value.\n args: listArgs,\n default: \"list\",\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import "./chunk-YQSBHWOI.js";
|
|
2
|
+
|
|
3
|
+
// src/commands/creatives/index.ts
|
|
4
|
+
import { defineCommand } from "citty";
|
|
5
|
+
var creativesCommand = defineCommand({
|
|
6
|
+
meta: {
|
|
7
|
+
name: "creatives",
|
|
8
|
+
description: `Make ads from what customers said, read and record what the user thinks of each version, and save the approved ones.
|
|
9
|
+
|
|
10
|
+
Making ads, in order:
|
|
11
|
+
baker creatives brief # one read: who sees the ads, what works, taste, customer quotes, ideas on file
|
|
12
|
+
baker creatives ideas # check and rank the ideas in src/creatives/_ideas/
|
|
13
|
+
baker creatives make <idea> # one idea \u2192 one creative (reference picked and checked for you)
|
|
14
|
+
baker creatives translate --slug <ad> --to es-MX,pt-BR # the same ad in other languages, one design
|
|
15
|
+
baker creatives learn # what each idea's ads did, written back onto the idea
|
|
16
|
+
|
|
17
|
+
Before making or changing a creative, read the company's taste:
|
|
18
|
+
baker creatives feedback [--slug <slug>]
|
|
19
|
+
|
|
20
|
+
The company's standing rules for every ad (BRAND.md's and the ones a person taught):
|
|
21
|
+
baker creatives rules list
|
|
22
|
+
baker creatives rules add --candidate <rc-\u2026> # only after the person agreed it is a rule for every ad
|
|
23
|
+
baker creatives check # after a rule changes: which ads already made break it
|
|
24
|
+
|
|
25
|
+
When the user reacts to a version in the chat (likes it, rejects it, asks for changes), record it:
|
|
26
|
+
baker creatives feedback record --slug <slug> --run <r_\u2026> --verdict approved|rejected [--reasons a,b] [--note "<their words>"]
|
|
27
|
+
|
|
28
|
+
When they pick a version (or options inside it) to keep:
|
|
29
|
+
baker creatives select --slug <slug> --run <r_\u2026> [--options <label,\u2026>]
|
|
30
|
+
|
|
31
|
+
Creative handoff:
|
|
32
|
+
baker creatives publish --title "Spring Offer Static Ad" --slug <slug> --run-id <r_\u2026> [--output 4:5]
|
|
33
|
+
baker creatives publish ./canvas/run/final.mp4 --title "Spring Offer Reel" --slug spring-offer --run-id <r_\u2026>
|
|
34
|
+
|
|
35
|
+
Publishing an image uploads it to the Company image library, applies the official creative tag, and returns an image reference for chat previews. Publishing a video uploads it to the video library, waits until it plays, saves it on the creative (--slug required) and returns a video reference.
|
|
36
|
+
|
|
37
|
+
How published creatives are doing in live Meta ads (results, fatigue, angle; hook and hold rate for videos):
|
|
38
|
+
baker creatives performance [--slug <slug>] [--days 30] [--full]
|
|
39
|
+
Full guide: __tooling__/docs/tools/baker/creatives.md`
|
|
40
|
+
},
|
|
41
|
+
subCommands: {
|
|
42
|
+
brief: () => import("./brief-U2W7KMFC.js").then((m) => m.briefCommand),
|
|
43
|
+
ideas: () => import("./ideas-DYN2DMFN.js").then((m) => m.ideasCommand),
|
|
44
|
+
make: () => import("./make-IJGCQA7C.js").then((m) => m.makeCommand),
|
|
45
|
+
translate: () => import("./translate-YVIZ5T44.js").then((m) => m.translateCommand),
|
|
46
|
+
learn: () => import("./learn-7Z2VR6MS.js").then((m) => m.learnCommand),
|
|
47
|
+
feedback: () => import("./feedback-HXCQBV7S.js").then((m) => m.feedbackCommand),
|
|
48
|
+
rules: () => import("./rules-VK7YA23Q.js").then((m) => m.rulesCommand),
|
|
49
|
+
check: () => import("./check-CZTS64AW.js").then((m) => m.checkCommand),
|
|
50
|
+
select: () => import("./select-LMGLNFWB.js").then((m) => m.selectCommand),
|
|
51
|
+
publish: () => import("./publish-Z62KGDJ2.js").then((m) => m.publishCommand),
|
|
52
|
+
performance: () => import("./performance-HTU5FR2K.js").then((m) => m.performanceCommand)
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
export {
|
|
56
|
+
creativesCommand
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=creatives-SEQHJD2M.js.map
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import {
|
|
2
|
+
repeatedValues
|
|
3
|
+
} from "./chunk-ERSX3MKH.js";
|
|
4
|
+
import {
|
|
5
|
+
failApi,
|
|
6
|
+
failValidation
|
|
7
|
+
} from "./chunk-L7WMS5PW.js";
|
|
8
|
+
import "./chunk-O37VU7FG.js";
|
|
9
|
+
import "./chunk-CAZGM2NX.js";
|
|
10
|
+
import "./chunk-NZS3KEQ2.js";
|
|
11
|
+
import "./chunk-GIWHHCD6.js";
|
|
12
|
+
import "./chunk-XQIOCIDO.js";
|
|
13
|
+
import {
|
|
14
|
+
getPublicSuffix,
|
|
15
|
+
parse
|
|
16
|
+
} from "./chunk-WTJSMYY2.js";
|
|
17
|
+
import {
|
|
18
|
+
apiPost
|
|
19
|
+
} from "./chunk-6YLNY6CK.js";
|
|
20
|
+
import "./chunk-D5NEIESR.js";
|
|
21
|
+
import "./chunk-57KKVDDR.js";
|
|
22
|
+
import {
|
|
23
|
+
registerSchema,
|
|
24
|
+
writeJson
|
|
25
|
+
} from "./chunk-QANGHND7.js";
|
|
26
|
+
import "./chunk-YQSBHWOI.js";
|
|
27
|
+
|
|
28
|
+
// ../api/src/credentials/contract.ts
|
|
29
|
+
import { z } from "zod";
|
|
30
|
+
|
|
31
|
+
// ../api/src/credentials/hosts.ts
|
|
32
|
+
function normaliseHost(host) {
|
|
33
|
+
return host.trim().toLowerCase().replace(/\.$/, "");
|
|
34
|
+
}
|
|
35
|
+
function asciiHost(host) {
|
|
36
|
+
if (!/[\u0080-\u{10FFFF}]/u.test(host) || /[/?#@:\\%[\]\s]/.test(host)) return host;
|
|
37
|
+
const url = `http://${host}`;
|
|
38
|
+
return URL.canParse(url) ? new URL(url).hostname : host;
|
|
39
|
+
}
|
|
40
|
+
function validateHostPattern(raw) {
|
|
41
|
+
const typed = normaliseHost(raw);
|
|
42
|
+
const wildcard = typed.startsWith("*.");
|
|
43
|
+
const host = asciiHost(wildcard ? typed.slice(2) : typed);
|
|
44
|
+
const pattern = wildcard ? `*.${host}` : host;
|
|
45
|
+
if (host === "" || host.includes("*")) {
|
|
46
|
+
return { ok: false, reason: "Use a website address like api.example.com or *.example.com." };
|
|
47
|
+
}
|
|
48
|
+
const parsed = parse(host);
|
|
49
|
+
if (parsed.isIp || host.startsWith("[")) {
|
|
50
|
+
return { ok: false, reason: "Use a website address, not an IP address." };
|
|
51
|
+
}
|
|
52
|
+
if (parsed.hostname !== host || parsed.domain === null) {
|
|
53
|
+
return { ok: false, reason: "Use only the website address, like api.example.com." };
|
|
54
|
+
}
|
|
55
|
+
if (wildcard && !wildcardSafe(host)) {
|
|
56
|
+
return { ok: false, reason: `*.${host} would allow any website. Name the company's own address.` };
|
|
57
|
+
}
|
|
58
|
+
return { ok: true, pattern };
|
|
59
|
+
}
|
|
60
|
+
var OPEN_HOSTING_DOMAINS = ["amazonaws.com", "cloudfront.net", "googleapis.com", "on.aws"];
|
|
61
|
+
var WITH_PRIVATE = { allowPrivateDomains: true };
|
|
62
|
+
function wildcardSafe(host) {
|
|
63
|
+
if (OPEN_HOSTING_DOMAINS.some((domain) => host === domain || host.endsWith(`.${domain}`))) return false;
|
|
64
|
+
const suffix = getPublicSuffix(host, WITH_PRIVATE);
|
|
65
|
+
return suffix !== host && getPublicSuffix(`zz.${host}`, WITH_PRIVATE) === suffix;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ../api/src/credentials/placeholder.ts
|
|
69
|
+
var CREDENTIAL_NAME_PATTERN = "[a-z0-9][a-z0-9_-]{0,63}";
|
|
70
|
+
var CREDENTIAL_NAME_RE = new RegExp(`^${CREDENTIAL_NAME_PATTERN}$`);
|
|
71
|
+
var PLACEHOLDER_SOURCE = `\\{\\{credential:(${CREDENTIAL_NAME_PATTERN})\\}\\}`;
|
|
72
|
+
var WHOLE_PLACEHOLDER_RE = new RegExp(`^${PLACEHOLDER_SOURCE}$`);
|
|
73
|
+
|
|
74
|
+
// ../api/src/credentials/contract.ts
|
|
75
|
+
var MAX_CREDENTIAL_VALUE_LENGTH = 16384;
|
|
76
|
+
var MAX_CREDENTIAL_HOSTS = 20;
|
|
77
|
+
var credentialNameSchema = z.string().regex(new RegExp(`^${CREDENTIAL_NAME_PATTERN}$`), "Use lowercase letters, digits, - and _ (max 64).");
|
|
78
|
+
var credentialHostsSchema = z.array(z.string()).max(MAX_CREDENTIAL_HOSTS).transform((hosts, ctx) => {
|
|
79
|
+
const patterns = [];
|
|
80
|
+
for (const host of hosts) {
|
|
81
|
+
const result = validateHostPattern(host);
|
|
82
|
+
if (result.ok) patterns.push(result.pattern);
|
|
83
|
+
else ctx.addIssue({ code: "custom", message: `${host}: ${result.reason}` });
|
|
84
|
+
}
|
|
85
|
+
return [...new Set(patterns)];
|
|
86
|
+
});
|
|
87
|
+
var credentialSourceSchema = z.enum(["user", "agent", "chat-detected", "requested"]);
|
|
88
|
+
var credentialSummarySchema = z.object({
|
|
89
|
+
name: z.string(),
|
|
90
|
+
label: z.string(),
|
|
91
|
+
placeholder: z.string(),
|
|
92
|
+
allowedHosts: z.array(z.string()),
|
|
93
|
+
source: credentialSourceSchema,
|
|
94
|
+
lastUsedAt: z.number().nullable()
|
|
95
|
+
});
|
|
96
|
+
var credentialsListResponseSchema = z.object({ credentials: z.array(credentialSummarySchema) });
|
|
97
|
+
var credentialsPutRequestSchema = z.object({
|
|
98
|
+
name: credentialNameSchema,
|
|
99
|
+
label: z.string().trim().min(1).max(80).optional(),
|
|
100
|
+
value: z.string().min(1).max(MAX_CREDENTIAL_VALUE_LENGTH),
|
|
101
|
+
allowedHosts: credentialHostsSchema
|
|
102
|
+
});
|
|
103
|
+
var credentialsPutResponseSchema = z.object({
|
|
104
|
+
name: z.string(),
|
|
105
|
+
placeholder: z.string(),
|
|
106
|
+
replaced: z.boolean()
|
|
107
|
+
});
|
|
108
|
+
var credentialsDeleteRequestSchema = z.object({ name: credentialNameSchema });
|
|
109
|
+
var credentialsDeleteResponseSchema = z.object({ name: z.string(), deleted: z.literal(true) });
|
|
110
|
+
var brokerResolveResponseSchema = z.object({
|
|
111
|
+
credentials: z.array(z.object({ name: z.string(), value: z.string(), allowedHosts: z.array(z.string()) }))
|
|
112
|
+
});
|
|
113
|
+
var brokerUsageRequestSchema = z.object({
|
|
114
|
+
uses: z.array(z.object({ name: credentialNameSchema, host: z.string().max(253) })).max(100)
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// src/commands/credentials/index.ts
|
|
118
|
+
import { defineCommand } from "citty";
|
|
119
|
+
var DOC = "__tooling__/docs/tools/baker/credentials.md";
|
|
120
|
+
var STDIN_ONLY = 'The value is read from stdin only, never from the command line (argv is visible to other processes and lands in logs). Pipe it: printf %s "$VALUE" | baker credentials put <name> --host <host>. For a credential the user owns, call request_credential instead.';
|
|
121
|
+
registerSchema({
|
|
122
|
+
command: "credentials.list",
|
|
123
|
+
description: "Start here: the credentials (API keys, tokens, passwords) this company stored, by name \u2014 never their values. Write the `placeholder` ({{credential:NAME}}) into an HTTPS request (curl header, URL, SDK config, JSON body) and the sandbox proxy sends the real value, only to the credential's allowedHosts. Nothing listed? Ask the user with the request_credential tool. Compact by default; --full adds source and lastUsedAt.",
|
|
124
|
+
args: {
|
|
125
|
+
full: { type: "boolean", description: "Add source and lastUsedAt per credential", required: false, default: false }
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
registerSchema({
|
|
129
|
+
command: "credentials.put",
|
|
130
|
+
description: `Store a credential YOU created on the user's behalf (e.g. a key you just generated through an API), so later requests can use {{credential:NAME}}. Example: printf %s "$KEY" | baker credentials put stripe-key --host api.stripe.com --label "Stripe key". The value comes from stdin ONLY. For a credential the user owns, call request_credential instead \u2014 never ask for it in chat. Replacing is allowed only for credentials the agent created.`,
|
|
131
|
+
args: {
|
|
132
|
+
name: { type: "positional", description: "Lowercase name: letters, digits, - and _ (max 64)", required: true },
|
|
133
|
+
host: {
|
|
134
|
+
type: "string",
|
|
135
|
+
description: "Website the value may be sent to (repeatable, or comma-separated): api.stripe.com, acme-store.myshopify.com",
|
|
136
|
+
required: true
|
|
137
|
+
},
|
|
138
|
+
label: { type: "string", description: "Human-readable label shown in Settings \u2192 Credentials", required: false }
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
registerSchema({
|
|
142
|
+
command: "credentials.delete",
|
|
143
|
+
description: "Delete a credential the agent created (e.g. a key it rotated out). Credentials the user added can only be removed by the user, in Settings \u2192 Credentials.",
|
|
144
|
+
args: {
|
|
145
|
+
name: { type: "positional", description: "Credential name", required: true }
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
async function readPipedValue() {
|
|
149
|
+
const stdin = process.stdin;
|
|
150
|
+
if (stdin.isTTY) return "";
|
|
151
|
+
const chunks = [];
|
|
152
|
+
for await (const chunk of stdin) {
|
|
153
|
+
chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
|
|
154
|
+
}
|
|
155
|
+
return Buffer.concat(chunks).toString("utf8").replace(/\r?\n$/, "");
|
|
156
|
+
}
|
|
157
|
+
function parseName(raw) {
|
|
158
|
+
const parsed = credentialNameSchema.safeParse(raw);
|
|
159
|
+
if (!parsed.success) {
|
|
160
|
+
failValidation(`Invalid credential name "${String(raw)}": use lowercase letters, digits, - and _ (max 64).`);
|
|
161
|
+
}
|
|
162
|
+
return parsed.data;
|
|
163
|
+
}
|
|
164
|
+
function parseHosts(rawArgs, parsed) {
|
|
165
|
+
const hosts = repeatedValues(rawArgs, "host", parsed).flatMap((value) => value.split(",")).map((host) => host.trim()).filter((host) => host !== "");
|
|
166
|
+
if (hosts.length === 0) {
|
|
167
|
+
failValidation("Name at least one website the value may be sent to: --host api.example.com (repeatable).");
|
|
168
|
+
}
|
|
169
|
+
const result = credentialHostsSchema.safeParse(hosts);
|
|
170
|
+
if (!result.success) {
|
|
171
|
+
failValidation(`Invalid --host: ${result.error.issues.map((issue) => issue.message).join("; ")}`);
|
|
172
|
+
}
|
|
173
|
+
return result.data;
|
|
174
|
+
}
|
|
175
|
+
var listCommand = defineCommand({
|
|
176
|
+
meta: {
|
|
177
|
+
name: "list",
|
|
178
|
+
description: "Start here: stored credentials by name with their {{credential:NAME}} placeholder and allowed websites. Never shows values."
|
|
179
|
+
},
|
|
180
|
+
args: {
|
|
181
|
+
full: { type: "boolean", description: "Add source and lastUsedAt", required: false, default: false }
|
|
182
|
+
},
|
|
183
|
+
run: async ({ args }) => {
|
|
184
|
+
try {
|
|
185
|
+
const response = await apiPost("/api/credentials/list", {});
|
|
186
|
+
const credentials = response.data.credentials.map(
|
|
187
|
+
(credential) => args.full ? credential : {
|
|
188
|
+
name: credential.name,
|
|
189
|
+
placeholder: credential.placeholder,
|
|
190
|
+
allowedHosts: credential.allowedHosts,
|
|
191
|
+
label: credential.label
|
|
192
|
+
}
|
|
193
|
+
);
|
|
194
|
+
writeJson({
|
|
195
|
+
ok: true,
|
|
196
|
+
data: { credentials },
|
|
197
|
+
meta: { count: credentials.length },
|
|
198
|
+
...credentials.length === 0 ? {
|
|
199
|
+
hints: [
|
|
200
|
+
"No credentials stored. When the task needs one the user owns, call the request_credential tool (label, reason, allowedHosts) \u2014 never ask them to paste it in chat."
|
|
201
|
+
]
|
|
202
|
+
} : {}
|
|
203
|
+
});
|
|
204
|
+
} catch (err) {
|
|
205
|
+
failApi(err);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
var putCommand = defineCommand({
|
|
210
|
+
meta: {
|
|
211
|
+
name: "put",
|
|
212
|
+
description: `Store a credential you created on the user's behalf; the value is read from stdin only.
|
|
213
|
+
Start here: printf %s "$KEY" | baker credentials put stripe-key --host api.stripe.com
|
|
214
|
+
For a credential the user owns, call request_credential instead.`
|
|
215
|
+
},
|
|
216
|
+
args: {
|
|
217
|
+
name: { type: "positional", description: "Lowercase name: letters, digits, - and _ (max 64)", required: true },
|
|
218
|
+
host: {
|
|
219
|
+
type: "string",
|
|
220
|
+
description: "Website the value may be sent to (repeatable, or comma-separated)",
|
|
221
|
+
required: false
|
|
222
|
+
},
|
|
223
|
+
label: { type: "string", description: "Label shown in Settings \u2192 Credentials", required: false },
|
|
224
|
+
value: {
|
|
225
|
+
type: "string",
|
|
226
|
+
description: "Refused \u2014 never put a value on the command line. Pipe it on stdin.",
|
|
227
|
+
required: false
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
run: async ({ args, rawArgs }) => {
|
|
231
|
+
if (args.value !== void 0 || args._.length > 1) {
|
|
232
|
+
failValidation(STDIN_ONLY);
|
|
233
|
+
}
|
|
234
|
+
const name = parseName(args.name);
|
|
235
|
+
const allowedHosts = parseHosts(rawArgs, args.host);
|
|
236
|
+
const value = await readPipedValue();
|
|
237
|
+
if (value === "") {
|
|
238
|
+
failValidation(`Nothing was piped on stdin. ${STDIN_ONLY}`);
|
|
239
|
+
}
|
|
240
|
+
if (value.length > MAX_CREDENTIAL_VALUE_LENGTH) {
|
|
241
|
+
failValidation(`The value is longer than ${MAX_CREDENTIAL_VALUE_LENGTH} characters.`);
|
|
242
|
+
}
|
|
243
|
+
const body = { name, value, allowedHosts, ...args.label ? { label: args.label } : {} };
|
|
244
|
+
try {
|
|
245
|
+
const response = await apiPost("/api/credentials/put", body);
|
|
246
|
+
writeJson({
|
|
247
|
+
ok: true,
|
|
248
|
+
data: { name: response.data.name, placeholder: response.data.placeholder },
|
|
249
|
+
hints: [
|
|
250
|
+
`Use ${response.data.placeholder} in the request; the value is sent only to: ${allowedHosts.join(", ")}.`,
|
|
251
|
+
"Never echo, print or write the value anywhere \u2014 unset the shell variable that held it."
|
|
252
|
+
]
|
|
253
|
+
});
|
|
254
|
+
} catch (err) {
|
|
255
|
+
failApi(err);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
var deleteCommand = defineCommand({
|
|
260
|
+
meta: {
|
|
261
|
+
name: "delete",
|
|
262
|
+
description: "Delete a credential the agent created. User-added credentials are removed by the user in Settings \u2192 Credentials."
|
|
263
|
+
},
|
|
264
|
+
args: {
|
|
265
|
+
name: { type: "positional", description: "Credential name", required: true }
|
|
266
|
+
},
|
|
267
|
+
run: async ({ args }) => {
|
|
268
|
+
const name = parseName(args.name);
|
|
269
|
+
try {
|
|
270
|
+
const response = await apiPost("/api/credentials/delete", { name });
|
|
271
|
+
writeJson({ ok: true, data: response.data });
|
|
272
|
+
} catch (err) {
|
|
273
|
+
failApi(err);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
var credentialsCommand = defineCommand({
|
|
278
|
+
meta: {
|
|
279
|
+
name: "credentials",
|
|
280
|
+
description: `Credentials (API keys, tokens, passwords) by name: write {{credential:NAME}} in an HTTPS request and the value is sent only to the websites it is bound to. You never see values.
|
|
281
|
+
Full guide: ${DOC}`
|
|
282
|
+
},
|
|
283
|
+
subCommands: { list: listCommand, put: putCommand, delete: deleteCommand }
|
|
284
|
+
});
|
|
285
|
+
export {
|
|
286
|
+
credentialsCommand
|
|
287
|
+
};
|
|
288
|
+
//# sourceMappingURL=credentials-LHPTUVVA.js.map
|