@koda-sl/baker-cli 0.574.0-dev.19539e5a8 → 0.575.0-dev.85f21462e
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 +44 -9
- package/dist/account-MDLPCIDQ.js +82 -0
- package/dist/account-VRXCDDXY.js +82 -0
- package/dist/account-YYB2KWLU.js +139 -0
- package/dist/account-assets-BFMQWV33.js +290 -0
- package/dist/account-level-47IS2CZB.js +611 -0
- package/dist/account-reads-FSOURMSH.js +219 -0
- package/dist/account-reads-FSOURMSH.js.map +1 -0
- package/dist/account-users-FXOWESWY.js +64 -0
- package/dist/account-writes-SRTOKSMT.js +68 -0
- package/dist/accounts-5YJZVSTB.js +498 -0
- package/dist/accounts-5YJZVSTB.js.map +1 -0
- package/dist/accounts-AT2UB2L3.js +80 -0
- package/dist/accounts-LTGUK6OV.js +76 -0
- package/dist/accounts-LTUEBWJL.js +115 -0
- package/dist/accounts-NR3ARJ72.js +119 -0
- package/dist/actions-766X6XRB.js +55 -0
- package/dist/active-entities-QWJXR4W6.js +103 -0
- package/dist/activecampaign-MC4FYCCF.js +938 -0
- package/dist/activities-ZRP22SC2.js +75 -0
- package/dist/ad-group-writes-UFBFB2PL.js +172 -0
- package/dist/ad-groups-KRKMZPF3.js +70 -0
- package/dist/ad-writes-SIAGGUDJ.js +176 -0
- package/dist/add-DWKVVW76.js +305 -0
- package/dist/add-F65GOWKP.js +85 -0
- package/dist/add-IALA4VRA.js +148 -0
- package/dist/add-ITX64WEC.js +81 -0
- package/dist/add-MYX3BSUJ.js +107 -0
- package/dist/add-WAVXB2QA.js +97 -0
- package/dist/add-accounts-YTLQCSXB.js +91 -0
- package/dist/ads-3T4C4BBH.js +79 -0
- package/dist/ads-A34INCCM.js +120 -0
- package/dist/ads-AKF5AT6O.js +128 -0
- package/dist/ads-UGMHE33I.js +48 -0
- package/dist/adsets-HNFBX4LB.js +182 -0
- package/dist/advertisers-UFOLIRIK.js +123 -0
- package/dist/advertisers-YTG6VA6R.js +125 -0
- package/dist/alerts-2GMBX6JV.js +151 -0
- package/dist/alerts-2GMBX6JV.js.map +1 -0
- package/dist/analytics-3EWNAHNG.js +2397 -0
- package/dist/analytics-3EWNAHNG.js.map +1 -0
- package/dist/analytics-G4WFP37R.js +447 -0
- package/dist/animate-PSOAMA52.js +480 -0
- package/dist/approved-3W56YTOZ.js +73 -0
- package/dist/asset-writes-2CYNDRPU.js +50 -0
- package/dist/assign-5FALEZYD.js +80 -0
- package/dist/audience-size-VRYRLPO5.js +76 -0
- package/dist/audience-writes-JNVGUHGN.js +327 -0
- package/dist/audiences-EH426E3T.js +280 -0
- package/dist/audiences-OOXSXKIT.js +85 -0
- package/dist/audiences-S6TXNKQ2.js +106 -0
- package/dist/audit-O2RRST7B.js +88 -0
- package/dist/audit-WHIVWMAI.js +154 -0
- package/dist/autocomplete-3HCLXTGK.js +114 -0
- package/dist/avatars-HN74FWDF.js +38 -0
- package/dist/bid-pricing-NN5JKZS4.js +103 -0
- package/dist/brand-MWU5IVEZ.js +22 -0
- package/dist/brief-6TXWQWHJ.js +543 -0
- package/dist/businesses-HOAQVYRH.js +54 -0
- package/dist/campaign-groups-MGEKCP7J.js +99 -0
- package/dist/campaign-writes-ORUT54WL.js +168 -0
- package/dist/campaign-writes-Z7B6V6Q3.js +176 -0
- package/dist/campaigns-3BDIHUSW.js +78 -0
- package/dist/campaigns-E7YC762Q.js +111 -0
- package/dist/campaigns-EEH3VDK6.js +130 -0
- package/dist/campaigns-WLOJFSLV.js +113 -0
- package/dist/canvas-SEVIQRXN.js +46 -0
- package/dist/capabilities-KWJYBYQO.js +147 -0
- package/dist/cards-OOKI2WSA.js +85 -0
- package/dist/catalog-DHTZDVWS.js +66 -0
- package/dist/catalogs-R4QFA5XO.js +130 -0
- package/dist/catalogs-WBXWK7NT.js +782 -0
- package/dist/changes-F2GP72MO.js +167 -0
- package/dist/changes-F2GP72MO.js.map +1 -0
- package/dist/chatgpt-MN4XHO6L.js +47 -0
- package/dist/chats-IBMO724I.js +589 -0
- package/dist/check-EZI4OF3Q.js +107 -0
- package/dist/chunk-2CSNR4U7.js +8954 -0
- package/dist/chunk-2CSNR4U7.js.map +1 -0
- package/dist/chunk-2VUD4CIW.js +64 -0
- package/dist/chunk-2ZKQNMK2.js +74 -0
- package/dist/chunk-3WOFZTGC.js +297 -0
- package/dist/chunk-3WOFZTGC.js.map +1 -0
- package/dist/chunk-423G75A7.js +494 -0
- package/dist/chunk-4ZAHRAWL.js +454 -0
- package/dist/chunk-5IHZTLDH.js +288 -0
- package/dist/chunk-5WOZ7OGU.js +1919 -0
- package/dist/chunk-62UGVR7Q.js +94 -0
- package/dist/chunk-66LUQENO.js +197 -0
- package/dist/chunk-6J2UZJ6F.js +962 -0
- package/dist/chunk-6ZW5AR5N.js +84 -0
- package/dist/chunk-7DT6XY4A.js +719 -0
- package/dist/chunk-7DT6XY4A.js.map +1 -0
- package/dist/chunk-7EPR7L2D.js +203 -0
- package/dist/chunk-7PKEBTVP.js +98 -0
- package/dist/chunk-7PKEBTVP.js.map +1 -0
- package/dist/chunk-7XFQPPYB.js +69 -0
- package/dist/chunk-AFWLBOIN.js +757 -0
- package/dist/chunk-AFWLBOIN.js.map +1 -0
- package/dist/chunk-ALCRXFIZ.js +351 -0
- package/dist/chunk-ALCRXFIZ.js.map +1 -0
- package/dist/chunk-AYKV2B6X.js +47 -0
- package/dist/chunk-AYKV2B6X.js.map +1 -0
- package/dist/chunk-BJH2G3QF.js +312 -0
- package/dist/chunk-BTOGDXA4.js +8141 -0
- package/dist/chunk-BTOGDXA4.js.map +1 -0
- package/dist/chunk-BZXIDMV7.js +91 -0
- package/dist/chunk-C57NXUM2.js +24026 -0
- package/dist/chunk-CGLNCFAG.js +136 -0
- package/dist/chunk-CNZ5KS4I.js +344 -0
- package/dist/chunk-CP5IVVYM.js +76 -0
- package/dist/chunk-DAXBST7G.js +51 -0
- package/dist/chunk-DD6X3AZB.js +1258 -0
- package/dist/chunk-DD6X3AZB.js.map +1 -0
- package/dist/chunk-DFE77XT5.js +225 -0
- package/dist/chunk-DI7M2JUA.js +167 -0
- package/dist/chunk-DN6EMVA4.js +25 -0
- package/dist/chunk-E2G2USTA.js +75 -0
- package/dist/chunk-EA3643ET.js +392 -0
- package/dist/chunk-EBFKPGTL.js +220 -0
- package/dist/chunk-EFZVDV7F.js +1744 -0
- package/dist/chunk-ETHUDFUY.js +169 -0
- package/dist/chunk-EZ3YSJTP.js +685 -0
- package/dist/chunk-FCD5BPC5.js +222 -0
- package/dist/chunk-FCD5BPC5.js.map +1 -0
- package/dist/chunk-G6CLJ3WL.js +3510 -0
- package/dist/chunk-GLY3CB2F.js +78 -0
- package/dist/chunk-GLY3CB2F.js.map +1 -0
- package/dist/chunk-HJS6FPQX.js +152 -0
- package/dist/chunk-HXHGDFXA.js +103 -0
- package/dist/chunk-HZ7QUFUW.js +97 -0
- package/dist/chunk-IEUF733F.js +5471 -0
- package/dist/chunk-IEX4RRHJ.js +163 -0
- package/dist/chunk-IPEQHZ5H.js +724 -0
- package/dist/chunk-IPEQHZ5H.js.map +1 -0
- package/dist/chunk-IR2NRXHA.js +309 -0
- package/dist/chunk-IR2NRXHA.js.map +1 -0
- package/dist/chunk-ITABNSX6.js +26 -0
- package/dist/chunk-J7L457MF.js +1518 -0
- package/dist/chunk-JCFZ7ECN.js +246 -0
- package/dist/chunk-JFWTQDZL.js +604 -0
- package/dist/chunk-JGMQD3PX.js +274 -0
- package/dist/chunk-JTAPNHW5.js +98 -0
- package/dist/chunk-K2DKQ52D.js +89 -0
- package/dist/chunk-K3VMHRLJ.js +61 -0
- package/dist/chunk-KMZ4YWS4.js +544 -0
- package/dist/chunk-LBPJDFFN.js +19 -0
- package/dist/chunk-LNRYMWXE.js +930 -0
- package/dist/chunk-LQRPFL2N.js +218 -0
- package/dist/chunk-LQRPFL2N.js.map +1 -0
- package/dist/chunk-LY7PDE76.js +285 -0
- package/dist/chunk-MGUEAG6W.js +73 -0
- package/dist/chunk-MIBOIXCP.js +115 -0
- package/dist/chunk-MNFJQRUO.js +76 -0
- package/dist/chunk-MUT2BPDM.js +46 -0
- package/dist/chunk-MWPM6HNV.js +138 -0
- package/dist/chunk-NE3AZ25Y.js +58 -0
- package/dist/chunk-OFSUVUXT.js +215 -0
- package/dist/chunk-OMLZ35HJ.js +482 -0
- package/dist/chunk-OMLZ35HJ.js.map +1 -0
- package/dist/chunk-P6H6JZXO.js +188 -0
- package/dist/chunk-PEPLYJWK.js +91 -0
- package/dist/chunk-PK2U2ALQ.js +57 -0
- package/dist/chunk-PKSIPLMS.js +399 -0
- package/dist/chunk-QNY4IK3C.js +297 -0
- package/dist/chunk-QORVZUMT.js +2234 -0
- package/dist/chunk-QORVZUMT.js.map +1 -0
- package/dist/chunk-RDIZCSTV.js +156 -0
- package/dist/chunk-RM5JT6XF.js +106 -0
- package/dist/chunk-ROWUTQFG.js +125 -0
- package/dist/chunk-RQ43VL2X.js +148 -0
- package/dist/chunk-RSABCQLI.js +45 -0
- package/dist/chunk-S4QGD7PV.js +170 -0
- package/dist/chunk-S7WFZYKP.js +46 -0
- package/dist/chunk-SO7NANAH.js +69 -0
- package/dist/chunk-SRMQCQ7T.js +142 -0
- package/dist/chunk-SULQZX5W.js +42 -0
- package/dist/chunk-SZFWQVAC.js +819 -0
- package/dist/chunk-SZFWQVAC.js.map +1 -0
- package/dist/chunk-T4HIFVNK.js +84 -0
- package/dist/chunk-TBBAHTP3.js +1320 -0
- package/dist/chunk-TJTCHTR4.js +343 -0
- package/dist/chunk-TUS2VOMZ.js +219 -0
- package/dist/chunk-U3LO5TDH.js +296 -0
- package/dist/chunk-U6EQMX3B.js +131 -0
- package/dist/chunk-UDNN4POE.js +111 -0
- package/dist/chunk-UECTXVAO.js +479 -0
- package/dist/chunk-UQTINFCP.js +455 -0
- package/dist/chunk-USFXKWTX.js +79 -0
- package/dist/chunk-USFXKWTX.js.map +1 -0
- package/dist/chunk-UUUYWBTR.js +225 -0
- package/dist/chunk-UYVMINV2.js +139 -0
- package/dist/chunk-UZ5ZC43B.js +259 -0
- package/dist/chunk-UZ5ZC43B.js.map +1 -0
- package/dist/chunk-VGJFNHSA.js +56 -0
- package/dist/chunk-VJUVTMHY.js +329 -0
- package/dist/chunk-VJUVTMHY.js.map +1 -0
- package/dist/chunk-VQOBDHZP.js +106 -0
- package/dist/chunk-VRQ5HEVU.js +35 -0
- package/dist/chunk-VSHXHSIW.js +249 -0
- package/dist/chunk-VTLW24DM.js +23 -0
- package/dist/chunk-VVITBZKP.js +97 -0
- package/dist/chunk-WFTTF2MP.js +225 -0
- package/dist/chunk-X7NRAGJ5.js +504 -0
- package/dist/chunk-X7NRAGJ5.js.map +1 -0
- package/dist/chunk-XMIV53FM.js +191 -0
- package/dist/chunk-XNUUEUJB.js +287 -0
- package/dist/chunk-XYHAIEAF.js +5368 -0
- package/dist/chunk-XZJK2QB3.js +1920 -0
- package/dist/chunk-XZJK2QB3.js.map +1 -0
- package/dist/chunk-YB2UVOAD.js +64 -0
- package/dist/chunk-YLHWZOW7.js +224 -0
- package/dist/chunk-YNWBIAXJ.js +843 -0
- package/dist/chunk-YT6YI47O.js +178 -0
- package/dist/chunk-YYYGUO2E.js +66 -0
- package/dist/chunk-Z6RTEOEY.js +39 -0
- package/dist/chunk-ZAQQBVEM.js +432 -0
- package/dist/chunk-ZAQQBVEM.js.map +1 -0
- package/dist/chunk-ZHQSXEJ2.js +547 -0
- package/dist/cite-I5UV5SKS.js +191 -0
- package/dist/claim-JQCSXR4C.js +200 -0
- package/dist/cli.js +46 -45
- package/dist/cli.js.map +1 -1
- package/dist/client-DKZM6XTS.js +19 -0
- package/dist/code-D3J5FQCF.js +76 -0
- package/dist/companies-GHBIZKOK.js +34 -0
- package/dist/company-KNCYMQIA.js +308 -0
- package/dist/complete-V53XRNEQ.js +84 -0
- package/dist/config-ACEF37UO.js +88 -0
- package/dist/connect-NUZQSIGL.js +45 -0
- package/dist/content-5RTSXURF.js +85 -0
- package/dist/conversation-LBYO6ONM.js +96 -0
- package/dist/conversion-report-SRHJGIMT.js +127 -0
- package/dist/conversion-upload-command-5EKILBP2.js +439 -0
- package/dist/conversion-writes-P5FDTA6Y.js +122 -0
- package/dist/conversions-BXCGFNRK.js +140 -0
- package/dist/conversions-WJBOEPOO.js +78 -0
- package/dist/copy-writes-ER5ZB5C4.js +170 -0
- package/dist/countries-OJZQQYFT.js +82 -0
- package/dist/create-3PNWKXLP.js +239 -0
- package/dist/create-6FZR7JZT.js +135 -0
- package/dist/create-QXJ3UEOT.js +218 -0
- package/dist/create-XO7HUNPB.js +62 -0
- package/dist/creatives-O6TA2DOG.js +58 -0
- package/dist/creatives-YRYPXOCS.js +229 -0
- package/dist/creatives-ZGXH7UA7.js +118 -0
- package/dist/credentials-ATAP54ZI.js +290 -0
- package/dist/critique-3UY7TUVQ.js +232 -0
- package/dist/critique-UC6SBKGO.js +1451 -0
- package/dist/crm-AXK74BCO.js +313 -0
- package/dist/crm-AXK74BCO.js.map +1 -0
- package/dist/crm-MGVGQ7PK.js +323 -0
- package/dist/crop-SRCLDYM5.js +113 -0
- package/dist/currency-335ARWP5.js +88 -0
- package/dist/currency-335ARWP5.js.map +1 -0
- package/dist/custom-conversions-RTSR3KKJ.js +128 -0
- package/dist/customers-7NBNJCDC.js +65 -0
- package/dist/data-QOCDG3ZD.js +455 -0
- package/dist/data-QOCDG3ZD.js.map +1 -0
- package/dist/decide-2WQKE6HC.js +199 -0
- package/dist/delete-DWQS7UCJ.js +85 -0
- package/dist/delete-EKGTJSLK.js +69 -0
- package/dist/delete-MJSASLP6.js +69 -0
- package/dist/delete-N76JN5MP.js +71 -0
- package/dist/delete-OFG7FBMA.js +57 -0
- package/dist/delete-QQDGR7DD.js +67 -0
- package/dist/demographics-QWFAMEC2.js +141 -0
- package/dist/describe-42XBBR6J.js +97 -0
- package/dist/describe-TKOJMWML.js +97 -0
- package/dist/dimensions-5OS26IF6.js +101 -0
- package/dist/discard-4VW3AWI3.js +69 -0
- package/dist/discover-IDC6PQV2.js +93 -0
- package/dist/discover-O6322XPL.js +172 -0
- package/dist/discover-O6322XPL.js.map +1 -0
- package/dist/domain-EDPDUVAX.js +101 -0
- package/dist/download-46GLVBYU.js +172 -0
- package/dist/download-QH4VHDS6.js +337 -0
- package/dist/draft-3MYPEBSF.js +260 -0
- package/dist/draft-FJ55MZB4.js +138 -0
- package/dist/draft-IBR2W6GZ.js +332 -0
- package/dist/draft-NCUQFRGS.js +315 -0
- package/dist/draft-RRUJU2ZR.js +220 -0
- package/dist/draft-SLGJRUOV.js +615 -0
- package/dist/draft-SLGJRUOV.js.map +1 -0
- package/dist/draft-TJAD7P6W.js +374 -0
- package/dist/draft-W7FYHKI2.js +134 -0
- package/dist/engine/index.js +13 -13
- package/dist/env-AMOXYHCA.js +55 -0
- package/dist/experiment-TBLKWI2J.js +1397 -0
- package/dist/experiments-DUVO7C7A.js +236 -0
- package/dist/export-AMOLHZB6.js +168 -0
- package/dist/extract-WYNFE6TQ.js +143 -0
- package/dist/facets-WTY6NOUV.js +117 -0
- package/dist/favorites-Z24QDACW.js +178 -0
- package/dist/feed-2XCJ2JIV.js +177 -0
- package/dist/feedback-57BP27NA.js +115 -0
- package/dist/feedback-XDREGDOK.js +114 -0
- package/dist/feedback-record-HXSBLAZD.js +269 -0
- package/dist/fetch-L27MLPXM.js +204 -0
- package/dist/fetch-Z5MNAIQS.js +139 -0
- package/dist/find-XMISWVZT.js +144 -0
- package/dist/fit-K3G7HIMK.js +65 -0
- package/dist/flows-VJTWU3SU.js +340 -0
- package/dist/follow-542NYE76.js +94 -0
- package/dist/follow-competitors-NZDLHP7P.js +112 -0
- package/dist/following-JTZZCSQX.js +113 -0
- package/dist/fonts-SEMIVGXJ.js +39 -0
- package/dist/forecast-EHOMHLUH.js +169 -0
- package/dist/forecast-EHOMHLUH.js.map +1 -0
- package/dist/forecast-VODA7N3G.js +121 -0
- package/dist/funding-HKPP53U2.js +85 -0
- package/dist/funnel-BXJDMVMF.js +397 -0
- package/dist/ga4-MUIZN7ID.js +55 -0
- package/dist/generate-VCGSO7HI.js +263 -0
- package/dist/get-3QLANJES.js +59 -0
- package/dist/get-D5G2RNTR.js +62 -0
- package/dist/get-EASXXOQR.js +62 -0
- package/dist/get-EN4UQI7R.js +82 -0
- package/dist/get-G4UPOHVY.js +74 -0
- package/dist/get-GOXOADPY.js +56 -0
- package/dist/get-JUI3RVMT.js +38 -0
- package/dist/get-T7A3CTS2.js +92 -0
- package/dist/gif-4KAQUYPX.js +111 -0
- package/dist/google-ATEQHENA.js +163 -0
- package/dist/google-ZVVKAI7T.js +3300 -0
- package/dist/google-ZVVKAI7T.js.map +1 -0
- package/dist/google-ads-OUNSPGRQ.js +198 -0
- package/dist/group-4GYPBQMU.js +43 -0
- package/dist/group-GH5CSQKA.js +43 -0
- package/dist/gsc-3EIBYMON.js +30 -0
- package/dist/history-5OJVW2ZF.js +153 -0
- package/dist/history-RQMCZQSC.js +69 -0
- package/dist/history-TDGBO76N.js +102 -0
- package/dist/hubspot-VQGONQQU.js +817 -0
- package/dist/hubspot-VQGONQQU.js.map +1 -0
- package/dist/icon-VYFLZ4FS.js +138 -0
- package/dist/ideas-B7RQXWHQ.js +45 -0
- package/dist/images-Q45MP4Q2.js +92 -0
- package/dist/improve-ZBPSMVFI.js +86 -0
- package/dist/ingest-6MMY4KDM.js +131 -0
- package/dist/ingest-UMQQIINM.js +28 -0
- package/dist/insights-2NWY4XJR.js +658 -0
- package/dist/insights-WDHDMULM.js +132 -0
- package/dist/inspect-W2BIGA5F.js +192 -0
- package/dist/inspiration-6FGGHV73.js +53 -0
- package/dist/instant-experiences-YZYOLGBA.js +264 -0
- package/dist/intent-3S6SHAYC.js +95 -0
- package/dist/job-2XYPZRJ6.js +202 -0
- package/dist/job-create-BPUOBKXA.js +109 -0
- package/dist/job-status-HUDHF6BU.js +74 -0
- package/dist/keep-XBYR2NII.js +78 -0
- package/dist/keyword-gap-MGHKWE6A.js +130 -0
- package/dist/keyword-metrics-6R5TSHCE.js +200 -0
- package/dist/keywords-for-site-EFBLFX6E.js +131 -0
- package/dist/knowledge-ILQIN5FL.js +195 -0
- package/dist/landing-WC5FX3UP.js +28 -0
- package/dist/landings-GRJAJKHY.js +151 -0
- package/dist/languages-22VMY7JN.js +55 -0
- package/dist/languages-4J7JHZNB.js +40 -0
- package/dist/launches-NUMSS7HP.js +19 -0
- package/dist/layerize-TFRXRHVL.js +190 -0
- package/dist/lead-routes-D5ITHESC.js +733 -0
- package/dist/leads-CBOQ5CNM.js +115 -0
- package/dist/leads-VEHYM23G.js +541 -0
- package/dist/learn-ZUP35H3T.js +207 -0
- package/dist/library-JB2UBSJ5.js +212 -0
- package/dist/lighthouse-EQZFYGFL.js +75 -0
- package/dist/line-item-writes-W4UFIYEA.js +211 -0
- package/dist/line-items-SGCUJF3S.js +107 -0
- package/dist/link-KLJB7COB.js +67 -0
- package/dist/linkedin-TANR45ZZ.js +1381 -0
- package/dist/linkedin-TANR45ZZ.js.map +1 -0
- package/dist/linkedin-person-ECWP4XPE.js +139 -0
- package/dist/list-5BWNSHYO.js +51 -0
- package/dist/list-A363BF25.js +65 -0
- package/dist/list-JARIB5LC.js +57 -0
- package/dist/list-PXEJMDB4.js +67 -0
- package/dist/list-RO4YLUFK.js +76 -0
- package/dist/list-SVR5HBLA.js +306 -0
- package/dist/list-UD43QCLC.js +50 -0
- package/dist/list-XELB7UV2.js +154 -0
- package/dist/list-XPLMANXX.js +93 -0
- package/dist/locations-KM4XY56A.js +40 -0
- package/dist/locations-SNK2NDH3.js +69 -0
- package/dist/log-PMPOO42C.js +95 -0
- package/dist/logo-KDGD6LRA.js +19 -0
- package/dist/lookup-7HIPFF2U.js +23 -0
- package/dist/make-Q36WVKT3.js +1367 -0
- package/dist/map-DQ65PS65.js +445 -0
- package/dist/mcp-XMFKYN3E.js +729 -0
- package/dist/media-6VI4PN4N.js +18 -0
- package/dist/media-WIFXVGKU.js +89 -0
- package/dist/media-sources-HG524YO4.js +35 -0
- package/dist/members-D4DI2IFH.js +47 -0
- package/dist/meme-I43AVLGS.js +108 -0
- package/dist/meta-IVCO7HHX.js +152 -0
- package/dist/meta-IVCO7HHX.js.map +1 -0
- package/dist/metrics-QVDXMTEI.js +152 -0
- package/dist/metrics-QVDXMTEI.js.map +1 -0
- package/dist/normalize-5B5WIBV4.js +806 -0
- package/dist/normalize-XRVNJTML.js +144 -0
- package/dist/options-HT27WLNS.js +125 -0
- package/dist/organization-DYPTFZBA.js +949 -0
- package/dist/output-W5J5RKRR.js +26 -0
- package/dist/page-KUDKDDLJ.js +105 -0
- package/dist/page-photos-52S2XRIW.js +118 -0
- package/dist/pages-RMTL3RCK.js +67 -0
- package/dist/people-5MJXHC3D.js +171 -0
- package/dist/people-5MJXHC3D.js.map +1 -0
- package/dist/people-TTUIYT3L.js +164 -0
- package/dist/people-TTUIYT3L.js.map +1 -0
- package/dist/performance-2AQ34OPB.js +27 -0
- package/dist/performance-WE4LHJ2B.js +5565 -0
- package/dist/pinterest-GMNQ2AVG.js +105 -0
- package/dist/pixels-EWFDIDFA.js +62 -0
- package/dist/pixels-YQJKJWAC.js +109 -0
- package/dist/plan-33F5F2OR.js +208 -0
- package/dist/posts-MZFKWSZ6.js +36 -0
- package/dist/preview-HWM6KHV5.js +245 -0
- package/dist/preview-JYVRWRTT.js +101 -0
- package/dist/profile-OYCGBQWF.js +159 -0
- package/dist/promoted-tweet-writes-HCVRPH45.js +183 -0
- package/dist/promoted-tweets-P56ZU6OK.js +119 -0
- package/dist/properties-PMY3KKUU.js +101 -0
- package/dist/publish-4VWZHRYO.js +350 -0
- package/dist/query-ALRSR5OF.js +236 -0
- package/dist/query-DK7WWCJJ.js +62 -0
- package/dist/query-ZGGHOYOH.js +231 -0
- package/dist/questionnaire-4AJFPLM2.js +94 -0
- package/dist/read-Z7BBSAEK.js +141 -0
- package/dist/reddit-NSKYHSAC.js +29 -0
- package/dist/refresh-O3CLJX4O.js +97 -0
- package/dist/refresh-VE3UKLXX.js +42 -0
- package/dist/release-6TQQW4HB.js +63 -0
- package/dist/relevant-pages-B3ZFOGHQ.js +99 -0
- package/dist/remove-R55VAM47.js +53 -0
- package/dist/remove-VGEKRK34.js +49 -0
- package/dist/reopen-S426N3OD.js +66 -0
- package/dist/rerun-5KHANQR3.js +97 -0
- package/dist/research-5REXCSSO.js +265 -0
- package/dist/research-DMZLXMM2.js +78 -0
- package/dist/research-DMZLXMM2.js.map +1 -0
- package/dist/reset-5N2IVHFL.js +57 -0
- package/dist/reset-D4NGVG35.js +57 -0
- package/dist/resolve-V75JGD75.js +124 -0
- package/dist/retry-SB7EIJBA.js +65 -0
- package/dist/retry-WIKW6CGT.js +63 -0
- package/dist/retry-failed-GEORPC3E.js +45 -0
- package/dist/revenue-GZJU3XMD.js +91 -0
- package/dist/rule-writes-DRZUEIV6.js +530 -0
- package/dist/rules-BBALKNBK.js +217 -0
- package/dist/rules-WI6YKZA4.js +99 -0
- package/dist/rules-add-JCRB4AJR.js +465 -0
- package/dist/run-RDHTORWZ.js +69 -0
- package/dist/run-VVK23U5P.js +72 -0
- package/dist/scaffold-ad-QSVBY3XR.js +1513 -0
- package/dist/scaffold-static-ad-64BZMUHP.js +1012 -0
- package/dist/scaffold-video-X27MRW7R.js +885 -0
- package/dist/schedule-L5NVM4DN.js +67 -0
- package/dist/schedule-XHPIVUJ6.js +64 -0
- package/dist/scheduled-agents-OMUQCGDG.js +56 -0
- package/dist/scheduled-agents-OMUQCGDG.js.map +1 -0
- package/dist/schema-3IEI64TQ.js +152 -0
- package/dist/schema-RDVJQ5VW.js +135 -0
- package/dist/scrape-YEZGRX2B.js +2209 -0
- package/dist/screenshot-6EBASY4U.js +103 -0
- package/dist/search-BZLTII6V.js +228 -0
- package/dist/search-I7CCYBB5.js +92 -0
- package/dist/search-NA7DBOLW.js +91 -0
- package/dist/search-RM4MN7KO.js +51 -0
- package/dist/search-SNEFCCJX.js +26 -0
- package/dist/search-VX5ATSCD.js +177 -0
- package/dist/search-copy-S6JVQZLI.js +168 -0
- package/dist/seeds-BIY565P3.js +101 -0
- package/dist/select-NX3VHQTH.js +110 -0
- package/dist/sends-7JKFJTRE.js +349 -0
- package/dist/sequences-KZSNIELI.js +146 -0
- package/dist/set-prompt-QGEWZ3HD.js +199 -0
- package/dist/setup-links-LIDZVTSU.js +144 -0
- package/dist/shared-P5UDXZAG.js +34 -0
- package/dist/shopify-LZU3MCDG.js +4009 -0
- package/dist/site-CEO2V3BI.js +180 -0
- package/dist/sitemaps-WCARK2BM.js +77 -0
- package/dist/sites-JQZ2ZC6W.js +97 -0
- package/dist/skills-V2FRLLOW.js +47 -0
- package/dist/sources-C7AQCP2Z.js +30 -0
- package/dist/sources-SIGZVORA.js +457 -0
- package/dist/stale-BOUBKOAA.js +90 -0
- package/dist/stale-BOUBKOAA.js.map +1 -0
- package/dist/stats-W7CCPRTG.js +34 -0
- package/dist/status-NIG6OSAG.js +65 -0
- package/dist/sticker-NDSJDIAK.js +103 -0
- package/dist/stock-KY6BCN76.js +212 -0
- package/dist/studies-4JOP2GQJ.js +250 -0
- package/dist/studio-VQFYNK5O.js +49 -0
- package/dist/study-writes-PMTRTUXP.js +471 -0
- package/dist/suggest-F5GIJR4K.js +66 -0
- package/dist/sync-3RS5E5ZI.js +57 -0
- package/dist/sync-IDULIJUZ.js +279 -0
- package/dist/sync-STPHWKTE.js +55 -0
- package/dist/sync-definition-VHYZWLS5.js +70 -0
- package/dist/tag-MMY3QT2N.js +57 -0
- package/dist/tag-manager-JDGWAHCZ.js +43 -0
- package/dist/tags-F6DBHGIL.js +26 -0
- package/dist/tags-HGKEOIR7.js +23 -0
- package/dist/tags-I2LINXA7.js +23 -0
- package/dist/tags-UM6Y4DVQ.js +227 -0
- package/dist/tags-YCBZVXJQ.js +23 -0
- package/dist/targeting-AVHPKERN.js +762 -0
- package/dist/targeting-constants-T7Y6RVEH.js +118 -0
- package/dist/targeting-criteria-XPK76HRH.js +113 -0
- package/dist/targets-KT4BNTKZ.js +106 -0
- package/dist/terms-ETG7YCJC.js +102 -0
- package/dist/testimonials-QGXMSSWV.js +32 -0
- package/dist/themes-ZKUHKUZD.js +95 -0
- package/dist/themes-ZKUHKUZD.js.map +1 -0
- package/dist/top-companies-RC5KTWQ5.js +246 -0
- package/dist/top-companies-RC5KTWQ5.js.map +1 -0
- package/dist/transcript-OLF62WCH.js +165 -0
- package/dist/translate-NON5ZD3S.js +603 -0
- package/dist/triggers-UOQY4RFC.js +144 -0
- package/dist/tweets-3H7CW3ZI.js +123 -0
- package/dist/unfollow-PEEPIMZY.js +46 -0
- package/dist/unlink-RNIJPHHW.js +70 -0
- package/dist/unstage-GUPBLCPZ.js +96 -0
- package/dist/unstage-QVDYVN77.js +88 -0
- package/dist/update-7KR5ABJP.js +66 -0
- package/dist/update-JAUWIWOH.js +192 -0
- package/dist/update-QZEF5MUW.js +101 -0
- package/dist/update-TNOOVX3P.js +81 -0
- package/dist/update-TRWHYXF4.js +155 -0
- package/dist/upload-MLK2MZB6.js +137 -0
- package/dist/upload-W2UTHRP2.js +155 -0
- package/dist/upscale-MTWSJ3EJ.js +109 -0
- package/dist/url-options-2FVG55JF.js +131 -0
- package/dist/url-options-2FVG55JF.js.map +1 -0
- package/dist/url-params-F4XNWPOD.js +101 -0
- package/dist/use-K5EP7JJM.js +111 -0
- package/dist/validate-P3AQVXG6.js +135 -0
- package/dist/variant-BZCX46QL.js +338 -0
- package/dist/videos-PAKAAFRD.js +41 -0
- package/dist/videos-QIDOIJ24.js +146 -0
- package/dist/view-CD5UWMR4.js +133 -0
- package/dist/viewer-check-KXMDJH7R.js +83 -0
- package/dist/viewer-check-KXMDJH7R.js.map +1 -0
- package/dist/web-E5NHFG4Y.js +173 -0
- package/dist/winners-CSNTBOVM.js +113 -0
- package/dist/winning-ads-P6PDTCCU.js +86 -0
- package/dist/write-commands-AASXCKRN.js +721 -0
- package/dist/write-commands-MBNO7DCX.js +1524 -0
- package/dist/write-commands-OV7RE6O2.js +206 -0
- package/dist/write-commands-XFYXMTXO.js +1169 -0
- package/dist/x-5A74OD5P.js +47 -0
- package/package.json +1 -1
- package/dist/account-H6OOCEE3.js +0 -82
- package/dist/account-JVDP5ERG.js +0 -82
- package/dist/account-NSBALYYS.js +0 -139
- package/dist/account-assets-EPEYTJFD.js +0 -290
- package/dist/account-level-VD4NLB2D.js +0 -611
- package/dist/account-reads-OQCA5LEM.js +0 -219
- package/dist/account-reads-OQCA5LEM.js.map +0 -1
- package/dist/account-users-VBPW6FPY.js +0 -64
- package/dist/account-writes-KEXINJ5D.js +0 -68
- package/dist/accounts-A47QUTTB.js +0 -76
- package/dist/accounts-CNWJYCUV.js +0 -80
- package/dist/accounts-E5TF2AFI.js +0 -115
- package/dist/accounts-M5SCXY6W.js +0 -713
- package/dist/accounts-M5SCXY6W.js.map +0 -1
- package/dist/accounts-QR6OQ3GC.js +0 -119
- package/dist/actions-6DC3FUQF.js +0 -55
- package/dist/active-entities-XRSJNBOV.js +0 -103
- package/dist/activecampaign-YMVIS6EN.js +0 -938
- package/dist/activities-ZDWREYR7.js +0 -75
- package/dist/ad-group-writes-SVR4RCKB.js +0 -172
- package/dist/ad-groups-C726HUXS.js +0 -70
- package/dist/ad-writes-RWJIWGEL.js +0 -176
- package/dist/add-25YZMFSH.js +0 -85
- package/dist/add-7MAL7JRX.js +0 -81
- package/dist/add-D44VCDRU.js +0 -148
- package/dist/add-ITTW4LQC.js +0 -305
- package/dist/add-JO4ZPS23.js +0 -97
- package/dist/add-QZHZIAVE.js +0 -107
- package/dist/add-accounts-EKMSHAA4.js +0 -91
- package/dist/ads-3KK7VQPU.js +0 -79
- package/dist/ads-4YZYNU66.js +0 -128
- package/dist/ads-DGL5SGP3.js +0 -120
- package/dist/ads-UZ355BQS.js +0 -48
- package/dist/adsets-PSVCPCE3.js +0 -182
- package/dist/advertisers-7NAPI5ZU.js +0 -125
- package/dist/advertisers-Z2WLSJEC.js +0 -123
- package/dist/analytics-64DI3ZJL.js +0 -2437
- package/dist/analytics-64DI3ZJL.js.map +0 -1
- package/dist/analytics-GILIREA3.js +0 -447
- package/dist/animate-GTUI7XX4.js +0 -480
- package/dist/approved-E4EZA5RT.js +0 -73
- package/dist/asset-writes-NDSHY5OT.js +0 -50
- package/dist/assign-6RI3EC7U.js +0 -80
- package/dist/audience-size-M6NORPEU.js +0 -76
- package/dist/audience-writes-4KQXVGHO.js +0 -327
- package/dist/audiences-6L43K2T2.js +0 -280
- package/dist/audiences-T5LMTT3B.js +0 -85
- package/dist/audiences-UHLVATR6.js +0 -106
- package/dist/audit-46DO2HV3.js +0 -88
- package/dist/audit-CPEOJSCV.js +0 -154
- package/dist/autocomplete-DCCI3W5Y.js +0 -114
- package/dist/avatars-GDRSOS6V.js +0 -38
- package/dist/bid-pricing-FQ6VJSH6.js +0 -103
- package/dist/brand-6TUMI2GH.js +0 -22
- package/dist/brief-U6ZT5UYG.js +0 -543
- package/dist/businesses-TRFYMZ4I.js +0 -54
- package/dist/campaign-groups-RTP2MKNJ.js +0 -99
- package/dist/campaign-writes-4NVY7S4U.js +0 -168
- package/dist/campaign-writes-FUIGN5OR.js +0 -176
- package/dist/campaigns-2MTON2IE.js +0 -130
- package/dist/campaigns-7ZVVYTBM.js +0 -113
- package/dist/campaigns-CCDJKV7I.js +0 -111
- package/dist/campaigns-N2SWSBYT.js +0 -78
- package/dist/canvas-UYRDIRPR.js +0 -46
- package/dist/capabilities-4KGVNK4Q.js +0 -147
- package/dist/cards-CXKIVM4D.js +0 -85
- package/dist/catalog-JICUCAJZ.js +0 -66
- package/dist/catalogs-4DNLG4AM.js +0 -782
- package/dist/catalogs-G5NOKL4L.js +0 -130
- package/dist/changes-AS4RVEAL.js +0 -167
- package/dist/changes-AS4RVEAL.js.map +0 -1
- package/dist/chatgpt-O6EEAYLF.js +0 -47
- package/dist/chats-JNL4L6GZ.js +0 -589
- package/dist/check-EXT5WAYI.js +0 -107
- package/dist/chunk-2CC4CPDT.js +0 -225
- package/dist/chunk-2NOFIV6M.js +0 -5368
- package/dist/chunk-3GXHML4V.js +0 -106
- package/dist/chunk-3QLGV4XN.js +0 -604
- package/dist/chunk-3QNSGFE2.js +0 -103
- package/dist/chunk-3QPG2D27.js +0 -125
- package/dist/chunk-3WN5GWX4.js +0 -94
- package/dist/chunk-4AO3LSYM.js +0 -73
- package/dist/chunk-4HFM5RCP.js +0 -217
- package/dist/chunk-4HFM5RCP.js.map +0 -1
- package/dist/chunk-5CH2JQCA.js +0 -547
- package/dist/chunk-5LEIUG5H.js +0 -399
- package/dist/chunk-5N77IAOT.js +0 -7901
- package/dist/chunk-5N77IAOT.js.map +0 -1
- package/dist/chunk-5NMKNHJI.js +0 -46
- package/dist/chunk-5QNW5PCM.js +0 -106
- package/dist/chunk-66LB37BF.js +0 -455
- package/dist/chunk-6D7WTUF3.js +0 -98
- package/dist/chunk-6EOWBGGW.js +0 -191
- package/dist/chunk-6MJKVNLL.js +0 -25
- package/dist/chunk-6RWLCOAH.js +0 -334
- package/dist/chunk-6RWLCOAH.js.map +0 -1
- package/dist/chunk-6TNRSWNA.js +0 -207
- package/dist/chunk-6TNRSWNA.js.map +0 -1
- package/dist/chunk-7NBQQOCU.js +0 -97
- package/dist/chunk-7YXBMYSM.js +0 -91
- package/dist/chunk-A6LOIUWB.js +0 -51
- package/dist/chunk-AQRBEPZL.js +0 -138
- package/dist/chunk-AUDVBN6H.js +0 -8985
- package/dist/chunk-AUDVBN6H.js.map +0 -1
- package/dist/chunk-AZIXX73C.js +0 -64
- package/dist/chunk-B64KJW5C.js +0 -476
- package/dist/chunk-B64KJW5C.js.map +0 -1
- package/dist/chunk-BBS5VXLK.js +0 -91
- package/dist/chunk-BIBXZJZI.js +0 -97
- package/dist/chunk-BPDUE3MT.js +0 -312
- package/dist/chunk-C3XJ46C2.js +0 -203
- package/dist/chunk-CBVUO7SK.js +0 -1744
- package/dist/chunk-CC42TKFH.js +0 -19
- package/dist/chunk-CF5I4Q5M.js +0 -69
- package/dist/chunk-CFF7VAOQ.js +0 -142
- package/dist/chunk-CUTTTFAU.js +0 -783
- package/dist/chunk-CUTTTFAU.js.map +0 -1
- package/dist/chunk-DGHSXHZR.js +0 -136
- package/dist/chunk-DHF4FXWS.js +0 -58
- package/dist/chunk-DPOUS5DN.js +0 -287
- package/dist/chunk-EDZDYB3C.js +0 -23
- package/dist/chunk-EJ6EED6I.js +0 -69
- package/dist/chunk-ELFZ63XY.js +0 -392
- package/dist/chunk-EM5R3BYC.js +0 -131
- package/dist/chunk-F5VR6HSI.js +0 -170
- package/dist/chunk-FE2MFNVT.js +0 -5471
- package/dist/chunk-FLTAPEVY.js +0 -288
- package/dist/chunk-FLZNYVMN.js +0 -2235
- package/dist/chunk-FLZNYVMN.js.map +0 -1
- package/dist/chunk-FPYMFYML.js +0 -468
- package/dist/chunk-FPYMFYML.js.map +0 -1
- package/dist/chunk-FWYWLEDP.js +0 -755
- package/dist/chunk-FWYWLEDP.js.map +0 -1
- package/dist/chunk-G4TPYA7F.js +0 -454
- package/dist/chunk-GRX3JXSR.js +0 -843
- package/dist/chunk-H25GY4U4.js +0 -139
- package/dist/chunk-H423YXYY.js +0 -249
- package/dist/chunk-H6ASYVQX.js +0 -544
- package/dist/chunk-IYDESWW4.js +0 -74
- package/dist/chunk-J4AWNWKN.js +0 -1919
- package/dist/chunk-JAME5NBT.js +0 -42
- package/dist/chunk-JLAFNORO.js +0 -285
- package/dist/chunk-JQYB2DS3.js +0 -197
- package/dist/chunk-JYOP6YVT.js +0 -66
- package/dist/chunk-KGJ6EIX3.js +0 -76
- package/dist/chunk-KOKPQE4N.js +0 -494
- package/dist/chunk-KTX7QAKP.js +0 -831
- package/dist/chunk-KTX7QAKP.js.map +0 -1
- package/dist/chunk-L4QEMWNJ.js +0 -111
- package/dist/chunk-L7I47VGM.js +0 -46
- package/dist/chunk-LAMSUL26.js +0 -1518
- package/dist/chunk-LJEJCIHR.js +0 -246
- package/dist/chunk-LYGZBNSC.js +0 -224
- package/dist/chunk-M4KFO256.js +0 -188
- package/dist/chunk-MIHY534L.js +0 -39
- package/dist/chunk-MKOI6QYM.js +0 -225
- package/dist/chunk-MPTNN35I.js +0 -325
- package/dist/chunk-MPTNN35I.js.map +0 -1
- package/dist/chunk-MTW2NDDD.js +0 -98
- package/dist/chunk-MTW2NDDD.js.map +0 -1
- package/dist/chunk-NI5R6Y24.js +0 -89
- package/dist/chunk-O5VSYBUA.js +0 -343
- package/dist/chunk-OEO2NSNC.js +0 -297
- package/dist/chunk-OZNBVJGC.js +0 -220
- package/dist/chunk-PYZVVMF4.js +0 -430
- package/dist/chunk-PYZVVMF4.js.map +0 -1
- package/dist/chunk-Q3G4ZI2U.js +0 -84
- package/dist/chunk-Q5XUFN2W.js +0 -35
- package/dist/chunk-Q736UFSD.js +0 -75
- package/dist/chunk-QGAUDVMR.js +0 -148
- package/dist/chunk-QZ4YHQLW.js +0 -63
- package/dist/chunk-QZ4YHQLW.js.map +0 -1
- package/dist/chunk-R7XDGNZD.js +0 -297
- package/dist/chunk-R7XDGNZD.js.map +0 -1
- package/dist/chunk-RIIMF75G.js +0 -64
- package/dist/chunk-RRKUXGAU.js +0 -26
- package/dist/chunk-RUMHZX5N.js +0 -225
- package/dist/chunk-S36WWACM.js +0 -3510
- package/dist/chunk-S5S54J2K.js +0 -56
- package/dist/chunk-SHYUXLE5.js +0 -61
- package/dist/chunk-SIRRBWQ2.js +0 -215
- package/dist/chunk-SNVAE572.js +0 -167
- package/dist/chunk-TLQY4QBW.js +0 -84
- package/dist/chunk-UK4XSLV2.js +0 -296
- package/dist/chunk-URGXEDFV.js +0 -76
- package/dist/chunk-UVUY6FLV.js +0 -1254
- package/dist/chunk-UVUY6FLV.js.map +0 -1
- package/dist/chunk-UZVFXGMS.js +0 -930
- package/dist/chunk-V4HS5JRL.js +0 -1320
- package/dist/chunk-V7EN5LFS.js +0 -115
- package/dist/chunk-VCG3Q3O4.js +0 -479
- package/dist/chunk-VKIKIN5U.js +0 -1920
- package/dist/chunk-VKIKIN5U.js.map +0 -1
- package/dist/chunk-VZIYTP3X.js +0 -163
- package/dist/chunk-WEBWXSFF.js +0 -169
- package/dist/chunk-WOHTTXLG.js +0 -57
- package/dist/chunk-WTPID22G.js +0 -152
- package/dist/chunk-X7USE7IA.js +0 -24026
- package/dist/chunk-XA76OGSL.js +0 -718
- package/dist/chunk-XA76OGSL.js.map +0 -1
- package/dist/chunk-XY7W6MQN.js +0 -274
- package/dist/chunk-YAMKCMAS.js +0 -219
- package/dist/chunk-YEQTBPEB.js +0 -344
- package/dist/chunk-YHBMCP6C.js +0 -156
- package/dist/chunk-YJEG6TQ3.js +0 -685
- package/dist/chunk-YQYCWYFJ.js +0 -962
- package/dist/chunk-YRWCXYWW.js +0 -178
- package/dist/chunk-ZCGM7ZWM.js +0 -45
- package/dist/cite-WCAOCOO5.js +0 -191
- package/dist/claim-4LKB2Z6T.js +0 -200
- package/dist/client-VCKP6WBR.js +0 -19
- package/dist/code-VXOTFGD2.js +0 -76
- package/dist/companies-KCHDEHAA.js +0 -198
- package/dist/companies-KCHDEHAA.js.map +0 -1
- package/dist/company-C2Y7LY5H.js +0 -308
- package/dist/complete-MNN3PAZE.js +0 -84
- package/dist/config-UR45YCIN.js +0 -88
- package/dist/connect-IABMKFGA.js +0 -45
- package/dist/content-EQQIKG5H.js +0 -85
- package/dist/conversation-FETU4KTF.js +0 -96
- package/dist/conversion-report-33SG7SHU.js +0 -127
- package/dist/conversion-upload-command-DWIGVHQZ.js +0 -439
- package/dist/conversion-writes-XGGTBML5.js +0 -122
- package/dist/conversions-PPP4QK7U.js +0 -78
- package/dist/conversions-S3WIR5R4.js +0 -140
- package/dist/copy-writes-JVUX3YDL.js +0 -170
- package/dist/countries-GRCU4IGM.js +0 -82
- package/dist/create-A3ZIQVIH.js +0 -239
- package/dist/create-ESKBBBJX.js +0 -135
- package/dist/create-U2ITO4RV.js +0 -218
- package/dist/create-VNYTZJ4T.js +0 -62
- package/dist/creatives-4EPM3RHG.js +0 -118
- package/dist/creatives-WSCRC5GO.js +0 -58
- package/dist/creatives-XO5E4AIC.js +0 -229
- package/dist/credentials-ZV66ZUCK.js +0 -290
- package/dist/critique-ODWLA52C.js +0 -1451
- package/dist/critique-X3433R5M.js +0 -232
- package/dist/crm-WPPM2R7I.js +0 -323
- package/dist/crm-XPIQAGH7.js +0 -229
- package/dist/crm-XPIQAGH7.js.map +0 -1
- package/dist/crop-NE7YX4SS.js +0 -113
- package/dist/currency-HK2ZW2VW.js +0 -88
- package/dist/currency-HK2ZW2VW.js.map +0 -1
- package/dist/custom-conversions-GQTU5E6X.js +0 -128
- package/dist/customers-GCM7WZII.js +0 -65
- package/dist/decide-6Q5X3V3F.js +0 -199
- package/dist/delete-EKKOEB3N.js +0 -69
- package/dist/delete-GAIV2YVD.js +0 -69
- package/dist/delete-QHDDR66K.js +0 -85
- package/dist/delete-RVJLATPO.js +0 -57
- package/dist/delete-SP66F7ZV.js +0 -71
- package/dist/delete-VJ5QXKZR.js +0 -67
- package/dist/demographics-XWIW3YJF.js +0 -141
- package/dist/describe-DJPIUEFE.js +0 -97
- package/dist/describe-MAGTSOW4.js +0 -97
- package/dist/dimensions-IC2H7V3H.js +0 -101
- package/dist/discard-TWX2CQF5.js +0 -69
- package/dist/discover-PSL2NBJL.js +0 -93
- package/dist/discover-Q5PAOIQQ.js +0 -172
- package/dist/discover-Q5PAOIQQ.js.map +0 -1
- package/dist/domain-FE32BE2E.js +0 -101
- package/dist/download-5FYHTIGR.js +0 -172
- package/dist/download-EHDJXBAC.js +0 -337
- package/dist/draft-27NMTARB.js +0 -134
- package/dist/draft-5VLO5UYZ.js +0 -332
- package/dist/draft-JESKGZ6O.js +0 -138
- package/dist/draft-L2NXCIYT.js +0 -315
- package/dist/draft-L757UIW5.js +0 -374
- package/dist/draft-MWYKIZC4.js +0 -260
- package/dist/draft-WK4PEMB6.js +0 -614
- package/dist/draft-WK4PEMB6.js.map +0 -1
- package/dist/draft-ZCP3MIV6.js +0 -220
- package/dist/env-NZXNMWSD.js +0 -53
- package/dist/experiment-XAYSEYTU.js +0 -1397
- package/dist/experiments-DVR7WBGQ.js +0 -236
- package/dist/export-W54UZ62P.js +0 -168
- package/dist/extract-JM6FAWAS.js +0 -143
- package/dist/facets-IEQJK5AW.js +0 -117
- package/dist/favorites-Y6CT6NSQ.js +0 -178
- package/dist/feed-35BRQPTH.js +0 -177
- package/dist/feedback-QUJ2V4WD.js +0 -114
- package/dist/feedback-SSCN7LEP.js +0 -115
- package/dist/feedback-record-P6WK4UPP.js +0 -269
- package/dist/fetch-I6P72CDL.js +0 -139
- package/dist/fetch-Q6BIDVN5.js +0 -204
- package/dist/find-SVGRA7IA.js +0 -144
- package/dist/fit-XLK5LDPS.js +0 -65
- package/dist/flows-QVGZEYCH.js +0 -340
- package/dist/follow-24QSDNAG.js +0 -94
- package/dist/follow-competitors-AG4E4XFA.js +0 -112
- package/dist/following-YGM6TBK3.js +0 -113
- package/dist/fonts-GARRSRIB.js +0 -39
- package/dist/forecast-GEYNZ5PQ.js +0 -121
- package/dist/forecast-THQNGKPE.js +0 -169
- package/dist/forecast-THQNGKPE.js.map +0 -1
- package/dist/funding-WZNGXRLJ.js +0 -85
- package/dist/funnel-OABL4MLZ.js +0 -397
- package/dist/ga4-W3U5YTRT.js +0 -55
- package/dist/generate-Y4NJEYIH.js +0 -263
- package/dist/get-3MTAVNTP.js +0 -56
- package/dist/get-5SPNAIUQ.js +0 -62
- package/dist/get-63KQ62KN.js +0 -82
- package/dist/get-GEUSRD5Y.js +0 -59
- package/dist/get-JIZPYK3Z.js +0 -74
- package/dist/get-RDGC3QA5.js +0 -62
- package/dist/get-TS2ZJDCQ.js +0 -38
- package/dist/get-YWDZYEAC.js +0 -92
- package/dist/gif-NP6EDGEE.js +0 -111
- package/dist/google-32BCQC7C.js +0 -163
- package/dist/google-VYCMEWUL.js +0 -3300
- package/dist/google-VYCMEWUL.js.map +0 -1
- package/dist/google-ads-PCXGVHZV.js +0 -198
- package/dist/group-3DT4UYSR.js +0 -43
- package/dist/group-OEKKCFXT.js +0 -43
- package/dist/gsc-4FEFPFPB.js +0 -30
- package/dist/history-J7ANCPWY.js +0 -153
- package/dist/history-NX67UIZ7.js +0 -102
- package/dist/history-VKRYKQ4C.js +0 -69
- package/dist/hubspot-Z3J3JBEH.js +0 -814
- package/dist/hubspot-Z3J3JBEH.js.map +0 -1
- package/dist/icon-43UJTGGE.js +0 -138
- package/dist/ideas-22I7JTI7.js +0 -45
- package/dist/images-3C4Y6RWL.js +0 -92
- package/dist/improve-IMXQN6OD.js +0 -86
- package/dist/ingest-CFH2MPSF.js +0 -131
- package/dist/ingest-VXX2Y76C.js +0 -28
- package/dist/insights-3IPSEBYW.js +0 -132
- package/dist/insights-BR3456EI.js +0 -658
- package/dist/inspect-LDXPOGGH.js +0 -192
- package/dist/inspiration-XZI5KCQW.js +0 -53
- package/dist/instant-experiences-2LKF7XVK.js +0 -264
- package/dist/intent-ZM4K623V.js +0 -95
- package/dist/job-GOX3KIKG.js +0 -202
- package/dist/job-create-F2PQSN3C.js +0 -109
- package/dist/job-status-3FMA5D7T.js +0 -74
- package/dist/keep-23ZYMWPG.js +0 -78
- package/dist/keyword-gap-FAAF2I6V.js +0 -130
- package/dist/keyword-metrics-E36SMZSP.js +0 -200
- package/dist/keywords-for-site-AWGWDXZA.js +0 -131
- package/dist/knowledge-7M7DSRF3.js +0 -195
- package/dist/landing-PVTDVL22.js +0 -28
- package/dist/landings-VNQ4VA2U.js +0 -151
- package/dist/languages-2X22HXM3.js +0 -55
- package/dist/languages-ZGDTERIQ.js +0 -40
- package/dist/launches-L4EUROCJ.js +0 -19
- package/dist/layerize-6QHQMA7Q.js +0 -190
- package/dist/lead-routes-5TPFJEVH.js +0 -733
- package/dist/leads-4TLOH47R.js +0 -541
- package/dist/leads-XC3C5HGC.js +0 -115
- package/dist/learn-NYRL53NQ.js +0 -207
- package/dist/library-MNJC24E4.js +0 -212
- package/dist/lighthouse-DJMAXFTD.js +0 -75
- package/dist/line-item-writes-LMSYCR6G.js +0 -211
- package/dist/line-items-P24SOGVZ.js +0 -107
- package/dist/link-H3TTWJJO.js +0 -67
- package/dist/linkedin-57JHH7QN.js +0 -1344
- package/dist/linkedin-57JHH7QN.js.map +0 -1
- package/dist/linkedin-person-HKKIE32Q.js +0 -139
- package/dist/list-2277GCPH.js +0 -51
- package/dist/list-537S75BZ.js +0 -76
- package/dist/list-KHCFVTQU.js +0 -154
- package/dist/list-LC2GRYEI.js +0 -67
- package/dist/list-Q52FPW3H.js +0 -50
- package/dist/list-UCTFATXS.js +0 -306
- package/dist/list-V4PSDBLX.js +0 -93
- package/dist/list-WIXQXNKB.js +0 -65
- package/dist/list-XK33NCSC.js +0 -57
- package/dist/locations-A65MFB7Q.js +0 -69
- package/dist/locations-WN6B3IJK.js +0 -40
- package/dist/log-SLYCPRCY.js +0 -95
- package/dist/logo-4LSFZ3ZO.js +0 -19
- package/dist/lookup-WIM5WR25.js +0 -23
- package/dist/make-HTCPU6HU.js +0 -1367
- package/dist/map-237LQ5N5.js +0 -445
- package/dist/mcp-GX5TOO7Y.js +0 -729
- package/dist/media-34I7UB7Z.js +0 -89
- package/dist/media-KKI3KWLR.js +0 -18
- package/dist/media-sources-ODNIS7A5.js +0 -35
- package/dist/members-TYQKWR7Z.js +0 -47
- package/dist/meme-6NFYFQ7T.js +0 -108
- package/dist/meta-2UK7KIE4.js +0 -124
- package/dist/meta-2UK7KIE4.js.map +0 -1
- package/dist/metrics-3U3ZO2RF.js +0 -152
- package/dist/metrics-3U3ZO2RF.js.map +0 -1
- package/dist/normalize-G75RDSE4.js +0 -806
- package/dist/normalize-MDTMKLYO.js +0 -144
- package/dist/options-MEADUZY3.js +0 -125
- package/dist/organization-BXJSHRZG.js +0 -949
- package/dist/output-ELEO2Z6R.js +0 -24
- package/dist/page-4X6IBUWG.js +0 -105
- package/dist/page-photos-KNBLMFLN.js +0 -118
- package/dist/pages-7HW5YOZV.js +0 -67
- package/dist/performance-CU65TLCB.js +0 -5565
- package/dist/performance-IGCOP5VH.js +0 -27
- package/dist/pinterest-KA6VFDM4.js +0 -105
- package/dist/pixels-D5HF24FI.js +0 -109
- package/dist/pixels-U6UA662G.js +0 -62
- package/dist/plan-XCA6R3HZ.js +0 -208
- package/dist/posts-ALGM6ONV.js +0 -36
- package/dist/preview-55TRUF4Q.js +0 -245
- package/dist/preview-YQ6P5A53.js +0 -101
- package/dist/profile-NHUPUCBR.js +0 -159
- package/dist/promoted-tweet-writes-X2CUNBU2.js +0 -183
- package/dist/promoted-tweets-G2NOW5OF.js +0 -119
- package/dist/properties-2ZXA5BPJ.js +0 -101
- package/dist/publish-YPCXCU4P.js +0 -350
- package/dist/query-63CTX2PH.js +0 -231
- package/dist/query-DMWY3TDD.js +0 -236
- package/dist/query-SAQADBM2.js +0 -62
- package/dist/questionnaire-WHE42RD4.js +0 -94
- package/dist/read-NESEKULG.js +0 -141
- package/dist/reddit-XMAGZMD4.js +0 -29
- package/dist/refresh-ILDEPU5A.js +0 -42
- package/dist/refresh-QIK3CXLV.js +0 -97
- package/dist/release-O7KGD5MI.js +0 -63
- package/dist/relevant-pages-KTSODNNW.js +0 -99
- package/dist/remove-7FAWM2H4.js +0 -53
- package/dist/remove-NHE4UT7G.js +0 -49
- package/dist/reopen-4ZWEYNCI.js +0 -66
- package/dist/rerun-IDUKOW6Z.js +0 -97
- package/dist/research-SPFILN24.js +0 -75
- package/dist/research-SPFILN24.js.map +0 -1
- package/dist/research-Y5MSZH6T.js +0 -265
- package/dist/reset-4K7BXUY6.js +0 -57
- package/dist/reset-YSDYSZ64.js +0 -57
- package/dist/resolve-DD6ES7GJ.js +0 -124
- package/dist/retry-PZTS6KMQ.js +0 -65
- package/dist/retry-YAZ3JXYL.js +0 -63
- package/dist/retry-failed-R5HPQ3KQ.js +0 -45
- package/dist/revenue-PLJ46IYH.js +0 -91
- package/dist/rule-writes-QB4IWFCJ.js +0 -530
- package/dist/rules-FYVD2QBB.js +0 -217
- package/dist/rules-I4PL72J7.js +0 -99
- package/dist/rules-add-EFD2YSLH.js +0 -465
- package/dist/run-FN365AXZ.js +0 -72
- package/dist/run-WCFKVQQQ.js +0 -69
- package/dist/scaffold-ad-PI4IHOG5.js +0 -1513
- package/dist/scaffold-static-ad-RDOCRFEP.js +0 -1012
- package/dist/scaffold-video-HPRYTHE6.js +0 -885
- package/dist/schedule-D7EDEM45.js +0 -67
- package/dist/schedule-NPZPVNSO.js +0 -64
- package/dist/scheduled-agents-5TNWITKB.js +0 -55
- package/dist/scheduled-agents-5TNWITKB.js.map +0 -1
- package/dist/schema-PMVRMIRU.js +0 -135
- package/dist/schema-Z43AJOJ4.js +0 -152
- package/dist/scrape-VL2RWSTW.js +0 -2209
- package/dist/screenshot-Y6EEXS3Q.js +0 -103
- package/dist/search-BRANRGRU.js +0 -177
- package/dist/search-CXC7N5XJ.js +0 -51
- package/dist/search-JEXYEAPQ.js +0 -228
- package/dist/search-L3GTZYRW.js +0 -92
- package/dist/search-TXBYKNQC.js +0 -91
- package/dist/search-XHSTUBDY.js +0 -26
- package/dist/search-copy-FIPG7OCC.js +0 -168
- package/dist/seeds-ADJKURNG.js +0 -101
- package/dist/select-CLDJE7VJ.js +0 -110
- package/dist/sends-RS4LWRAC.js +0 -349
- package/dist/sequences-2RPKDKGQ.js +0 -146
- package/dist/set-prompt-7VHSKVO6.js +0 -199
- package/dist/setup-links-PAA7XYV5.js +0 -144
- package/dist/shared-4GGUIOF2.js +0 -32
- package/dist/shopify-VWIRGI6H.js +0 -4009
- package/dist/site-Q3PMNJ2Z.js +0 -180
- package/dist/sitemaps-Z6IELTQV.js +0 -77
- package/dist/sites-KLAKI2EY.js +0 -97
- package/dist/skills-OJP36EVR.js +0 -47
- package/dist/sources-4YHNM22P.js +0 -30
- package/dist/sources-BYMGSUPZ.js +0 -457
- package/dist/stale-WO6FTPLQ.js +0 -90
- package/dist/stale-WO6FTPLQ.js.map +0 -1
- package/dist/stats-MIMFX4R7.js +0 -34
- package/dist/status-B2WRAPZO.js +0 -65
- package/dist/sticker-IREEEN7I.js +0 -103
- package/dist/stock-BOOSUS2C.js +0 -212
- package/dist/studies-YGYAH3JI.js +0 -250
- package/dist/studio-XLC37YGX.js +0 -49
- package/dist/study-writes-UPGJB36A.js +0 -471
- package/dist/suggest-5RTISDLI.js +0 -66
- package/dist/sync-2QIPZFSK.js +0 -57
- package/dist/sync-OHIXI4I6.js +0 -55
- package/dist/sync-VCAFAYW4.js +0 -279
- package/dist/sync-definition-L52PGD7B.js +0 -70
- package/dist/tag-DSCUKNC3.js +0 -57
- package/dist/tag-manager-IINALUEJ.js +0 -43
- package/dist/tags-AIE4XEU2.js +0 -227
- package/dist/tags-DF6JNSNA.js +0 -26
- package/dist/tags-SWP4MXQO.js +0 -23
- package/dist/tags-VXHV4JWM.js +0 -23
- package/dist/tags-XYQUPA6M.js +0 -23
- package/dist/targeting-BM72UTI6.js +0 -762
- package/dist/targeting-constants-54S3FXIF.js +0 -118
- package/dist/targeting-criteria-UYAEVSX3.js +0 -113
- package/dist/targets-XFL7CE7N.js +0 -106
- package/dist/terms-OFHNLW6U.js +0 -102
- package/dist/testimonials-DTCPATQ2.js +0 -32
- package/dist/themes-HBWSZRFM.js +0 -95
- package/dist/themes-HBWSZRFM.js.map +0 -1
- package/dist/top-companies-SCKUWYFG.js +0 -111
- package/dist/top-companies-SCKUWYFG.js.map +0 -1
- package/dist/transcript-H7VSMOMV.js +0 -165
- package/dist/translate-LCLG4NYR.js +0 -603
- package/dist/triggers-HN3O2CNG.js +0 -144
- package/dist/tweets-TRTXC6O4.js +0 -123
- package/dist/unfollow-DATOGPLZ.js +0 -46
- package/dist/unlink-B5CD7ZW6.js +0 -70
- package/dist/unstage-34W4OU5D.js +0 -88
- package/dist/unstage-LLQCMZ5H.js +0 -96
- package/dist/update-2OTR4JQV.js +0 -101
- package/dist/update-3CKLLPYX.js +0 -66
- package/dist/update-6V2A4JGZ.js +0 -192
- package/dist/update-7FBCTLFP.js +0 -155
- package/dist/update-SD5YQIJC.js +0 -81
- package/dist/upload-72ARWDHN.js +0 -137
- package/dist/upload-7PPMVWVA.js +0 -155
- package/dist/upscale-WVJZG76V.js +0 -109
- package/dist/url-options-6WC2XQKB.js +0 -131
- package/dist/url-options-6WC2XQKB.js.map +0 -1
- package/dist/url-params-TAZ2S675.js +0 -101
- package/dist/use-6FADOAFZ.js +0 -111
- package/dist/validate-6F3JKVQV.js +0 -135
- package/dist/variant-RNM36P4J.js +0 -338
- package/dist/videos-GHFCOTT7.js +0 -146
- package/dist/videos-UCUYPQNK.js +0 -41
- package/dist/view-YR6MDLWL.js +0 -133
- package/dist/viewer-check-XZYL55G6.js +0 -83
- package/dist/web-YYXQXIH4.js +0 -173
- package/dist/winners-4T5RFQXU.js +0 -113
- package/dist/winning-ads-H3HCI5QT.js +0 -86
- package/dist/write-commands-6D55SB56.js +0 -206
- package/dist/write-commands-AIWLEGO2.js +0 -1169
- package/dist/write-commands-DS7WNSYA.js +0 -1524
- package/dist/write-commands-UO3OQIHH.js +0 -721
- package/dist/x-K4N6QIH2.js +0 -47
- /package/dist/{account-H6OOCEE3.js.map → account-MDLPCIDQ.js.map} +0 -0
- /package/dist/{account-JVDP5ERG.js.map → account-VRXCDDXY.js.map} +0 -0
- /package/dist/{account-NSBALYYS.js.map → account-YYB2KWLU.js.map} +0 -0
- /package/dist/{account-assets-EPEYTJFD.js.map → account-assets-BFMQWV33.js.map} +0 -0
- /package/dist/{account-level-VD4NLB2D.js.map → account-level-47IS2CZB.js.map} +0 -0
- /package/dist/{account-users-VBPW6FPY.js.map → account-users-FXOWESWY.js.map} +0 -0
- /package/dist/{account-writes-KEXINJ5D.js.map → account-writes-SRTOKSMT.js.map} +0 -0
- /package/dist/{accounts-CNWJYCUV.js.map → accounts-AT2UB2L3.js.map} +0 -0
- /package/dist/{accounts-A47QUTTB.js.map → accounts-LTGUK6OV.js.map} +0 -0
- /package/dist/{accounts-E5TF2AFI.js.map → accounts-LTUEBWJL.js.map} +0 -0
- /package/dist/{accounts-QR6OQ3GC.js.map → accounts-NR3ARJ72.js.map} +0 -0
- /package/dist/{actions-6DC3FUQF.js.map → actions-766X6XRB.js.map} +0 -0
- /package/dist/{active-entities-XRSJNBOV.js.map → active-entities-QWJXR4W6.js.map} +0 -0
- /package/dist/{activecampaign-YMVIS6EN.js.map → activecampaign-MC4FYCCF.js.map} +0 -0
- /package/dist/{activities-ZDWREYR7.js.map → activities-ZRP22SC2.js.map} +0 -0
- /package/dist/{ad-group-writes-SVR4RCKB.js.map → ad-group-writes-UFBFB2PL.js.map} +0 -0
- /package/dist/{ad-groups-C726HUXS.js.map → ad-groups-KRKMZPF3.js.map} +0 -0
- /package/dist/{ad-writes-RWJIWGEL.js.map → ad-writes-SIAGGUDJ.js.map} +0 -0
- /package/dist/{add-ITTW4LQC.js.map → add-DWKVVW76.js.map} +0 -0
- /package/dist/{add-25YZMFSH.js.map → add-F65GOWKP.js.map} +0 -0
- /package/dist/{add-D44VCDRU.js.map → add-IALA4VRA.js.map} +0 -0
- /package/dist/{add-7MAL7JRX.js.map → add-ITX64WEC.js.map} +0 -0
- /package/dist/{add-QZHZIAVE.js.map → add-MYX3BSUJ.js.map} +0 -0
- /package/dist/{add-JO4ZPS23.js.map → add-WAVXB2QA.js.map} +0 -0
- /package/dist/{add-accounts-EKMSHAA4.js.map → add-accounts-YTLQCSXB.js.map} +0 -0
- /package/dist/{ads-3KK7VQPU.js.map → ads-3T4C4BBH.js.map} +0 -0
- /package/dist/{ads-DGL5SGP3.js.map → ads-A34INCCM.js.map} +0 -0
- /package/dist/{ads-4YZYNU66.js.map → ads-AKF5AT6O.js.map} +0 -0
- /package/dist/{ads-UZ355BQS.js.map → ads-UGMHE33I.js.map} +0 -0
- /package/dist/{adsets-PSVCPCE3.js.map → adsets-HNFBX4LB.js.map} +0 -0
- /package/dist/{advertisers-Z2WLSJEC.js.map → advertisers-UFOLIRIK.js.map} +0 -0
- /package/dist/{advertisers-7NAPI5ZU.js.map → advertisers-YTG6VA6R.js.map} +0 -0
- /package/dist/{analytics-GILIREA3.js.map → analytics-G4WFP37R.js.map} +0 -0
- /package/dist/{animate-GTUI7XX4.js.map → animate-PSOAMA52.js.map} +0 -0
- /package/dist/{approved-E4EZA5RT.js.map → approved-3W56YTOZ.js.map} +0 -0
- /package/dist/{asset-writes-NDSHY5OT.js.map → asset-writes-2CYNDRPU.js.map} +0 -0
- /package/dist/{assign-6RI3EC7U.js.map → assign-5FALEZYD.js.map} +0 -0
- /package/dist/{audience-size-M6NORPEU.js.map → audience-size-VRYRLPO5.js.map} +0 -0
- /package/dist/{audience-writes-4KQXVGHO.js.map → audience-writes-JNVGUHGN.js.map} +0 -0
- /package/dist/{audiences-6L43K2T2.js.map → audiences-EH426E3T.js.map} +0 -0
- /package/dist/{audiences-T5LMTT3B.js.map → audiences-OOXSXKIT.js.map} +0 -0
- /package/dist/{audiences-UHLVATR6.js.map → audiences-S6TXNKQ2.js.map} +0 -0
- /package/dist/{audit-46DO2HV3.js.map → audit-O2RRST7B.js.map} +0 -0
- /package/dist/{audit-CPEOJSCV.js.map → audit-WHIVWMAI.js.map} +0 -0
- /package/dist/{autocomplete-DCCI3W5Y.js.map → autocomplete-3HCLXTGK.js.map} +0 -0
- /package/dist/{avatars-GDRSOS6V.js.map → avatars-HN74FWDF.js.map} +0 -0
- /package/dist/{bid-pricing-FQ6VJSH6.js.map → bid-pricing-NN5JKZS4.js.map} +0 -0
- /package/dist/{brand-6TUMI2GH.js.map → brand-MWU5IVEZ.js.map} +0 -0
- /package/dist/{brief-U6ZT5UYG.js.map → brief-6TXWQWHJ.js.map} +0 -0
- /package/dist/{businesses-TRFYMZ4I.js.map → businesses-HOAQVYRH.js.map} +0 -0
- /package/dist/{campaign-groups-RTP2MKNJ.js.map → campaign-groups-MGEKCP7J.js.map} +0 -0
- /package/dist/{campaign-writes-4NVY7S4U.js.map → campaign-writes-ORUT54WL.js.map} +0 -0
- /package/dist/{campaign-writes-FUIGN5OR.js.map → campaign-writes-Z7B6V6Q3.js.map} +0 -0
- /package/dist/{campaigns-N2SWSBYT.js.map → campaigns-3BDIHUSW.js.map} +0 -0
- /package/dist/{campaigns-CCDJKV7I.js.map → campaigns-E7YC762Q.js.map} +0 -0
- /package/dist/{campaigns-2MTON2IE.js.map → campaigns-EEH3VDK6.js.map} +0 -0
- /package/dist/{campaigns-7ZVVYTBM.js.map → campaigns-WLOJFSLV.js.map} +0 -0
- /package/dist/{canvas-UYRDIRPR.js.map → canvas-SEVIQRXN.js.map} +0 -0
- /package/dist/{capabilities-4KGVNK4Q.js.map → capabilities-KWJYBYQO.js.map} +0 -0
- /package/dist/{cards-CXKIVM4D.js.map → cards-OOKI2WSA.js.map} +0 -0
- /package/dist/{catalog-JICUCAJZ.js.map → catalog-DHTZDVWS.js.map} +0 -0
- /package/dist/{catalogs-G5NOKL4L.js.map → catalogs-R4QFA5XO.js.map} +0 -0
- /package/dist/{catalogs-4DNLG4AM.js.map → catalogs-WBXWK7NT.js.map} +0 -0
- /package/dist/{chatgpt-O6EEAYLF.js.map → chatgpt-MN4XHO6L.js.map} +0 -0
- /package/dist/{chats-JNL4L6GZ.js.map → chats-IBMO724I.js.map} +0 -0
- /package/dist/{check-EXT5WAYI.js.map → check-EZI4OF3Q.js.map} +0 -0
- /package/dist/{chunk-RIIMF75G.js.map → chunk-2VUD4CIW.js.map} +0 -0
- /package/dist/{chunk-IYDESWW4.js.map → chunk-2ZKQNMK2.js.map} +0 -0
- /package/dist/{chunk-KOKPQE4N.js.map → chunk-423G75A7.js.map} +0 -0
- /package/dist/{chunk-G4TPYA7F.js.map → chunk-4ZAHRAWL.js.map} +0 -0
- /package/dist/{chunk-FLTAPEVY.js.map → chunk-5IHZTLDH.js.map} +0 -0
- /package/dist/{chunk-J4AWNWKN.js.map → chunk-5WOZ7OGU.js.map} +0 -0
- /package/dist/{chunk-3WN5GWX4.js.map → chunk-62UGVR7Q.js.map} +0 -0
- /package/dist/{chunk-JQYB2DS3.js.map → chunk-66LUQENO.js.map} +0 -0
- /package/dist/{chunk-YQYCWYFJ.js.map → chunk-6J2UZJ6F.js.map} +0 -0
- /package/dist/{chunk-TLQY4QBW.js.map → chunk-6ZW5AR5N.js.map} +0 -0
- /package/dist/{chunk-C3XJ46C2.js.map → chunk-7EPR7L2D.js.map} +0 -0
- /package/dist/{chunk-EJ6EED6I.js.map → chunk-7XFQPPYB.js.map} +0 -0
- /package/dist/{chunk-BPDUE3MT.js.map → chunk-BJH2G3QF.js.map} +0 -0
- /package/dist/{chunk-BBS5VXLK.js.map → chunk-BZXIDMV7.js.map} +0 -0
- /package/dist/{chunk-X7USE7IA.js.map → chunk-C57NXUM2.js.map} +0 -0
- /package/dist/{chunk-DGHSXHZR.js.map → chunk-CGLNCFAG.js.map} +0 -0
- /package/dist/{chunk-YEQTBPEB.js.map → chunk-CNZ5KS4I.js.map} +0 -0
- /package/dist/{chunk-KGJ6EIX3.js.map → chunk-CP5IVVYM.js.map} +0 -0
- /package/dist/{chunk-A6LOIUWB.js.map → chunk-DAXBST7G.js.map} +0 -0
- /package/dist/{chunk-MKOI6QYM.js.map → chunk-DFE77XT5.js.map} +0 -0
- /package/dist/{chunk-SNVAE572.js.map → chunk-DI7M2JUA.js.map} +0 -0
- /package/dist/{chunk-6MJKVNLL.js.map → chunk-DN6EMVA4.js.map} +0 -0
- /package/dist/{chunk-Q736UFSD.js.map → chunk-E2G2USTA.js.map} +0 -0
- /package/dist/{chunk-ELFZ63XY.js.map → chunk-EA3643ET.js.map} +0 -0
- /package/dist/{chunk-OZNBVJGC.js.map → chunk-EBFKPGTL.js.map} +0 -0
- /package/dist/{chunk-CBVUO7SK.js.map → chunk-EFZVDV7F.js.map} +0 -0
- /package/dist/{chunk-WEBWXSFF.js.map → chunk-ETHUDFUY.js.map} +0 -0
- /package/dist/{chunk-YJEG6TQ3.js.map → chunk-EZ3YSJTP.js.map} +0 -0
- /package/dist/{chunk-S36WWACM.js.map → chunk-G6CLJ3WL.js.map} +0 -0
- /package/dist/{chunk-WTPID22G.js.map → chunk-HJS6FPQX.js.map} +0 -0
- /package/dist/{chunk-3QNSGFE2.js.map → chunk-HXHGDFXA.js.map} +0 -0
- /package/dist/{chunk-BIBXZJZI.js.map → chunk-HZ7QUFUW.js.map} +0 -0
- /package/dist/{chunk-FE2MFNVT.js.map → chunk-IEUF733F.js.map} +0 -0
- /package/dist/{chunk-VZIYTP3X.js.map → chunk-IEX4RRHJ.js.map} +0 -0
- /package/dist/{chunk-RRKUXGAU.js.map → chunk-ITABNSX6.js.map} +0 -0
- /package/dist/{chunk-LAMSUL26.js.map → chunk-J7L457MF.js.map} +0 -0
- /package/dist/{chunk-LJEJCIHR.js.map → chunk-JCFZ7ECN.js.map} +0 -0
- /package/dist/{chunk-3QLGV4XN.js.map → chunk-JFWTQDZL.js.map} +0 -0
- /package/dist/{chunk-XY7W6MQN.js.map → chunk-JGMQD3PX.js.map} +0 -0
- /package/dist/{chunk-6D7WTUF3.js.map → chunk-JTAPNHW5.js.map} +0 -0
- /package/dist/{chunk-NI5R6Y24.js.map → chunk-K2DKQ52D.js.map} +0 -0
- /package/dist/{chunk-SHYUXLE5.js.map → chunk-K3VMHRLJ.js.map} +0 -0
- /package/dist/{chunk-H6ASYVQX.js.map → chunk-KMZ4YWS4.js.map} +0 -0
- /package/dist/{chunk-CC42TKFH.js.map → chunk-LBPJDFFN.js.map} +0 -0
- /package/dist/{chunk-UZVFXGMS.js.map → chunk-LNRYMWXE.js.map} +0 -0
- /package/dist/{chunk-JLAFNORO.js.map → chunk-LY7PDE76.js.map} +0 -0
- /package/dist/{chunk-4AO3LSYM.js.map → chunk-MGUEAG6W.js.map} +0 -0
- /package/dist/{chunk-V7EN5LFS.js.map → chunk-MIBOIXCP.js.map} +0 -0
- /package/dist/{chunk-URGXEDFV.js.map → chunk-MNFJQRUO.js.map} +0 -0
- /package/dist/{chunk-L7I47VGM.js.map → chunk-MUT2BPDM.js.map} +0 -0
- /package/dist/{chunk-AQRBEPZL.js.map → chunk-MWPM6HNV.js.map} +0 -0
- /package/dist/{chunk-DHF4FXWS.js.map → chunk-NE3AZ25Y.js.map} +0 -0
- /package/dist/{chunk-SIRRBWQ2.js.map → chunk-OFSUVUXT.js.map} +0 -0
- /package/dist/{chunk-M4KFO256.js.map → chunk-P6H6JZXO.js.map} +0 -0
- /package/dist/{chunk-7YXBMYSM.js.map → chunk-PEPLYJWK.js.map} +0 -0
- /package/dist/{chunk-WOHTTXLG.js.map → chunk-PK2U2ALQ.js.map} +0 -0
- /package/dist/{chunk-5LEIUG5H.js.map → chunk-PKSIPLMS.js.map} +0 -0
- /package/dist/{chunk-OEO2NSNC.js.map → chunk-QNY4IK3C.js.map} +0 -0
- /package/dist/{chunk-YHBMCP6C.js.map → chunk-RDIZCSTV.js.map} +0 -0
- /package/dist/{chunk-3GXHML4V.js.map → chunk-RM5JT6XF.js.map} +0 -0
- /package/dist/{chunk-3QPG2D27.js.map → chunk-ROWUTQFG.js.map} +0 -0
- /package/dist/{chunk-QGAUDVMR.js.map → chunk-RQ43VL2X.js.map} +0 -0
- /package/dist/{chunk-ZCGM7ZWM.js.map → chunk-RSABCQLI.js.map} +0 -0
- /package/dist/{chunk-F5VR6HSI.js.map → chunk-S4QGD7PV.js.map} +0 -0
- /package/dist/{chunk-5NMKNHJI.js.map → chunk-S7WFZYKP.js.map} +0 -0
- /package/dist/{chunk-CF5I4Q5M.js.map → chunk-SO7NANAH.js.map} +0 -0
- /package/dist/{chunk-CFF7VAOQ.js.map → chunk-SRMQCQ7T.js.map} +0 -0
- /package/dist/{chunk-JAME5NBT.js.map → chunk-SULQZX5W.js.map} +0 -0
- /package/dist/{chunk-Q3G4ZI2U.js.map → chunk-T4HIFVNK.js.map} +0 -0
- /package/dist/{chunk-V4HS5JRL.js.map → chunk-TBBAHTP3.js.map} +0 -0
- /package/dist/{chunk-O5VSYBUA.js.map → chunk-TJTCHTR4.js.map} +0 -0
- /package/dist/{chunk-YAMKCMAS.js.map → chunk-TUS2VOMZ.js.map} +0 -0
- /package/dist/{chunk-UK4XSLV2.js.map → chunk-U3LO5TDH.js.map} +0 -0
- /package/dist/{chunk-EM5R3BYC.js.map → chunk-U6EQMX3B.js.map} +0 -0
- /package/dist/{chunk-L4QEMWNJ.js.map → chunk-UDNN4POE.js.map} +0 -0
- /package/dist/{chunk-VCG3Q3O4.js.map → chunk-UECTXVAO.js.map} +0 -0
- /package/dist/{chunk-66LB37BF.js.map → chunk-UQTINFCP.js.map} +0 -0
- /package/dist/{chunk-RUMHZX5N.js.map → chunk-UUUYWBTR.js.map} +0 -0
- /package/dist/{chunk-H25GY4U4.js.map → chunk-UYVMINV2.js.map} +0 -0
- /package/dist/{chunk-S5S54J2K.js.map → chunk-VGJFNHSA.js.map} +0 -0
- /package/dist/{chunk-5QNW5PCM.js.map → chunk-VQOBDHZP.js.map} +0 -0
- /package/dist/{chunk-Q5XUFN2W.js.map → chunk-VRQ5HEVU.js.map} +0 -0
- /package/dist/{chunk-H423YXYY.js.map → chunk-VSHXHSIW.js.map} +0 -0
- /package/dist/{chunk-EDZDYB3C.js.map → chunk-VTLW24DM.js.map} +0 -0
- /package/dist/{chunk-7NBQQOCU.js.map → chunk-VVITBZKP.js.map} +0 -0
- /package/dist/{chunk-2CC4CPDT.js.map → chunk-WFTTF2MP.js.map} +0 -0
- /package/dist/{chunk-6EOWBGGW.js.map → chunk-XMIV53FM.js.map} +0 -0
- /package/dist/{chunk-DPOUS5DN.js.map → chunk-XNUUEUJB.js.map} +0 -0
- /package/dist/{chunk-2NOFIV6M.js.map → chunk-XYHAIEAF.js.map} +0 -0
- /package/dist/{chunk-AZIXX73C.js.map → chunk-YB2UVOAD.js.map} +0 -0
- /package/dist/{chunk-LYGZBNSC.js.map → chunk-YLHWZOW7.js.map} +0 -0
- /package/dist/{chunk-GRX3JXSR.js.map → chunk-YNWBIAXJ.js.map} +0 -0
- /package/dist/{chunk-YRWCXYWW.js.map → chunk-YT6YI47O.js.map} +0 -0
- /package/dist/{chunk-JYOP6YVT.js.map → chunk-YYYGUO2E.js.map} +0 -0
- /package/dist/{chunk-MIHY534L.js.map → chunk-Z6RTEOEY.js.map} +0 -0
- /package/dist/{chunk-5CH2JQCA.js.map → chunk-ZHQSXEJ2.js.map} +0 -0
- /package/dist/{cite-WCAOCOO5.js.map → cite-I5UV5SKS.js.map} +0 -0
- /package/dist/{claim-4LKB2Z6T.js.map → claim-JQCSXR4C.js.map} +0 -0
- /package/dist/{client-VCKP6WBR.js.map → client-DKZM6XTS.js.map} +0 -0
- /package/dist/{code-VXOTFGD2.js.map → code-D3J5FQCF.js.map} +0 -0
- /package/dist/{connect-IABMKFGA.js.map → companies-GHBIZKOK.js.map} +0 -0
- /package/dist/{company-C2Y7LY5H.js.map → company-KNCYMQIA.js.map} +0 -0
- /package/dist/{complete-MNN3PAZE.js.map → complete-V53XRNEQ.js.map} +0 -0
- /package/dist/{config-UR45YCIN.js.map → config-ACEF37UO.js.map} +0 -0
- /package/dist/{customers-GCM7WZII.js.map → connect-NUZQSIGL.js.map} +0 -0
- /package/dist/{content-EQQIKG5H.js.map → content-5RTSXURF.js.map} +0 -0
- /package/dist/{conversation-FETU4KTF.js.map → conversation-LBYO6ONM.js.map} +0 -0
- /package/dist/{conversion-report-33SG7SHU.js.map → conversion-report-SRHJGIMT.js.map} +0 -0
- /package/dist/{conversion-upload-command-DWIGVHQZ.js.map → conversion-upload-command-5EKILBP2.js.map} +0 -0
- /package/dist/{conversion-writes-XGGTBML5.js.map → conversion-writes-P5FDTA6Y.js.map} +0 -0
- /package/dist/{conversions-S3WIR5R4.js.map → conversions-BXCGFNRK.js.map} +0 -0
- /package/dist/{conversions-PPP4QK7U.js.map → conversions-WJBOEPOO.js.map} +0 -0
- /package/dist/{copy-writes-JVUX3YDL.js.map → copy-writes-ER5ZB5C4.js.map} +0 -0
- /package/dist/{countries-GRCU4IGM.js.map → countries-OJZQQYFT.js.map} +0 -0
- /package/dist/{create-A3ZIQVIH.js.map → create-3PNWKXLP.js.map} +0 -0
- /package/dist/{create-ESKBBBJX.js.map → create-6FZR7JZT.js.map} +0 -0
- /package/dist/{create-U2ITO4RV.js.map → create-QXJ3UEOT.js.map} +0 -0
- /package/dist/{create-VNYTZJ4T.js.map → create-XO7HUNPB.js.map} +0 -0
- /package/dist/{creatives-WSCRC5GO.js.map → creatives-O6TA2DOG.js.map} +0 -0
- /package/dist/{creatives-XO5E4AIC.js.map → creatives-YRYPXOCS.js.map} +0 -0
- /package/dist/{creatives-4EPM3RHG.js.map → creatives-ZGXH7UA7.js.map} +0 -0
- /package/dist/{credentials-ZV66ZUCK.js.map → credentials-ATAP54ZI.js.map} +0 -0
- /package/dist/{critique-X3433R5M.js.map → critique-3UY7TUVQ.js.map} +0 -0
- /package/dist/{critique-ODWLA52C.js.map → critique-UC6SBKGO.js.map} +0 -0
- /package/dist/{crm-WPPM2R7I.js.map → crm-MGVGQ7PK.js.map} +0 -0
- /package/dist/{crop-NE7YX4SS.js.map → crop-SRCLDYM5.js.map} +0 -0
- /package/dist/{custom-conversions-GQTU5E6X.js.map → custom-conversions-RTSR3KKJ.js.map} +0 -0
- /package/dist/{env-NZXNMWSD.js.map → customers-7NBNJCDC.js.map} +0 -0
- /package/dist/{decide-6Q5X3V3F.js.map → decide-2WQKE6HC.js.map} +0 -0
- /package/dist/{delete-QHDDR66K.js.map → delete-DWQS7UCJ.js.map} +0 -0
- /package/dist/{delete-GAIV2YVD.js.map → delete-EKGTJSLK.js.map} +0 -0
- /package/dist/{delete-EKKOEB3N.js.map → delete-MJSASLP6.js.map} +0 -0
- /package/dist/{delete-SP66F7ZV.js.map → delete-N76JN5MP.js.map} +0 -0
- /package/dist/{delete-RVJLATPO.js.map → delete-OFG7FBMA.js.map} +0 -0
- /package/dist/{delete-VJ5QXKZR.js.map → delete-QQDGR7DD.js.map} +0 -0
- /package/dist/{demographics-XWIW3YJF.js.map → demographics-QWFAMEC2.js.map} +0 -0
- /package/dist/{describe-MAGTSOW4.js.map → describe-42XBBR6J.js.map} +0 -0
- /package/dist/{describe-DJPIUEFE.js.map → describe-TKOJMWML.js.map} +0 -0
- /package/dist/{dimensions-IC2H7V3H.js.map → dimensions-5OS26IF6.js.map} +0 -0
- /package/dist/{discard-TWX2CQF5.js.map → discard-4VW3AWI3.js.map} +0 -0
- /package/dist/{discover-PSL2NBJL.js.map → discover-IDC6PQV2.js.map} +0 -0
- /package/dist/{domain-FE32BE2E.js.map → domain-EDPDUVAX.js.map} +0 -0
- /package/dist/{download-5FYHTIGR.js.map → download-46GLVBYU.js.map} +0 -0
- /package/dist/{download-EHDJXBAC.js.map → download-QH4VHDS6.js.map} +0 -0
- /package/dist/{draft-MWYKIZC4.js.map → draft-3MYPEBSF.js.map} +0 -0
- /package/dist/{draft-JESKGZ6O.js.map → draft-FJ55MZB4.js.map} +0 -0
- /package/dist/{draft-5VLO5UYZ.js.map → draft-IBR2W6GZ.js.map} +0 -0
- /package/dist/{draft-L2NXCIYT.js.map → draft-NCUQFRGS.js.map} +0 -0
- /package/dist/{draft-ZCP3MIV6.js.map → draft-RRUJU2ZR.js.map} +0 -0
- /package/dist/{draft-L757UIW5.js.map → draft-TJAD7P6W.js.map} +0 -0
- /package/dist/{draft-27NMTARB.js.map → draft-W7FYHKI2.js.map} +0 -0
- /package/dist/{fit-XLK5LDPS.js.map → env-AMOXYHCA.js.map} +0 -0
- /package/dist/{experiment-XAYSEYTU.js.map → experiment-TBLKWI2J.js.map} +0 -0
- /package/dist/{experiments-DVR7WBGQ.js.map → experiments-DUVO7C7A.js.map} +0 -0
- /package/dist/{export-W54UZ62P.js.map → export-AMOLHZB6.js.map} +0 -0
- /package/dist/{extract-JM6FAWAS.js.map → extract-WYNFE6TQ.js.map} +0 -0
- /package/dist/{facets-IEQJK5AW.js.map → facets-WTY6NOUV.js.map} +0 -0
- /package/dist/{favorites-Y6CT6NSQ.js.map → favorites-Z24QDACW.js.map} +0 -0
- /package/dist/{feed-35BRQPTH.js.map → feed-2XCJ2JIV.js.map} +0 -0
- /package/dist/{feedback-SSCN7LEP.js.map → feedback-57BP27NA.js.map} +0 -0
- /package/dist/{feedback-QUJ2V4WD.js.map → feedback-XDREGDOK.js.map} +0 -0
- /package/dist/{feedback-record-P6WK4UPP.js.map → feedback-record-HXSBLAZD.js.map} +0 -0
- /package/dist/{fetch-Q6BIDVN5.js.map → fetch-L27MLPXM.js.map} +0 -0
- /package/dist/{fetch-I6P72CDL.js.map → fetch-Z5MNAIQS.js.map} +0 -0
- /package/dist/{find-SVGRA7IA.js.map → find-XMISWVZT.js.map} +0 -0
- /package/dist/{fonts-GARRSRIB.js.map → fit-K3G7HIMK.js.map} +0 -0
- /package/dist/{flows-QVGZEYCH.js.map → flows-VJTWU3SU.js.map} +0 -0
- /package/dist/{follow-24QSDNAG.js.map → follow-542NYE76.js.map} +0 -0
- /package/dist/{follow-competitors-AG4E4XFA.js.map → follow-competitors-NZDLHP7P.js.map} +0 -0
- /package/dist/{following-YGM6TBK3.js.map → following-JTZZCSQX.js.map} +0 -0
- /package/dist/{ideas-22I7JTI7.js.map → fonts-SEMIVGXJ.js.map} +0 -0
- /package/dist/{forecast-GEYNZ5PQ.js.map → forecast-VODA7N3G.js.map} +0 -0
- /package/dist/{funding-WZNGXRLJ.js.map → funding-HKPP53U2.js.map} +0 -0
- /package/dist/{funnel-OABL4MLZ.js.map → funnel-BXJDMVMF.js.map} +0 -0
- /package/dist/{ga4-W3U5YTRT.js.map → ga4-MUIZN7ID.js.map} +0 -0
- /package/dist/{generate-Y4NJEYIH.js.map → generate-VCGSO7HI.js.map} +0 -0
- /package/dist/{get-GEUSRD5Y.js.map → get-3QLANJES.js.map} +0 -0
- /package/dist/{get-5SPNAIUQ.js.map → get-D5G2RNTR.js.map} +0 -0
- /package/dist/{get-RDGC3QA5.js.map → get-EASXXOQR.js.map} +0 -0
- /package/dist/{get-63KQ62KN.js.map → get-EN4UQI7R.js.map} +0 -0
- /package/dist/{get-JIZPYK3Z.js.map → get-G4UPOHVY.js.map} +0 -0
- /package/dist/{get-3MTAVNTP.js.map → get-GOXOADPY.js.map} +0 -0
- /package/dist/{get-TS2ZJDCQ.js.map → get-JUI3RVMT.js.map} +0 -0
- /package/dist/{get-YWDZYEAC.js.map → get-T7A3CTS2.js.map} +0 -0
- /package/dist/{gif-NP6EDGEE.js.map → gif-4KAQUYPX.js.map} +0 -0
- /package/dist/{google-32BCQC7C.js.map → google-ATEQHENA.js.map} +0 -0
- /package/dist/{google-ads-PCXGVHZV.js.map → google-ads-OUNSPGRQ.js.map} +0 -0
- /package/dist/{group-3DT4UYSR.js.map → group-4GYPBQMU.js.map} +0 -0
- /package/dist/{group-OEKKCFXT.js.map → group-GH5CSQKA.js.map} +0 -0
- /package/dist/{gsc-4FEFPFPB.js.map → gsc-3EIBYMON.js.map} +0 -0
- /package/dist/{history-J7ANCPWY.js.map → history-5OJVW2ZF.js.map} +0 -0
- /package/dist/{history-VKRYKQ4C.js.map → history-RQMCZQSC.js.map} +0 -0
- /package/dist/{history-NX67UIZ7.js.map → history-TDGBO76N.js.map} +0 -0
- /package/dist/{icon-43UJTGGE.js.map → icon-VYFLZ4FS.js.map} +0 -0
- /package/dist/{ingest-VXX2Y76C.js.map → ideas-B7RQXWHQ.js.map} +0 -0
- /package/dist/{images-3C4Y6RWL.js.map → images-Q45MP4Q2.js.map} +0 -0
- /package/dist/{improve-IMXQN6OD.js.map → improve-ZBPSMVFI.js.map} +0 -0
- /package/dist/{ingest-CFH2MPSF.js.map → ingest-6MMY4KDM.js.map} +0 -0
- /package/dist/{launches-L4EUROCJ.js.map → ingest-UMQQIINM.js.map} +0 -0
- /package/dist/{insights-BR3456EI.js.map → insights-2NWY4XJR.js.map} +0 -0
- /package/dist/{insights-3IPSEBYW.js.map → insights-WDHDMULM.js.map} +0 -0
- /package/dist/{inspect-LDXPOGGH.js.map → inspect-W2BIGA5F.js.map} +0 -0
- /package/dist/{inspiration-XZI5KCQW.js.map → inspiration-6FGGHV73.js.map} +0 -0
- /package/dist/{instant-experiences-2LKF7XVK.js.map → instant-experiences-YZYOLGBA.js.map} +0 -0
- /package/dist/{intent-ZM4K623V.js.map → intent-3S6SHAYC.js.map} +0 -0
- /package/dist/{job-GOX3KIKG.js.map → job-2XYPZRJ6.js.map} +0 -0
- /package/dist/{job-create-F2PQSN3C.js.map → job-create-BPUOBKXA.js.map} +0 -0
- /package/dist/{job-status-3FMA5D7T.js.map → job-status-HUDHF6BU.js.map} +0 -0
- /package/dist/{keep-23ZYMWPG.js.map → keep-XBYR2NII.js.map} +0 -0
- /package/dist/{keyword-gap-FAAF2I6V.js.map → keyword-gap-MGHKWE6A.js.map} +0 -0
- /package/dist/{keyword-metrics-E36SMZSP.js.map → keyword-metrics-6R5TSHCE.js.map} +0 -0
- /package/dist/{keywords-for-site-AWGWDXZA.js.map → keywords-for-site-EFBLFX6E.js.map} +0 -0
- /package/dist/{knowledge-7M7DSRF3.js.map → knowledge-ILQIN5FL.js.map} +0 -0
- /package/dist/{landing-PVTDVL22.js.map → landing-WC5FX3UP.js.map} +0 -0
- /package/dist/{landings-VNQ4VA2U.js.map → landings-GRJAJKHY.js.map} +0 -0
- /package/dist/{languages-2X22HXM3.js.map → languages-22VMY7JN.js.map} +0 -0
- /package/dist/{languages-ZGDTERIQ.js.map → languages-4J7JHZNB.js.map} +0 -0
- /package/dist/{logo-4LSFZ3ZO.js.map → launches-NUMSS7HP.js.map} +0 -0
- /package/dist/{layerize-6QHQMA7Q.js.map → layerize-TFRXRHVL.js.map} +0 -0
- /package/dist/{lead-routes-5TPFJEVH.js.map → lead-routes-D5ITHESC.js.map} +0 -0
- /package/dist/{leads-XC3C5HGC.js.map → leads-CBOQ5CNM.js.map} +0 -0
- /package/dist/{leads-4TLOH47R.js.map → leads-VEHYM23G.js.map} +0 -0
- /package/dist/{learn-NYRL53NQ.js.map → learn-ZUP35H3T.js.map} +0 -0
- /package/dist/{library-MNJC24E4.js.map → library-JB2UBSJ5.js.map} +0 -0
- /package/dist/{lighthouse-DJMAXFTD.js.map → lighthouse-EQZFYGFL.js.map} +0 -0
- /package/dist/{line-item-writes-LMSYCR6G.js.map → line-item-writes-W4UFIYEA.js.map} +0 -0
- /package/dist/{line-items-P24SOGVZ.js.map → line-items-SGCUJF3S.js.map} +0 -0
- /package/dist/{link-H3TTWJJO.js.map → link-KLJB7COB.js.map} +0 -0
- /package/dist/{linkedin-person-HKKIE32Q.js.map → linkedin-person-ECWP4XPE.js.map} +0 -0
- /package/dist/{list-2277GCPH.js.map → list-5BWNSHYO.js.map} +0 -0
- /package/dist/{list-WIXQXNKB.js.map → list-A363BF25.js.map} +0 -0
- /package/dist/{list-XK33NCSC.js.map → list-JARIB5LC.js.map} +0 -0
- /package/dist/{list-LC2GRYEI.js.map → list-PXEJMDB4.js.map} +0 -0
- /package/dist/{list-537S75BZ.js.map → list-RO4YLUFK.js.map} +0 -0
- /package/dist/{list-UCTFATXS.js.map → list-SVR5HBLA.js.map} +0 -0
- /package/dist/{list-Q52FPW3H.js.map → list-UD43QCLC.js.map} +0 -0
- /package/dist/{list-KHCFVTQU.js.map → list-XELB7UV2.js.map} +0 -0
- /package/dist/{list-V4PSDBLX.js.map → list-XPLMANXX.js.map} +0 -0
- /package/dist/{locations-WN6B3IJK.js.map → locations-KM4XY56A.js.map} +0 -0
- /package/dist/{locations-A65MFB7Q.js.map → locations-SNK2NDH3.js.map} +0 -0
- /package/dist/{log-SLYCPRCY.js.map → log-PMPOO42C.js.map} +0 -0
- /package/dist/{lookup-WIM5WR25.js.map → logo-KDGD6LRA.js.map} +0 -0
- /package/dist/{output-ELEO2Z6R.js.map → lookup-7HIPFF2U.js.map} +0 -0
- /package/dist/{make-HTCPU6HU.js.map → make-Q36WVKT3.js.map} +0 -0
- /package/dist/{map-237LQ5N5.js.map → map-DQ65PS65.js.map} +0 -0
- /package/dist/{mcp-GX5TOO7Y.js.map → mcp-XMFKYN3E.js.map} +0 -0
- /package/dist/{media-KKI3KWLR.js.map → media-6VI4PN4N.js.map} +0 -0
- /package/dist/{media-34I7UB7Z.js.map → media-WIFXVGKU.js.map} +0 -0
- /package/dist/{media-sources-ODNIS7A5.js.map → media-sources-HG524YO4.js.map} +0 -0
- /package/dist/{members-TYQKWR7Z.js.map → members-D4DI2IFH.js.map} +0 -0
- /package/dist/{meme-6NFYFQ7T.js.map → meme-I43AVLGS.js.map} +0 -0
- /package/dist/{normalize-G75RDSE4.js.map → normalize-5B5WIBV4.js.map} +0 -0
- /package/dist/{normalize-MDTMKLYO.js.map → normalize-XRVNJTML.js.map} +0 -0
- /package/dist/{options-MEADUZY3.js.map → options-HT27WLNS.js.map} +0 -0
- /package/dist/{organization-BXJSHRZG.js.map → organization-DYPTFZBA.js.map} +0 -0
- /package/dist/{performance-IGCOP5VH.js.map → output-W5J5RKRR.js.map} +0 -0
- /package/dist/{page-4X6IBUWG.js.map → page-KUDKDDLJ.js.map} +0 -0
- /package/dist/{page-photos-KNBLMFLN.js.map → page-photos-52S2XRIW.js.map} +0 -0
- /package/dist/{pages-7HW5YOZV.js.map → pages-RMTL3RCK.js.map} +0 -0
- /package/dist/{query-SAQADBM2.js.map → performance-2AQ34OPB.js.map} +0 -0
- /package/dist/{performance-CU65TLCB.js.map → performance-WE4LHJ2B.js.map} +0 -0
- /package/dist/{pinterest-KA6VFDM4.js.map → pinterest-GMNQ2AVG.js.map} +0 -0
- /package/dist/{pixels-U6UA662G.js.map → pixels-EWFDIDFA.js.map} +0 -0
- /package/dist/{pixels-D5HF24FI.js.map → pixels-YQJKJWAC.js.map} +0 -0
- /package/dist/{plan-XCA6R3HZ.js.map → plan-33F5F2OR.js.map} +0 -0
- /package/dist/{posts-ALGM6ONV.js.map → posts-MZFKWSZ6.js.map} +0 -0
- /package/dist/{preview-55TRUF4Q.js.map → preview-HWM6KHV5.js.map} +0 -0
- /package/dist/{preview-YQ6P5A53.js.map → preview-JYVRWRTT.js.map} +0 -0
- /package/dist/{profile-NHUPUCBR.js.map → profile-OYCGBQWF.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-X2CUNBU2.js.map → promoted-tweet-writes-HCVRPH45.js.map} +0 -0
- /package/dist/{promoted-tweets-G2NOW5OF.js.map → promoted-tweets-P56ZU6OK.js.map} +0 -0
- /package/dist/{properties-2ZXA5BPJ.js.map → properties-PMY3KKUU.js.map} +0 -0
- /package/dist/{publish-YPCXCU4P.js.map → publish-4VWZHRYO.js.map} +0 -0
- /package/dist/{query-DMWY3TDD.js.map → query-ALRSR5OF.js.map} +0 -0
- /package/dist/{reddit-XMAGZMD4.js.map → query-DK7WWCJJ.js.map} +0 -0
- /package/dist/{query-63CTX2PH.js.map → query-ZGGHOYOH.js.map} +0 -0
- /package/dist/{questionnaire-WHE42RD4.js.map → questionnaire-4AJFPLM2.js.map} +0 -0
- /package/dist/{read-NESEKULG.js.map → read-Z7BBSAEK.js.map} +0 -0
- /package/dist/{run-FN365AXZ.js.map → reddit-NSKYHSAC.js.map} +0 -0
- /package/dist/{refresh-QIK3CXLV.js.map → refresh-O3CLJX4O.js.map} +0 -0
- /package/dist/{refresh-ILDEPU5A.js.map → refresh-VE3UKLXX.js.map} +0 -0
- /package/dist/{release-O7KGD5MI.js.map → release-6TQQW4HB.js.map} +0 -0
- /package/dist/{relevant-pages-KTSODNNW.js.map → relevant-pages-B3ZFOGHQ.js.map} +0 -0
- /package/dist/{remove-7FAWM2H4.js.map → remove-R55VAM47.js.map} +0 -0
- /package/dist/{remove-NHE4UT7G.js.map → remove-VGEKRK34.js.map} +0 -0
- /package/dist/{reopen-4ZWEYNCI.js.map → reopen-S426N3OD.js.map} +0 -0
- /package/dist/{rerun-IDUKOW6Z.js.map → rerun-5KHANQR3.js.map} +0 -0
- /package/dist/{research-Y5MSZH6T.js.map → research-5REXCSSO.js.map} +0 -0
- /package/dist/{reset-YSDYSZ64.js.map → reset-5N2IVHFL.js.map} +0 -0
- /package/dist/{reset-4K7BXUY6.js.map → reset-D4NGVG35.js.map} +0 -0
- /package/dist/{resolve-DD6ES7GJ.js.map → resolve-V75JGD75.js.map} +0 -0
- /package/dist/{retry-PZTS6KMQ.js.map → retry-SB7EIJBA.js.map} +0 -0
- /package/dist/{retry-YAZ3JXYL.js.map → retry-WIKW6CGT.js.map} +0 -0
- /package/dist/{retry-failed-R5HPQ3KQ.js.map → retry-failed-GEORPC3E.js.map} +0 -0
- /package/dist/{revenue-PLJ46IYH.js.map → revenue-GZJU3XMD.js.map} +0 -0
- /package/dist/{rule-writes-QB4IWFCJ.js.map → rule-writes-DRZUEIV6.js.map} +0 -0
- /package/dist/{rules-FYVD2QBB.js.map → rules-BBALKNBK.js.map} +0 -0
- /package/dist/{rules-I4PL72J7.js.map → rules-WI6YKZA4.js.map} +0 -0
- /package/dist/{rules-add-EFD2YSLH.js.map → rules-add-JCRB4AJR.js.map} +0 -0
- /package/dist/{run-WCFKVQQQ.js.map → run-RDHTORWZ.js.map} +0 -0
- /package/dist/{search-XHSTUBDY.js.map → run-VVK23U5P.js.map} +0 -0
- /package/dist/{scaffold-ad-PI4IHOG5.js.map → scaffold-ad-QSVBY3XR.js.map} +0 -0
- /package/dist/{scaffold-static-ad-RDOCRFEP.js.map → scaffold-static-ad-64BZMUHP.js.map} +0 -0
- /package/dist/{scaffold-video-HPRYTHE6.js.map → scaffold-video-X27MRW7R.js.map} +0 -0
- /package/dist/{schedule-D7EDEM45.js.map → schedule-L5NVM4DN.js.map} +0 -0
- /package/dist/{schedule-NPZPVNSO.js.map → schedule-XHPIVUJ6.js.map} +0 -0
- /package/dist/{schema-Z43AJOJ4.js.map → schema-3IEI64TQ.js.map} +0 -0
- /package/dist/{schema-PMVRMIRU.js.map → schema-RDVJQ5VW.js.map} +0 -0
- /package/dist/{scrape-VL2RWSTW.js.map → scrape-YEZGRX2B.js.map} +0 -0
- /package/dist/{screenshot-Y6EEXS3Q.js.map → screenshot-6EBASY4U.js.map} +0 -0
- /package/dist/{search-JEXYEAPQ.js.map → search-BZLTII6V.js.map} +0 -0
- /package/dist/{search-L3GTZYRW.js.map → search-I7CCYBB5.js.map} +0 -0
- /package/dist/{search-TXBYKNQC.js.map → search-NA7DBOLW.js.map} +0 -0
- /package/dist/{search-CXC7N5XJ.js.map → search-RM4MN7KO.js.map} +0 -0
- /package/dist/{shared-4GGUIOF2.js.map → search-SNEFCCJX.js.map} +0 -0
- /package/dist/{search-BRANRGRU.js.map → search-VX5ATSCD.js.map} +0 -0
- /package/dist/{search-copy-FIPG7OCC.js.map → search-copy-S6JVQZLI.js.map} +0 -0
- /package/dist/{seeds-ADJKURNG.js.map → seeds-BIY565P3.js.map} +0 -0
- /package/dist/{select-CLDJE7VJ.js.map → select-NX3VHQTH.js.map} +0 -0
- /package/dist/{sends-RS4LWRAC.js.map → sends-7JKFJTRE.js.map} +0 -0
- /package/dist/{sequences-2RPKDKGQ.js.map → sequences-KZSNIELI.js.map} +0 -0
- /package/dist/{set-prompt-7VHSKVO6.js.map → set-prompt-QGEWZ3HD.js.map} +0 -0
- /package/dist/{setup-links-PAA7XYV5.js.map → setup-links-LIDZVTSU.js.map} +0 -0
- /package/dist/{sync-definition-L52PGD7B.js.map → shared-P5UDXZAG.js.map} +0 -0
- /package/dist/{shopify-VWIRGI6H.js.map → shopify-LZU3MCDG.js.map} +0 -0
- /package/dist/{site-Q3PMNJ2Z.js.map → site-CEO2V3BI.js.map} +0 -0
- /package/dist/{sitemaps-Z6IELTQV.js.map → sitemaps-WCARK2BM.js.map} +0 -0
- /package/dist/{sites-KLAKI2EY.js.map → sites-JQZ2ZC6W.js.map} +0 -0
- /package/dist/{skills-OJP36EVR.js.map → skills-V2FRLLOW.js.map} +0 -0
- /package/dist/{sources-4YHNM22P.js.map → sources-C7AQCP2Z.js.map} +0 -0
- /package/dist/{sources-BYMGSUPZ.js.map → sources-SIGZVORA.js.map} +0 -0
- /package/dist/{stats-MIMFX4R7.js.map → stats-W7CCPRTG.js.map} +0 -0
- /package/dist/{status-B2WRAPZO.js.map → status-NIG6OSAG.js.map} +0 -0
- /package/dist/{sticker-IREEEN7I.js.map → sticker-NDSJDIAK.js.map} +0 -0
- /package/dist/{stock-BOOSUS2C.js.map → stock-KY6BCN76.js.map} +0 -0
- /package/dist/{studies-YGYAH3JI.js.map → studies-4JOP2GQJ.js.map} +0 -0
- /package/dist/{studio-XLC37YGX.js.map → studio-VQFYNK5O.js.map} +0 -0
- /package/dist/{study-writes-UPGJB36A.js.map → study-writes-PMTRTUXP.js.map} +0 -0
- /package/dist/{suggest-5RTISDLI.js.map → suggest-F5GIJR4K.js.map} +0 -0
- /package/dist/{sync-2QIPZFSK.js.map → sync-3RS5E5ZI.js.map} +0 -0
- /package/dist/{sync-VCAFAYW4.js.map → sync-IDULIJUZ.js.map} +0 -0
- /package/dist/{sync-OHIXI4I6.js.map → sync-STPHWKTE.js.map} +0 -0
- /package/dist/{viewer-check-XZYL55G6.js.map → sync-definition-VHYZWLS5.js.map} +0 -0
- /package/dist/{tag-DSCUKNC3.js.map → tag-MMY3QT2N.js.map} +0 -0
- /package/dist/{tag-manager-IINALUEJ.js.map → tag-manager-JDGWAHCZ.js.map} +0 -0
- /package/dist/{tags-DF6JNSNA.js.map → tags-F6DBHGIL.js.map} +0 -0
- /package/dist/{tags-SWP4MXQO.js.map → tags-HGKEOIR7.js.map} +0 -0
- /package/dist/{tags-XYQUPA6M.js.map → tags-I2LINXA7.js.map} +0 -0
- /package/dist/{tags-AIE4XEU2.js.map → tags-UM6Y4DVQ.js.map} +0 -0
- /package/dist/{tags-VXHV4JWM.js.map → tags-YCBZVXJQ.js.map} +0 -0
- /package/dist/{targeting-BM72UTI6.js.map → targeting-AVHPKERN.js.map} +0 -0
- /package/dist/{targeting-constants-54S3FXIF.js.map → targeting-constants-T7Y6RVEH.js.map} +0 -0
- /package/dist/{targeting-criteria-UYAEVSX3.js.map → targeting-criteria-XPK76HRH.js.map} +0 -0
- /package/dist/{targets-XFL7CE7N.js.map → targets-KT4BNTKZ.js.map} +0 -0
- /package/dist/{terms-OFHNLW6U.js.map → terms-ETG7YCJC.js.map} +0 -0
- /package/dist/{testimonials-DTCPATQ2.js.map → testimonials-QGXMSSWV.js.map} +0 -0
- /package/dist/{transcript-H7VSMOMV.js.map → transcript-OLF62WCH.js.map} +0 -0
- /package/dist/{translate-LCLG4NYR.js.map → translate-NON5ZD3S.js.map} +0 -0
- /package/dist/{triggers-HN3O2CNG.js.map → triggers-UOQY4RFC.js.map} +0 -0
- /package/dist/{tweets-TRTXC6O4.js.map → tweets-3H7CW3ZI.js.map} +0 -0
- /package/dist/{unfollow-DATOGPLZ.js.map → unfollow-PEEPIMZY.js.map} +0 -0
- /package/dist/{unlink-B5CD7ZW6.js.map → unlink-RNIJPHHW.js.map} +0 -0
- /package/dist/{unstage-LLQCMZ5H.js.map → unstage-GUPBLCPZ.js.map} +0 -0
- /package/dist/{unstage-34W4OU5D.js.map → unstage-QVDYVN77.js.map} +0 -0
- /package/dist/{update-3CKLLPYX.js.map → update-7KR5ABJP.js.map} +0 -0
- /package/dist/{update-6V2A4JGZ.js.map → update-JAUWIWOH.js.map} +0 -0
- /package/dist/{update-2OTR4JQV.js.map → update-QZEF5MUW.js.map} +0 -0
- /package/dist/{update-SD5YQIJC.js.map → update-TNOOVX3P.js.map} +0 -0
- /package/dist/{update-7FBCTLFP.js.map → update-TRWHYXF4.js.map} +0 -0
- /package/dist/{upload-72ARWDHN.js.map → upload-MLK2MZB6.js.map} +0 -0
- /package/dist/{upload-7PPMVWVA.js.map → upload-W2UTHRP2.js.map} +0 -0
- /package/dist/{upscale-WVJZG76V.js.map → upscale-MTWSJ3EJ.js.map} +0 -0
- /package/dist/{url-params-TAZ2S675.js.map → url-params-F4XNWPOD.js.map} +0 -0
- /package/dist/{use-6FADOAFZ.js.map → use-K5EP7JJM.js.map} +0 -0
- /package/dist/{validate-6F3JKVQV.js.map → validate-P3AQVXG6.js.map} +0 -0
- /package/dist/{variant-RNM36P4J.js.map → variant-BZCX46QL.js.map} +0 -0
- /package/dist/{videos-UCUYPQNK.js.map → videos-PAKAAFRD.js.map} +0 -0
- /package/dist/{videos-GHFCOTT7.js.map → videos-QIDOIJ24.js.map} +0 -0
- /package/dist/{view-YR6MDLWL.js.map → view-CD5UWMR4.js.map} +0 -0
- /package/dist/{web-YYXQXIH4.js.map → web-E5NHFG4Y.js.map} +0 -0
- /package/dist/{winners-4T5RFQXU.js.map → winners-CSNTBOVM.js.map} +0 -0
- /package/dist/{winning-ads-H3HCI5QT.js.map → winning-ads-P6PDTCCU.js.map} +0 -0
- /package/dist/{write-commands-UO3OQIHH.js.map → write-commands-AASXCKRN.js.map} +0 -0
- /package/dist/{write-commands-DS7WNSYA.js.map → write-commands-MBNO7DCX.js.map} +0 -0
- /package/dist/{write-commands-6D55SB56.js.map → write-commands-OV7RE6O2.js.map} +0 -0
- /package/dist/{write-commands-AIWLEGO2.js.map → write-commands-XFYXMTXO.js.map} +0 -0
- /package/dist/{x-K4N6QIH2.js.map → x-5A74OD5P.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/ads/google/draft-account.ts","../src/commands/ads/google/write-shared.ts","../src/commands/ads/google/copy-list-usage.ts","../src/commands/ads/google/draft-status.ts","../src/commands/ads/google/stage-streak.ts"],"sourcesContent":["import type { GoogleDraftListResponse } from \"@baker/api/ads-google\";\n\n/**\n * `--customer-id` on the draft reads. A draft belongs to the chat, not to an account, and may span\n * several; every other Google Ads command takes the flag, so agents carry it here (BAKER-497).\n * `list` narrows to that account and says what the others still hold; `validate` and `show` keep\n * their whole answer, because publish sends every account together and a ref names one op.\n */\n\nfunction changes(n: number, staged: boolean): string {\n const noun = staged ? \"staged change\" : \"change\";\n return n === 1 ? `1 ${noun}` : `${n} ${noun}s`;\n}\n\n/**\n * The draft as one account holds it, with what the rest of the chat's draft holds. `empty` is the\n * readable line for an account holding none of it, where the whole-chat \"nothing staged\" would be false.\n * Only an active draft's other changes are still to publish; a published one's are already done.\n */\nexport function draftInAccount(\n data: GoogleDraftListResponse,\n customerId: string,\n): { data: GoogleDraftListResponse; hints: string[]; empty?: string } {\n const ops = data.ops.filter((op) => op.customerId === customerId);\n const narrowed = {\n ...data,\n count: ops.length,\n ops,\n ...(data.tree ? { tree: data.tree.filter((node) => node.customerId === customerId) } : {}),\n };\n const others = data.ops.filter((op) => op.customerId !== customerId);\n if (others.length === 0) return { data: narrowed, hints: [] };\n const staged = data.status === \"active\";\n const accounts = [...new Set(others.map((op) => op.customerId))];\n const where = `account${accounts.length === 1 ? \"\" : \"s\"} ${accounts.join(\", \")}`;\n const one = others.length === 1;\n if (ops.length === 0) {\n return {\n data: narrowed,\n empty: `No Google Ads changes in account ${customerId} on this chat.`,\n hints: [`This chat's ${changes(others.length, staged)} ${one ? \"is\" : \"are\"} in ${where}, not ${customerId}.`],\n };\n }\n const more = `${others.length} more ${staged ? \"staged \" : \"\"}change${one ? \"\" : \"s\"}`;\n const verb = staged ? (one ? \"publishes\" : \"publish\") : one ? \"is\" : \"are\";\n return {\n data: narrowed,\n hints: [\n `Showing account ${customerId} only. ${more} in ${where} ${verb} ${staged ? \"with this chat too\" : \"on this chat too\"}; \\`baker ads google draft list\\` without --customer-id shows ${one ? \"it\" : \"them\"}.`,\n ],\n };\n}\n\n/** `draft validate --customer-id`: said back, since the verdicts still cover every account. */\nexport function validateAccountHint(customerId: string): string {\n return `Validated this chat's whole draft, not only account ${customerId}: publish sends every account's changes together, so each verdict above counts.`;\n}\n\n/** `draft show --customer-id` naming another account than the op's own. */\nexport function showAccountHint(customerId: string, opCustomerId: string): string | undefined {\n return opCustomerId === customerId ? undefined : `This op is staged in account ${opCustomerId}, not ${customerId}.`;\n}\n","import { readFileSync } from \"node:fs\";\nimport {\n GOOGLE_DRAFT_BATCH_MAX,\n type GoogleDraftListResponse,\n type GoogleDraftStageBatchResponse,\n type GoogleDraftStageResponse,\n googleDraftOpInputSchema,\n OP_TOO_LARGE_FIX,\n OP_TOO_LARGE_MESSAGE_START,\n toMicros,\n} from \"@baker/api/ads-google\";\nimport { describeOpPayload } from \"@baker/api/capabilities\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../../client.ts\";\nimport { requireChatId, resolveChatId } from \"../../../env.ts\";\nimport { handleConnectionError, isNotConnectedError } from \"../../../error-handler.ts\";\nimport { repeatedValues } from \"../../../lib/repeatedFlags.ts\";\nimport { payloadArg } from \"../../../schemas.ts\";\nimport { payloadFix } from \"../../capabilities/fix.ts\";\nimport { booleanWordPositionalError } from \"../boolean-word-positional.ts\";\nimport { adCopyHints } from \"../copy-hints.ts\";\nimport { hintLines, withHints } from \"../hints.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { termsRefusalFix } from \"../terms-output.ts\";\nimport { copyListCountFix } from \"./copy-list-usage.ts\";\nimport { draftInAccount } from \"./draft-account.ts\";\nimport { renderDraftStatus } from \"./draft-status.ts\";\nimport { recordSingleStage } from \"./stage-streak.ts\";\n\n/**\n * Shared plumbing for the staged Google Ads write commands. Writes NEVER hit\n * the Google Ads API directly: every command stages an op against this chat's\n * draft (`/api/ads/google/draft/stage`), the dashboard shows it as a pending\n * Google Ads change, and the draft applies as one `GoogleAdsService.Mutate`\n * request per advertiser account when the chat is published. `--customer-id` is\n * required on every write — a draft may span several accounts, so nothing is\n * picked for you.\n */\n\nexport function failWriteValidation(message: string): never {\n writeJsonEnvelope({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\nexport function requireCustomerId(args: Record<string, unknown>): string {\n const raw = (args[\"customer-id\"] ?? args.customerId) as string | undefined;\n if (!raw || !/^\\d{10}$/.test(raw)) {\n failWriteValidation(\"pass --customer-id as the 10-digit Google Ads customer id (no dashes)\");\n }\n return raw;\n}\n\nexport function requireTarget(args: Record<string, unknown>, entity: string): string {\n // `--flag false` is refused, not documented: citty parses it as the flag set to TRUE plus a stray\n // positional nobody consumes, so on `conversions update --primary` it silently PROMOTES an action\n // into what every Maximize Conversions campaign bids toward. Caught here because this is the only\n // place on this surface that reads positionals, and every target-taking command goes through it.\n const booleanWord = booleanWordPositionalError(args, entity);\n if (booleanWord) {\n failWriteValidation(booleanWord);\n }\n const positional = Array.isArray(args._) ? args._[0] : undefined;\n const target = args.id ?? args.target ?? args.ref ?? positional;\n if (typeof target !== \"string\" || target.length === 0) {\n failWriteValidation(`pass the ${entity} resource name or id as the positional argument`);\n }\n return target;\n}\n\n/**\n * The targets a bulk status command was given: every positional (comma-separated ones split), plus\n * `--file` with one target per line (blank lines and `#` comments skipped), deduped in order. One\n * call then stages them all as one batch instead of one command per row.\n */\nexport function targetEntries(args: Record<string, unknown>, entity: string): string[] {\n const booleanWord = booleanWordPositionalError(args, entity);\n if (booleanWord) {\n failWriteValidation(booleanWord);\n }\n const positionals = Array.isArray(args._) ? args._.filter((v): v is string => typeof v === \"string\") : [];\n const raw = [...positionals.flatMap((v) => v.split(\",\")), ...rawFileEntries(args.file)]\n .map((v) => v.trim())\n .filter(Boolean);\n const targets = [...new Set(raw)];\n if (targets.length === 0) {\n failWriteValidation(`pass the ${entity} resource name(s) as positional arguments and/or --file (one per line)`);\n }\n if (targets.length > GOOGLE_DRAFT_BATCH_MAX) {\n failWriteValidation(`${targets.length} targets exceeds the batch limit of ${GOOGLE_DRAFT_BATCH_MAX} — split them`);\n }\n return targets;\n}\n\nexport function requireStringFlag(value: unknown, flag: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n failWriteValidation(`${flag} is required`);\n }\n return value;\n}\n\n/** Money flag in major currency units → micros. */\nexport function microsFlag(value: unknown, flag: string): number | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n const num = Number(value);\n if (Number.isNaN(num) || num <= 0) {\n failWriteValidation(`${flag} must be a positive amount (major currency units, e.g. 50 or 50.00)`);\n }\n return toMicros(num);\n}\n\n/** Split a comma-separated flag into trimmed non-empty values. */\nexport function listFlag(value: unknown): string[] | undefined {\n if (typeof value !== \"string\" || value.length === 0) {\n return undefined;\n }\n const items = value\n .split(\",\")\n .map((v) => v.trim())\n .filter(Boolean);\n return items.length > 0 ? items : undefined;\n}\n\nexport interface KeywordEntry {\n text: string;\n matchType: string;\n}\n\nconst MATCH_TYPES = new Set([\"EXACT\", \"PHRASE\", \"BROAD\"]);\n\n/**\n * One raw keyword entry → { text, matchType }. A trailing `:EXACT|:PHRASE|:BROAD`\n * suffix overrides the default match type; colons and commas aren't legal in Google\n * keyword text, so the syntax is unambiguous.\n */\nfunction parseKeywordEntry(raw: string, defaultMatch: string | undefined): KeywordEntry {\n const colon = raw.lastIndexOf(\":\");\n if (colon > 0) {\n const suffix = raw\n .slice(colon + 1)\n .trim()\n .toUpperCase();\n if (MATCH_TYPES.has(suffix)) {\n return { text: raw.slice(0, colon).trim(), matchType: suffix };\n }\n failWriteValidation(`\"${raw}\": \":${raw.slice(colon + 1)}\" is not a match type (EXACT | PHRASE | BROAD)`);\n }\n if (!defaultMatch) {\n failWriteValidation(`\"${raw}\" has no match type — add a :EXACT/:PHRASE/:BROAD suffix or pass --match-type`);\n }\n return { text: raw, matchType: defaultMatch };\n}\n\n/**\n * Raw --text value(s) → individual entries: repeated flags and comma-separated\n * both work. The repeats have to come off `rawArgs`, because citty parses a\n * repeated flag down to its last value alone.\n */\nfunction rawTextEntries(value: unknown, rawArgs: readonly string[] | undefined): string[] {\n return repeatedValues(rawArgs, \"text\", value)\n .flatMap((v) => v.split(\",\"))\n .map((v) => v.trim())\n .filter(Boolean);\n}\n\n/** Newline-separated keyword file: one `text[:MATCH_TYPE]` per line; blank lines and `#` comments skipped. */\nfunction rawFileEntries(path: unknown): string[] {\n return typeof path === \"string\" && path.length > 0 ? fileLines(path) : [];\n}\n\n/** A text file's entries: one per line, trimmed; blank lines and `#` comments skipped. */\nexport function fileLines(path: string): string[] {\n return readFileSync(path, \"utf8\")\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0 && !line.startsWith(\"#\"));\n}\n\n/**\n * The keyword batch a command was invoked with: comma-separated `--text` entries\n * (optional `:MATCH_TYPE` suffix each) plus `--file` lines, deduped, each falling\n * back to `--match-type`. One entry stages exactly like before; many stage as one batch.\n */\nexport function keywordEntries(args: Record<string, unknown>, rawArgs?: readonly string[]): KeywordEntry[] {\n const defaultMatch = typeof args[\"match-type\"] === \"string\" ? args[\"match-type\"].toUpperCase() : undefined;\n const raw = [...rawTextEntries(args.text, rawArgs), ...rawFileEntries(args.file)];\n if (raw.length === 0) {\n failWriteValidation(\"pass keywords via --text (comma-separated) and/or --file (one per line)\");\n }\n if (raw.length > GOOGLE_DRAFT_BATCH_MAX) {\n failWriteValidation(`${raw.length} keywords exceeds the batch limit of ${GOOGLE_DRAFT_BATCH_MAX}`);\n }\n const entries: KeywordEntry[] = [];\n const seen = new Set<string>();\n for (const item of raw) {\n const entry = parseKeywordEntry(item, defaultMatch);\n const key = JSON.stringify([entry.text, entry.matchType]);\n if (!seen.has(key)) {\n seen.add(key);\n entries.push(entry);\n }\n }\n return entries;\n}\n\n/**\n * The payloads behind `--file`: a path to a JSON file, or the JSON written inline. The file holds one\n * payload object, a JSON array of them, or JSON Lines (one object per line) — many payloads stage as\n * one batch, which is how a bulk change lands in one call instead of hundreds.\n *\n * Inline is here because every doc example already writes it that way — `packages/cli/README.md`\n * and the scaffold's `ads-google.md` both show `--file '{\"type\":\"image\",…}'` — while the arg only\n * ever read a path, so following the documentation answered with a raw ENOENT stack trace. Reading\n * a leading `{` or `[` as the payload makes those examples true rather than making the agent re-learn\n * the one shape that works.\n */\nexport function loadJsonPayloads(path: unknown): Array<Record<string, unknown>> {\n if (typeof path !== \"string\" || path.length === 0) {\n return [];\n }\n const inline = /^\\s*[[{]/.test(path);\n const source = inline ? \"inline JSON\" : path;\n const text = inline ? path : readFileSync(path, \"utf8\");\n return parsedPayloads(text, source).map((item, index, all) => {\n if (item === null || typeof item !== \"object\" || Array.isArray(item)) {\n failWriteValidation(\n all.length === 1 ? `${source} must contain a JSON object` : `${source}: item ${index} must be a JSON object`,\n );\n }\n return item as Record<string, unknown>;\n });\n}\n\n/** One JSON value (an array spreads into its items), else JSON Lines; the JSON error when neither parses. */\nfunction parsedPayloads(text: string, source: string): unknown[] {\n try {\n const parsed = JSON.parse(text) as unknown;\n return Array.isArray(parsed) ? parsed : [parsed];\n } catch (err) {\n if (!(err instanceof SyntaxError)) {\n throw err;\n }\n const lines = text.split(/\\r?\\n/).filter((line) => line.trim().length > 0);\n if (lines.length > 1) {\n return lines.map((line, index) => parseJsonLine(line, index, source));\n }\n failWriteValidation(`${source} is not valid JSON: ${err.message}`);\n }\n}\n\n/** One JSON Lines entry, or the line's own error naming where it is. */\nfunction parseJsonLine(line: string, index: number, source: string): unknown {\n try {\n return JSON.parse(line) as unknown;\n } catch (err) {\n return failWriteValidation(\n `${source} line ${index + 1} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n\n/** The ONE op payload behind `--file`, for commands that change a single entity. */\nexport function loadJsonFileArg(path: unknown): Record<string, unknown> {\n const payloads = loadJsonPayloads(path);\n if (payloads.length > 1) {\n failWriteValidation(\n `this command changes one entity, and --file holds ${payloads.length} payloads — stage many changes from one file with \\`baker ads google draft stage --file\\` (one op per item: {\"kind\",\"customerId\",\"target\"?,\"payload\"?})`,\n );\n }\n return payloads[0] ?? {};\n}\n\n/** Flags override file keys — the file is the base, flags are the overrides. */\nexport function mergePayload(file: Record<string, unknown>, flags: Record<string, unknown>): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...file };\n for (const [key, value] of Object.entries(flags)) {\n if (value !== undefined) {\n merged[key] = value;\n }\n }\n return merged;\n}\n\n/**\n * The `draft amend` patch: exactly one of `--file <path>` (JSON file) or `--patch '<json>'`\n * (inline string), and it must parse to a JSON object — RFC-7386 merge-patch needs an object to\n * merge, and a stray array/scalar would silently no-op or replace the whole payload.\n */\nexport function loadPatchArg(args: Record<string, unknown>): Record<string, unknown> {\n const file = typeof args.file === \"string\" && args.file.length > 0 ? args.file : undefined;\n const inline = typeof args.patch === \"string\" && args.patch.length > 0 ? args.patch : undefined;\n if (Boolean(file) === Boolean(inline)) {\n failWriteValidation(\"pass exactly one of --file <patch.json> or --patch '<json>'\");\n }\n if (file) {\n return loadJsonFileArg(file);\n }\n try {\n const parsed = JSON.parse(inline as string) as unknown;\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n failWriteValidation(\"--patch must be a JSON object\");\n }\n return parsed as Record<string, unknown>;\n } catch (err) {\n if (err instanceof SyntaxError) {\n failWriteValidation(`--patch is not valid JSON: ${err.message}`);\n }\n throw err;\n }\n}\n\nexport function handleGoogleError(err: unknown): never {\n if (err instanceof ApiError) {\n // Covers both \"no connection\" and staging's 403 for an account this company\n // never connected — same remedy either way: connect, and pick the account.\n if (isNotConnectedError(err.code, err.message)) {\n handleConnectionError(\"google_ads\", err.message);\n }\n const terms = termsRefusalFix(err.code, err.message);\n if (terms) {\n writeJsonEnvelope({\n ok: false,\n error: { code: terms.code, message: err.message, retryable: false, fix: terms.fix },\n });\n process.exit(1);\n }\n if (err.message.includes(OP_TOO_LARGE_MESSAGE_START)) {\n writeJsonEnvelope({\n ok: false,\n error: {\n code: \"OP_TOO_LARGE\",\n message: err.message,\n retryable: false,\n fix: { action: \"split_the_change\", explanation: OP_TOO_LARGE_FIX },\n },\n });\n process.exit(1);\n }\n writeJsonEnvelope({ ok: false, error: { code: err.code ?? \"API_ERROR\", message: err.message } });\n process.exit(1);\n }\n writeJsonEnvelope({\n ok: false,\n error: { code: \"UNKNOWN\", message: err instanceof Error ? err.message : String(err) },\n });\n process.exit(1);\n}\n\ninterface StageEnvelope extends Record<string, unknown> {\n ok: true;\n data: GoogleDraftStageResponse;\n}\n\n/**\n * A no-op response isn't a failure — the change was already in place, so nothing was\n * staged. Say so explicitly, otherwise the agent re-stages it or reports work it\n * didn't do.\n */\nfunction noopHints(data: GoogleDraftStageResponse): string[] {\n return data.staged\n ? []\n : [`NOT STAGED — ${data.reason}. Nothing to publish for this change; say so rather than reporting it as done.`];\n}\n\n/**\n * What to tell the agent about the ops a batch didn't stage.\n *\n * Two different things land in `skipped`: a change already in place, and a change Google refuses\n * outright (editing an experiment campaign's status, dates or budget). This hint used to assert the\n * first — \"already in the requested state\" — which read as \"done\" for a refusal the user never heard\n * about. So it leads with each op's own reason and asks for the refusals to be passed on.\n */\nexport function skippedHints(skipped: Array<{ summary: string; reason: string }>, total: number): string[] {\n if (skipped.length === 0) {\n return [];\n }\n const detail = skipped.map((s) => `${s.summary} — ${s.reason}`).join(\"; \");\n return [\n `${skipped.length} of ${total} op(s) NOT STAGED: ${detail}. Don't re-stage them; tell the user which changes couldn't be made and why, then carry on with the rest.`,\n ];\n}\n\n/**\n * Preflight-validates the op against the shared `@baker/api/ads-google`\n * contract (the same schema the backend enforces), then stages it. Prints the\n * staged envelope — ref, mode (always `live`: publishing reaches the real\n * account), summary, warnings.\n */\nexport async function stageGoogleOp(raw: Record<string, unknown>, hints?: string[]): Promise<void> {\n const preflight = googleDraftOpInputSchema.safeParse(raw);\n if (!preflight.success) {\n const fields = preflight.error.issues.map((issue) => ({ path: issue.path.join(\".\"), message: issue.message }));\n writeJsonEnvelope({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: fields.map((f) => (f.path ? `${f.path}: ${f.message}` : f.message)).join(\"; \"),\n fields,\n fix: copyListCountFix(raw, preflight.error.issues) ?? payloadFix(\"google-ads\", googleDraftOpInputSchema, raw),\n },\n });\n process.exit(1);\n }\n try {\n const chatId = requireChatId();\n const response = await apiPost<StageEnvelope>(\"/api/ads/google/draft/stage\", { chatId, op: preflight.data });\n const allHints = [\n ...noopHints(response.data),\n ...recordSingleStage(chatId, preflight.data.kind),\n ...(hints ?? []),\n ...(await adCopyHints(preflight.data)),\n ];\n writeJsonEnvelope(withHints(response, allHints));\n } catch (err) {\n handleGoogleError(err);\n }\n}\n\n/** Stage a create op: `{ kind, customerId, payload }`. */\nexport async function stageCreate(\n kind: string,\n customerId: string,\n payload: Record<string, unknown>,\n hints?: string[],\n): Promise<void> {\n await stageGoogleOp({ kind, customerId, payload }, hints);\n}\n\ninterface StageBatchEnvelope extends Record<string, unknown> {\n ok: true;\n data: GoogleDraftStageBatchResponse;\n}\n\n/**\n * A batch reads every target's before-state and checks each op against the account, which for a few\n * hundred removals outlasts the default 60 s. Timing out early reported a batch as failed that went on\n * to stage, so a retry then collided with the ops it had already staged.\n */\nconst STAGE_BATCH_TIMEOUT_MS = 5 * 60_000;\n\n/**\n * Stage several ops as ONE request (`/stage-batch`) — all-or-nothing on the backend,\n * one rate-limit hit instead of one per keyword. A single op falls through to the\n * plain stage path so its envelope (and amend behavior) stays exactly as before.\n */\nexport async function stageGoogleOps(rawOps: Array<Record<string, unknown>>, hints?: string[]): Promise<void> {\n if (rawOps.length === 1 && rawOps[0]) {\n await stageGoogleOp(rawOps[0], hints);\n return;\n }\n const ops: unknown[] = [];\n for (const [index, raw] of rawOps.entries()) {\n const preflight = googleDraftOpInputSchema.safeParse(raw);\n if (!preflight.success) {\n const fields = preflight.error.issues.map((issue) => ({\n path: `ops[${index}].${issue.path.join(\".\")}`,\n message: issue.message,\n }));\n writeJsonEnvelope({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: fields.map((f) => `${f.path}: ${f.message}`).join(\"; \"),\n fields,\n fix: copyListCountFix(raw, preflight.error.issues) ?? payloadFix(\"google-ads\", googleDraftOpInputSchema, raw),\n },\n });\n process.exit(1);\n }\n ops.push(preflight.data);\n }\n try {\n const chatId = requireChatId();\n const response = await apiPost<StageBatchEnvelope>(\n \"/api/ads/google/draft/stage-batch\",\n { chatId, ops },\n { timeoutMs: STAGE_BATCH_TIMEOUT_MS },\n );\n const allHints = [\n ...skippedHints(response.data.skipped ?? [], ops.length),\n ...(hints ?? []),\n ...(await adCopyHints(ops)),\n ];\n writeJsonEnvelope(withHints(response, allHints));\n } catch (err) {\n handleGoogleError(err);\n }\n}\n\n/** Stage an update op: `{ kind, customerId, target, payload }`. */\nexport async function stageUpdate(\n kind: string,\n customerId: string,\n target: string,\n payload: Record<string, unknown>,\n hints?: string[],\n): Promise<void> {\n await stageGoogleOp({ kind, customerId, target, payload }, hints);\n}\n\n/** Stage a target-only op (pause/resume/remove/detach): `{ kind, customerId, target }`. */\nexport async function stageTarget(kind: string, customerId: string, target: string, hints?: string[]): Promise<void> {\n await stageGoogleOp({ kind, customerId, target }, hints);\n}\n\nexport async function draftAction(path: string, body: Record<string, unknown>, chat?: unknown): Promise<void> {\n try {\n const chatId = resolveChatId(chat);\n const response = await apiPost<Record<string, unknown>>(path, { chatId, ...body });\n writeJsonEnvelope(response);\n } catch (err) {\n handleGoogleError(err);\n }\n}\n\ninterface DraftListEnvelope extends Record<string, unknown> {\n ok: boolean;\n data?: GoogleDraftListResponse;\n}\n\n/**\n * List the staged draft. By default renders a readable campaign ▸ ad group ▸ ad status tree so the\n * agent can review everything it has staged at a glance; `--json` returns the raw envelope for tools,\n * and `--full` that envelope with every op's payload.\n */\nexport async function draftListAction(json: boolean, chat?: unknown, full = false, customerId?: string): Promise<void> {\n try {\n const chatId = resolveChatId(chat);\n const listed = await apiPost<DraftListEnvelope>(\"/api/ads/google/draft\", {\n chatId,\n ...(full ? { full: true } : {}),\n });\n const inAccount =\n customerId !== undefined && listed.ok && listed.data ? draftInAccount(listed.data, customerId) : undefined;\n const response = inAccount ? withHints({ ...listed, data: inAccount.data }, inAccount.hints) : listed;\n if (json || full || !response.ok || !response.data) {\n writeJsonEnvelope(response);\n return;\n }\n process.stdout.write(`${inAccount?.empty ?? renderDraftStatus(response.data)}${hintLines(response)}\\n`);\n } catch (err) {\n handleGoogleError(err);\n }\n}\n\nexport const customerIdArg = {\n \"customer-id\": { type: \"string\" as const, description: \"10-digit Google Ads customer id\" },\n};\n/** The entity a command changes, read by position the way `requireTarget` reads it — declared so --help shows it. */\nexport function targetArg(entity: string) {\n return {\n id: {\n type: \"positional\" as const,\n description: `The ${entity} to change: its id or resource name (customers/…)`,\n required: false,\n },\n };\n}\n\nconst PAYLOAD_FIELDS = \"run `baker schema` on this command for every field the payload takes\";\n\nfunction payloadShape(kind: string): () => string | undefined {\n return () => describeOpPayload(googleDraftOpInputSchema, kind);\n}\n\n/** `--file` for a command that stages one `kind` op; `baker schema` prints that op's payload shape. */\nexport function fileArg(kind: string) {\n return {\n file: payloadArg(\n {\n type: \"string\" as const,\n description: `The op payload: a JSON file path, or the JSON object inline (flags override it) — ${PAYLOAD_FIELDS}`,\n },\n payloadShape(kind),\n ),\n };\n}\n\n/** `--file` that stages one or many `kind` ops; `baker schema` prints that op's payload shape. */\nexport function fileBatchArg(kind: string) {\n return {\n file: payloadArg(\n {\n type: \"string\" as const,\n description: `The op payload: a JSON file path or inline JSON — one object, or a JSON array / JSON Lines of objects to stage many in one call (up to 500) — ${PAYLOAD_FIELDS}`,\n },\n payloadShape(kind),\n ),\n };\n}\n\n/** A create command whose payload is a JSON file or inline JSON — one object or an array staged as one batch. */\nexport function fileCreateCommand(\n name: string,\n kind: string,\n description: string,\n hints?: string[] | ((payload: Record<string, unknown>) => string[]),\n) {\n return defineCommand({\n meta: { name, description },\n args: { ...customerIdArg, ...fileBatchArg(kind) },\n run: async ({ args }) => {\n const customerId = requireCustomerId(args);\n const payloads = loadJsonPayloads(args.file);\n if (payloads.length === 0 || payloads.some((payload) => Object.keys(payload).length === 0)) {\n failWriteValidation(`${kind} needs --file with the op payload (one object, or a JSON array to stage many)`);\n }\n if (payloads.length > GOOGLE_DRAFT_BATCH_MAX) {\n failWriteValidation(\n `${payloads.length} payloads exceeds the batch limit of ${GOOGLE_DRAFT_BATCH_MAX} — split the file`,\n );\n }\n const payloadHints = [\n ...new Set(payloads.flatMap((payload) => (typeof hints === \"function\" ? hints(payload) : (hints ?? [])))),\n ];\n await stageGoogleOps(\n payloads.map((payload) => ({ kind, customerId, payload })),\n payloadHints,\n );\n },\n });\n}\n\n/**\n * `--bid-modifier` as a number, validated against the range Google actually accepts.\n *\n * Rejecting the (0, 0.1) gap here rather than at the backend is the point: 0 and 0.1 are a hundredth\n * apart in value and mean \"never serve\" versus \"bid a tenth\", so a typo between them is a real spend\n * decision, and the error should arrive before anything is staged.\n */\nexport function bidModifierFlag(value: unknown): number {\n if (value === undefined || value === null || value === \"\") {\n failWriteValidation(\n \"--bid-modifier is required: 1 for no adjustment, 1.25 to bid 25% more, 0.9 to bid 10% less, 0 to stop serving on a device\",\n );\n }\n const num = Number(value);\n if (Number.isNaN(num) || num < 0 || num > 10 || (num > 0 && num < 0.1)) {\n failWriteValidation(\"--bid-modifier must be 0 (stop serving on it) or between 0.1 and 10.0\");\n }\n return num;\n}\n","import type { z } from \"zod\";\n\n/** Appended to each copy flag's help, so `--help` and `baker schema` say how to pass a comma. */\nexport const AD_COPY_LIST_USAGE =\n \"repeat the flag once per item, or pass one comma-separated list and wrap an item that contains a comma in double quotes: '\\\"Fast, free quotes\\\",Book today'. A flag given once is read as a list, so a lone item with a comma needs its double quotes too: '\\\"Fast, free quotes\\\"'\";\n\n/** The op's copy-list fields, by the flag an agent passes them with. */\nconst COPY_LIST_FLAG: Readonly<Record<string, string>> = {\n headlines: \"--headlines\",\n descriptions: \"--descriptions\",\n longHeadlines: \"--long-headlines\",\n};\n\ninterface CountRefusal {\n flag: string;\n count: number | undefined;\n bound: string;\n tooMany: boolean;\n}\n\nfunction valueAt(root: unknown, path: readonly PropertyKey[]): unknown {\n let node = root;\n for (const key of path) {\n if (node === null || typeof node !== \"object\") return undefined;\n node = (node as Record<PropertyKey, unknown>)[key];\n }\n return node;\n}\n\nfunction countRefusal(op: unknown, issue: z.core.$ZodIssue): CountRefusal | undefined {\n if ((issue.code !== \"too_big\" && issue.code !== \"too_small\") || issue.origin !== \"array\") return undefined;\n const flag = COPY_LIST_FLAG[String(issue.path.at(-1))];\n if (!flag) return undefined;\n const value = valueAt(op, issue.path);\n const count = Array.isArray(value) ? value.length : undefined;\n return issue.code === \"too_big\"\n ? { flag, count, bound: `at most ${issue.maximum}`, tooMany: true }\n : { flag, count, bound: `at least ${issue.minimum}`, tooMany: false };\n}\n\n/**\n * The fix for a stage refused only for how many headlines, descriptions or long headlines it has.\n *\n * That is a limit on a field the agent named correctly, so the generic \"read `baker capabilities`,\n * do not guess another field name\" sent it through draft list, schema and --help before it saw the\n * cause. Too many items is usually copy cut at its commas — a flag given once is a comma-separated\n * list, so \"Rated 4,5/5\" becomes two items — which is why that case names the forms that keep a\n * comma. Undefined when anything else was refused too, so the capabilities pointer still covers it.\n */\nexport function copyListCountFix(\n op: unknown,\n issues: readonly z.core.$ZodIssue[],\n): { action: string; explanation: string } | undefined {\n const refusals = issues.map((issue) => countRefusal(op, issue));\n if (refusals.length === 0 || refusals.some((refusal) => refusal === undefined)) return undefined;\n const counted = refusals.filter((refusal): refusal is CountRefusal => refusal !== undefined);\n const limits = counted\n .map(({ flag, count, bound }) => `${flag} has ${count ?? \"the wrong number of\"} items; this ad takes ${bound}.`)\n .join(\" \");\n const commaCause = counted.some((refusal) => refusal.tooMany)\n ? ' If you meant fewer items, the copy was cut at its commas: a flag given once is read as a comma-separated list, so an item with a comma in it (\"Fast, free quotes\", a decimal like \"4,5/5\") becomes two. To keep a comma, ' +\n `${AD_COPY_LIST_USAGE} — or put the content in --file as JSON.`\n : \"\";\n return {\n action: \"fix_copy_list_count\",\n explanation: `${limits}${commaCause} ${commaCause ? \"Otherwise add\" : \"Add\"} or drop items to fit the limit, then stage again; the field names are right.`,\n };\n}\n","import type {\n GoogleDraftListResponse,\n GoogleDraftStatusCollection,\n GoogleDraftStatusNode,\n} from \"@baker/api/ads-google\";\n\n/**\n * Render the staged Google Ads draft as a readable campaign ▸ ad group ▸ ad tree — the CLI\n * counterpart to the dashboard's Google Ads tab, so an agent can review everything it has staged\n * with one command instead of reading raw JSON. 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: GoogleDraftStatusNode): string {\n const label = node.operation ? OPERATION_LABELS[node.operation] : undefined;\n if (label) {\n return label;\n }\n return node.existing ? \"on Google Ads\" : \"staged\";\n}\n\nfunction collectionLine(collection: GoogleDraftStatusCollection): 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 // Neither an add nor a remove — a member that stays in the set with a changed value (a device's\n // bid adjustment). Left out, a draft whose only criterion change is one printed no line at all.\n if ((collection.updated ?? 0) > 0) {\n parts.push(`~${collection.updated}`);\n }\n return parts.length > 0 ? `${collection.label}: ${parts.join(\", \")}` : undefined;\n}\n\n/**\n * Every advertiser account the tree touches. A draft may legitimately span\n * several, and a criterion id is derived from the keyword's text and match type\n * — so the same keyword carries the same id in every account. The account is\n * printed on each node once there is more than one, and left off when there is not.\n */\nfunction accountsInTree(nodes: readonly GoogleDraftStatusNode[]): Set<string> {\n const accounts = new Set<string>();\n const walk = (node: GoogleDraftStatusNode): void => {\n accounts.add(node.customerId);\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: GoogleDraftStatusNode, depth: number, lines: string[], showAccount: boolean): void {\n const indent = \" \".repeat(depth);\n const account = showAccount ? ` · account ${node.customerId}` : \"\";\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\nconst RESOURCE_ENTITIES = new Set([\n \"sharedSet\",\n \"biddingStrategy\",\n \"audience\",\n \"conversionAction\",\n \"label\",\n \"budget\",\n \"asset\",\n]);\n\nfunction renderSection(title: string, nodes: GoogleDraftStatusNode[], 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\nfunction renderAdvisories(data: GoogleDraftListResponse, lines: string[]): void {\n const advisories = data.advisories ?? [];\n // Every advisory is phrased as something to settle BEFORE publishing. On a published draft there\n // is nothing left to settle here, and printing them reads as work still outstanding on this chat.\n if (advisories.length === 0 || data.status === \"applied\") {\n return;\n }\n lines.push(\"\");\n // Two kinds of finding share this block: build-out nudges (\"this ad group has one ad\") and\n // whole-draft coherence findings (\"this campaign will report zero conversions\", \"two of your\n // campaigns bid on the same keyword\"). The coherence ones come first and cost money, so the\n // heading no longer frames the block as optional polish.\n lines.push(\"Advisories (non-blocking, checked across the whole draft — settle these before you publish)\");\n for (const advisory of advisories) {\n lines.push(` • ${advisory.message}`);\n }\n}\n\n/**\n * What the publish did, once there is a publish to report.\n *\n * A published Google Ads draft rendered exactly like a staged one — same count, every op still\n * reading \"Creating\" — so the surface `.claude/rules/cli-env.md` sends an agent to for the outcome\n * could not answer, and a failed op was invisible in the human output while sitting in the JSON\n * envelope the whole time. Found by publishing a BUSINESS_LOGO link that Google refused with\n * \"Customer is not verified\": the draft still read \"4 staged changes\". LinkedIn fixed the same\n * shape first; this is its counterpart.\n */\nfunction renderOutcome(data: GoogleDraftListResponse, 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(`Google 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 rather than left as\n // a number to go and look up.\n for (const op of data.ops) {\n const status = op.result?.status;\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: GoogleDraftListResponse): string {\n if (data.status === \"none\" || data.count === 0) {\n return \"No staged Google Ads changes on this chat.\";\n }\n const modeNote =\n data.mode === \"live\"\n ? \"Live — publishing writes directly to Google Ads.\"\n : \"Simulated — publishing completes the whole draft without calling Google Ads.\";\n const lines: string[] = [];\n if (data.status === \"applied\") {\n renderOutcome(data, lines);\n } else if (data.status === \"publishing\") {\n lines.push(`Google Ads — publishing ${data.count} change${data.count === 1 ? \"\" : \"s\"} · ${data.mode}`);\n } else {\n lines.push(`Google 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 \"Shared resources\",\n tree.filter((node) => RESOURCE_ENTITIES.has(node.entity)),\n lines,\n showAccount,\n );\n renderSection(\n \"Campaigns\",\n tree.filter((node) => node.entity === \"campaign\"),\n lines,\n showAccount,\n );\n const rest = tree.filter((node) => !RESOURCE_ENTITIES.has(node.entity) && node.entity !== \"campaign\");\n renderSection(\"Other\", rest, lines, showAccount);\n renderAdvisories(data, lines);\n\n return lines.join(\"\\n\");\n}\n","import { cacheGet, cacheSet } from \"../cache.ts\";\n\n/**\n * Bulk work done as a loop of single commands — one `keywords update` per keyword, one\n * `negative-keywords remove` per term — is one request, one rate-limit hit and one tool call per row;\n * production saw 1,284 of them. The CLI cannot see the loop from inside one call, so it remembers the\n * last few single stages per chat and, once the same kind repeats, says how to do the rest in one call.\n */\n\nexport interface StageStreak {\n kind: string;\n count: number;\n lastAt: number;\n}\n\n/** Singles further apart than this are separate decisions, not a loop. */\nconst STREAK_WINDOW_MS = 5 * 60_000;\n/** The streak length that reads as a loop. */\nconst STREAK_THRESHOLD = 5;\n\nexport function nextStageStreak(previous: StageStreak | undefined, kind: string, now: number): StageStreak {\n const continues = previous && previous.kind === kind && now - previous.lastAt <= STREAK_WINDOW_MS;\n return { kind, count: continues ? previous.count + 1 : 1, lastAt: now };\n}\n\n/** The one-call form of a kind, where a command has one beside `draft stage --file`. */\nconst BATCH_FORMS: Record<string, string> = {\n \"google.keyword.add\": \"`keywords add --file keywords.txt` (one term[:MATCH_TYPE] per line)\",\n \"google.keyword.update\":\n \"`keywords pause|resume <resource name> <resource name>…` (or --file, one per line) for status\",\n \"google.keyword.remove\": \"`draft stage --file` with one google.keyword.remove per target\",\n \"google.negativeKeyword.add\": \"`negative-keywords add --file terms.txt`\",\n \"google.sharedSetMember.add\": \"`keyword-lists add --file terms.txt`\",\n \"google.sharedSetMember.remove\": '`keyword-lists remove --list-ref <id> --text \"a,b,c\"`',\n};\n\nexport function stageStreakHints(streak: StageStreak): string[] {\n if (streak.count < STREAK_THRESHOLD) {\n return [];\n }\n const form = BATCH_FORMS[streak.kind];\n return [\n `LOOP: that is ${streak.count} ${streak.kind} ops staged one command at a time. Stop looping — put every remaining change in one file and stage them in ONE call: \\`baker ads google draft stage --file ops.json --customer-id <id>\\` (a JSON array of {\"kind\",\"target\"?,\"payload\"?}, up to 500, any mix of kinds)${form ? `, or ${form}` : \"\"}. Fix staged ops together with \\`draft amend --file\\`.`,\n ];\n}\n\nconst STREAK_CACHE = \"stage-streak\";\n\n/** Record one single stage on this chat and return the nudge it earns, if any. Never throws. */\nexport function recordSingleStage(chatId: string, kind: string): string[] {\n try {\n const streak = nextStageStreak(cacheGet<StageStreak>(STREAK_CACHE, chatId)?.data, kind, Date.now());\n cacheSet(STREAK_CACHE, chatId, streak, STREAK_WINDOW_MS);\n return stageStreakHints(streak);\n } catch {\n return [];\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-G4TPYA7F.js
DELETED
|
@@ -1,454 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MAX_VIDEO_INGEST_BYTES,
|
|
3
|
-
MAX_VIDEO_INGEST_SECONDS,
|
|
4
|
-
directDedupeKey,
|
|
5
|
-
downloadTimeoutMs,
|
|
6
|
-
isDirectMediaUrl,
|
|
7
|
-
isDrmProtected,
|
|
8
|
-
isRegionBlocked,
|
|
9
|
-
isToolingOrBlockFailure,
|
|
10
|
-
refuseByDuration,
|
|
11
|
-
resolveIngestSource,
|
|
12
|
-
worthDownloadingInstead
|
|
13
|
-
} from "./chunk-FKOECEVC.js";
|
|
14
|
-
import {
|
|
15
|
-
eachTarget,
|
|
16
|
-
failWith,
|
|
17
|
-
positionalTargets
|
|
18
|
-
} from "./chunk-4AO3LSYM.js";
|
|
19
|
-
import {
|
|
20
|
-
librarySaveHint
|
|
21
|
-
} from "./chunk-I7OJZ7QE.js";
|
|
22
|
-
import {
|
|
23
|
-
YtDlpError,
|
|
24
|
-
canonicalUrl,
|
|
25
|
-
durationSeconds,
|
|
26
|
-
isAudioOnly,
|
|
27
|
-
isVimeoAuthFailure,
|
|
28
|
-
probeYtDlp,
|
|
29
|
-
runYtDlp,
|
|
30
|
-
ytDlpBlockSignal
|
|
31
|
-
} from "./chunk-UK4XSLV2.js";
|
|
32
|
-
import {
|
|
33
|
-
videosIngestRequestSchema
|
|
34
|
-
} from "./chunk-5N77IAOT.js";
|
|
35
|
-
import {
|
|
36
|
-
ApiError,
|
|
37
|
-
apiPost
|
|
38
|
-
} from "./chunk-LJEJCIHR.js";
|
|
39
|
-
import {
|
|
40
|
-
captureVimeoCookie,
|
|
41
|
-
isProxyFailure
|
|
42
|
-
} from "./chunk-B64KJW5C.js";
|
|
43
|
-
import {
|
|
44
|
-
maskEnvelope,
|
|
45
|
-
registerSchema,
|
|
46
|
-
writeJson
|
|
47
|
-
} from "./chunk-NXNOXZGB.js";
|
|
48
|
-
|
|
49
|
-
// src/commands/videos/ingest.ts
|
|
50
|
-
import { mkdtemp, rm, stat } from "fs/promises";
|
|
51
|
-
import { tmpdir } from "os";
|
|
52
|
-
import path from "path";
|
|
53
|
-
import { defineCommand } from "citty";
|
|
54
|
-
|
|
55
|
-
// src/lib/streamUpload.ts
|
|
56
|
-
import { createHash } from "crypto";
|
|
57
|
-
import { createReadStream } from "fs";
|
|
58
|
-
import { Readable } from "stream";
|
|
59
|
-
import { pipeline } from "stream/promises";
|
|
60
|
-
async function hashFile(filePath) {
|
|
61
|
-
const hash = createHash("sha256");
|
|
62
|
-
await pipeline(createReadStream(filePath), hash);
|
|
63
|
-
return hash.digest("hex");
|
|
64
|
-
}
|
|
65
|
-
async function putFileStreamed(args) {
|
|
66
|
-
const body = Readable.toWeb(createReadStream(args.filePath));
|
|
67
|
-
return await fetch(args.putUrl, {
|
|
68
|
-
method: "PUT",
|
|
69
|
-
body,
|
|
70
|
-
headers: {
|
|
71
|
-
"Content-Type": args.contentType,
|
|
72
|
-
"Content-Length": String(args.sizeBytes)
|
|
73
|
-
},
|
|
74
|
-
duplex: "half"
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// src/commands/videos/ingest.ts
|
|
79
|
-
registerSchema({
|
|
80
|
-
command: "videos.ingest",
|
|
81
|
-
description: "Add videos to the library from URLs \u2014 direct files, or YouTube/TikTok/Vimeo pages. Several URLs run at once and return one row each.",
|
|
82
|
-
args: {
|
|
83
|
-
url: {
|
|
84
|
-
type: "string",
|
|
85
|
-
description: "Video URL (direct file or a watch/post page); pass several to add them at once",
|
|
86
|
-
required: true
|
|
87
|
-
},
|
|
88
|
-
source: { type: "string", description: "Provenance: url | youtube", required: false },
|
|
89
|
-
"external-id": { type: "string", description: "Provider asset id (deduped on)", required: false },
|
|
90
|
-
"external-url": { type: "string", description: "Canonical page URL", required: false },
|
|
91
|
-
download: {
|
|
92
|
-
type: "boolean",
|
|
93
|
-
description: "Force the download path instead of letting Baker fetch the URL directly",
|
|
94
|
-
required: false,
|
|
95
|
-
default: false
|
|
96
|
-
},
|
|
97
|
-
country: {
|
|
98
|
-
type: "string",
|
|
99
|
-
description: "Two-letter country to fetch from (e.g. US, DE, JP) \u2014 use when a video is blocked in your region",
|
|
100
|
-
required: false
|
|
101
|
-
},
|
|
102
|
-
context: {
|
|
103
|
-
type: "string",
|
|
104
|
-
description: "What you know that the video cannot show \u2014 the campaign, whether the person on camera is a real customer, what it is for. Highest-leverage flag here: it is what makes the clip findable later.",
|
|
105
|
-
required: false
|
|
106
|
-
},
|
|
107
|
-
"dry-run": { type: "boolean", description: "Preview the operation without executing", required: false },
|
|
108
|
-
fields: {
|
|
109
|
-
type: "string",
|
|
110
|
-
description: "Comma-separated field names to keep on each added video; failed URLs are always listed whole",
|
|
111
|
-
required: false
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
var ingestCommand = defineCommand({
|
|
116
|
-
meta: {
|
|
117
|
-
name: "ingest",
|
|
118
|
-
description: 'Add videos to the library from URLs. A direct file URL is handed straight to Baker, which fetches it. A page URL (YouTube, TikTok, Vimeo, Instagram) is downloaded here first, then uploaded \u2014 and a direct URL that Baker cannot fetch falls back to that same path automatically. Several URLs are added at once, so a list takes about as long as its slowest clip: pass them all in one call rather than looping.\n\nExamples:\n baker videos ingest https://www.youtube.com/watch?v=abc123\n baker videos ingest https://youtu.be/a https://youtu.be/b https://cdn.example.com/c.mp4 --context "Spring campaign testimonials"'
|
|
119
|
-
},
|
|
120
|
-
args: {
|
|
121
|
-
url: { type: "positional", description: "Video URL; pass several to add them at once", required: false },
|
|
122
|
-
source: { type: "string", description: "Provenance: url | youtube", required: false },
|
|
123
|
-
"external-id": { type: "string", description: "Provider asset id (one URL only)", required: false },
|
|
124
|
-
"external-url": { type: "string", description: "Canonical page URL (one URL only)", required: false },
|
|
125
|
-
download: { type: "boolean", description: "Force the download path", required: false, default: false },
|
|
126
|
-
country: { type: "string", description: "Two-letter country to fetch from, e.g. US", required: false },
|
|
127
|
-
context: {
|
|
128
|
-
type: "string",
|
|
129
|
-
description: "Context for the analysis \u2014 campaign, who is on camera, intended use (applies to every URL)",
|
|
130
|
-
required: false
|
|
131
|
-
},
|
|
132
|
-
"dry-run": { type: "boolean", description: "Preview without executing", required: false, default: false },
|
|
133
|
-
fields: { type: "string", description: "Comma-separated field names to keep on each added video", required: false }
|
|
134
|
-
},
|
|
135
|
-
run: ({ args }) => runVideoIngest({
|
|
136
|
-
urls: positionalTargets(args),
|
|
137
|
-
source: args.source,
|
|
138
|
-
externalId: args["external-id"],
|
|
139
|
-
externalUrl: args["external-url"],
|
|
140
|
-
forceDownload: args.download === true,
|
|
141
|
-
country: args.country,
|
|
142
|
-
context: args.context,
|
|
143
|
-
dryRun: args["dry-run"] === true,
|
|
144
|
-
fields: typeof args.fields === "string" && args.fields.length > 0 ? args.fields.split(",") : void 0
|
|
145
|
-
})
|
|
146
|
-
});
|
|
147
|
-
async function runVideoIngest(opts) {
|
|
148
|
-
const { urls } = opts;
|
|
149
|
-
if (urls.length === 0) {
|
|
150
|
-
failWith({ code: "VALIDATION_ERROR", message: "URL is required" });
|
|
151
|
-
}
|
|
152
|
-
if (urls.length > 1 && (opts.externalId || opts.externalUrl)) {
|
|
153
|
-
failWith({
|
|
154
|
-
code: "VALIDATION_ERROR",
|
|
155
|
-
message: "--external-id and --external-url name a single video, so they cannot be used with several URLs."
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
const country = opts.country?.trim() || void 0;
|
|
159
|
-
const plans = planIngests(opts);
|
|
160
|
-
if (opts.dryRun) {
|
|
161
|
-
const params = plans.map(({ args, direct }) => dryRunParams(args, direct, country));
|
|
162
|
-
writeJson({
|
|
163
|
-
ok: true,
|
|
164
|
-
dryRun: true,
|
|
165
|
-
operation: "videos.ingest",
|
|
166
|
-
params: params.length === 1 && params[0] ? params[0] : { items: params }
|
|
167
|
-
});
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
const byUrl = new Map(plans.map((plan) => [plan.args.url, plan]));
|
|
171
|
-
const outcomes = await eachTarget(
|
|
172
|
-
urls,
|
|
173
|
-
(url) => {
|
|
174
|
-
const plan = byUrl.get(url);
|
|
175
|
-
return ingestByRoute(plan.args, plan.direct, country);
|
|
176
|
-
},
|
|
177
|
-
ingestFailure
|
|
178
|
-
);
|
|
179
|
-
writeIngestOutcomes(outcomes, opts.fields);
|
|
180
|
-
}
|
|
181
|
-
function planIngests(opts) {
|
|
182
|
-
const plans = opts.urls.map((url) => {
|
|
183
|
-
const args = {
|
|
184
|
-
url,
|
|
185
|
-
source: resolveIngestSource(opts.source, url),
|
|
186
|
-
externalId: opts.externalId,
|
|
187
|
-
// Deliberately NOT pre-filled with the pasted URL. Doing so shadowed the
|
|
188
|
-
// canonical URL the probe resolves (`?? canonicalUrl(...)` below could never
|
|
189
|
-
// run), so the same video filed under a different `externalUrl` depending on
|
|
190
|
-
// whether the link was copied from a share sheet, a shorts page or the
|
|
191
|
-
// address bar. `downloadThenIngest` falls back to `args.url` when the probe
|
|
192
|
-
// resolves nothing, which is the value this used to hard-code.
|
|
193
|
-
externalUrl: opts.externalUrl,
|
|
194
|
-
descriptionContext: opts.context?.trim() || void 0
|
|
195
|
-
};
|
|
196
|
-
return { args, direct: !opts.forceDownload && isDirectMediaUrl(url) };
|
|
197
|
-
});
|
|
198
|
-
for (const { args } of plans) {
|
|
199
|
-
const validation = videosIngestRequestSchema.safeParse(args);
|
|
200
|
-
if (!validation.success) {
|
|
201
|
-
const problem = validation.error.issues[0];
|
|
202
|
-
const where = opts.urls.length > 1 ? `${args.url}: ` : "";
|
|
203
|
-
failWith({
|
|
204
|
-
code: "VALIDATION_ERROR",
|
|
205
|
-
message: problem ? `${where}${problem.path.join(".") || "request"}: ${problem.message}` : `${where}Invalid request`
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
return plans;
|
|
210
|
-
}
|
|
211
|
-
function savedVideoHints(outcomes) {
|
|
212
|
-
const saved = librarySaveHint(
|
|
213
|
-
"video library",
|
|
214
|
-
outcomes.flatMap((o) => o.ok && !o.data.deduped ? [o.data.videoId] : [])
|
|
215
|
-
);
|
|
216
|
-
return saved ? [saved] : [];
|
|
217
|
-
}
|
|
218
|
-
function writeIngestOutcomes(outcomes, fields) {
|
|
219
|
-
const [only] = outcomes;
|
|
220
|
-
const savedHints = savedVideoHints(outcomes);
|
|
221
|
-
if (outcomes.length === 1 && only) {
|
|
222
|
-
if (!only.ok) failWith(only.error);
|
|
223
|
-
if (!fields) {
|
|
224
|
-
const hints2 = [...ingestHints(only.data) ?? [], ...savedHints];
|
|
225
|
-
writeJson({ ok: true, data: only.data, ...hints2.length > 0 ? { hints: hints2 } : {} });
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
const shown2 = narrowed(only.data, fields);
|
|
229
|
-
writeJson({
|
|
230
|
-
ok: true,
|
|
231
|
-
data: shown2.data,
|
|
232
|
-
hints: [...ingestHints(only.data) ?? [], ...shown2.hints, ...savedHints]
|
|
233
|
-
});
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
const ingested = outcomes.flatMap((o) => o.ok ? [{ url: o.target, ...o.data }] : []);
|
|
237
|
-
const failed = outcomes.flatMap((o) => o.ok ? [] : [{ url: o.target, error: o.error }]);
|
|
238
|
-
const hints = ingested.flatMap((row) => (ingestHints(row) ?? []).map((hint) => `${row.url}: ${hint}`));
|
|
239
|
-
if (ingested.length === 0) {
|
|
240
|
-
writeJson({
|
|
241
|
-
ok: false,
|
|
242
|
-
error: {
|
|
243
|
-
code: "INGEST_FAILED",
|
|
244
|
-
message: `None of the ${outcomes.length} videos could be added: ${failed.map((f) => `${f.url} \u2014 ${f.error.message}`).join("; ")}`
|
|
245
|
-
},
|
|
246
|
-
hints: failed.flatMap((f) => f.error.fix ? [`${f.url}: ${f.error.fix}`] : [])
|
|
247
|
-
});
|
|
248
|
-
process.exit(1);
|
|
249
|
-
}
|
|
250
|
-
if (failed.length > 0) {
|
|
251
|
-
hints.push(
|
|
252
|
-
`${failed.length} of ${outcomes.length} could not be added \u2014 each one's reason and fix is in failed[]. The rest are in the library; carry on with them.`
|
|
253
|
-
);
|
|
254
|
-
}
|
|
255
|
-
const shown = fields ? narrowed(ingested, fields) : { data: ingested, hints: [] };
|
|
256
|
-
hints.push(...shown.hints, ...savedHints);
|
|
257
|
-
writeJson({ ok: true, data: { ingested: shown.data, failed }, ...hints.length > 0 ? { hints } : {} });
|
|
258
|
-
}
|
|
259
|
-
function narrowed(data, fields) {
|
|
260
|
-
const masked = maskEnvelope({ ok: true, data }, fields);
|
|
261
|
-
const hints = Array.isArray(masked.hints) ? masked.hints.filter((hint) => typeof hint === "string") : [];
|
|
262
|
-
return { data: masked.data, hints };
|
|
263
|
-
}
|
|
264
|
-
function ingestHints(data) {
|
|
265
|
-
if (data.reducedQuality !== true) return void 0;
|
|
266
|
-
return [
|
|
267
|
-
"Added, but at standard quality (360p): the site refused to release the full-quality file and this was the best it would hand over. Tell the user \u2014 the clip is in the library and usable, it is just not high-resolution. If they need the crisp version, ask them for the original file and use `baker videos upload <file>`."
|
|
268
|
-
];
|
|
269
|
-
}
|
|
270
|
-
function dryRunParams(args, direct, country) {
|
|
271
|
-
return {
|
|
272
|
-
url: args.url,
|
|
273
|
-
source: args.source,
|
|
274
|
-
// Known up front on the direct route, because it is derived from the URL
|
|
275
|
-
// alone. The download route's key comes from the probe, which a dry run
|
|
276
|
-
// does not perform, so there it stays null rather than becoming a guess.
|
|
277
|
-
externalId: args.externalId ?? (direct ? directDedupeKey(args.source, args.url) : null),
|
|
278
|
-
// A page URL's canonical form is only known after the probe, which a dry
|
|
279
|
-
// run does not perform — so this is null rather than a guess.
|
|
280
|
-
externalUrl: args.externalUrl ?? null,
|
|
281
|
-
direct,
|
|
282
|
-
country: country ?? null,
|
|
283
|
-
descriptionContext: args.descriptionContext ?? null
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
async function ingestByRoute(args, direct, country) {
|
|
287
|
-
if (!direct) {
|
|
288
|
-
return { ...await downloadThenIngest(args, country), via: "download" };
|
|
289
|
-
}
|
|
290
|
-
try {
|
|
291
|
-
const externalId = args.externalId ?? directDedupeKey(args.source, args.url);
|
|
292
|
-
return { ...await ingestUrl({ ...args, externalId }), via: "direct" };
|
|
293
|
-
} catch (err) {
|
|
294
|
-
if (!(err instanceof ApiError) || !worthDownloadingInstead(err.code)) throw err;
|
|
295
|
-
return { ...await downloadThenIngest(args, country), via: "download", fallbackFrom: err.message };
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
function ytDlpFailure(err) {
|
|
299
|
-
const detail = `${err.stderrTail} ${err.message}`;
|
|
300
|
-
if (isProxyFailure(ytDlpBlockSignal(detail))) {
|
|
301
|
-
return failure(
|
|
302
|
-
"Couldn't download that video: our connection to the internet was refused.",
|
|
303
|
-
"This is Baker's egress proxy, not the link \u2014 its credentials look wrong or expired. The link is probably fine. Report it; retrying won't help until the proxy is fixed."
|
|
304
|
-
);
|
|
305
|
-
}
|
|
306
|
-
if (isDrmProtected(detail)) {
|
|
307
|
-
return failure(
|
|
308
|
-
"That video is copy-protected, so it can't be added to the library.",
|
|
309
|
-
"The publisher encrypted this one against downloading. Nothing will change that \u2014 not retrying, not a different region. Ask whoever owns the video for the original file and add it with `baker videos upload <file>`."
|
|
310
|
-
);
|
|
311
|
-
}
|
|
312
|
-
if (isVimeoAuthFailure(detail)) {
|
|
313
|
-
return failure(
|
|
314
|
-
"Vimeo wouldn't hand over that video \u2014 Baker isn't signed in to Vimeo.",
|
|
315
|
-
"Vimeo now refuses anonymous downloads entirely, so this needs a signed-in session and the one Baker holds has either expired or was never set. Nothing is wrong with the link. Report it so the Vimeo cookie can be refreshed; meanwhile download the file and use `baker videos upload <file>`."
|
|
316
|
-
);
|
|
317
|
-
}
|
|
318
|
-
if (isRegionBlocked(detail)) {
|
|
319
|
-
return failure(
|
|
320
|
-
`That video isn't available in the region we're fetching from. ${err.stderrTail || err.message}`,
|
|
321
|
-
"Re-run with `--country <two-letter code>` for a country where the video plays \u2014 e.g. `--country US`. Pick the one the video belongs to (the uploader's country is the usual answer); each attempt costs a paid connection, so choose rather than work through the list."
|
|
322
|
-
);
|
|
323
|
-
}
|
|
324
|
-
return failure(
|
|
325
|
-
`Couldn't download that video. ${err.stderrTail || err.message}`,
|
|
326
|
-
isToolingOrBlockFailure(detail) ? "The site wouldn't hand over the video \u2014 usually the downloader being out of date against a site that changed, or the request being blocked. Retrying won't help, and the link is probably fine. Report it so the tool can be updated; meanwhile download the file and use `baker videos upload <file>`." : "Check the link is public and playable. Private or age-restricted videos can't be downloaded \u2014 download the file yourself and use `baker videos upload <file>`."
|
|
327
|
-
);
|
|
328
|
-
}
|
|
329
|
-
function failure(message, fix, code = "INGEST_FAILED") {
|
|
330
|
-
return { code, message, fix };
|
|
331
|
-
}
|
|
332
|
-
function ingestFailure(err) {
|
|
333
|
-
if (err instanceof ApiError) return { code: err.code, message: err.message };
|
|
334
|
-
if (err instanceof YtDlpError) return ytDlpFailure(err);
|
|
335
|
-
const detail = err instanceof Error ? err.message : String(err);
|
|
336
|
-
if (detail.includes("timed out after")) {
|
|
337
|
-
return failure(
|
|
338
|
-
"That video took too long to download and was stopped part-way.",
|
|
339
|
-
"Long or slow-serving videos can outrun the download window. Try a shorter clip, or download this one yourself and use `baker videos upload <file>`.",
|
|
340
|
-
"INTERNAL_ERROR"
|
|
341
|
-
);
|
|
342
|
-
}
|
|
343
|
-
return failure(
|
|
344
|
-
`Couldn't add that video. ${detail}`,
|
|
345
|
-
"This is a fault on Baker's side, not a problem with the link. Report it.",
|
|
346
|
-
"INTERNAL_ERROR"
|
|
347
|
-
);
|
|
348
|
-
}
|
|
349
|
-
function dedupeKey(args, info) {
|
|
350
|
-
const id = typeof info.id === "string" ? info.id : void 0;
|
|
351
|
-
if (!id) return void 0;
|
|
352
|
-
if (info.extractor === "generic") return `${args.source}:${canonicalUrl(info) ?? args.url}`;
|
|
353
|
-
return `${args.source}:${id}`;
|
|
354
|
-
}
|
|
355
|
-
function ingestUrl(args) {
|
|
356
|
-
const body = {
|
|
357
|
-
url: args.url,
|
|
358
|
-
source: args.source
|
|
359
|
-
};
|
|
360
|
-
if (args.externalId) body.externalId = args.externalId;
|
|
361
|
-
if (args.externalUrl) body.externalUrl = args.externalUrl;
|
|
362
|
-
if (args.descriptionContext) body.descriptionContext = args.descriptionContext;
|
|
363
|
-
return apiPost("/api/videos/ingest", body);
|
|
364
|
-
}
|
|
365
|
-
async function downloadThenIngest(args, country) {
|
|
366
|
-
const vimeoCookie = captureVimeoCookie();
|
|
367
|
-
const workDir = await mkdtemp(path.join(tmpdir(), "videos-ingest-"));
|
|
368
|
-
try {
|
|
369
|
-
const probe = await probeYtDlp({ url: args.url, country, vimeoCookie, cookieDir: workDir });
|
|
370
|
-
if (isAudioOnly(probe.info)) {
|
|
371
|
-
throw new ApiError(
|
|
372
|
-
"VALIDATION_ERROR",
|
|
373
|
-
"That link is audio, not video, so it can't go in the video library. Music and podcast links have no picture to store."
|
|
374
|
-
);
|
|
375
|
-
}
|
|
376
|
-
const tooLong = refuseByDuration(durationSeconds(probe.info), MAX_VIDEO_INGEST_SECONDS);
|
|
377
|
-
if (tooLong) {
|
|
378
|
-
throw new ApiError("VALIDATION_ERROR", tooLong);
|
|
379
|
-
}
|
|
380
|
-
const externalId = args.externalId ?? dedupeKey(args, probe.info);
|
|
381
|
-
const { filePath, info, tier, reducedQuality } = await runYtDlp({
|
|
382
|
-
url: args.url,
|
|
383
|
-
audioOnly: false,
|
|
384
|
-
workDir,
|
|
385
|
-
// Deliberately uncapped: take the best the site will release and let Mux
|
|
386
|
-
// decide what to serve. The 1080p ceiling this replaces was reasoning
|
|
387
|
-
// about the wrong cost — it saved download bytes by throwing away source
|
|
388
|
-
// pixels *before* the one system that can make renditions from them ever
|
|
389
|
-
// saw them, so a 4K master became a 1080p master permanently, for
|
|
390
|
-
// everything the library is ever asked to do with that clip afterwards.
|
|
391
|
-
// Downscaling is Mux's job and it is cheap; re-acquiring a master is not.
|
|
392
|
-
country,
|
|
393
|
-
vimeoCookie,
|
|
394
|
-
// Budgeted from the probed length, so the duration we accept and the time
|
|
395
|
-
// we allow to fetch it cannot drift apart.
|
|
396
|
-
timeoutMs: downloadTimeoutMs(durationSeconds(probe.info))
|
|
397
|
-
});
|
|
398
|
-
const stats = await stat(filePath);
|
|
399
|
-
if (stats.size > MAX_VIDEO_INGEST_BYTES) {
|
|
400
|
-
throw new ApiError(
|
|
401
|
-
"VALIDATION_ERROR",
|
|
402
|
-
`That video is ${(stats.size / 1024 ** 3).toFixed(1)} GB, over the ${Math.round(MAX_VIDEO_INGEST_BYTES / 1024 ** 3)} GB limit for this route.`
|
|
403
|
-
);
|
|
404
|
-
}
|
|
405
|
-
const publicUrl = await uploadToAssetStore(filePath, stats.size);
|
|
406
|
-
return {
|
|
407
|
-
...await ingestUrl({
|
|
408
|
-
...args,
|
|
409
|
-
url: publicUrl,
|
|
410
|
-
externalId,
|
|
411
|
-
externalUrl: args.externalUrl ?? canonicalUrl(probe.info) ?? args.url
|
|
412
|
-
}),
|
|
413
|
-
egress: tier,
|
|
414
|
-
// Named in the result for the same reason `egress` is: a geo-targeted exit
|
|
415
|
-
// is a deliberate, billable choice and must not be invisible afterwards.
|
|
416
|
-
...country ? { country } : {},
|
|
417
|
-
// Third member of the same family. The site refused the good formats and
|
|
418
|
-
// the download quietly took the one it would release, which is the right
|
|
419
|
-
// call — but a clip that is 360p because of that must say so here, or the
|
|
420
|
-
// only way to find out is to watch it.
|
|
421
|
-
...reducedQuality ? { reducedQuality: true } : {},
|
|
422
|
-
// What the site released, so a clip that came in small is visible in the
|
|
423
|
-
// answer rather than after the marketer has already looked at it.
|
|
424
|
-
...downloadedResolution(info)
|
|
425
|
-
};
|
|
426
|
-
} finally {
|
|
427
|
-
await rm(workDir, { recursive: true, force: true }).catch(() => {
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
function downloadedResolution(info) {
|
|
432
|
-
const { width, height } = info;
|
|
433
|
-
return typeof width === "number" && typeof height === "number" ? { width, height } : {};
|
|
434
|
-
}
|
|
435
|
-
async function uploadToAssetStore(filePath, sizeBytes) {
|
|
436
|
-
const sha256 = await hashFile(filePath);
|
|
437
|
-
const { putUrl, publicUrl } = await apiPost("/api/canvas/assets/presign", {
|
|
438
|
-
sha256,
|
|
439
|
-
mime: "video/mp4",
|
|
440
|
-
purpose: "source"
|
|
441
|
-
});
|
|
442
|
-
const putRes = await putFileStreamed({ putUrl, filePath, contentType: "video/mp4", sizeBytes });
|
|
443
|
-
if (!putRes.ok) {
|
|
444
|
-
throw new ApiError("INTERNAL_ERROR", `Storing the downloaded video failed: HTTP ${putRes.status}`);
|
|
445
|
-
}
|
|
446
|
-
return publicUrl;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
export {
|
|
450
|
-
ingestCommand,
|
|
451
|
-
runVideoIngest,
|
|
452
|
-
ingestHints
|
|
453
|
-
};
|
|
454
|
-
//# sourceMappingURL=chunk-G4TPYA7F.js.map
|