@koda-sl/baker-cli 0.530.0 → 0.532.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -10
- package/dist/account-2UXZ6CZJ.js +82 -0
- package/dist/account-HQD5P3AF.js +139 -0
- package/dist/account-OWMJG4IW.js +82 -0
- package/dist/account-assets-JRMYVXQP.js +290 -0
- package/dist/account-level-PEGLZQTI.js +611 -0
- package/dist/account-reads-W2GAN335.js +219 -0
- package/dist/account-users-WLTQNPL7.js +64 -0
- package/dist/account-writes-TNADUSHW.js +68 -0
- package/dist/accounts-D3SQTZB7.js +701 -0
- package/dist/accounts-HRQFOTBJ.js +80 -0
- package/dist/accounts-MQMEOGQD.js +114 -0
- package/dist/accounts-T6SRCZJQ.js +76 -0
- package/dist/accounts-Y2VWI3AA.js +115 -0
- package/dist/actions-VJXED57L.js +55 -0
- package/dist/active-entities-BOMM4YDF.js +103 -0
- package/dist/activecampaign-TNJIQA4C.js +938 -0
- package/dist/activities-YH4K4JAI.js +75 -0
- package/dist/ad-group-writes-7BGCZA3M.js +172 -0
- package/dist/ad-groups-A6GU6EW5.js +70 -0
- package/dist/ad-writes-CEMCUDU2.js +176 -0
- package/dist/add-2L2VQ5MU.js +80 -0
- package/dist/add-DRTKSLEQ.js +107 -0
- package/dist/add-LBHISK44.js +305 -0
- package/dist/add-PS36Q2S3.js +97 -0
- package/dist/add-RLMXZLLO.js +148 -0
- package/dist/add-Z2OTFSQO.js +81 -0
- package/dist/add-accounts-GXBE4ZR2.js +91 -0
- package/dist/ads-4EVKVAMR.js +48 -0
- package/dist/ads-OY455VCX.js +79 -0
- package/dist/ads-WYQYZ44U.js +128 -0
- package/dist/ads-ZEF5AU3D.js +120 -0
- package/dist/adsets-ZRS7AZIK.js +182 -0
- package/dist/advertisers-AAGUUSAX.js +125 -0
- package/dist/advertisers-G6DZRBOK.js +123 -0
- package/dist/analytics-ANG42PKM.js +2437 -0
- package/dist/analytics-UI4AKUSF.js +447 -0
- package/dist/animate-KCSICY2N.js +480 -0
- package/dist/approved-LHYBVDXH.js +73 -0
- package/dist/asset-writes-CUF25BLM.js +50 -0
- package/dist/assign-5DFH6HBV.js +80 -0
- package/dist/audience-size-P6WIXOB3.js +76 -0
- package/dist/audience-writes-L7SNU2SB.js +327 -0
- package/dist/audiences-4ASLCNOF.js +280 -0
- package/dist/audiences-A54MU63W.js +86 -0
- package/dist/audiences-SG2BBM7R.js +85 -0
- package/dist/audit-6K5FFV6K.js +88 -0
- package/dist/audit-LA4BSLXV.js +154 -0
- package/dist/autocomplete-XMG6E7TG.js +114 -0
- package/dist/avatars-4IFN4GZD.js +38 -0
- package/dist/bid-pricing-JEOG2Q3L.js +103 -0
- package/dist/brand-C6HUAK74.js +22 -0
- package/dist/brief-5BCPPBU3.js +543 -0
- package/dist/businesses-GQ5FOZDU.js +54 -0
- package/dist/campaign-groups-IYQZSICZ.js +99 -0
- package/dist/campaign-writes-CVOOPZ35.js +176 -0
- package/dist/campaign-writes-YXI5UOPH.js +168 -0
- package/dist/campaigns-FW4WVD25.js +113 -0
- package/dist/campaigns-QMFHNG3N.js +111 -0
- package/dist/campaigns-TX37WHVL.js +78 -0
- package/dist/campaigns-VZJMYETG.js +130 -0
- package/dist/canvas-G4QXNPPE.js +46 -0
- package/dist/capabilities-7643Y2HU.js +147 -0
- package/dist/cards-YHZFJ3US.js +85 -0
- package/dist/catalog-PTVQSATT.js +65 -0
- package/dist/catalogs-YNIUP2AH.js +130 -0
- package/dist/catalogs-ZHCLH43A.js +781 -0
- package/dist/changes-QUKBZVB3.js +135 -0
- package/dist/chatgpt-TIUBMATF.js +47 -0
- package/dist/chats-BGLAG4Q7.js +279 -0
- package/dist/check-MN5ZQ7RX.js +107 -0
- package/dist/chunk-23KN4NL4.js +45 -0
- package/dist/chunk-2UJ5ABI6.js +604 -0
- package/dist/chunk-2XRFWXSA.js +103 -0
- package/dist/chunk-3JV4T6XW.js +69 -0
- package/dist/chunk-3OSBCYKA.js +8954 -0
- package/dist/chunk-3QQHPRRB.js +89 -0
- package/dist/chunk-3WTCMBDC.js +1518 -0
- package/dist/chunk-4BTUF2AV.js +69 -0
- package/dist/chunk-4D37LCBS.js +111 -0
- package/dist/chunk-4QITYZUH.js +163 -0
- package/dist/chunk-4XNF52NU.js +429 -0
- package/dist/chunk-4Y7IJ2PU.js +5368 -0
- package/dist/chunk-53BTYIMJ.js +91 -0
- package/dist/chunk-5ITB24SC.js +544 -0
- package/dist/chunk-5N47LB7X.js +285 -0
- package/dist/chunk-5UBFYJHF.js +170 -0
- package/dist/chunk-6CQOHJZW.js +125 -0
- package/dist/chunk-6OXENBTF.js +74 -0
- package/dist/chunk-6PMJU7IU.js +169 -0
- package/dist/chunk-7GGLZOQN.js +91 -0
- package/dist/chunk-7I65KXU7.js +98 -0
- package/dist/chunk-7JFVMJZI.js +207 -0
- package/dist/chunk-A6VODUO3.js +166 -0
- package/dist/chunk-AGTA5FJX.js +139 -0
- package/dist/chunk-AGU4KGT6.js +84 -0
- package/dist/chunk-BXUUKRMM.js +46 -0
- package/dist/chunk-BZTAEZLT.js +51 -0
- package/dist/chunk-C7IOSSI4.js +58 -0
- package/dist/chunk-CIW3Q7B2.js +229 -0
- package/dist/chunk-CJQ77HO5.js +1646 -0
- package/dist/chunk-CNPYG4F3.js +75 -0
- package/dist/chunk-COS3TPHX.js +377 -0
- package/dist/chunk-CQ6HBFOB.js +23 -0
- package/dist/chunk-D7Y3UNWO.js +66 -0
- package/dist/chunk-DJTWY7GL.js +942 -0
- package/dist/chunk-DWW5QSUF.js +638 -0
- package/dist/chunk-E34YYDCE.js +35 -0
- package/dist/chunk-ENUCJ6AO.js +148 -0
- package/dist/chunk-ES3PWGS3.js +438 -0
- package/dist/chunk-ES3PWGS3.js.map +1 -0
- package/dist/chunk-FESQ5TXU.js +42 -0
- package/dist/chunk-FEUKUZRA.js +106 -0
- package/dist/chunk-FJDSL4O5.js +910 -0
- package/dist/chunk-FSTDWVXG.js +455 -0
- package/dist/chunk-FUR7R4D7.js +249 -0
- package/dist/chunk-GYMZCJX6.js +97 -0
- package/dist/chunk-HTT7RBRC.js +846 -0
- package/dist/chunk-HZPTQRX6.js +2441 -0
- package/dist/chunk-HZPTQRX6.js.map +1 -0
- package/dist/chunk-IQWFJEA3.js +217 -0
- package/dist/chunk-IU5K42Q3.js +831 -0
- package/dist/chunk-JARRF5VX.js +66 -0
- package/dist/chunk-JEUFRIYS.js +297 -0
- package/dist/chunk-JNSRQQDP.js +94 -0
- package/dist/chunk-KGAI4E2I.js +106 -0
- package/dist/chunk-KITVYLEX.js +843 -0
- package/dist/chunk-L5VVKIMB.js +203 -0
- package/dist/chunk-L763CNKH.js +333 -0
- package/dist/chunk-LO2MZJJP.js +225 -0
- package/dist/chunk-LV7EU6HM.js +324 -0
- package/dist/chunk-LXZ5E6AC.js +84 -0
- package/dist/chunk-LZRZVIEJ.js +191 -0
- package/dist/chunk-M2MJ52HS.js +676 -0
- package/dist/chunk-MBSAHNMJ.js +547 -0
- package/dist/chunk-MCKYNFPH.js +219 -0
- package/dist/chunk-MHZIOOT5.js +197 -0
- package/dist/chunk-MNOCC5AL.js +207 -0
- package/dist/chunk-MUEJVDHI.js +200 -0
- package/dist/chunk-N6WHUUFH.js +19 -0
- package/dist/chunk-NA5Q473J.js +3868 -0
- package/dist/chunk-NCO5NGBN.js +74 -0
- package/dist/chunk-NLW25WW3.js +52 -0
- package/dist/chunk-NYAFSC5V.js +287 -0
- package/dist/chunk-O7AMKMII.js +215 -0
- package/dist/chunk-OL3QHART.js +188 -0
- package/dist/chunk-OPUEQSKM.js +122 -0
- package/dist/chunk-OXLB5M5M.js +592 -0
- package/dist/chunk-OXYWSVOJ.js +100 -0
- package/dist/chunk-PE4ZP7MX.js +8914 -0
- package/dist/chunk-PG5R35QY.js +73 -0
- package/dist/chunk-PG5R35QY.js.map +1 -0
- package/dist/chunk-PHZOMTI6.js +97 -0
- package/dist/chunk-PIAG4UJT.js +274 -0
- package/dist/chunk-PYWIHAVD.js +64 -0
- package/dist/chunk-QKNPF6ZD.js +24026 -0
- package/dist/chunk-QOBA6PHB.js +131 -0
- package/dist/chunk-QPPQXU3U.js +98 -0
- package/dist/chunk-QTKNS2U2.js +149 -0
- package/dist/chunk-QTLIXCVN.js +46 -0
- package/dist/chunk-R5LRBDEM.js +136 -0
- package/dist/chunk-RRC7F3QQ.js +1919 -0
- package/dist/chunk-SEYCF446.js +191 -0
- package/dist/chunk-SF52UGHZ.js +225 -0
- package/dist/chunk-SVNH6P7O.js +1744 -0
- package/dist/chunk-SWFZJROM.js +64 -0
- package/dist/chunk-UCNIJ2IW.js +494 -0
- package/dist/chunk-UFUYTWEF.js +344 -0
- package/dist/chunk-ULW4EWAA.js +39 -0
- package/dist/chunk-UROKPFIS.js +142 -0
- package/dist/chunk-VCOIFNYH.js +714 -0
- package/dist/chunk-VCOIFNYH.js.map +1 -0
- package/dist/chunk-VPF5A7CM.js +476 -0
- package/dist/chunk-VV6FDIP5.js +224 -0
- package/dist/chunk-WRTG3KXU.js +156 -0
- package/dist/chunk-XAW5GL6B.js +76 -0
- package/dist/chunk-XRNJRQ6Q.js +26 -0
- package/dist/chunk-Y5GQO6CR.js +56 -0
- package/dist/chunk-YE4RCEEJ.js +167 -0
- package/dist/chunk-YJYKSMLF.js +296 -0
- package/dist/chunk-YO54MA7R.js +275 -0
- package/dist/chunk-Z6T6VDDA.js +76 -0
- package/dist/chunk-ZOH672S6.js +25 -0
- package/dist/claim-2JNNC66N.js +200 -0
- package/dist/cli.js +45 -44
- package/dist/cli.js.map +1 -1
- package/dist/client-YUVT3RZN.js +19 -0
- package/dist/code-LOOWLRUL.js +76 -0
- package/dist/companies-4NJU5TLU.js +198 -0
- package/dist/company-QOYWS4W6.js +308 -0
- package/dist/complete-7FX2K3PV.js +84 -0
- package/dist/config-AOF6ACIP.js +88 -0
- package/dist/connect-H2HSPMRT.js +45 -0
- package/dist/content-NCW5IJFR.js +85 -0
- package/dist/conversation-4M7YMQOL.js +96 -0
- package/dist/conversion-report-G5JMZNYV.js +127 -0
- package/dist/conversion-upload-command-43PZFYT7.js +439 -0
- package/dist/conversion-writes-JQQCCGPO.js +122 -0
- package/dist/conversions-UO4CQNF6.js +78 -0
- package/dist/conversions-Z7FW7CFT.js +140 -0
- package/dist/copy-writes-ONVSSBLJ.js +170 -0
- package/dist/countries-Q6TA42P7.js +82 -0
- package/dist/create-4SFO4AQZ.js +62 -0
- package/dist/create-D5MA64KL.js +239 -0
- package/dist/create-GJ4ZMY3A.js +210 -0
- package/dist/create-QVY6DSYM.js +135 -0
- package/dist/creatives-ADH6HCCA.js +58 -0
- package/dist/creatives-R3XILT6D.js +223 -0
- package/dist/creatives-S3EZCXUT.js +89 -0
- package/dist/credentials-EQRB6XGZ.js +290 -0
- package/dist/critique-4YRRUNAU.js +1451 -0
- package/dist/critique-JCU2ATT6.js +232 -0
- package/dist/crm-AF6XOOSF.js +323 -0
- package/dist/crm-LSMFGR6R.js +227 -0
- package/dist/crop-RDP7YCNV.js +113 -0
- package/dist/currency-4KNOOZUU.js +88 -0
- package/dist/custom-conversions-7MZFTHUM.js +128 -0
- package/dist/customers-MM3VIZNA.js +59 -0
- package/dist/decide-OPCCKAIT.js +199 -0
- package/dist/delete-CO2YBPTI.js +67 -0
- package/dist/delete-D7HTW32U.js +57 -0
- package/dist/delete-GKQTDOZF.js +69 -0
- package/dist/delete-JUPBYK3H.js +69 -0
- package/dist/delete-KZFI235B.js +85 -0
- package/dist/delete-KZFI235B.js.map +1 -0
- package/dist/delete-R3LXCKA4.js +71 -0
- package/dist/demographics-DK5JDY6M.js +141 -0
- package/dist/describe-537PPL7P.js +97 -0
- package/dist/describe-GIG46DT5.js +97 -0
- package/dist/dimensions-UXK7DMTF.js +101 -0
- package/dist/discard-DEJOM62Y.js +69 -0
- package/dist/discover-MKFDG6NK.js +93 -0
- package/dist/discover-U6YLVLTF.js +172 -0
- package/dist/domain-MBOMV3CQ.js +101 -0
- package/dist/download-KN2I55SA.js +172 -0
- package/dist/download-PRBLR6IQ.js +299 -0
- package/dist/draft-BMNBT37B.js +283 -0
- package/dist/draft-CGPVRRKC.js +335 -0
- package/dist/draft-F74OIT5O.js +310 -0
- package/dist/draft-FIEZWBIX.js +308 -0
- package/dist/draft-H5RVDTFD.js +240 -0
- package/dist/draft-HZ5T6NOI.js +220 -0
- package/dist/draft-UMPCOCP6.js +100 -0
- package/dist/draft-XEUHTUMR.js +103 -0
- package/dist/engine/index.js +13 -13
- package/dist/env-VBSATLEF.js +53 -0
- package/dist/experiment-2XR6MBE2.js +1397 -0
- package/dist/experiments-YNJZCMQM.js +236 -0
- package/dist/export-YCLJG5YP.js +168 -0
- package/dist/extract-E3CMEN5U.js +113 -0
- package/dist/facets-Y4OACBMC.js +117 -0
- package/dist/favorites-NSQX6HKB.js +178 -0
- package/dist/feed-TKMMYAEH.js +177 -0
- package/dist/feedback-MORAVN52.js +111 -0
- package/dist/feedback-record-M3RB7H2C.js +265 -0
- package/dist/fetch-EHP2FK6Y.js +139 -0
- package/dist/fetch-XU6QVWMS.js +179 -0
- package/dist/find-I7U3THF3.js +143 -0
- package/dist/fit-IHUUFCGI.js +65 -0
- package/dist/flows-WSCIMXQX.js +250 -0
- package/dist/follow-A46RAJEX.js +94 -0
- package/dist/follow-competitors-VU2L3KWF.js +112 -0
- package/dist/following-UOUNSU6P.js +113 -0
- package/dist/fonts-3QW7EDHE.js +39 -0
- package/dist/forecast-2WVHMSZP.js +169 -0
- package/dist/forecast-F25LSCM5.js +121 -0
- package/dist/funding-2VROIMLS.js +85 -0
- package/dist/funnel-35DYDBJH.js +397 -0
- package/dist/ga4-ULHKTF23.js +55 -0
- package/dist/generate-Z7AROAES.js +263 -0
- package/dist/get-4CAX33L2.js +59 -0
- package/dist/get-5E4YJKPO.js +66 -0
- package/dist/get-5E4YJKPO.js.map +1 -0
- package/dist/get-ABQZJ2VQ.js +38 -0
- package/dist/get-ASAW6TVF.js +62 -0
- package/dist/get-ASAW6TVF.js.map +1 -0
- package/dist/get-GXVAJZHM.js +56 -0
- package/dist/get-GXVAJZHM.js.map +1 -0
- package/dist/get-IF7KHMSI.js +92 -0
- package/dist/get-N7X75ZJO.js +82 -0
- package/dist/get-ZISAHMTQ.js +59 -0
- package/dist/gif-QLNWBFAH.js +102 -0
- package/dist/google-FDR55RRD.js +136 -0
- package/dist/google-M6XR7YGT.js +3267 -0
- package/dist/google-ads-NCSMNNND.js +198 -0
- package/dist/group-HAQM6P7M.js +43 -0
- package/dist/group-XVDH2ONO.js +43 -0
- package/dist/gsc-72AFO6B4.js +30 -0
- package/dist/history-FGQ2H7XH.js +69 -0
- package/dist/history-LTOFKBMJ.js +136 -0
- package/dist/history-VJ254UXF.js +102 -0
- package/dist/hubspot-W2NM75YK.js +782 -0
- package/dist/icon-F7AOOTFI.js +137 -0
- package/dist/ideas-54KFDNDM.js +45 -0
- package/dist/images-JOEVCCP6.js +92 -0
- package/dist/improve-LIKOER3S.js +86 -0
- package/dist/ingest-6R7XUL46.js +27 -0
- package/dist/ingest-VCIH5QDR.js +123 -0
- package/dist/ingest-VCIH5QDR.js.map +1 -0
- package/dist/insights-QNE6XCBA.js +439 -0
- package/dist/insights-UXUUOQB7.js +132 -0
- package/dist/inspect-MGOR77FP.js +192 -0
- package/dist/inspiration-VXNGKAJV.js +53 -0
- package/dist/instant-experiences-MT2XMQNH.js +260 -0
- package/dist/intent-FZWPRUCI.js +95 -0
- package/dist/job-TS34W4IU.js +202 -0
- package/dist/job-create-FXXDR2EE.js +109 -0
- package/dist/job-status-R2H4HNC5.js +74 -0
- package/dist/keep-YSU3XMW3.js +78 -0
- package/dist/keyword-gap-4ECYPWXJ.js +130 -0
- package/dist/keyword-metrics-SBIRN5KC.js +200 -0
- package/dist/keywords-for-site-TLNPJHT2.js +131 -0
- package/dist/knowledge-L3VLOVLG.js +195 -0
- package/dist/knowledge-L3VLOVLG.js.map +1 -0
- package/dist/landing-ZICSVWKF.js +28 -0
- package/dist/landings-XTPNPTHN.js +151 -0
- package/dist/languages-DIKRMAYE.js +55 -0
- package/dist/languages-VNZQ5USL.js +40 -0
- package/dist/launches-5R7EUONQ.js +19 -0
- package/dist/layerize-Q2QWDARG.js +190 -0
- package/dist/lead-routes-IXUCGINI.js +733 -0
- package/dist/leads-JUQFNK55.js +115 -0
- package/dist/leads-UVG6VYAC.js +540 -0
- package/dist/learn-A6BT25LQ.js +207 -0
- package/dist/library-G5YAFLTR.js +211 -0
- package/dist/lighthouse-BCBV2XGP.js +75 -0
- package/dist/line-item-writes-NW7A6HNH.js +211 -0
- package/dist/line-items-OAG3QMDE.js +107 -0
- package/dist/link-4VJ7FSOA.js +67 -0
- package/dist/linkedin-CKOWKD4M.js +1328 -0
- package/dist/linkedin-person-C22IDK7S.js +139 -0
- package/dist/list-2DKLO6AO.js +67 -0
- package/dist/list-4SDJZVOL.js +93 -0
- package/dist/list-6YW4I4VG.js +65 -0
- package/dist/list-CDDXHMJQ.js +306 -0
- package/dist/list-GS42LK5C.js +51 -0
- package/dist/list-HWNHRWGB.js +57 -0
- package/dist/list-QSBEYU45.js +76 -0
- package/dist/list-ZFGOONWL.js +50 -0
- package/dist/list-ZORO7PFP.js +154 -0
- package/dist/locations-4RDUHKVR.js +69 -0
- package/dist/locations-HATR6PSC.js +40 -0
- package/dist/log-OSJHKHPV.js +95 -0
- package/dist/logo-ABO4HJRG.js +18 -0
- package/dist/lookup-SPNT3W3W.js +23 -0
- package/dist/make-7CIVNW77.js +1366 -0
- package/dist/map-PMGZDXAN.js +436 -0
- package/dist/mcp-MOOOTRYG.js +729 -0
- package/dist/media-CIJW2Q3I.js +89 -0
- package/dist/media-GZKW2PZB.js +18 -0
- package/dist/media-sources-5OYCKQ5J.js +35 -0
- package/dist/members-QG5IP5HM.js +47 -0
- package/dist/meme-BPWX7YQH.js +100 -0
- package/dist/meta-KVOSCSPJ.js +122 -0
- package/dist/metrics-R4YS2JL6.js +152 -0
- package/dist/models-RJMZV5SH.js +155 -0
- package/dist/normalize-LATTXSL3.js +144 -0
- package/dist/normalize-NMNOJ6Q5.js +806 -0
- package/dist/options-KALH5TB7.js +125 -0
- package/dist/organization-AGCF7DUJ.js +949 -0
- package/dist/output-34QMC3OU.js +24 -0
- package/dist/page-UDF3LJHP.js +105 -0
- package/dist/page-photos-FCBW5UZS.js +118 -0
- package/dist/pages-5W5G4MRB.js +67 -0
- package/dist/performance-SITVZQWX.js +5565 -0
- package/dist/performance-YNXPUSGJ.js +27 -0
- package/dist/pinterest-IABDXLF5.js +96 -0
- package/dist/pixels-4QAWLSEL.js +109 -0
- package/dist/pixels-TYJVE377.js +62 -0
- package/dist/plan-I6EFL7RC.js +208 -0
- package/dist/posts-SXQSLOFV.js +36 -0
- package/dist/preview-7Y5LE24E.js +218 -0
- package/dist/profile-R5VPOOJU.js +159 -0
- package/dist/promoted-tweet-writes-NAHPJ3VD.js +183 -0
- package/dist/promoted-tweets-2XQ4MWAC.js +119 -0
- package/dist/properties-2D2BIDGC.js +101 -0
- package/dist/publish-UITYPUBD.js +344 -0
- package/dist/query-LB5H7IRK.js +236 -0
- package/dist/query-NDOYOIHL.js +247 -0
- package/dist/query-RE7NB2BK.js +62 -0
- package/dist/questionnaire-U767HYDE.js +94 -0
- package/dist/read-3TCDDALC.js +141 -0
- package/dist/reddit-6XIARCTX.js +29 -0
- package/dist/refresh-6UCN7PDX.js +97 -0
- package/dist/refresh-GIB6QQZS.js +42 -0
- package/dist/release-IN65L23O.js +63 -0
- package/dist/relevant-pages-W7IM6YQW.js +99 -0
- package/dist/remove-LZQHDFZF.js +49 -0
- package/dist/remove-X3XWVE2M.js +53 -0
- package/dist/reopen-RMMQ55CH.js +66 -0
- package/dist/rerun-ON6YCJAL.js +95 -0
- package/dist/research-LZBPCXIW.js +72 -0
- package/dist/research-W5KUOBXZ.js +265 -0
- package/dist/reset-MUWXTLIB.js +57 -0
- package/dist/reset-VQNKXFAF.js +57 -0
- package/dist/resolve-DMGWLMTC.js +124 -0
- package/dist/retry-YI4YLYTQ.js +63 -0
- package/dist/retry-ZQUJPKQH.js +65 -0
- package/dist/retry-failed-PEAUXGNT.js +45 -0
- package/dist/revenue-6YZAOMF6.js +91 -0
- package/dist/rule-writes-G25O5JZS.js +525 -0
- package/dist/rules-FHVZEN4D.js +99 -0
- package/dist/rules-KSOAKEI3.js +217 -0
- package/dist/rules-add-7X46VTIJ.js +465 -0
- package/dist/run-TA6HYFKZ.js +69 -0
- package/dist/run-YORKHK6S.js +70 -0
- package/dist/scaffold-ad-RHSHBCVV.js +1512 -0
- package/dist/scaffold-static-ad-XNOGCMPF.js +1010 -0
- package/dist/scaffold-video-XEVJQ7QZ.js +884 -0
- package/dist/schedule-TMTLYULK.js +64 -0
- package/dist/schedule-TNF6M6UD.js +67 -0
- package/dist/scheduled-agents-TS3WLRCM.js +55 -0
- package/dist/schema-2YQAQVON.js +121 -0
- package/dist/schema-6S5ZEPBS.js +135 -0
- package/dist/scrape-FDBYU3TU.js +2241 -0
- package/dist/screenshot-QSRWL4J6.js +102 -0
- package/dist/search-BOCQFUM3.js +51 -0
- package/dist/search-CENPR7GA.js +224 -0
- package/dist/search-GEXDRTAQ.js +26 -0
- package/dist/search-LFTFNDMC.js +91 -0
- package/dist/search-LTUUAGZG.js +177 -0
- package/dist/search-PYLNVZXI.js +92 -0
- package/dist/search-copy-RLRRR3LB.js +168 -0
- package/dist/seeds-E2GLHJ2T.js +101 -0
- package/dist/select-BXBNFGVL.js +106 -0
- package/dist/sends-NBTGBZT7.js +349 -0
- package/dist/sequences-UOIHUOD3.js +146 -0
- package/dist/set-prompt-JJWBB23C.js +198 -0
- package/dist/setup-links-6ANVKZCE.js +144 -0
- package/dist/shared-IMDHTVSW.js +32 -0
- package/dist/shopify-6ISTKZCA.js +3958 -0
- package/dist/site-OIV55MGO.js +180 -0
- package/dist/sitemaps-6A6JFBV4.js +87 -0
- package/dist/sites-PZLE5FFV.js +101 -0
- package/dist/skills-FBIVWINH.js +47 -0
- package/dist/sources-5L4S5BQV.js +457 -0
- package/dist/sources-GLJWZFHZ.js +30 -0
- package/dist/stale-SK2SDGOT.js +76 -0
- package/dist/stats-2NLNQBRY.js +34 -0
- package/dist/status-TD7ISXC5.js +65 -0
- package/dist/sticker-4NKFAGEK.js +94 -0
- package/dist/stock-XOXZGGU3.js +179 -0
- package/dist/studies-C5IINK5Y.js +250 -0
- package/dist/studio-IDNM42JP.js +49 -0
- package/dist/study-writes-GJXLMM3D.js +470 -0
- package/dist/suggest-Z553OSYW.js +66 -0
- package/dist/sync-CIRDY55O.js +279 -0
- package/dist/sync-PVIFUXX3.js +57 -0
- package/dist/sync-UBOHNOXB.js +55 -0
- package/dist/sync-definition-7NBT6LTK.js +69 -0
- package/dist/tag-22TFBGDG.js +57 -0
- package/dist/tag-manager-QLZHU6NG.js +43 -0
- package/dist/tags-3HB7N5WB.js +23 -0
- package/dist/tags-DG3XQ4SF.js +227 -0
- package/dist/tags-T4EN6XYE.js +23 -0
- package/dist/tags-T6THTVNP.js +26 -0
- package/dist/tags-XY6R2VJ6.js +23 -0
- package/dist/targeting-GNEBULXU.js +762 -0
- package/dist/targeting-constants-GR6BVM2H.js +118 -0
- package/dist/targeting-criteria-CL472KJO.js +113 -0
- package/dist/targets-7AQMSO6H.js +106 -0
- package/dist/terms-LG7FYQOG.js +102 -0
- package/dist/testimonials-4QWVSEPU.js +32 -0
- package/dist/themes-ZTM4OVGK.js +95 -0
- package/dist/top-companies-PMFYOAFK.js +111 -0
- package/dist/transcript-YWFYNFWX.js +165 -0
- package/dist/translate-VMQHPX4B.js +600 -0
- package/dist/triggers-JKXISN45.js +144 -0
- package/dist/tweets-IF5FFFTH.js +123 -0
- package/dist/unfollow-CDUOZWM7.js +46 -0
- package/dist/unlink-IUAFDLBT.js +70 -0
- package/dist/unstage-OVOZE6DA.js +96 -0
- package/dist/unstage-ZYT5RNLK.js +88 -0
- package/dist/update-23Q4T2J5.js +155 -0
- package/dist/update-74VME6PN.js +66 -0
- package/dist/update-O22DAZVX.js +192 -0
- package/dist/update-Q3WJ3DQN.js +81 -0
- package/dist/update-QAWK3O7L.js +101 -0
- package/dist/upload-EAEILUQB.js +150 -0
- package/dist/upload-WASRCKS4.js +130 -0
- package/dist/upload-WASRCKS4.js.map +1 -0
- package/dist/upscale-HB6L6SZG.js +109 -0
- package/dist/url-options-M7RX2TD4.js +131 -0
- package/dist/url-params-E5ON6W2N.js +101 -0
- package/dist/use-HGX7ZRH5.js +111 -0
- package/dist/use-HGX7ZRH5.js.map +1 -0
- package/dist/validate-NB6PS5PF.js +122 -0
- package/dist/variant-O7LXOA2E.js +338 -0
- package/dist/videos-SS2Y6FJF.js +41 -0
- package/dist/view-ED636LWD.js +121 -0
- package/dist/viewer-check-CWS6OVM7.js +83 -0
- package/dist/web-HT22JFQR.js +143 -0
- package/dist/winners-ZG5SHNBS.js +113 -0
- package/dist/winning-ads-FXTP4PWZ.js +86 -0
- package/dist/write-commands-5YVQKO7E.js +1525 -0
- package/dist/write-commands-AIWR7NBO.js +713 -0
- package/dist/write-commands-UK6MKGHI.js +206 -0
- package/dist/write-commands-W3UN6F4Y.js +1172 -0
- package/dist/x-KEMAY75C.js +47 -0
- package/package.json +1 -1
- package/dist/account-2G3IT7J4.js +0 -82
- package/dist/account-CQJFUII3.js +0 -139
- package/dist/account-ULC5N7SI.js +0 -82
- package/dist/account-assets-IDVG4DGK.js +0 -290
- package/dist/account-level-GK7M2MMQ.js +0 -611
- package/dist/account-reads-FRFI6OHK.js +0 -219
- package/dist/account-users-PINZLBT7.js +0 -64
- package/dist/account-writes-WRGJC7VU.js +0 -68
- package/dist/accounts-2KFG33EX.js +0 -80
- package/dist/accounts-5754XUS3.js +0 -115
- package/dist/accounts-KRW3JNCW.js +0 -76
- package/dist/accounts-MHPNZW3W.js +0 -701
- package/dist/accounts-MTNBMXHD.js +0 -114
- package/dist/actions-33IZOT5C.js +0 -55
- package/dist/active-entities-JR5B32X2.js +0 -103
- package/dist/activecampaign-BV5GZFVR.js +0 -938
- package/dist/activities-2RAJXP3J.js +0 -75
- package/dist/ad-group-writes-W6RCMYLC.js +0 -172
- package/dist/ad-groups-XAI2Z62X.js +0 -70
- package/dist/ad-writes-IGWZRTXY.js +0 -176
- package/dist/add-4PJDIW2M.js +0 -148
- package/dist/add-DBCN33GH.js +0 -107
- package/dist/add-KB7O7NSB.js +0 -97
- package/dist/add-PRU32PQN.js +0 -81
- package/dist/add-UZDOQAJL.js +0 -80
- package/dist/add-WDX66JSM.js +0 -305
- package/dist/add-accounts-ZWXG6HLM.js +0 -91
- package/dist/ads-255V76SZ.js +0 -79
- package/dist/ads-7TEPA4KZ.js +0 -48
- package/dist/ads-I6I4MYQH.js +0 -128
- package/dist/ads-JVBLNTBF.js +0 -120
- package/dist/adsets-FN5ZWSYF.js +0 -182
- package/dist/advertisers-BPJWOY7I.js +0 -125
- package/dist/advertisers-SJO6JYIO.js +0 -123
- package/dist/analytics-TXPEXLPQ.js +0 -447
- package/dist/analytics-XDWBEY57.js +0 -2437
- package/dist/animate-425S4ZXS.js +0 -480
- package/dist/approved-KUVAJ5M7.js +0 -73
- package/dist/asset-writes-SSI3CO2A.js +0 -50
- package/dist/assign-CTV6LDEI.js +0 -80
- package/dist/audience-size-5QYI5PKH.js +0 -76
- package/dist/audience-writes-G64754LR.js +0 -327
- package/dist/audiences-JAVNJ5NC.js +0 -86
- package/dist/audiences-JZ6SCEUC.js +0 -280
- package/dist/audiences-OMLKMHEJ.js +0 -85
- package/dist/audit-2YFDJAKL.js +0 -88
- package/dist/audit-4UE6GFLG.js +0 -154
- package/dist/autocomplete-HTUV2UDS.js +0 -114
- package/dist/avatars-IJQOWSFC.js +0 -38
- package/dist/bid-pricing-OWP4SZP5.js +0 -103
- package/dist/brand-GBP4OEJI.js +0 -22
- package/dist/brief-ZDHUBPV5.js +0 -543
- package/dist/businesses-DXRDQIFP.js +0 -54
- package/dist/campaign-groups-LDOQU65Q.js +0 -99
- package/dist/campaign-writes-SHF3XZXV.js +0 -176
- package/dist/campaign-writes-SK55QLY5.js +0 -168
- package/dist/campaigns-6CAKRANC.js +0 -113
- package/dist/campaigns-EHV7J7PW.js +0 -111
- package/dist/campaigns-GG7LLI4X.js +0 -78
- package/dist/campaigns-GQWFSKGC.js +0 -130
- package/dist/canvas-AZ47PNYZ.js +0 -46
- package/dist/capabilities-BEZXR2FZ.js +0 -147
- package/dist/cards-J2PGFKEF.js +0 -85
- package/dist/catalog-XECCXRM6.js +0 -65
- package/dist/catalogs-P5KMIMC2.js +0 -130
- package/dist/catalogs-TBRONC2D.js +0 -781
- package/dist/changes-3COSIJLU.js +0 -135
- package/dist/chatgpt-S5EVEKYV.js +0 -47
- package/dist/chats-AN52YVBT.js +0 -279
- package/dist/check-AQO7CMDD.js +0 -107
- package/dist/chunk-2MXDSPUO.js +0 -76
- package/dist/chunk-2SGREP24.js +0 -76
- package/dist/chunk-34FVKJS2.js +0 -64
- package/dist/chunk-364TCROV.js +0 -207
- package/dist/chunk-3J3W23S4.js +0 -592
- package/dist/chunk-3KMYOPBI.js +0 -98
- package/dist/chunk-3N2KAOVM.js +0 -8954
- package/dist/chunk-3WSJGYA3.js +0 -148
- package/dist/chunk-4745PLPI.js +0 -111
- package/dist/chunk-4JS2O2KV.js +0 -89
- package/dist/chunk-4VXQAJRU.js +0 -225
- package/dist/chunk-4XXA4WCS.js +0 -207
- package/dist/chunk-52IYZCRS.js +0 -476
- package/dist/chunk-5CTNSIWY.js +0 -69
- package/dist/chunk-5G225R4A.js +0 -91
- package/dist/chunk-62QMJYML.js +0 -167
- package/dist/chunk-6B4KNOJZ.js +0 -75
- package/dist/chunk-6M77QNJ4.js +0 -69
- package/dist/chunk-7B73TSKJ.js +0 -191
- package/dist/chunk-7HH4F2KX.js +0 -188
- package/dist/chunk-7O4HFODK.js +0 -26
- package/dist/chunk-7ODQ6ZID.js +0 -66
- package/dist/chunk-7OVCUTEL.js +0 -19
- package/dist/chunk-AFQF6ISC.js +0 -215
- package/dist/chunk-AXTOIHH2.js +0 -74
- package/dist/chunk-B4UVJCJ4.js +0 -229
- package/dist/chunk-BN4TDL5L.js +0 -217
- package/dist/chunk-BTVK3CU7.js +0 -712
- package/dist/chunk-BTVK3CU7.js.map +0 -1
- package/dist/chunk-C5UFKDAX.js +0 -377
- package/dist/chunk-CREEY2FS.js +0 -455
- package/dist/chunk-DJWEQDBB.js +0 -98
- package/dist/chunk-DLNADMQV.js +0 -547
- package/dist/chunk-DNWP5DL6.js +0 -42
- package/dist/chunk-DW3OPKXI.js +0 -51
- package/dist/chunk-ECJIMIEJ.js +0 -142
- package/dist/chunk-EHIISZYD.js +0 -296
- package/dist/chunk-FBG3JDET.js +0 -97
- package/dist/chunk-FOWT6ENH.js +0 -170
- package/dist/chunk-FSGJSREN.js +0 -2437
- package/dist/chunk-FSGJSREN.js.map +0 -1
- package/dist/chunk-FX3MXXYD.js +0 -91
- package/dist/chunk-GEFZVG4P.js +0 -219
- package/dist/chunk-GLCHD54W.js +0 -74
- package/dist/chunk-GT77XMOG.js +0 -23
- package/dist/chunk-GXPZJ2QN.js +0 -225
- package/dist/chunk-HPDGVK6R.js +0 -324
- package/dist/chunk-HZ3RXKR4.js +0 -3868
- package/dist/chunk-ILEJXJH2.js +0 -1518
- package/dist/chunk-J4ASA24X.js +0 -203
- package/dist/chunk-JCVPZ7CV.js +0 -638
- package/dist/chunk-KDNOMRJA.js +0 -942
- package/dist/chunk-KG7FPYM2.js +0 -64
- package/dist/chunk-KRQ2AXFW.js +0 -191
- package/dist/chunk-L5IYVZM2.js +0 -39
- package/dist/chunk-LHQ6GXNF.js +0 -46
- package/dist/chunk-LS2KEAYJ.js +0 -66
- package/dist/chunk-LURM3KKS.js +0 -94
- package/dist/chunk-MHH7SGLS.js +0 -106
- package/dist/chunk-MZIYRWXL.js +0 -285
- package/dist/chunk-NY5VYGTP.js +0 -97
- package/dist/chunk-O37YK4P6.js +0 -136
- package/dist/chunk-PN72Z2W2.js +0 -56
- package/dist/chunk-PTK7AFEE.js +0 -224
- package/dist/chunk-QJ5TU5J6.js +0 -100
- package/dist/chunk-QNLPZOHV.js +0 -84
- package/dist/chunk-QNXDSNOQ.js +0 -544
- package/dist/chunk-QOC3JEUQ.js +0 -363
- package/dist/chunk-QOC3JEUQ.js.map +0 -1
- package/dist/chunk-R44B522K.js +0 -139
- package/dist/chunk-R5GGTLYE.js +0 -846
- package/dist/chunk-R6T25WTZ.js +0 -344
- package/dist/chunk-RUJS2NOA.js +0 -297
- package/dist/chunk-SDQLZYQG.js +0 -843
- package/dist/chunk-SEC6FPWC.js +0 -494
- package/dist/chunk-SJAUMPL3.js +0 -46
- package/dist/chunk-SNDHR5QA.js +0 -24026
- package/dist/chunk-SP5L7EYC.js +0 -125
- package/dist/chunk-SPBNAGIN.js +0 -1646
- package/dist/chunk-SWNCS2OD.js +0 -333
- package/dist/chunk-T37PAZT2.js +0 -274
- package/dist/chunk-T6PTG6VM.js +0 -5368
- package/dist/chunk-TE4ASZSC.js +0 -45
- package/dist/chunk-TEKML2NW.js +0 -35
- package/dist/chunk-TKDOVFO6.js +0 -287
- package/dist/chunk-TRMZQRVV.js +0 -1919
- package/dist/chunk-TTKDFRON.js +0 -149
- package/dist/chunk-U2BPZ27S.js +0 -910
- package/dist/chunk-UPDIBQUC.js +0 -106
- package/dist/chunk-UXZZ5AEO.js +0 -429
- package/dist/chunk-V2XEX2YR.js +0 -84
- package/dist/chunk-V62ZWGCL.js +0 -103
- package/dist/chunk-VCUXAPLM.js +0 -169
- package/dist/chunk-W7C7HZFJ.js +0 -275
- package/dist/chunk-WPAW6EVY.js +0 -166
- package/dist/chunk-WPSLL3S2.js +0 -604
- package/dist/chunk-WQKBEC4I.js +0 -122
- package/dist/chunk-WW6JLISJ.js +0 -200
- package/dist/chunk-X3HPRECW.js +0 -52
- package/dist/chunk-XGX2WOV2.js +0 -8914
- package/dist/chunk-XJHUSJY6.js +0 -156
- package/dist/chunk-XPDUBDPL.js +0 -25
- package/dist/chunk-XRSRHAEU.js +0 -163
- package/dist/chunk-XVHR2NCG.js +0 -249
- package/dist/chunk-XZWBLUDV.js +0 -831
- package/dist/chunk-YUCGCJKT.js +0 -676
- package/dist/chunk-ZBUIWVF3.js +0 -197
- package/dist/chunk-ZFJ2FQUH.js +0 -131
- package/dist/chunk-ZNXP3WNJ.js +0 -58
- package/dist/chunk-ZVXKWLLE.js +0 -1744
- package/dist/claim-NRNO4XCO.js +0 -200
- package/dist/client-463NKLRT.js +0 -19
- package/dist/code-R4JOQ27J.js +0 -76
- package/dist/companies-4TOBU44J.js +0 -198
- package/dist/company-RK34S3IA.js +0 -308
- package/dist/complete-7BNBQ5AI.js +0 -84
- package/dist/config-GDLHHBJZ.js +0 -88
- package/dist/connect-CRIRSXN3.js +0 -45
- package/dist/content-FCO6MGXW.js +0 -85
- package/dist/conversation-4CQG2B2C.js +0 -96
- package/dist/conversion-report-PDTQTRVB.js +0 -127
- package/dist/conversion-upload-command-MEO4WLZH.js +0 -439
- package/dist/conversion-writes-ZVBOXUIA.js +0 -122
- package/dist/conversions-BND5HYTL.js +0 -78
- package/dist/conversions-POBKTXQF.js +0 -140
- package/dist/copy-writes-EUFEVWDW.js +0 -170
- package/dist/countries-TKL5T5JL.js +0 -82
- package/dist/create-BJ7XBNY5.js +0 -62
- package/dist/create-LPD3JAIW.js +0 -135
- package/dist/create-XN4KVB5U.js +0 -210
- package/dist/create-YSGBH6Q4.js +0 -239
- package/dist/creatives-57XIJAEG.js +0 -223
- package/dist/creatives-6VJDUHEY.js +0 -89
- package/dist/creatives-QFSIIFXB.js +0 -58
- package/dist/credentials-KIH6ICDU.js +0 -290
- package/dist/critique-GWRXVXVG.js +0 -1451
- package/dist/critique-OK2ENBOA.js +0 -232
- package/dist/crm-QSHUYXTW.js +0 -323
- package/dist/crm-Y5QTZAHO.js +0 -227
- package/dist/crop-WKTW3EMP.js +0 -113
- package/dist/currency-PTOI5SPU.js +0 -88
- package/dist/custom-conversions-NDY5RHSM.js +0 -128
- package/dist/customers-2G32E6W7.js +0 -59
- package/dist/decide-X2UAKYXK.js +0 -199
- package/dist/delete-2ZTMTKYD.js +0 -69
- package/dist/delete-FK3A36WP.js +0 -67
- package/dist/delete-FOSTK2RA.js +0 -71
- package/dist/delete-FOSTK2RA.js.map +0 -1
- package/dist/delete-HIAZHA56.js +0 -57
- package/dist/delete-I43JQH2E.js +0 -69
- package/dist/delete-RF44ILYE.js +0 -71
- package/dist/demographics-2UYQW6II.js +0 -141
- package/dist/describe-M6DYXNQC.js +0 -97
- package/dist/describe-OQ6R3EF7.js +0 -97
- package/dist/dimensions-DGYM5E5P.js +0 -101
- package/dist/discard-NKPQ73UM.js +0 -69
- package/dist/discover-XLIH7RCB.js +0 -93
- package/dist/discover-YKMBVSPF.js +0 -172
- package/dist/domain-LUDUZB3F.js +0 -101
- package/dist/download-LL6DL62N.js +0 -172
- package/dist/download-SFWMT7DL.js +0 -299
- package/dist/draft-374Z4MGY.js +0 -103
- package/dist/draft-736FJJWK.js +0 -310
- package/dist/draft-7LPUJZCF.js +0 -283
- package/dist/draft-G432FJ7N.js +0 -240
- package/dist/draft-MPWR47CG.js +0 -308
- package/dist/draft-R5ND5SWT.js +0 -100
- package/dist/draft-T7TWIFEX.js +0 -335
- package/dist/draft-XAAIGE6Q.js +0 -220
- package/dist/env-DQHY5ODN.js +0 -53
- package/dist/experiment-MO6MT6OJ.js +0 -1397
- package/dist/experiments-OGZV73W6.js +0 -236
- package/dist/export-6Z6QBU6V.js +0 -168
- package/dist/extract-YGOQBOQK.js +0 -113
- package/dist/facets-OLZ7JLFL.js +0 -117
- package/dist/favorites-R3JO4SJJ.js +0 -178
- package/dist/feed-IUMMHM3I.js +0 -177
- package/dist/feedback-ZBEZIIPT.js +0 -111
- package/dist/feedback-record-CZVSPZUR.js +0 -265
- package/dist/fetch-AL44XS4Q.js +0 -139
- package/dist/fetch-K3NRT2L2.js +0 -179
- package/dist/find-ZFIGMRYQ.js +0 -143
- package/dist/fit-5NVXWXZV.js +0 -65
- package/dist/flows-CAOMVQYZ.js +0 -250
- package/dist/follow-SS374QUW.js +0 -94
- package/dist/follow-competitors-3LTOTTBY.js +0 -112
- package/dist/following-YMA5O3LF.js +0 -113
- package/dist/fonts-E3CNWPD5.js +0 -39
- package/dist/forecast-KOBF5TKM.js +0 -169
- package/dist/forecast-PWGN4ETP.js +0 -121
- package/dist/funding-KLIZ73SS.js +0 -85
- package/dist/funnel-XIZROHV7.js +0 -397
- package/dist/ga4-XPCE4EK5.js +0 -55
- package/dist/generate-GHIXVLMY.js +0 -263
- package/dist/get-25KJJTO6.js +0 -82
- package/dist/get-HCGFATFD.js +0 -38
- package/dist/get-JR2KZXW5.js +0 -63
- package/dist/get-JR2KZXW5.js.map +0 -1
- package/dist/get-RDTJSWSA.js +0 -92
- package/dist/get-SGNT4JG2.js +0 -59
- package/dist/get-TGFXZC5S.js +0 -61
- package/dist/get-TGFXZC5S.js.map +0 -1
- package/dist/get-WS744HAO.js +0 -59
- package/dist/get-YD7GDMDR.js +0 -63
- package/dist/get-YD7GDMDR.js.map +0 -1
- package/dist/gif-YK5HJXRE.js +0 -102
- package/dist/google-5JV7OMOH.js +0 -3267
- package/dist/google-BI45CXMW.js +0 -136
- package/dist/google-ads-DYZGUM6W.js +0 -198
- package/dist/group-7OWIYAKJ.js +0 -43
- package/dist/group-H6ZYRPE6.js +0 -43
- package/dist/gsc-HI2KXDEU.js +0 -30
- package/dist/history-3EQQHYKT.js +0 -69
- package/dist/history-DTQVPVFA.js +0 -102
- package/dist/history-SQPJ7PPE.js +0 -136
- package/dist/hubspot-MYTV36SM.js +0 -782
- package/dist/icon-HLJCWTR3.js +0 -137
- package/dist/ideas-CVXHFVX7.js +0 -45
- package/dist/images-K7JQ3ORB.js +0 -92
- package/dist/improve-BRC4R6MW.js +0 -86
- package/dist/ingest-4GNJ2PWL.js +0 -26
- package/dist/ingest-5NYBUZE2.js +0 -110
- package/dist/ingest-5NYBUZE2.js.map +0 -1
- package/dist/insights-CN3GUTT7.js +0 -132
- package/dist/insights-IVW6W5CP.js +0 -439
- package/dist/inspect-25IVRU45.js +0 -192
- package/dist/inspiration-KAXPRINY.js +0 -53
- package/dist/instant-experiences-6F6GXZ67.js +0 -260
- package/dist/intent-3GDLPKKN.js +0 -95
- package/dist/job-2JJNKUHT.js +0 -202
- package/dist/job-create-BNTNZCSP.js +0 -109
- package/dist/job-status-N7RWRDRO.js +0 -74
- package/dist/keep-Z2WH3CKU.js +0 -78
- package/dist/keyword-gap-B2WPVHOB.js +0 -130
- package/dist/keyword-metrics-UDGWN7BO.js +0 -200
- package/dist/keywords-for-site-GEG6AXD3.js +0 -131
- package/dist/landing-BFMRM3HA.js +0 -28
- package/dist/landings-7QRITXZ2.js +0 -151
- package/dist/languages-RZLMZR57.js +0 -55
- package/dist/languages-UJAOPTV2.js +0 -40
- package/dist/launches-4H6ANGTG.js +0 -19
- package/dist/layerize-P5LFIA4X.js +0 -190
- package/dist/lead-routes-WVXWVG62.js +0 -733
- package/dist/leads-CJKRKB2Q.js +0 -540
- package/dist/leads-MTTOYNPM.js +0 -115
- package/dist/learn-QPXZZIZZ.js +0 -207
- package/dist/library-VW27X75P.js +0 -211
- package/dist/lighthouse-FGUFJRGR.js +0 -75
- package/dist/line-item-writes-RVOAMJ5R.js +0 -211
- package/dist/line-items-POZRAJLC.js +0 -107
- package/dist/link-IXEZKRM7.js +0 -67
- package/dist/linkedin-5PYG5HEM.js +0 -1328
- package/dist/linkedin-person-EMJXEZYR.js +0 -139
- package/dist/list-4KS7WSUG.js +0 -306
- package/dist/list-6PIJGN4M.js +0 -67
- package/dist/list-7GDMM26I.js +0 -93
- package/dist/list-DVVOP6FM.js +0 -50
- package/dist/list-J5KWXHFO.js +0 -76
- package/dist/list-PTK2HOUY.js +0 -51
- package/dist/list-Q5LVTPQP.js +0 -57
- package/dist/list-UG4V5AM2.js +0 -65
- package/dist/list-XOYU7UTX.js +0 -154
- package/dist/locations-EISZ6JOT.js +0 -40
- package/dist/locations-VJX64ZZR.js +0 -69
- package/dist/log-2F2N24DT.js +0 -95
- package/dist/logo-H2KHGLYD.js +0 -18
- package/dist/lookup-K57ITJWF.js +0 -23
- package/dist/make-N5LVJSZD.js +0 -1366
- package/dist/map-QGJZIC5N.js +0 -436
- package/dist/mcp-RSW7KAWP.js +0 -729
- package/dist/media-HDHZULQ7.js +0 -18
- package/dist/media-K5RJXLTN.js +0 -89
- package/dist/media-sources-7R7FO53Y.js +0 -35
- package/dist/members-B6TKGGT5.js +0 -47
- package/dist/meme-QMCUGXUE.js +0 -100
- package/dist/meta-MOSJVYIE.js +0 -122
- package/dist/metrics-PRIKXVYZ.js +0 -152
- package/dist/models-M3E4YFCT.js +0 -155
- package/dist/normalize-5B4EQLUX.js +0 -144
- package/dist/normalize-5QIGANTK.js +0 -806
- package/dist/options-K33CJOR6.js +0 -125
- package/dist/organization-A4NFWWWI.js +0 -949
- package/dist/output-U5ZV6PST.js +0 -24
- package/dist/page-XVOUD4VV.js +0 -105
- package/dist/page-photos-4JTIKXAW.js +0 -118
- package/dist/pages-BAUS7LQM.js +0 -67
- package/dist/performance-MHJDRLEK.js +0 -5565
- package/dist/performance-NVURSEZ6.js +0 -27
- package/dist/pinterest-NA6HGPMB.js +0 -96
- package/dist/pixels-QOSEYXCP.js +0 -109
- package/dist/pixels-THDQD3RF.js +0 -62
- package/dist/plan-JYSHKPZQ.js +0 -208
- package/dist/posts-BDMC644W.js +0 -36
- package/dist/preview-X6EJGPAY.js +0 -218
- package/dist/profile-YHI65VGK.js +0 -159
- package/dist/promoted-tweet-writes-MXXVRLVQ.js +0 -183
- package/dist/promoted-tweets-HFLGXWX2.js +0 -119
- package/dist/properties-ZLY6NYVK.js +0 -101
- package/dist/publish-6ZXFUBGP.js +0 -344
- package/dist/query-ELD7WSFR.js +0 -247
- package/dist/query-HFHTLNDN.js +0 -236
- package/dist/query-WMEX73ZB.js +0 -62
- package/dist/questionnaire-Y37I64FO.js +0 -94
- package/dist/read-2HQEZIJW.js +0 -141
- package/dist/reddit-BIHGJPGP.js +0 -29
- package/dist/refresh-4O32S4YR.js +0 -97
- package/dist/refresh-LVV4SPLT.js +0 -42
- package/dist/release-VIPNSPQ5.js +0 -63
- package/dist/relevant-pages-B5SYN575.js +0 -99
- package/dist/remove-2E77743U.js +0 -53
- package/dist/remove-TPOWWFZ6.js +0 -49
- package/dist/reopen-UOBTJBMQ.js +0 -66
- package/dist/rerun-HUFJUOEV.js +0 -95
- package/dist/research-ELM3KHGE.js +0 -72
- package/dist/research-FOJIDMSE.js +0 -265
- package/dist/reset-FTLWUFZK.js +0 -57
- package/dist/reset-GIXXLPHQ.js +0 -57
- package/dist/resolve-QHR5JJTJ.js +0 -124
- package/dist/retry-HNWXJR5U.js +0 -65
- package/dist/retry-NY5KFEDA.js +0 -63
- package/dist/retry-failed-OAH7JQKD.js +0 -45
- package/dist/revenue-JFMUODJO.js +0 -91
- package/dist/rule-writes-A4BFYHPA.js +0 -525
- package/dist/rules-56E55SGC.js +0 -99
- package/dist/rules-HLREXY2M.js +0 -217
- package/dist/rules-add-ZOPOWJMY.js +0 -465
- package/dist/run-7OCCCNJ4.js +0 -70
- package/dist/run-CIXOJA3K.js +0 -69
- package/dist/scaffold-ad-7ADCDQBK.js +0 -1512
- package/dist/scaffold-static-ad-TV5OWISA.js +0 -1010
- package/dist/scaffold-video-LLBDO546.js +0 -884
- package/dist/schedule-OFPSZVZ2.js +0 -67
- package/dist/schedule-ZATNBBWD.js +0 -64
- package/dist/scheduled-agents-BGMWNCAU.js +0 -55
- package/dist/schema-NCJTDRRV.js +0 -121
- package/dist/schema-OGP4DUPP.js +0 -135
- package/dist/scrape-ZHL2BHS7.js +0 -2241
- package/dist/screenshot-ADMRDYWN.js +0 -102
- package/dist/search-6W4HXR2S.js +0 -91
- package/dist/search-6ZWI2NML.js +0 -92
- package/dist/search-CQUS7EOM.js +0 -51
- package/dist/search-HF5ECIYW.js +0 -26
- package/dist/search-MKVVMJ2Q.js +0 -224
- package/dist/search-QUF6LHQ5.js +0 -177
- package/dist/search-copy-O6FDX4HT.js +0 -168
- package/dist/seeds-5TM3O3K3.js +0 -101
- package/dist/select-BRH4QLWU.js +0 -106
- package/dist/sends-MZKHZZGJ.js +0 -349
- package/dist/sequences-3CEVHGHB.js +0 -146
- package/dist/set-prompt-SYWNE4CS.js +0 -198
- package/dist/setup-links-4STQ5B4P.js +0 -144
- package/dist/shared-I3SB77VH.js +0 -32
- package/dist/shopify-7LDHCWUQ.js +0 -3958
- package/dist/site-I3NFMPJB.js +0 -180
- package/dist/sitemaps-PLAWVXQL.js +0 -87
- package/dist/sites-WX2IBTZT.js +0 -101
- package/dist/skills-O6EQOAMQ.js +0 -47
- package/dist/sources-CGXHNWJM.js +0 -30
- package/dist/sources-ZM7LEIMM.js +0 -457
- package/dist/stale-QNIJZTGD.js +0 -76
- package/dist/stats-QQRYOMZA.js +0 -34
- package/dist/status-5OMVGFCH.js +0 -65
- package/dist/sticker-654HS3K2.js +0 -94
- package/dist/stock-35LOO3YN.js +0 -179
- package/dist/studies-IGOCWM7F.js +0 -250
- package/dist/studio-NRWLXOFZ.js +0 -49
- package/dist/study-writes-Z5P2W7JH.js +0 -470
- package/dist/suggest-JASHCOL5.js +0 -66
- package/dist/sync-6AN67IX3.js +0 -55
- package/dist/sync-RCDODSOD.js +0 -57
- package/dist/sync-URIRLHTS.js +0 -279
- package/dist/sync-definition-EGHEQ57K.js +0 -69
- package/dist/tag-7YMFAZQQ.js +0 -57
- package/dist/tag-manager-LU4GAZ6R.js +0 -43
- package/dist/tags-6A7QOYBI.js +0 -23
- package/dist/tags-JHT3Q6VO.js +0 -227
- package/dist/tags-KSMLT4G2.js +0 -26
- package/dist/tags-MTVZJHCE.js +0 -23
- package/dist/tags-OU32R2SH.js +0 -23
- package/dist/targeting-7HXKBXWY.js +0 -762
- package/dist/targeting-constants-QIB3UZHM.js +0 -118
- package/dist/targeting-criteria-NUXZB7NP.js +0 -113
- package/dist/targets-KZBMOZUE.js +0 -106
- package/dist/terms-X4OJWTQH.js +0 -102
- package/dist/testimonials-2NQMY23B.js +0 -32
- package/dist/themes-6KVP3COR.js +0 -95
- package/dist/top-companies-WWNPUJ23.js +0 -111
- package/dist/transcript-P7HKVABU.js +0 -165
- package/dist/translate-YGHRSEX6.js +0 -600
- package/dist/triggers-35UVEDXF.js +0 -144
- package/dist/tweets-X5PTAT6F.js +0 -123
- package/dist/unfollow-S5LHFLGW.js +0 -46
- package/dist/unlink-XTZA474P.js +0 -70
- package/dist/unstage-AVLORZLW.js +0 -96
- package/dist/unstage-E2257FEP.js +0 -88
- package/dist/update-3NA6ABLW.js +0 -101
- package/dist/update-5ZNS2DKP.js +0 -66
- package/dist/update-DDKNKV6M.js +0 -81
- package/dist/update-GTXZRINC.js +0 -155
- package/dist/update-MDVZ24VQ.js +0 -192
- package/dist/upload-IMP5CUY5.js +0 -129
- package/dist/upload-IMP5CUY5.js.map +0 -1
- package/dist/upload-SYFB2VTJ.js +0 -150
- package/dist/upscale-P5EYUVOZ.js +0 -109
- package/dist/url-options-DJZV3ADK.js +0 -131
- package/dist/url-params-Y5XQSDEF.js +0 -101
- package/dist/use-D3RBWLJO.js +0 -95
- package/dist/use-D3RBWLJO.js.map +0 -1
- package/dist/validate-JX4FT7PL.js +0 -122
- package/dist/variant-JQVZUUA4.js +0 -338
- package/dist/videos-EHDZ46UQ.js +0 -41
- package/dist/view-IKKRJ5YD.js +0 -121
- package/dist/viewer-check-5GREZIVJ.js +0 -83
- package/dist/web-7TPDDBI6.js +0 -143
- package/dist/winners-4PKEVMUC.js +0 -113
- package/dist/winning-ads-H7ZE5AQW.js +0 -86
- package/dist/write-commands-CTLF2M6L.js +0 -713
- package/dist/write-commands-CY734U34.js +0 -1172
- package/dist/write-commands-FIS6Y2MN.js +0 -206
- package/dist/write-commands-V77MD5SC.js +0 -1525
- package/dist/x-EMLFCHSG.js +0 -47
- /package/dist/{account-2G3IT7J4.js.map → account-2UXZ6CZJ.js.map} +0 -0
- /package/dist/{account-CQJFUII3.js.map → account-HQD5P3AF.js.map} +0 -0
- /package/dist/{account-ULC5N7SI.js.map → account-OWMJG4IW.js.map} +0 -0
- /package/dist/{account-assets-IDVG4DGK.js.map → account-assets-JRMYVXQP.js.map} +0 -0
- /package/dist/{account-level-GK7M2MMQ.js.map → account-level-PEGLZQTI.js.map} +0 -0
- /package/dist/{account-reads-FRFI6OHK.js.map → account-reads-W2GAN335.js.map} +0 -0
- /package/dist/{account-users-PINZLBT7.js.map → account-users-WLTQNPL7.js.map} +0 -0
- /package/dist/{account-writes-WRGJC7VU.js.map → account-writes-TNADUSHW.js.map} +0 -0
- /package/dist/{accounts-MHPNZW3W.js.map → accounts-D3SQTZB7.js.map} +0 -0
- /package/dist/{accounts-2KFG33EX.js.map → accounts-HRQFOTBJ.js.map} +0 -0
- /package/dist/{accounts-MTNBMXHD.js.map → accounts-MQMEOGQD.js.map} +0 -0
- /package/dist/{accounts-KRW3JNCW.js.map → accounts-T6SRCZJQ.js.map} +0 -0
- /package/dist/{accounts-5754XUS3.js.map → accounts-Y2VWI3AA.js.map} +0 -0
- /package/dist/{actions-33IZOT5C.js.map → actions-VJXED57L.js.map} +0 -0
- /package/dist/{active-entities-JR5B32X2.js.map → active-entities-BOMM4YDF.js.map} +0 -0
- /package/dist/{activecampaign-BV5GZFVR.js.map → activecampaign-TNJIQA4C.js.map} +0 -0
- /package/dist/{activities-2RAJXP3J.js.map → activities-YH4K4JAI.js.map} +0 -0
- /package/dist/{ad-group-writes-W6RCMYLC.js.map → ad-group-writes-7BGCZA3M.js.map} +0 -0
- /package/dist/{ad-groups-XAI2Z62X.js.map → ad-groups-A6GU6EW5.js.map} +0 -0
- /package/dist/{ad-writes-IGWZRTXY.js.map → ad-writes-CEMCUDU2.js.map} +0 -0
- /package/dist/{add-UZDOQAJL.js.map → add-2L2VQ5MU.js.map} +0 -0
- /package/dist/{add-DBCN33GH.js.map → add-DRTKSLEQ.js.map} +0 -0
- /package/dist/{add-WDX66JSM.js.map → add-LBHISK44.js.map} +0 -0
- /package/dist/{add-KB7O7NSB.js.map → add-PS36Q2S3.js.map} +0 -0
- /package/dist/{add-4PJDIW2M.js.map → add-RLMXZLLO.js.map} +0 -0
- /package/dist/{add-PRU32PQN.js.map → add-Z2OTFSQO.js.map} +0 -0
- /package/dist/{add-accounts-ZWXG6HLM.js.map → add-accounts-GXBE4ZR2.js.map} +0 -0
- /package/dist/{ads-7TEPA4KZ.js.map → ads-4EVKVAMR.js.map} +0 -0
- /package/dist/{ads-255V76SZ.js.map → ads-OY455VCX.js.map} +0 -0
- /package/dist/{ads-I6I4MYQH.js.map → ads-WYQYZ44U.js.map} +0 -0
- /package/dist/{ads-JVBLNTBF.js.map → ads-ZEF5AU3D.js.map} +0 -0
- /package/dist/{adsets-FN5ZWSYF.js.map → adsets-ZRS7AZIK.js.map} +0 -0
- /package/dist/{advertisers-BPJWOY7I.js.map → advertisers-AAGUUSAX.js.map} +0 -0
- /package/dist/{advertisers-SJO6JYIO.js.map → advertisers-G6DZRBOK.js.map} +0 -0
- /package/dist/{analytics-XDWBEY57.js.map → analytics-ANG42PKM.js.map} +0 -0
- /package/dist/{analytics-TXPEXLPQ.js.map → analytics-UI4AKUSF.js.map} +0 -0
- /package/dist/{animate-425S4ZXS.js.map → animate-KCSICY2N.js.map} +0 -0
- /package/dist/{approved-KUVAJ5M7.js.map → approved-LHYBVDXH.js.map} +0 -0
- /package/dist/{asset-writes-SSI3CO2A.js.map → asset-writes-CUF25BLM.js.map} +0 -0
- /package/dist/{assign-CTV6LDEI.js.map → assign-5DFH6HBV.js.map} +0 -0
- /package/dist/{audience-size-5QYI5PKH.js.map → audience-size-P6WIXOB3.js.map} +0 -0
- /package/dist/{audience-writes-G64754LR.js.map → audience-writes-L7SNU2SB.js.map} +0 -0
- /package/dist/{audiences-JZ6SCEUC.js.map → audiences-4ASLCNOF.js.map} +0 -0
- /package/dist/{audiences-JAVNJ5NC.js.map → audiences-A54MU63W.js.map} +0 -0
- /package/dist/{audiences-OMLKMHEJ.js.map → audiences-SG2BBM7R.js.map} +0 -0
- /package/dist/{audit-2YFDJAKL.js.map → audit-6K5FFV6K.js.map} +0 -0
- /package/dist/{audit-4UE6GFLG.js.map → audit-LA4BSLXV.js.map} +0 -0
- /package/dist/{autocomplete-HTUV2UDS.js.map → autocomplete-XMG6E7TG.js.map} +0 -0
- /package/dist/{avatars-IJQOWSFC.js.map → avatars-4IFN4GZD.js.map} +0 -0
- /package/dist/{bid-pricing-OWP4SZP5.js.map → bid-pricing-JEOG2Q3L.js.map} +0 -0
- /package/dist/{brand-GBP4OEJI.js.map → brand-C6HUAK74.js.map} +0 -0
- /package/dist/{brief-ZDHUBPV5.js.map → brief-5BCPPBU3.js.map} +0 -0
- /package/dist/{businesses-DXRDQIFP.js.map → businesses-GQ5FOZDU.js.map} +0 -0
- /package/dist/{campaign-groups-LDOQU65Q.js.map → campaign-groups-IYQZSICZ.js.map} +0 -0
- /package/dist/{campaign-writes-SHF3XZXV.js.map → campaign-writes-CVOOPZ35.js.map} +0 -0
- /package/dist/{campaign-writes-SK55QLY5.js.map → campaign-writes-YXI5UOPH.js.map} +0 -0
- /package/dist/{campaigns-6CAKRANC.js.map → campaigns-FW4WVD25.js.map} +0 -0
- /package/dist/{campaigns-EHV7J7PW.js.map → campaigns-QMFHNG3N.js.map} +0 -0
- /package/dist/{campaigns-GG7LLI4X.js.map → campaigns-TX37WHVL.js.map} +0 -0
- /package/dist/{campaigns-GQWFSKGC.js.map → campaigns-VZJMYETG.js.map} +0 -0
- /package/dist/{canvas-AZ47PNYZ.js.map → canvas-G4QXNPPE.js.map} +0 -0
- /package/dist/{capabilities-BEZXR2FZ.js.map → capabilities-7643Y2HU.js.map} +0 -0
- /package/dist/{cards-J2PGFKEF.js.map → cards-YHZFJ3US.js.map} +0 -0
- /package/dist/{catalog-XECCXRM6.js.map → catalog-PTVQSATT.js.map} +0 -0
- /package/dist/{catalogs-P5KMIMC2.js.map → catalogs-YNIUP2AH.js.map} +0 -0
- /package/dist/{catalogs-TBRONC2D.js.map → catalogs-ZHCLH43A.js.map} +0 -0
- /package/dist/{changes-3COSIJLU.js.map → changes-QUKBZVB3.js.map} +0 -0
- /package/dist/{chatgpt-S5EVEKYV.js.map → chatgpt-TIUBMATF.js.map} +0 -0
- /package/dist/{chats-AN52YVBT.js.map → chats-BGLAG4Q7.js.map} +0 -0
- /package/dist/{check-AQO7CMDD.js.map → check-MN5ZQ7RX.js.map} +0 -0
- /package/dist/{chunk-TE4ASZSC.js.map → chunk-23KN4NL4.js.map} +0 -0
- /package/dist/{chunk-WPSLL3S2.js.map → chunk-2UJ5ABI6.js.map} +0 -0
- /package/dist/{chunk-V62ZWGCL.js.map → chunk-2XRFWXSA.js.map} +0 -0
- /package/dist/{chunk-6M77QNJ4.js.map → chunk-3JV4T6XW.js.map} +0 -0
- /package/dist/{chunk-3N2KAOVM.js.map → chunk-3OSBCYKA.js.map} +0 -0
- /package/dist/{chunk-4JS2O2KV.js.map → chunk-3QQHPRRB.js.map} +0 -0
- /package/dist/{chunk-ILEJXJH2.js.map → chunk-3WTCMBDC.js.map} +0 -0
- /package/dist/{chunk-5CTNSIWY.js.map → chunk-4BTUF2AV.js.map} +0 -0
- /package/dist/{chunk-4745PLPI.js.map → chunk-4D37LCBS.js.map} +0 -0
- /package/dist/{chunk-XRSRHAEU.js.map → chunk-4QITYZUH.js.map} +0 -0
- /package/dist/{chunk-UXZZ5AEO.js.map → chunk-4XNF52NU.js.map} +0 -0
- /package/dist/{chunk-T6PTG6VM.js.map → chunk-4Y7IJ2PU.js.map} +0 -0
- /package/dist/{chunk-FX3MXXYD.js.map → chunk-53BTYIMJ.js.map} +0 -0
- /package/dist/{chunk-QNXDSNOQ.js.map → chunk-5ITB24SC.js.map} +0 -0
- /package/dist/{chunk-MZIYRWXL.js.map → chunk-5N47LB7X.js.map} +0 -0
- /package/dist/{chunk-FOWT6ENH.js.map → chunk-5UBFYJHF.js.map} +0 -0
- /package/dist/{chunk-SP5L7EYC.js.map → chunk-6CQOHJZW.js.map} +0 -0
- /package/dist/{chunk-GLCHD54W.js.map → chunk-6OXENBTF.js.map} +0 -0
- /package/dist/{chunk-VCUXAPLM.js.map → chunk-6PMJU7IU.js.map} +0 -0
- /package/dist/{chunk-5G225R4A.js.map → chunk-7GGLZOQN.js.map} +0 -0
- /package/dist/{chunk-DJWEQDBB.js.map → chunk-7I65KXU7.js.map} +0 -0
- /package/dist/{chunk-4XXA4WCS.js.map → chunk-7JFVMJZI.js.map} +0 -0
- /package/dist/{chunk-WPAW6EVY.js.map → chunk-A6VODUO3.js.map} +0 -0
- /package/dist/{chunk-R44B522K.js.map → chunk-AGTA5FJX.js.map} +0 -0
- /package/dist/{chunk-V2XEX2YR.js.map → chunk-AGU4KGT6.js.map} +0 -0
- /package/dist/{chunk-LHQ6GXNF.js.map → chunk-BXUUKRMM.js.map} +0 -0
- /package/dist/{chunk-DW3OPKXI.js.map → chunk-BZTAEZLT.js.map} +0 -0
- /package/dist/{chunk-ZNXP3WNJ.js.map → chunk-C7IOSSI4.js.map} +0 -0
- /package/dist/{chunk-B4UVJCJ4.js.map → chunk-CIW3Q7B2.js.map} +0 -0
- /package/dist/{chunk-SPBNAGIN.js.map → chunk-CJQ77HO5.js.map} +0 -0
- /package/dist/{chunk-6B4KNOJZ.js.map → chunk-CNPYG4F3.js.map} +0 -0
- /package/dist/{chunk-C5UFKDAX.js.map → chunk-COS3TPHX.js.map} +0 -0
- /package/dist/{chunk-GT77XMOG.js.map → chunk-CQ6HBFOB.js.map} +0 -0
- /package/dist/{chunk-LS2KEAYJ.js.map → chunk-D7Y3UNWO.js.map} +0 -0
- /package/dist/{chunk-KDNOMRJA.js.map → chunk-DJTWY7GL.js.map} +0 -0
- /package/dist/{chunk-JCVPZ7CV.js.map → chunk-DWW5QSUF.js.map} +0 -0
- /package/dist/{chunk-TEKML2NW.js.map → chunk-E34YYDCE.js.map} +0 -0
- /package/dist/{chunk-3WSJGYA3.js.map → chunk-ENUCJ6AO.js.map} +0 -0
- /package/dist/{chunk-DNWP5DL6.js.map → chunk-FESQ5TXU.js.map} +0 -0
- /package/dist/{chunk-UPDIBQUC.js.map → chunk-FEUKUZRA.js.map} +0 -0
- /package/dist/{chunk-U2BPZ27S.js.map → chunk-FJDSL4O5.js.map} +0 -0
- /package/dist/{chunk-CREEY2FS.js.map → chunk-FSTDWVXG.js.map} +0 -0
- /package/dist/{chunk-XVHR2NCG.js.map → chunk-FUR7R4D7.js.map} +0 -0
- /package/dist/{chunk-FBG3JDET.js.map → chunk-GYMZCJX6.js.map} +0 -0
- /package/dist/{chunk-R5GGTLYE.js.map → chunk-HTT7RBRC.js.map} +0 -0
- /package/dist/{chunk-BN4TDL5L.js.map → chunk-IQWFJEA3.js.map} +0 -0
- /package/dist/{chunk-XZWBLUDV.js.map → chunk-IU5K42Q3.js.map} +0 -0
- /package/dist/{chunk-7ODQ6ZID.js.map → chunk-JARRF5VX.js.map} +0 -0
- /package/dist/{chunk-RUJS2NOA.js.map → chunk-JEUFRIYS.js.map} +0 -0
- /package/dist/{chunk-LURM3KKS.js.map → chunk-JNSRQQDP.js.map} +0 -0
- /package/dist/{chunk-MHH7SGLS.js.map → chunk-KGAI4E2I.js.map} +0 -0
- /package/dist/{chunk-SDQLZYQG.js.map → chunk-KITVYLEX.js.map} +0 -0
- /package/dist/{chunk-J4ASA24X.js.map → chunk-L5VVKIMB.js.map} +0 -0
- /package/dist/{chunk-SWNCS2OD.js.map → chunk-L763CNKH.js.map} +0 -0
- /package/dist/{chunk-4VXQAJRU.js.map → chunk-LO2MZJJP.js.map} +0 -0
- /package/dist/{chunk-HPDGVK6R.js.map → chunk-LV7EU6HM.js.map} +0 -0
- /package/dist/{chunk-QNLPZOHV.js.map → chunk-LXZ5E6AC.js.map} +0 -0
- /package/dist/{chunk-KRQ2AXFW.js.map → chunk-LZRZVIEJ.js.map} +0 -0
- /package/dist/{chunk-YUCGCJKT.js.map → chunk-M2MJ52HS.js.map} +0 -0
- /package/dist/{chunk-DLNADMQV.js.map → chunk-MBSAHNMJ.js.map} +0 -0
- /package/dist/{chunk-GEFZVG4P.js.map → chunk-MCKYNFPH.js.map} +0 -0
- /package/dist/{chunk-ZBUIWVF3.js.map → chunk-MHZIOOT5.js.map} +0 -0
- /package/dist/{chunk-364TCROV.js.map → chunk-MNOCC5AL.js.map} +0 -0
- /package/dist/{chunk-WW6JLISJ.js.map → chunk-MUEJVDHI.js.map} +0 -0
- /package/dist/{chunk-7OVCUTEL.js.map → chunk-N6WHUUFH.js.map} +0 -0
- /package/dist/{chunk-HZ3RXKR4.js.map → chunk-NA5Q473J.js.map} +0 -0
- /package/dist/{chunk-AXTOIHH2.js.map → chunk-NCO5NGBN.js.map} +0 -0
- /package/dist/{chunk-X3HPRECW.js.map → chunk-NLW25WW3.js.map} +0 -0
- /package/dist/{chunk-TKDOVFO6.js.map → chunk-NYAFSC5V.js.map} +0 -0
- /package/dist/{chunk-AFQF6ISC.js.map → chunk-O7AMKMII.js.map} +0 -0
- /package/dist/{chunk-7HH4F2KX.js.map → chunk-OL3QHART.js.map} +0 -0
- /package/dist/{chunk-WQKBEC4I.js.map → chunk-OPUEQSKM.js.map} +0 -0
- /package/dist/{chunk-3J3W23S4.js.map → chunk-OXLB5M5M.js.map} +0 -0
- /package/dist/{chunk-QJ5TU5J6.js.map → chunk-OXYWSVOJ.js.map} +0 -0
- /package/dist/{chunk-XGX2WOV2.js.map → chunk-PE4ZP7MX.js.map} +0 -0
- /package/dist/{chunk-NY5VYGTP.js.map → chunk-PHZOMTI6.js.map} +0 -0
- /package/dist/{chunk-T37PAZT2.js.map → chunk-PIAG4UJT.js.map} +0 -0
- /package/dist/{chunk-KG7FPYM2.js.map → chunk-PYWIHAVD.js.map} +0 -0
- /package/dist/{chunk-SNDHR5QA.js.map → chunk-QKNPF6ZD.js.map} +0 -0
- /package/dist/{chunk-ZFJ2FQUH.js.map → chunk-QOBA6PHB.js.map} +0 -0
- /package/dist/{chunk-3KMYOPBI.js.map → chunk-QPPQXU3U.js.map} +0 -0
- /package/dist/{chunk-TTKDFRON.js.map → chunk-QTKNS2U2.js.map} +0 -0
- /package/dist/{chunk-SJAUMPL3.js.map → chunk-QTLIXCVN.js.map} +0 -0
- /package/dist/{chunk-O37YK4P6.js.map → chunk-R5LRBDEM.js.map} +0 -0
- /package/dist/{chunk-TRMZQRVV.js.map → chunk-RRC7F3QQ.js.map} +0 -0
- /package/dist/{chunk-7B73TSKJ.js.map → chunk-SEYCF446.js.map} +0 -0
- /package/dist/{chunk-GXPZJ2QN.js.map → chunk-SF52UGHZ.js.map} +0 -0
- /package/dist/{chunk-ZVXKWLLE.js.map → chunk-SVNH6P7O.js.map} +0 -0
- /package/dist/{chunk-34FVKJS2.js.map → chunk-SWFZJROM.js.map} +0 -0
- /package/dist/{chunk-SEC6FPWC.js.map → chunk-UCNIJ2IW.js.map} +0 -0
- /package/dist/{chunk-R6T25WTZ.js.map → chunk-UFUYTWEF.js.map} +0 -0
- /package/dist/{chunk-L5IYVZM2.js.map → chunk-ULW4EWAA.js.map} +0 -0
- /package/dist/{chunk-ECJIMIEJ.js.map → chunk-UROKPFIS.js.map} +0 -0
- /package/dist/{chunk-52IYZCRS.js.map → chunk-VPF5A7CM.js.map} +0 -0
- /package/dist/{chunk-PTK7AFEE.js.map → chunk-VV6FDIP5.js.map} +0 -0
- /package/dist/{chunk-XJHUSJY6.js.map → chunk-WRTG3KXU.js.map} +0 -0
- /package/dist/{chunk-2SGREP24.js.map → chunk-XAW5GL6B.js.map} +0 -0
- /package/dist/{chunk-7O4HFODK.js.map → chunk-XRNJRQ6Q.js.map} +0 -0
- /package/dist/{chunk-PN72Z2W2.js.map → chunk-Y5GQO6CR.js.map} +0 -0
- /package/dist/{chunk-62QMJYML.js.map → chunk-YE4RCEEJ.js.map} +0 -0
- /package/dist/{chunk-EHIISZYD.js.map → chunk-YJYKSMLF.js.map} +0 -0
- /package/dist/{chunk-W7C7HZFJ.js.map → chunk-YO54MA7R.js.map} +0 -0
- /package/dist/{chunk-2MXDSPUO.js.map → chunk-Z6T6VDDA.js.map} +0 -0
- /package/dist/{chunk-XPDUBDPL.js.map → chunk-ZOH672S6.js.map} +0 -0
- /package/dist/{claim-NRNO4XCO.js.map → claim-2JNNC66N.js.map} +0 -0
- /package/dist/{client-463NKLRT.js.map → client-YUVT3RZN.js.map} +0 -0
- /package/dist/{code-R4JOQ27J.js.map → code-LOOWLRUL.js.map} +0 -0
- /package/dist/{companies-4TOBU44J.js.map → companies-4NJU5TLU.js.map} +0 -0
- /package/dist/{company-RK34S3IA.js.map → company-QOYWS4W6.js.map} +0 -0
- /package/dist/{complete-7BNBQ5AI.js.map → complete-7FX2K3PV.js.map} +0 -0
- /package/dist/{config-GDLHHBJZ.js.map → config-AOF6ACIP.js.map} +0 -0
- /package/dist/{connect-CRIRSXN3.js.map → connect-H2HSPMRT.js.map} +0 -0
- /package/dist/{content-FCO6MGXW.js.map → content-NCW5IJFR.js.map} +0 -0
- /package/dist/{conversation-4CQG2B2C.js.map → conversation-4M7YMQOL.js.map} +0 -0
- /package/dist/{conversion-report-PDTQTRVB.js.map → conversion-report-G5JMZNYV.js.map} +0 -0
- /package/dist/{conversion-upload-command-MEO4WLZH.js.map → conversion-upload-command-43PZFYT7.js.map} +0 -0
- /package/dist/{conversion-writes-ZVBOXUIA.js.map → conversion-writes-JQQCCGPO.js.map} +0 -0
- /package/dist/{conversions-BND5HYTL.js.map → conversions-UO4CQNF6.js.map} +0 -0
- /package/dist/{conversions-POBKTXQF.js.map → conversions-Z7FW7CFT.js.map} +0 -0
- /package/dist/{copy-writes-EUFEVWDW.js.map → copy-writes-ONVSSBLJ.js.map} +0 -0
- /package/dist/{countries-TKL5T5JL.js.map → countries-Q6TA42P7.js.map} +0 -0
- /package/dist/{create-BJ7XBNY5.js.map → create-4SFO4AQZ.js.map} +0 -0
- /package/dist/{create-YSGBH6Q4.js.map → create-D5MA64KL.js.map} +0 -0
- /package/dist/{create-XN4KVB5U.js.map → create-GJ4ZMY3A.js.map} +0 -0
- /package/dist/{create-LPD3JAIW.js.map → create-QVY6DSYM.js.map} +0 -0
- /package/dist/{creatives-QFSIIFXB.js.map → creatives-ADH6HCCA.js.map} +0 -0
- /package/dist/{creatives-57XIJAEG.js.map → creatives-R3XILT6D.js.map} +0 -0
- /package/dist/{creatives-6VJDUHEY.js.map → creatives-S3EZCXUT.js.map} +0 -0
- /package/dist/{credentials-KIH6ICDU.js.map → credentials-EQRB6XGZ.js.map} +0 -0
- /package/dist/{critique-GWRXVXVG.js.map → critique-4YRRUNAU.js.map} +0 -0
- /package/dist/{critique-OK2ENBOA.js.map → critique-JCU2ATT6.js.map} +0 -0
- /package/dist/{crm-QSHUYXTW.js.map → crm-AF6XOOSF.js.map} +0 -0
- /package/dist/{crm-Y5QTZAHO.js.map → crm-LSMFGR6R.js.map} +0 -0
- /package/dist/{crop-WKTW3EMP.js.map → crop-RDP7YCNV.js.map} +0 -0
- /package/dist/{currency-PTOI5SPU.js.map → currency-4KNOOZUU.js.map} +0 -0
- /package/dist/{custom-conversions-NDY5RHSM.js.map → custom-conversions-7MZFTHUM.js.map} +0 -0
- /package/dist/{customers-2G32E6W7.js.map → customers-MM3VIZNA.js.map} +0 -0
- /package/dist/{decide-X2UAKYXK.js.map → decide-OPCCKAIT.js.map} +0 -0
- /package/dist/{delete-FK3A36WP.js.map → delete-CO2YBPTI.js.map} +0 -0
- /package/dist/{delete-HIAZHA56.js.map → delete-D7HTW32U.js.map} +0 -0
- /package/dist/{delete-2ZTMTKYD.js.map → delete-GKQTDOZF.js.map} +0 -0
- /package/dist/{delete-I43JQH2E.js.map → delete-JUPBYK3H.js.map} +0 -0
- /package/dist/{delete-RF44ILYE.js.map → delete-R3LXCKA4.js.map} +0 -0
- /package/dist/{demographics-2UYQW6II.js.map → demographics-DK5JDY6M.js.map} +0 -0
- /package/dist/{describe-M6DYXNQC.js.map → describe-537PPL7P.js.map} +0 -0
- /package/dist/{describe-OQ6R3EF7.js.map → describe-GIG46DT5.js.map} +0 -0
- /package/dist/{dimensions-DGYM5E5P.js.map → dimensions-UXK7DMTF.js.map} +0 -0
- /package/dist/{discard-NKPQ73UM.js.map → discard-DEJOM62Y.js.map} +0 -0
- /package/dist/{discover-XLIH7RCB.js.map → discover-MKFDG6NK.js.map} +0 -0
- /package/dist/{discover-YKMBVSPF.js.map → discover-U6YLVLTF.js.map} +0 -0
- /package/dist/{domain-LUDUZB3F.js.map → domain-MBOMV3CQ.js.map} +0 -0
- /package/dist/{download-LL6DL62N.js.map → download-KN2I55SA.js.map} +0 -0
- /package/dist/{download-SFWMT7DL.js.map → download-PRBLR6IQ.js.map} +0 -0
- /package/dist/{draft-7LPUJZCF.js.map → draft-BMNBT37B.js.map} +0 -0
- /package/dist/{draft-T7TWIFEX.js.map → draft-CGPVRRKC.js.map} +0 -0
- /package/dist/{draft-736FJJWK.js.map → draft-F74OIT5O.js.map} +0 -0
- /package/dist/{draft-MPWR47CG.js.map → draft-FIEZWBIX.js.map} +0 -0
- /package/dist/{draft-G432FJ7N.js.map → draft-H5RVDTFD.js.map} +0 -0
- /package/dist/{draft-XAAIGE6Q.js.map → draft-HZ5T6NOI.js.map} +0 -0
- /package/dist/{draft-R5ND5SWT.js.map → draft-UMPCOCP6.js.map} +0 -0
- /package/dist/{draft-374Z4MGY.js.map → draft-XEUHTUMR.js.map} +0 -0
- /package/dist/{env-DQHY5ODN.js.map → env-VBSATLEF.js.map} +0 -0
- /package/dist/{experiment-MO6MT6OJ.js.map → experiment-2XR6MBE2.js.map} +0 -0
- /package/dist/{experiments-OGZV73W6.js.map → experiments-YNJZCMQM.js.map} +0 -0
- /package/dist/{export-6Z6QBU6V.js.map → export-YCLJG5YP.js.map} +0 -0
- /package/dist/{extract-YGOQBOQK.js.map → extract-E3CMEN5U.js.map} +0 -0
- /package/dist/{facets-OLZ7JLFL.js.map → facets-Y4OACBMC.js.map} +0 -0
- /package/dist/{favorites-R3JO4SJJ.js.map → favorites-NSQX6HKB.js.map} +0 -0
- /package/dist/{feed-IUMMHM3I.js.map → feed-TKMMYAEH.js.map} +0 -0
- /package/dist/{feedback-ZBEZIIPT.js.map → feedback-MORAVN52.js.map} +0 -0
- /package/dist/{feedback-record-CZVSPZUR.js.map → feedback-record-M3RB7H2C.js.map} +0 -0
- /package/dist/{fetch-AL44XS4Q.js.map → fetch-EHP2FK6Y.js.map} +0 -0
- /package/dist/{fetch-K3NRT2L2.js.map → fetch-XU6QVWMS.js.map} +0 -0
- /package/dist/{find-ZFIGMRYQ.js.map → find-I7U3THF3.js.map} +0 -0
- /package/dist/{fit-5NVXWXZV.js.map → fit-IHUUFCGI.js.map} +0 -0
- /package/dist/{flows-CAOMVQYZ.js.map → flows-WSCIMXQX.js.map} +0 -0
- /package/dist/{follow-SS374QUW.js.map → follow-A46RAJEX.js.map} +0 -0
- /package/dist/{follow-competitors-3LTOTTBY.js.map → follow-competitors-VU2L3KWF.js.map} +0 -0
- /package/dist/{following-YMA5O3LF.js.map → following-UOUNSU6P.js.map} +0 -0
- /package/dist/{fonts-E3CNWPD5.js.map → fonts-3QW7EDHE.js.map} +0 -0
- /package/dist/{forecast-KOBF5TKM.js.map → forecast-2WVHMSZP.js.map} +0 -0
- /package/dist/{forecast-PWGN4ETP.js.map → forecast-F25LSCM5.js.map} +0 -0
- /package/dist/{funding-KLIZ73SS.js.map → funding-2VROIMLS.js.map} +0 -0
- /package/dist/{funnel-XIZROHV7.js.map → funnel-35DYDBJH.js.map} +0 -0
- /package/dist/{ga4-XPCE4EK5.js.map → ga4-ULHKTF23.js.map} +0 -0
- /package/dist/{generate-GHIXVLMY.js.map → generate-Z7AROAES.js.map} +0 -0
- /package/dist/{get-WS744HAO.js.map → get-4CAX33L2.js.map} +0 -0
- /package/dist/{get-HCGFATFD.js.map → get-ABQZJ2VQ.js.map} +0 -0
- /package/dist/{get-RDTJSWSA.js.map → get-IF7KHMSI.js.map} +0 -0
- /package/dist/{get-25KJJTO6.js.map → get-N7X75ZJO.js.map} +0 -0
- /package/dist/{get-SGNT4JG2.js.map → get-ZISAHMTQ.js.map} +0 -0
- /package/dist/{gif-YK5HJXRE.js.map → gif-QLNWBFAH.js.map} +0 -0
- /package/dist/{google-BI45CXMW.js.map → google-FDR55RRD.js.map} +0 -0
- /package/dist/{google-5JV7OMOH.js.map → google-M6XR7YGT.js.map} +0 -0
- /package/dist/{google-ads-DYZGUM6W.js.map → google-ads-NCSMNNND.js.map} +0 -0
- /package/dist/{group-7OWIYAKJ.js.map → group-HAQM6P7M.js.map} +0 -0
- /package/dist/{group-H6ZYRPE6.js.map → group-XVDH2ONO.js.map} +0 -0
- /package/dist/{gsc-HI2KXDEU.js.map → gsc-72AFO6B4.js.map} +0 -0
- /package/dist/{history-3EQQHYKT.js.map → history-FGQ2H7XH.js.map} +0 -0
- /package/dist/{history-SQPJ7PPE.js.map → history-LTOFKBMJ.js.map} +0 -0
- /package/dist/{history-DTQVPVFA.js.map → history-VJ254UXF.js.map} +0 -0
- /package/dist/{hubspot-MYTV36SM.js.map → hubspot-W2NM75YK.js.map} +0 -0
- /package/dist/{icon-HLJCWTR3.js.map → icon-F7AOOTFI.js.map} +0 -0
- /package/dist/{ideas-CVXHFVX7.js.map → ideas-54KFDNDM.js.map} +0 -0
- /package/dist/{images-K7JQ3ORB.js.map → images-JOEVCCP6.js.map} +0 -0
- /package/dist/{improve-BRC4R6MW.js.map → improve-LIKOER3S.js.map} +0 -0
- /package/dist/{ingest-4GNJ2PWL.js.map → ingest-6R7XUL46.js.map} +0 -0
- /package/dist/{insights-IVW6W5CP.js.map → insights-QNE6XCBA.js.map} +0 -0
- /package/dist/{insights-CN3GUTT7.js.map → insights-UXUUOQB7.js.map} +0 -0
- /package/dist/{inspect-25IVRU45.js.map → inspect-MGOR77FP.js.map} +0 -0
- /package/dist/{inspiration-KAXPRINY.js.map → inspiration-VXNGKAJV.js.map} +0 -0
- /package/dist/{instant-experiences-6F6GXZ67.js.map → instant-experiences-MT2XMQNH.js.map} +0 -0
- /package/dist/{intent-3GDLPKKN.js.map → intent-FZWPRUCI.js.map} +0 -0
- /package/dist/{job-2JJNKUHT.js.map → job-TS34W4IU.js.map} +0 -0
- /package/dist/{job-create-BNTNZCSP.js.map → job-create-FXXDR2EE.js.map} +0 -0
- /package/dist/{job-status-N7RWRDRO.js.map → job-status-R2H4HNC5.js.map} +0 -0
- /package/dist/{keep-Z2WH3CKU.js.map → keep-YSU3XMW3.js.map} +0 -0
- /package/dist/{keyword-gap-B2WPVHOB.js.map → keyword-gap-4ECYPWXJ.js.map} +0 -0
- /package/dist/{keyword-metrics-UDGWN7BO.js.map → keyword-metrics-SBIRN5KC.js.map} +0 -0
- /package/dist/{keywords-for-site-GEG6AXD3.js.map → keywords-for-site-TLNPJHT2.js.map} +0 -0
- /package/dist/{landing-BFMRM3HA.js.map → landing-ZICSVWKF.js.map} +0 -0
- /package/dist/{landings-7QRITXZ2.js.map → landings-XTPNPTHN.js.map} +0 -0
- /package/dist/{languages-RZLMZR57.js.map → languages-DIKRMAYE.js.map} +0 -0
- /package/dist/{languages-UJAOPTV2.js.map → languages-VNZQ5USL.js.map} +0 -0
- /package/dist/{launches-4H6ANGTG.js.map → launches-5R7EUONQ.js.map} +0 -0
- /package/dist/{layerize-P5LFIA4X.js.map → layerize-Q2QWDARG.js.map} +0 -0
- /package/dist/{lead-routes-WVXWVG62.js.map → lead-routes-IXUCGINI.js.map} +0 -0
- /package/dist/{leads-MTTOYNPM.js.map → leads-JUQFNK55.js.map} +0 -0
- /package/dist/{leads-CJKRKB2Q.js.map → leads-UVG6VYAC.js.map} +0 -0
- /package/dist/{learn-QPXZZIZZ.js.map → learn-A6BT25LQ.js.map} +0 -0
- /package/dist/{library-VW27X75P.js.map → library-G5YAFLTR.js.map} +0 -0
- /package/dist/{lighthouse-FGUFJRGR.js.map → lighthouse-BCBV2XGP.js.map} +0 -0
- /package/dist/{line-item-writes-RVOAMJ5R.js.map → line-item-writes-NW7A6HNH.js.map} +0 -0
- /package/dist/{line-items-POZRAJLC.js.map → line-items-OAG3QMDE.js.map} +0 -0
- /package/dist/{link-IXEZKRM7.js.map → link-4VJ7FSOA.js.map} +0 -0
- /package/dist/{linkedin-5PYG5HEM.js.map → linkedin-CKOWKD4M.js.map} +0 -0
- /package/dist/{linkedin-person-EMJXEZYR.js.map → linkedin-person-C22IDK7S.js.map} +0 -0
- /package/dist/{list-6PIJGN4M.js.map → list-2DKLO6AO.js.map} +0 -0
- /package/dist/{list-7GDMM26I.js.map → list-4SDJZVOL.js.map} +0 -0
- /package/dist/{list-UG4V5AM2.js.map → list-6YW4I4VG.js.map} +0 -0
- /package/dist/{list-4KS7WSUG.js.map → list-CDDXHMJQ.js.map} +0 -0
- /package/dist/{list-PTK2HOUY.js.map → list-GS42LK5C.js.map} +0 -0
- /package/dist/{list-Q5LVTPQP.js.map → list-HWNHRWGB.js.map} +0 -0
- /package/dist/{list-J5KWXHFO.js.map → list-QSBEYU45.js.map} +0 -0
- /package/dist/{list-DVVOP6FM.js.map → list-ZFGOONWL.js.map} +0 -0
- /package/dist/{list-XOYU7UTX.js.map → list-ZORO7PFP.js.map} +0 -0
- /package/dist/{locations-VJX64ZZR.js.map → locations-4RDUHKVR.js.map} +0 -0
- /package/dist/{locations-EISZ6JOT.js.map → locations-HATR6PSC.js.map} +0 -0
- /package/dist/{log-2F2N24DT.js.map → log-OSJHKHPV.js.map} +0 -0
- /package/dist/{logo-H2KHGLYD.js.map → logo-ABO4HJRG.js.map} +0 -0
- /package/dist/{lookup-K57ITJWF.js.map → lookup-SPNT3W3W.js.map} +0 -0
- /package/dist/{make-N5LVJSZD.js.map → make-7CIVNW77.js.map} +0 -0
- /package/dist/{map-QGJZIC5N.js.map → map-PMGZDXAN.js.map} +0 -0
- /package/dist/{mcp-RSW7KAWP.js.map → mcp-MOOOTRYG.js.map} +0 -0
- /package/dist/{media-K5RJXLTN.js.map → media-CIJW2Q3I.js.map} +0 -0
- /package/dist/{media-HDHZULQ7.js.map → media-GZKW2PZB.js.map} +0 -0
- /package/dist/{media-sources-7R7FO53Y.js.map → media-sources-5OYCKQ5J.js.map} +0 -0
- /package/dist/{members-B6TKGGT5.js.map → members-QG5IP5HM.js.map} +0 -0
- /package/dist/{meme-QMCUGXUE.js.map → meme-BPWX7YQH.js.map} +0 -0
- /package/dist/{meta-MOSJVYIE.js.map → meta-KVOSCSPJ.js.map} +0 -0
- /package/dist/{metrics-PRIKXVYZ.js.map → metrics-R4YS2JL6.js.map} +0 -0
- /package/dist/{models-M3E4YFCT.js.map → models-RJMZV5SH.js.map} +0 -0
- /package/dist/{normalize-5B4EQLUX.js.map → normalize-LATTXSL3.js.map} +0 -0
- /package/dist/{normalize-5QIGANTK.js.map → normalize-NMNOJ6Q5.js.map} +0 -0
- /package/dist/{options-K33CJOR6.js.map → options-KALH5TB7.js.map} +0 -0
- /package/dist/{organization-A4NFWWWI.js.map → organization-AGCF7DUJ.js.map} +0 -0
- /package/dist/{output-U5ZV6PST.js.map → output-34QMC3OU.js.map} +0 -0
- /package/dist/{page-XVOUD4VV.js.map → page-UDF3LJHP.js.map} +0 -0
- /package/dist/{page-photos-4JTIKXAW.js.map → page-photos-FCBW5UZS.js.map} +0 -0
- /package/dist/{pages-BAUS7LQM.js.map → pages-5W5G4MRB.js.map} +0 -0
- /package/dist/{performance-MHJDRLEK.js.map → performance-SITVZQWX.js.map} +0 -0
- /package/dist/{performance-NVURSEZ6.js.map → performance-YNXPUSGJ.js.map} +0 -0
- /package/dist/{pinterest-NA6HGPMB.js.map → pinterest-IABDXLF5.js.map} +0 -0
- /package/dist/{pixels-QOSEYXCP.js.map → pixels-4QAWLSEL.js.map} +0 -0
- /package/dist/{pixels-THDQD3RF.js.map → pixels-TYJVE377.js.map} +0 -0
- /package/dist/{plan-JYSHKPZQ.js.map → plan-I6EFL7RC.js.map} +0 -0
- /package/dist/{posts-BDMC644W.js.map → posts-SXQSLOFV.js.map} +0 -0
- /package/dist/{preview-X6EJGPAY.js.map → preview-7Y5LE24E.js.map} +0 -0
- /package/dist/{profile-YHI65VGK.js.map → profile-R5VPOOJU.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-MXXVRLVQ.js.map → promoted-tweet-writes-NAHPJ3VD.js.map} +0 -0
- /package/dist/{promoted-tweets-HFLGXWX2.js.map → promoted-tweets-2XQ4MWAC.js.map} +0 -0
- /package/dist/{properties-ZLY6NYVK.js.map → properties-2D2BIDGC.js.map} +0 -0
- /package/dist/{publish-6ZXFUBGP.js.map → publish-UITYPUBD.js.map} +0 -0
- /package/dist/{query-HFHTLNDN.js.map → query-LB5H7IRK.js.map} +0 -0
- /package/dist/{query-ELD7WSFR.js.map → query-NDOYOIHL.js.map} +0 -0
- /package/dist/{query-WMEX73ZB.js.map → query-RE7NB2BK.js.map} +0 -0
- /package/dist/{questionnaire-Y37I64FO.js.map → questionnaire-U767HYDE.js.map} +0 -0
- /package/dist/{read-2HQEZIJW.js.map → read-3TCDDALC.js.map} +0 -0
- /package/dist/{reddit-BIHGJPGP.js.map → reddit-6XIARCTX.js.map} +0 -0
- /package/dist/{refresh-4O32S4YR.js.map → refresh-6UCN7PDX.js.map} +0 -0
- /package/dist/{refresh-LVV4SPLT.js.map → refresh-GIB6QQZS.js.map} +0 -0
- /package/dist/{release-VIPNSPQ5.js.map → release-IN65L23O.js.map} +0 -0
- /package/dist/{relevant-pages-B5SYN575.js.map → relevant-pages-W7IM6YQW.js.map} +0 -0
- /package/dist/{remove-TPOWWFZ6.js.map → remove-LZQHDFZF.js.map} +0 -0
- /package/dist/{remove-2E77743U.js.map → remove-X3XWVE2M.js.map} +0 -0
- /package/dist/{reopen-UOBTJBMQ.js.map → reopen-RMMQ55CH.js.map} +0 -0
- /package/dist/{rerun-HUFJUOEV.js.map → rerun-ON6YCJAL.js.map} +0 -0
- /package/dist/{research-ELM3KHGE.js.map → research-LZBPCXIW.js.map} +0 -0
- /package/dist/{research-FOJIDMSE.js.map → research-W5KUOBXZ.js.map} +0 -0
- /package/dist/{reset-FTLWUFZK.js.map → reset-MUWXTLIB.js.map} +0 -0
- /package/dist/{reset-GIXXLPHQ.js.map → reset-VQNKXFAF.js.map} +0 -0
- /package/dist/{resolve-QHR5JJTJ.js.map → resolve-DMGWLMTC.js.map} +0 -0
- /package/dist/{retry-NY5KFEDA.js.map → retry-YI4YLYTQ.js.map} +0 -0
- /package/dist/{retry-HNWXJR5U.js.map → retry-ZQUJPKQH.js.map} +0 -0
- /package/dist/{retry-failed-OAH7JQKD.js.map → retry-failed-PEAUXGNT.js.map} +0 -0
- /package/dist/{revenue-JFMUODJO.js.map → revenue-6YZAOMF6.js.map} +0 -0
- /package/dist/{rule-writes-A4BFYHPA.js.map → rule-writes-G25O5JZS.js.map} +0 -0
- /package/dist/{rules-56E55SGC.js.map → rules-FHVZEN4D.js.map} +0 -0
- /package/dist/{rules-HLREXY2M.js.map → rules-KSOAKEI3.js.map} +0 -0
- /package/dist/{rules-add-ZOPOWJMY.js.map → rules-add-7X46VTIJ.js.map} +0 -0
- /package/dist/{run-CIXOJA3K.js.map → run-TA6HYFKZ.js.map} +0 -0
- /package/dist/{run-7OCCCNJ4.js.map → run-YORKHK6S.js.map} +0 -0
- /package/dist/{scaffold-ad-7ADCDQBK.js.map → scaffold-ad-RHSHBCVV.js.map} +0 -0
- /package/dist/{scaffold-static-ad-TV5OWISA.js.map → scaffold-static-ad-XNOGCMPF.js.map} +0 -0
- /package/dist/{scaffold-video-LLBDO546.js.map → scaffold-video-XEVJQ7QZ.js.map} +0 -0
- /package/dist/{schedule-ZATNBBWD.js.map → schedule-TMTLYULK.js.map} +0 -0
- /package/dist/{schedule-OFPSZVZ2.js.map → schedule-TNF6M6UD.js.map} +0 -0
- /package/dist/{scheduled-agents-BGMWNCAU.js.map → scheduled-agents-TS3WLRCM.js.map} +0 -0
- /package/dist/{schema-NCJTDRRV.js.map → schema-2YQAQVON.js.map} +0 -0
- /package/dist/{schema-OGP4DUPP.js.map → schema-6S5ZEPBS.js.map} +0 -0
- /package/dist/{scrape-ZHL2BHS7.js.map → scrape-FDBYU3TU.js.map} +0 -0
- /package/dist/{screenshot-ADMRDYWN.js.map → screenshot-QSRWL4J6.js.map} +0 -0
- /package/dist/{search-CQUS7EOM.js.map → search-BOCQFUM3.js.map} +0 -0
- /package/dist/{search-MKVVMJ2Q.js.map → search-CENPR7GA.js.map} +0 -0
- /package/dist/{search-HF5ECIYW.js.map → search-GEXDRTAQ.js.map} +0 -0
- /package/dist/{search-6W4HXR2S.js.map → search-LFTFNDMC.js.map} +0 -0
- /package/dist/{search-QUF6LHQ5.js.map → search-LTUUAGZG.js.map} +0 -0
- /package/dist/{search-6ZWI2NML.js.map → search-PYLNVZXI.js.map} +0 -0
- /package/dist/{search-copy-O6FDX4HT.js.map → search-copy-RLRRR3LB.js.map} +0 -0
- /package/dist/{seeds-5TM3O3K3.js.map → seeds-E2GLHJ2T.js.map} +0 -0
- /package/dist/{select-BRH4QLWU.js.map → select-BXBNFGVL.js.map} +0 -0
- /package/dist/{sends-MZKHZZGJ.js.map → sends-NBTGBZT7.js.map} +0 -0
- /package/dist/{sequences-3CEVHGHB.js.map → sequences-UOIHUOD3.js.map} +0 -0
- /package/dist/{set-prompt-SYWNE4CS.js.map → set-prompt-JJWBB23C.js.map} +0 -0
- /package/dist/{setup-links-4STQ5B4P.js.map → setup-links-6ANVKZCE.js.map} +0 -0
- /package/dist/{shared-I3SB77VH.js.map → shared-IMDHTVSW.js.map} +0 -0
- /package/dist/{shopify-7LDHCWUQ.js.map → shopify-6ISTKZCA.js.map} +0 -0
- /package/dist/{site-I3NFMPJB.js.map → site-OIV55MGO.js.map} +0 -0
- /package/dist/{sitemaps-PLAWVXQL.js.map → sitemaps-6A6JFBV4.js.map} +0 -0
- /package/dist/{sites-WX2IBTZT.js.map → sites-PZLE5FFV.js.map} +0 -0
- /package/dist/{skills-O6EQOAMQ.js.map → skills-FBIVWINH.js.map} +0 -0
- /package/dist/{sources-ZM7LEIMM.js.map → sources-5L4S5BQV.js.map} +0 -0
- /package/dist/{sources-CGXHNWJM.js.map → sources-GLJWZFHZ.js.map} +0 -0
- /package/dist/{stale-QNIJZTGD.js.map → stale-SK2SDGOT.js.map} +0 -0
- /package/dist/{stats-QQRYOMZA.js.map → stats-2NLNQBRY.js.map} +0 -0
- /package/dist/{status-5OMVGFCH.js.map → status-TD7ISXC5.js.map} +0 -0
- /package/dist/{sticker-654HS3K2.js.map → sticker-4NKFAGEK.js.map} +0 -0
- /package/dist/{stock-35LOO3YN.js.map → stock-XOXZGGU3.js.map} +0 -0
- /package/dist/{studies-IGOCWM7F.js.map → studies-C5IINK5Y.js.map} +0 -0
- /package/dist/{studio-NRWLXOFZ.js.map → studio-IDNM42JP.js.map} +0 -0
- /package/dist/{study-writes-Z5P2W7JH.js.map → study-writes-GJXLMM3D.js.map} +0 -0
- /package/dist/{suggest-JASHCOL5.js.map → suggest-Z553OSYW.js.map} +0 -0
- /package/dist/{sync-URIRLHTS.js.map → sync-CIRDY55O.js.map} +0 -0
- /package/dist/{sync-RCDODSOD.js.map → sync-PVIFUXX3.js.map} +0 -0
- /package/dist/{sync-6AN67IX3.js.map → sync-UBOHNOXB.js.map} +0 -0
- /package/dist/{sync-definition-EGHEQ57K.js.map → sync-definition-7NBT6LTK.js.map} +0 -0
- /package/dist/{tag-7YMFAZQQ.js.map → tag-22TFBGDG.js.map} +0 -0
- /package/dist/{tag-manager-LU4GAZ6R.js.map → tag-manager-QLZHU6NG.js.map} +0 -0
- /package/dist/{tags-6A7QOYBI.js.map → tags-3HB7N5WB.js.map} +0 -0
- /package/dist/{tags-JHT3Q6VO.js.map → tags-DG3XQ4SF.js.map} +0 -0
- /package/dist/{tags-MTVZJHCE.js.map → tags-T4EN6XYE.js.map} +0 -0
- /package/dist/{tags-KSMLT4G2.js.map → tags-T6THTVNP.js.map} +0 -0
- /package/dist/{tags-OU32R2SH.js.map → tags-XY6R2VJ6.js.map} +0 -0
- /package/dist/{targeting-7HXKBXWY.js.map → targeting-GNEBULXU.js.map} +0 -0
- /package/dist/{targeting-constants-QIB3UZHM.js.map → targeting-constants-GR6BVM2H.js.map} +0 -0
- /package/dist/{targeting-criteria-NUXZB7NP.js.map → targeting-criteria-CL472KJO.js.map} +0 -0
- /package/dist/{targets-KZBMOZUE.js.map → targets-7AQMSO6H.js.map} +0 -0
- /package/dist/{terms-X4OJWTQH.js.map → terms-LG7FYQOG.js.map} +0 -0
- /package/dist/{testimonials-2NQMY23B.js.map → testimonials-4QWVSEPU.js.map} +0 -0
- /package/dist/{themes-6KVP3COR.js.map → themes-ZTM4OVGK.js.map} +0 -0
- /package/dist/{top-companies-WWNPUJ23.js.map → top-companies-PMFYOAFK.js.map} +0 -0
- /package/dist/{transcript-P7HKVABU.js.map → transcript-YWFYNFWX.js.map} +0 -0
- /package/dist/{translate-YGHRSEX6.js.map → translate-VMQHPX4B.js.map} +0 -0
- /package/dist/{triggers-35UVEDXF.js.map → triggers-JKXISN45.js.map} +0 -0
- /package/dist/{tweets-X5PTAT6F.js.map → tweets-IF5FFFTH.js.map} +0 -0
- /package/dist/{unfollow-S5LHFLGW.js.map → unfollow-CDUOZWM7.js.map} +0 -0
- /package/dist/{unlink-XTZA474P.js.map → unlink-IUAFDLBT.js.map} +0 -0
- /package/dist/{unstage-AVLORZLW.js.map → unstage-OVOZE6DA.js.map} +0 -0
- /package/dist/{unstage-E2257FEP.js.map → unstage-ZYT5RNLK.js.map} +0 -0
- /package/dist/{update-GTXZRINC.js.map → update-23Q4T2J5.js.map} +0 -0
- /package/dist/{update-5ZNS2DKP.js.map → update-74VME6PN.js.map} +0 -0
- /package/dist/{update-MDVZ24VQ.js.map → update-O22DAZVX.js.map} +0 -0
- /package/dist/{update-DDKNKV6M.js.map → update-Q3WJ3DQN.js.map} +0 -0
- /package/dist/{update-3NA6ABLW.js.map → update-QAWK3O7L.js.map} +0 -0
- /package/dist/{upload-SYFB2VTJ.js.map → upload-EAEILUQB.js.map} +0 -0
- /package/dist/{upscale-P5EYUVOZ.js.map → upscale-HB6L6SZG.js.map} +0 -0
- /package/dist/{url-options-DJZV3ADK.js.map → url-options-M7RX2TD4.js.map} +0 -0
- /package/dist/{url-params-Y5XQSDEF.js.map → url-params-E5ON6W2N.js.map} +0 -0
- /package/dist/{validate-JX4FT7PL.js.map → validate-NB6PS5PF.js.map} +0 -0
- /package/dist/{variant-JQVZUUA4.js.map → variant-O7LXOA2E.js.map} +0 -0
- /package/dist/{videos-EHDZ46UQ.js.map → videos-SS2Y6FJF.js.map} +0 -0
- /package/dist/{view-IKKRJ5YD.js.map → view-ED636LWD.js.map} +0 -0
- /package/dist/{viewer-check-5GREZIVJ.js.map → viewer-check-CWS6OVM7.js.map} +0 -0
- /package/dist/{web-7TPDDBI6.js.map → web-HT22JFQR.js.map} +0 -0
- /package/dist/{winners-4PKEVMUC.js.map → winners-ZG5SHNBS.js.map} +0 -0
- /package/dist/{winning-ads-H7ZE5AQW.js.map → winning-ads-FXTP4PWZ.js.map} +0 -0
- /package/dist/{write-commands-V77MD5SC.js.map → write-commands-5YVQKO7E.js.map} +0 -0
- /package/dist/{write-commands-CTLF2M6L.js.map → write-commands-AIWR7NBO.js.map} +0 -0
- /package/dist/{write-commands-FIS6Y2MN.js.map → write-commands-UK6MKGHI.js.map} +0 -0
- /package/dist/{write-commands-CY734U34.js.map → write-commands-W3UN6F4Y.js.map} +0 -0
- /package/dist/{x-EMLFCHSG.js.map → x-KEMAY75C.js.map} +0 -0
package/dist/chunk-FSGJSREN.js
DELETED
|
@@ -1,2437 +0,0 @@
|
|
|
1
|
-
// ../api/src/ad-library/wire.ts
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
var adLibraryPlatformSchema = z.enum(["meta", "linkedin", "tiktok", "google"]);
|
|
4
|
-
var adLifecycleStageSchema = z.enum([
|
|
5
|
-
"new",
|
|
6
|
-
"testing",
|
|
7
|
-
"proven",
|
|
8
|
-
"evergreen",
|
|
9
|
-
"killed_early",
|
|
10
|
-
"retired",
|
|
11
|
-
"unverified"
|
|
12
|
-
]);
|
|
13
|
-
var winnersHardFiltersSchema = z.object({
|
|
14
|
-
platform: z.array(z.string()).optional(),
|
|
15
|
-
format: z.array(z.string()).optional(),
|
|
16
|
-
winner_category: z.array(z.string()).optional(),
|
|
17
|
-
awareness_stage: z.array(z.string()).optional(),
|
|
18
|
-
country: z.array(z.string()).optional(),
|
|
19
|
-
language: z.array(z.string()).optional(),
|
|
20
|
-
advertiser_ids: z.array(z.string()).optional(),
|
|
21
|
-
exclude_advertiser_ids: z.array(z.string()).optional(),
|
|
22
|
-
industry_cluster_ids: z.array(z.string()).optional(),
|
|
23
|
-
business_model_cluster_ids: z.array(z.string()).optional(),
|
|
24
|
-
// Proven HOOK seeds (from the `/api/ad-library/seed-catalog` rollup) — narrows
|
|
25
|
-
// a find-similar search to ads on a chosen winning hook pattern, no cluster
|
|
26
|
-
// lookup. Forwarded verbatim to ad-dna's `hard_filters.hook_archetype_seeds`;
|
|
27
|
-
// must live in this schema or the strict boundary parse would drop it.
|
|
28
|
-
hook_archetype_seeds: z.array(z.string()).optional(),
|
|
29
|
-
// A static's container (comparison_table, before_after_split, …), the values
|
|
30
|
-
// `/api/ad-library/seed-catalog` ranks as formats: the best proven example of
|
|
31
|
-
// a container whatever category it sells.
|
|
32
|
-
static_format_patterns: z.array(z.string()).optional(),
|
|
33
|
-
// Who the ad was made for, as the library judged it from the creative: pick
|
|
34
|
-
// references whose audience matches ours (a cold brief, cold references).
|
|
35
|
-
audience_temperature: z.array(z.string()).optional(),
|
|
36
|
-
funnel_stage: z.array(z.string()).optional(),
|
|
37
|
-
advertiser_size: z.array(z.string()).optional(),
|
|
38
|
-
// `false` drops the ads known to work only on viewers who already know the
|
|
39
|
-
// brand (an ad not judged yet is kept); `true` keeps only those.
|
|
40
|
-
presumes_brand_knowledge: z.boolean().optional(),
|
|
41
|
-
first_seen_after: z.string().optional(),
|
|
42
|
-
first_seen_before: z.string().optional(),
|
|
43
|
-
// Where the ad is in its life (any of these stages), read by ad-dna from its
|
|
44
|
-
// dates at search time; and `true` for only the version a brand kept after
|
|
45
|
-
// testing it against others (`false` drops those).
|
|
46
|
-
lifecycle_stage: z.array(z.string()).optional(),
|
|
47
|
-
survived_test: z.boolean().optional(),
|
|
48
|
-
// `true` keeps only ads a creative can be built on (pictures and videos a
|
|
49
|
-
// brand designed): drops Google search text, Shopping and app ads. A format
|
|
50
|
-
// list that names `text` lifts it.
|
|
51
|
-
design_reference: z.boolean().optional(),
|
|
52
|
-
// `true` keeps only Meta partnership ads (run by the brand with a creator or
|
|
53
|
-
// another brand); `false` drops them.
|
|
54
|
-
partnership: z.boolean().optional()
|
|
55
|
-
});
|
|
56
|
-
var firstSeenBoundSchema = z.union([z.iso.date(), z.iso.datetime({ offset: true })], {
|
|
57
|
-
error: "first_seen_after/first_seen_before must be an ISO date (2026-01-01) or datetime (2026-01-01T00:00:00Z)"
|
|
58
|
-
}).transform((value) => new Date(value.length === 10 ? `${value}T00:00:00Z` : value).toISOString());
|
|
59
|
-
var adFormatSchema = z.enum(["video", "static", "carousel", "text"]);
|
|
60
|
-
var winnerCategorySchema = z.enum([
|
|
61
|
-
"winner",
|
|
62
|
-
"grand_slam_winner",
|
|
63
|
-
"scaled_winner",
|
|
64
|
-
"low_profile_winner",
|
|
65
|
-
"rising",
|
|
66
|
-
"evergreen",
|
|
67
|
-
"low_traction_dud",
|
|
68
|
-
"thrash_iteration",
|
|
69
|
-
"thrash_family",
|
|
70
|
-
"false_winner",
|
|
71
|
-
"untested",
|
|
72
|
-
"dud"
|
|
73
|
-
]);
|
|
74
|
-
var awarenessStageSchema = z.enum([
|
|
75
|
-
"unaware",
|
|
76
|
-
"problem_aware",
|
|
77
|
-
"solution_aware",
|
|
78
|
-
"product_aware",
|
|
79
|
-
"most_aware"
|
|
80
|
-
]);
|
|
81
|
-
var audienceTemperatureSchema = z.enum(["0_cold", "1_warm_engaged", "2_hot_visited", "3_customer"]);
|
|
82
|
-
var funnelStageSchema = z.enum(["TOF", "MOF", "BOF"]);
|
|
83
|
-
var advertiserSizeSchema = z.enum(["solo", "smb", "mid", "enterprise"]);
|
|
84
|
-
var staticFormatPatternSchema = z.enum([
|
|
85
|
-
"clean_product",
|
|
86
|
-
"lifestyle_photo",
|
|
87
|
-
"headline_card",
|
|
88
|
-
"infographic",
|
|
89
|
-
"chat_screenshot",
|
|
90
|
-
"tweet_screenshot",
|
|
91
|
-
"review_screenshot",
|
|
92
|
-
"before_after_split",
|
|
93
|
-
"comparison_table",
|
|
94
|
-
"list_card",
|
|
95
|
-
"meme_template",
|
|
96
|
-
"native_post_lookalike",
|
|
97
|
-
"stock_photo_overlay",
|
|
98
|
-
"founder_portrait",
|
|
99
|
-
"testimonial_quote",
|
|
100
|
-
"packshot_minimalist",
|
|
101
|
-
"four_panel_lifestyle_grid",
|
|
102
|
-
"two_panel_split",
|
|
103
|
-
"notes_app_screenshot",
|
|
104
|
-
"founder_letter_textonly",
|
|
105
|
-
"us_vs_them_grid",
|
|
106
|
-
"benefit_callout_grid",
|
|
107
|
-
"create_your_own_adventure_meme",
|
|
108
|
-
"quad_split",
|
|
109
|
-
"stories_style_casual_static"
|
|
110
|
-
]);
|
|
111
|
-
var validatedHardFiltersSchema = winnersHardFiltersSchema.extend({
|
|
112
|
-
platform: z.array(adLibraryPlatformSchema).optional(),
|
|
113
|
-
format: z.array(adFormatSchema).optional(),
|
|
114
|
-
winner_category: z.array(winnerCategorySchema).optional(),
|
|
115
|
-
awareness_stage: z.array(awarenessStageSchema).optional(),
|
|
116
|
-
static_format_patterns: z.array(staticFormatPatternSchema).optional(),
|
|
117
|
-
audience_temperature: z.array(audienceTemperatureSchema).optional(),
|
|
118
|
-
funnel_stage: z.array(funnelStageSchema).optional(),
|
|
119
|
-
advertiser_size: z.array(advertiserSizeSchema).optional(),
|
|
120
|
-
first_seen_after: firstSeenBoundSchema.optional(),
|
|
121
|
-
first_seen_before: firstSeenBoundSchema.optional(),
|
|
122
|
-
lifecycle_stage: z.array(adLifecycleStageSchema).optional()
|
|
123
|
-
});
|
|
124
|
-
var winnersSortSchema = z.enum(["winner", "longest_running", "newest"]);
|
|
125
|
-
var winnersSearchFields = z.object({
|
|
126
|
-
free_text_query: z.string().max(500).optional(),
|
|
127
|
-
ref_ad_id: z.string().optional(),
|
|
128
|
-
limit: z.number().int().min(1).max(100).optional(),
|
|
129
|
-
// Pagination offset for infinite scroll. The browse view (no query) scrolls
|
|
130
|
-
// the whole library; a text/similar search scrolls its bounded ranked pool.
|
|
131
|
-
offset: z.number().int().min(0).optional(),
|
|
132
|
-
// Per-advertiser cap: past it a brand's ads are dropped. `0` = no cap (the
|
|
133
|
-
// library browse view sends it so a facet-filtered slice shows every winner
|
|
134
|
-
// and matches the facet-rail count); omit it to spread the brands instead,
|
|
135
|
-
// three each at the top and none dropped.
|
|
136
|
-
max_per_advertiser: z.number().int().min(0).max(50).optional(),
|
|
137
|
-
// ad-dna reads one advertiser in `advertiser_ids` as browsing that brand, and
|
|
138
|
-
// keeps its measured failures. `false` keeps it a reference search: what
|
|
139
|
-
// Baker sends when it narrowed to the company's followed brands itself.
|
|
140
|
-
brand_browse: z.boolean().optional(),
|
|
141
|
-
min_relevance: z.number().min(0).max(1).optional(),
|
|
142
|
-
// One page picked for variety (different brands, containers and hooks)
|
|
143
|
-
// instead of rank order: a reference set for N concepts. Ignores offset.
|
|
144
|
-
diverse: z.boolean().optional(),
|
|
145
|
-
// The order of a browse (no query): by winner score (default), by how long
|
|
146
|
-
// the ad has run, or by when it was first seen. A query ranks by relevance
|
|
147
|
-
// blended with winner score, so `sort` only means something without one.
|
|
148
|
-
sort: winnersSortSchema.optional(),
|
|
149
|
-
hard_filters: winnersHardFiltersSchema.optional(),
|
|
150
|
-
// `score_breakdown` surfaces the "why it ranked" panel; facets drive the
|
|
151
|
-
// filter rail. thumbnails/full_dna_url are opt-in extras.
|
|
152
|
-
include: z.array(z.enum(["score_breakdown", "facets", "full_dna_url", "thumbnails"])).optional()
|
|
153
|
-
});
|
|
154
|
-
var hasSearchInput = (b) => b.free_text_query !== void 0 || b.ref_ad_id !== void 0 || b.hard_filters !== void 0;
|
|
155
|
-
var SEARCH_INPUT_MESSAGE = "Provide free_text_query, ref_ad_id, or hard_filters";
|
|
156
|
-
var winnerSearchScopeSchema = z.enum(["all", "followed", "followed-first"]);
|
|
157
|
-
var scopedWinnersSearchRequestSchema = winnersSearchFields.extend({
|
|
158
|
-
scope: winnerSearchScopeSchema.default("followed-first"),
|
|
159
|
-
hard_filters: validatedHardFiltersSchema.optional()
|
|
160
|
-
}).refine(hasSearchInput, { message: SEARCH_INPUT_MESSAGE }).refine((b) => b.scope !== "followed-first" || !b.offset, {
|
|
161
|
-
message: "offset is not supported with scope followed-first; raise limit instead"
|
|
162
|
-
});
|
|
163
|
-
var winningAdDnaSchema = z.object({
|
|
164
|
-
creative_concept: z.string().nullable(),
|
|
165
|
-
angle: z.string().nullable(),
|
|
166
|
-
awareness_stage: z.string().nullable(),
|
|
167
|
-
// How many claims the ad's market has already heard (s1 first to say it … s5 tired of claims).
|
|
168
|
-
// Optional while an older ad-dna does not send it.
|
|
169
|
-
sophistication_stage: z.string().nullable().optional(),
|
|
170
|
-
audience_temperature: z.string().nullable(),
|
|
171
|
-
// Who else the ad was made for, and whether its copy only works on viewers who
|
|
172
|
-
// already know the brand (null: not judged yet). Optional while an older
|
|
173
|
-
// ad-dna does not send them.
|
|
174
|
-
funnel_stage: z.string().nullable().optional(),
|
|
175
|
-
advertiser_size: z.string().nullable().optional(),
|
|
176
|
-
presumes_brand_knowledge: z.boolean().nullable().optional(),
|
|
177
|
-
brand_knowledge_reason: z.string().nullable().optional(),
|
|
178
|
-
target_persona: z.string().nullable(),
|
|
179
|
-
hook_archetype: z.string().nullable(),
|
|
180
|
-
// The proven hook pattern (`winning-ads hooks` seed) the free-text
|
|
181
|
-
// `hook_archetype` matches: the value two ads can share. Optional while an
|
|
182
|
-
// older ad-dna does not send it.
|
|
183
|
-
hook_seed: z.string().nullable().optional(),
|
|
184
|
-
creator_type: z.string().nullable(),
|
|
185
|
-
industry: z.string().nullable(),
|
|
186
|
-
business_model: z.string().nullable(),
|
|
187
|
-
// What the viewer sees, the static's container (comparison_table, …) and why
|
|
188
|
-
// it works: pick a reference on its move, not on its angle label.
|
|
189
|
-
visual: z.string().nullable(),
|
|
190
|
-
container: z.string().nullable(),
|
|
191
|
-
mechanism: z.string().nullable()
|
|
192
|
-
});
|
|
193
|
-
var winningAdScoreBreakdownSchema = z.object({
|
|
194
|
-
relevance: z.number().nullable(),
|
|
195
|
-
judge_reason: z.string().nullable(),
|
|
196
|
-
winner_score: z.number().nullable(),
|
|
197
|
-
final_score: z.number().nullable()
|
|
198
|
-
});
|
|
199
|
-
var STRONG_PROOF_SCORE = 0.4;
|
|
200
|
-
var SOME_PROOF_SCORE = 0.2;
|
|
201
|
-
function proofStrength(score) {
|
|
202
|
-
if (score === null || score === void 0) return null;
|
|
203
|
-
if (score >= STRONG_PROOF_SCORE) return "strong";
|
|
204
|
-
return score >= SOME_PROOF_SCORE ? "some" : "little";
|
|
205
|
-
}
|
|
206
|
-
var winningAdSchema = z.object({
|
|
207
|
-
ad_id: z.string().nullable(),
|
|
208
|
-
advertiser_id: z.string().nullable(),
|
|
209
|
-
advertiser: z.string().nullable(),
|
|
210
|
-
platform: z.string().nullable(),
|
|
211
|
-
format: z.string().nullable(),
|
|
212
|
-
media_url: z.string().nullable(),
|
|
213
|
-
media_kind: z.string().nullable(),
|
|
214
|
-
thumbnail_url: z.string().nullable(),
|
|
215
|
-
// Query match ∈ [0,1]; null on pure winner browse (no query).
|
|
216
|
-
relevance: z.number().nullable(),
|
|
217
|
-
// How proven in-market (global creative strength).
|
|
218
|
-
winner_score: z.number().nullable(),
|
|
219
|
-
winner_category: z.string().nullable(),
|
|
220
|
-
// The score ad-dna ranked the result by (relevance blended with winner
|
|
221
|
-
// score, or the winner score on a browse). Search results only.
|
|
222
|
-
final_score: z.number().nullable().optional(),
|
|
223
|
-
days_active: z.number().nullable(),
|
|
224
|
-
reach: z.number().nullable(),
|
|
225
|
-
// Null when the brand hasn't been checked recently enough to say.
|
|
226
|
-
active: z.boolean().nullable(),
|
|
227
|
-
// When the brand's ads were last checked: the date `active` was observed.
|
|
228
|
-
active_checked_at: z.string().nullable(),
|
|
229
|
-
// Creative family grouping (search dedups launches into one card).
|
|
230
|
-
creative_id: z.string().nullable(),
|
|
231
|
-
family_id: z.string().nullable(),
|
|
232
|
-
member_count: z.number().nullable(),
|
|
233
|
-
sibling_ad_ids: z.array(z.string()),
|
|
234
|
-
// Where the ad is in its life, and whether it is the version its brand kept
|
|
235
|
-
// after testing: what competitors kept is a stronger reference than what
|
|
236
|
-
// merely runs. Search results only; absent on an older ad-dna.
|
|
237
|
-
stage: adLifecycleStageSchema.nullable().optional(),
|
|
238
|
-
survived_test: z.boolean().nullable().optional(),
|
|
239
|
-
// A Meta partnership ad, run by the brand with a creator or another brand,
|
|
240
|
-
// and who with (null when Meta does not say). Null for every other ad;
|
|
241
|
-
// absent on an older ad-dna.
|
|
242
|
-
partnership: z.object({ partner_name: z.string().nullable() }).nullable().optional(),
|
|
243
|
-
dna: winningAdDnaSchema,
|
|
244
|
-
score_breakdown: winningAdScoreBreakdownSchema.nullable()
|
|
245
|
-
});
|
|
246
|
-
var facetCountSchema = z.object({ value: z.string(), label: z.string().optional(), count: z.number() });
|
|
247
|
-
var winnersFacetsSchema = z.object({
|
|
248
|
-
industry: z.array(facetCountSchema),
|
|
249
|
-
creator_type: z.array(facetCountSchema),
|
|
250
|
-
winner_category: z.array(facetCountSchema),
|
|
251
|
-
format: z.array(facetCountSchema),
|
|
252
|
-
business_model: z.array(facetCountSchema)
|
|
253
|
-
});
|
|
254
|
-
var winnersSearchResponseSchema = z.object({
|
|
255
|
-
results: z.array(winningAdSchema),
|
|
256
|
-
facets: winnersFacetsSchema.nullable(),
|
|
257
|
-
pool_size: z.number().nullable(),
|
|
258
|
-
// Bucketed confidence of the top match; null on pure browse.
|
|
259
|
-
match_confidence: z.enum(["high", "medium", "low"]).nullable(),
|
|
260
|
-
below_floor_count: z.number().nullable(),
|
|
261
|
-
query_id: z.string().nullable(),
|
|
262
|
-
// Pagination window for infinite scroll. `offset` echoes the request; `total`
|
|
263
|
-
// is how many winners this query+filters can scroll through; `has_more` is
|
|
264
|
-
// true when more pages exist. Null on an older ad-dna that predates paging —
|
|
265
|
-
// the dashboard then falls back to a single non-paged page.
|
|
266
|
-
offset: z.number().nullable(),
|
|
267
|
-
total: z.number().nullable(),
|
|
268
|
-
has_more: z.boolean().nullable(),
|
|
269
|
-
// Ads the corpus holds for each requested `country`; null when the search did
|
|
270
|
-
// not filter by country. Tells "no winners matched" apart from "unsupported"
|
|
271
|
-
// (an unknown code is refused outright).
|
|
272
|
-
country_coverage: z.array(z.object({ code: z.string(), ads: z.number() })).nullable()
|
|
273
|
-
});
|
|
274
|
-
var winnerSourceSchema = z.enum(["followed", "library"]);
|
|
275
|
-
var referenceUsesSchema = z.object({
|
|
276
|
-
companies: z.number(),
|
|
277
|
-
ours: z.boolean(),
|
|
278
|
-
approved: z.number(),
|
|
279
|
-
rejected: z.number()
|
|
280
|
-
});
|
|
281
|
-
var scopedWinningAdSchema = winningAdSchema.extend({
|
|
282
|
-
source: winnerSourceSchema,
|
|
283
|
-
baker_uses: referenceUsesSchema.optional()
|
|
284
|
-
});
|
|
285
|
-
var scopedWinnersSearchResponseSchema = winnersSearchResponseSchema.extend({
|
|
286
|
-
results: z.array(scopedWinningAdSchema),
|
|
287
|
-
scope: winnerSearchScopeSchema,
|
|
288
|
-
// How many brands the company follows; 0 means `followed` answers empty and
|
|
289
|
-
// `followed-first` is the whole library.
|
|
290
|
-
following_count: z.number()
|
|
291
|
-
});
|
|
292
|
-
var advertiserPlatformSchema = z.object({
|
|
293
|
-
platform: z.string(),
|
|
294
|
-
external_id: z.string().nullable(),
|
|
295
|
-
region: z.string().nullable(),
|
|
296
|
-
// The account's own name, e.g. one Facebook page per market; null until its first scan.
|
|
297
|
-
name: z.string().nullable()
|
|
298
|
-
});
|
|
299
|
-
var advertiserScanSchema = z.object({
|
|
300
|
-
state: z.enum(["waiting", "running", "failed"]),
|
|
301
|
-
ads_found: z.number(),
|
|
302
|
-
since: z.string()
|
|
303
|
-
});
|
|
304
|
-
var corpusAdvertiserSchema = z.object({
|
|
305
|
-
advertiser_id: z.string(),
|
|
306
|
-
label: z.string().nullable(),
|
|
307
|
-
scraped_name: z.string().nullable(),
|
|
308
|
-
image_url: z.string().nullable(),
|
|
309
|
-
platforms: z.array(advertiserPlatformSchema),
|
|
310
|
-
platform_count: z.number().nullable(),
|
|
311
|
-
family_count: z.number().nullable(),
|
|
312
|
-
active_ad_count: z.number().nullable(),
|
|
313
|
-
total_ad_count: z.number().nullable(),
|
|
314
|
-
total_reach: z.number().nullable(),
|
|
315
|
-
last_synced_at: z.string().nullable(),
|
|
316
|
-
// Only the detail read carries it; older ad-dna builds send none.
|
|
317
|
-
scan: advertiserScanSchema.nullable().optional()
|
|
318
|
-
});
|
|
319
|
-
var advertiserSearchRequestSchema = z.object({
|
|
320
|
-
q: z.string().optional(),
|
|
321
|
-
platform: adLibraryPlatformSchema.optional(),
|
|
322
|
-
limit: z.number().int().min(1).max(100).optional(),
|
|
323
|
-
offset: z.number().int().min(0).optional()
|
|
324
|
-
});
|
|
325
|
-
var advertiserSearchResponseSchema = z.object({
|
|
326
|
-
advertisers: z.array(corpusAdvertiserSchema),
|
|
327
|
-
total: z.number().nullable()
|
|
328
|
-
});
|
|
329
|
-
var advertiserConvergenceSchema = z.object({
|
|
330
|
-
convergence_state: z.string().nullable(),
|
|
331
|
-
dimension_summary: z.unknown().nullable(),
|
|
332
|
-
iteration_velocity_30d: z.number().nullable(),
|
|
333
|
-
last_refresh_completed_at: z.string().nullable()
|
|
334
|
-
});
|
|
335
|
-
var profileFormatSchema = z.enum(["image", "video", "carousel", "text"]);
|
|
336
|
-
var profileAdRefSchema = z.object({
|
|
337
|
-
ad_id: z.string(),
|
|
338
|
-
platform: z.string(),
|
|
339
|
-
format: profileFormatSchema,
|
|
340
|
-
headline: z.string().nullable(),
|
|
341
|
-
media_url: z.string().nullable(),
|
|
342
|
-
media_kind: z.enum(["image", "video"]).nullable(),
|
|
343
|
-
is_active: z.boolean()
|
|
344
|
-
});
|
|
345
|
-
var formatMixSchema = z.record(profileFormatSchema, z.number());
|
|
346
|
-
var spendFigureSchema = z.object({ min: z.number(), low: z.number(), high: z.number() });
|
|
347
|
-
var advertiserSpendSchema = spendFigureSchema.extend({
|
|
348
|
-
currency: z.literal("USD"),
|
|
349
|
-
method: z.string(),
|
|
350
|
-
/** First day any priced ad was seen: the lifetime figure runs from here to now. Absent on older responses. */
|
|
351
|
-
since: z.string().nullable().optional(),
|
|
352
|
-
last_30_days: spendFigureSchema,
|
|
353
|
-
/**
|
|
354
|
-
* Every platform the brand runs on. `ads` counts all its ads there; a
|
|
355
|
-
* platform that publishes no delivery is listed with zeros and every ad
|
|
356
|
-
* `unpriced_ads`. Older ad-dna lists priced platforms only, without the last 30 days.
|
|
357
|
-
*/
|
|
358
|
-
by_platform: z.array(
|
|
359
|
-
spendFigureSchema.extend({
|
|
360
|
-
platform: z.string(),
|
|
361
|
-
ads: z.number(),
|
|
362
|
-
measured_ads: z.number(),
|
|
363
|
-
last_30_days: spendFigureSchema.optional(),
|
|
364
|
-
unpriced_ads: z.number().optional()
|
|
365
|
-
})
|
|
366
|
-
),
|
|
367
|
-
measured_ads: z.number(),
|
|
368
|
-
extrapolated_ads: z.number(),
|
|
369
|
-
unpriced_ads: z.number()
|
|
370
|
-
});
|
|
371
|
-
var creativeTestSchema = z.object({
|
|
372
|
-
family_id: z.string(),
|
|
373
|
-
concept: z.string().nullable(),
|
|
374
|
-
launched_at: z.string(),
|
|
375
|
-
versions: z.number(),
|
|
376
|
-
still_running: z.number(),
|
|
377
|
-
cut_early: z.number(),
|
|
378
|
-
status: z.enum(["running", "decided"]),
|
|
379
|
-
// When it was decided: the first version cut, or its third week with none cut. Null while running.
|
|
380
|
-
decided_at: z.string().nullable().optional(),
|
|
381
|
-
winner_ad_id: z.string().nullable(),
|
|
382
|
-
ad_ids: z.array(z.string()),
|
|
383
|
-
what_differed: z.array(z.object({ dimension: z.string(), winner: z.string(), others: z.array(z.string()) }))
|
|
384
|
-
});
|
|
385
|
-
var ideaStandingSchema = z.enum(["new", "testing", "winner"]);
|
|
386
|
-
var ideaTallyShape = {
|
|
387
|
-
new_ideas: z.number().optional(),
|
|
388
|
-
idea_ads: z.object({ new: z.number(), testing: z.number(), winner: z.number() }).optional()
|
|
389
|
-
};
|
|
390
|
-
var advertiserProfileSchema = z.object({
|
|
391
|
-
spend: advertiserSpendSchema.nullable(),
|
|
392
|
-
tests: z.array(creativeTestSchema),
|
|
393
|
-
launch_weeks: z.array(
|
|
394
|
-
z.object({
|
|
395
|
-
week_start: z.string(),
|
|
396
|
-
launched: z.number(),
|
|
397
|
-
still_running: z.number(),
|
|
398
|
-
stopped_early: z.number(),
|
|
399
|
-
...ideaTallyShape
|
|
400
|
-
})
|
|
401
|
-
),
|
|
402
|
-
similar: z.array(
|
|
403
|
-
z.object({
|
|
404
|
-
advertiser_id: z.string(),
|
|
405
|
-
label: z.string().nullable(),
|
|
406
|
-
shared_ads: z.number(),
|
|
407
|
-
platforms: z.array(z.string())
|
|
408
|
-
})
|
|
409
|
-
),
|
|
410
|
-
/**
|
|
411
|
-
* Each day's launches, in ads, in creatives (one creative runs in many ads)
|
|
412
|
-
* and by idea. The creative counts, `ad_count` and `idea` are optional while
|
|
413
|
-
* the service that sends them may lag the dashboard; without them `ads` is
|
|
414
|
-
* one per ad.
|
|
415
|
-
*/
|
|
416
|
-
launch_calendar: z.array(
|
|
417
|
-
z.object({
|
|
418
|
-
date: z.string(),
|
|
419
|
-
launched: z.number(),
|
|
420
|
-
still_running: z.number(),
|
|
421
|
-
creatives: z.number().optional(),
|
|
422
|
-
creatives_running: z.number().optional(),
|
|
423
|
-
...ideaTallyShape,
|
|
424
|
-
ads: z.array(
|
|
425
|
-
profileAdRefSchema.extend({ ad_count: z.number().optional(), idea: ideaStandingSchema.nullable().optional() })
|
|
426
|
-
)
|
|
427
|
-
})
|
|
428
|
-
),
|
|
429
|
-
recent_launches: z.array(
|
|
430
|
-
profileAdRefSchema.extend({
|
|
431
|
-
first_seen_at: z.string().nullable(),
|
|
432
|
-
stage: adLifecycleStageSchema,
|
|
433
|
-
idea: ideaStandingSchema.nullable().optional()
|
|
434
|
-
})
|
|
435
|
-
),
|
|
436
|
-
landing_pages: z.array(
|
|
437
|
-
z.object({
|
|
438
|
-
page: z.string(),
|
|
439
|
-
url: z.string(),
|
|
440
|
-
ads: z.number(),
|
|
441
|
-
active_ads: z.number(),
|
|
442
|
-
last_seen_at: z.string().nullable()
|
|
443
|
-
})
|
|
444
|
-
),
|
|
445
|
-
audiences: z.object({
|
|
446
|
-
inferred: z.array(z.object({ audience: z.string(), ads: z.number() })),
|
|
447
|
-
measured: z.object({
|
|
448
|
-
ages: z.array(z.object({ age_range: z.string(), male: z.number(), female: z.number(), unknown: z.number() })),
|
|
449
|
-
countries: z.array(z.object({ country: z.string(), reach: z.number() }))
|
|
450
|
-
}).nullable(),
|
|
451
|
-
/**
|
|
452
|
-
* Google: who the ads were declared to target (by how many ads name each
|
|
453
|
-
* value) and the countries Google showed them in, by impressions. Google
|
|
454
|
-
* publishes both only for ads shown in the EU. Null when no ad carries any.
|
|
455
|
-
*/
|
|
456
|
-
targeting: z.object({
|
|
457
|
-
ages: z.array(z.object({ value: z.string(), ads: z.number() })),
|
|
458
|
-
genders: z.array(z.object({ value: z.string(), ads: z.number() })),
|
|
459
|
-
locations: z.array(z.object({ value: z.string(), excluded: z.boolean(), ads: z.number() })),
|
|
460
|
-
countries: z.array(z.object({ country: z.string(), impressions: z.number() }))
|
|
461
|
-
}).nullable().optional()
|
|
462
|
-
}),
|
|
463
|
-
freshness: z.object({
|
|
464
|
-
last_checked_at: z.string().nullable(),
|
|
465
|
-
next_scan_at: z.string().nullable(),
|
|
466
|
-
platforms: z.array(z.object({ platform: z.string(), last_checked_at: z.string().nullable() }))
|
|
467
|
-
}),
|
|
468
|
-
media_mix: z.object({ total: formatMixSchema, active: formatMixSchema }),
|
|
469
|
-
platform_split: z.object({ total: z.record(z.string(), z.number()), active: z.record(z.string(), z.number()) }),
|
|
470
|
-
counts: z.object({
|
|
471
|
-
total_ads: z.number(),
|
|
472
|
-
active_ads: z.number(),
|
|
473
|
-
unique_creatives: z.number(),
|
|
474
|
-
/** Distinct ideas (ad families; a creative with no family yet is its own). */
|
|
475
|
-
unique_ideas: z.number().optional(),
|
|
476
|
-
unique_copies: z.number(),
|
|
477
|
-
unique_headlines: z.number(),
|
|
478
|
-
unique_landing_pages: z.number(),
|
|
479
|
-
new_ads_per_week: z.number()
|
|
480
|
-
})
|
|
481
|
-
});
|
|
482
|
-
var advertiserLaunchesSchema = z.object({
|
|
483
|
-
since_days: z.number(),
|
|
484
|
-
advertisers: z.array(
|
|
485
|
-
z.object({
|
|
486
|
-
advertiser_id: z.string(),
|
|
487
|
-
label: z.string().nullable(),
|
|
488
|
-
launched: z.number(),
|
|
489
|
-
still_running: z.number(),
|
|
490
|
-
launches: z.array(
|
|
491
|
-
profileAdRefSchema.extend({
|
|
492
|
-
first_seen_at: z.string().nullable(),
|
|
493
|
-
stage: adLifecycleStageSchema,
|
|
494
|
-
idea: ideaStandingSchema.nullable().optional()
|
|
495
|
-
})
|
|
496
|
-
),
|
|
497
|
-
// The tests the brand decided in the window: the version kept and what
|
|
498
|
-
// differed. Absent on an older ad-dna.
|
|
499
|
-
tests_decided: z.array(creativeTestSchema).optional()
|
|
500
|
-
})
|
|
501
|
-
)
|
|
502
|
-
});
|
|
503
|
-
var advertiserLandingPageSchema = z.object({
|
|
504
|
-
/** `https://host/path`, no www., query or fragment: the page's identity and the address it is analysed at. */
|
|
505
|
-
canonical_url: z.string(),
|
|
506
|
-
/** The link of the page's most recently seen ad. */
|
|
507
|
-
url: z.string(),
|
|
508
|
-
domain: z.string(),
|
|
509
|
-
path: z.string(),
|
|
510
|
-
ads: z.number(),
|
|
511
|
-
active_ads: z.number(),
|
|
512
|
-
platforms: z.array(z.string()),
|
|
513
|
-
first_seen_at: z.string().nullable(),
|
|
514
|
-
last_seen_at: z.string().nullable(),
|
|
515
|
-
/** The stretches ads pointed here, oldest first; `to` is null on the one still running. Older ad-dna omits it. */
|
|
516
|
-
windows: z.array(z.object({ from: z.string(), to: z.string().nullable() })).default([]),
|
|
517
|
-
/**
|
|
518
|
-
* Only Google search ads name it: the address printed on the ad, whose path
|
|
519
|
-
* the advertiser types freely, not a page known to exist. Older ad-dna omits it.
|
|
520
|
-
*/
|
|
521
|
-
address_only: z.boolean().default(false),
|
|
522
|
-
ads_sample: z.array(profileAdRefSchema)
|
|
523
|
-
});
|
|
524
|
-
var advertiserLandingPagesSchema = z.object({
|
|
525
|
-
advertiser_id: z.string(),
|
|
526
|
-
total_pages: z.number(),
|
|
527
|
-
pages: z.array(advertiserLandingPageSchema)
|
|
528
|
-
});
|
|
529
|
-
var landingAnalysisStatusSchema = z.enum(["not_analysed", "analysing", "ready", "failed"]);
|
|
530
|
-
var landingPitchSchema = z.object({
|
|
531
|
-
headline: z.string().nullable(),
|
|
532
|
-
subheadline: z.string().nullable(),
|
|
533
|
-
value_propositions: z.array(z.string()),
|
|
534
|
-
offer: z.string().nullable(),
|
|
535
|
-
pricing: z.array(z.string()),
|
|
536
|
-
ctas: z.array(z.string()),
|
|
537
|
-
proof: z.array(z.object({ kind: z.string(), detail: z.string() })),
|
|
538
|
-
audience: z.string().nullable(),
|
|
539
|
-
summary: z.string(),
|
|
540
|
-
/** The page's sections top to bottom (site chrome left out). */
|
|
541
|
-
sections: z.array(z.object({ type: z.string(), headline: z.string().nullable() }))
|
|
542
|
-
});
|
|
543
|
-
var landingAnalysisSchema = z.object({
|
|
544
|
-
status: landingAnalysisStatusSchema,
|
|
545
|
-
title: z.string().nullable(),
|
|
546
|
-
/** The whole page, top to bottom; read the top for a thumbnail. */
|
|
547
|
-
screenshot_url: z.string().nullable(),
|
|
548
|
-
studied_at: z.string().nullable(),
|
|
549
|
-
/** Why the page could not be read, in product words; null unless `failed`. */
|
|
550
|
-
error: z.string().nullable(),
|
|
551
|
-
/** Null until the page's pitch has been read. */
|
|
552
|
-
pitch: landingPitchSchema.nullable()
|
|
553
|
-
});
|
|
554
|
-
var brandLandingPagesSchema = z.object({
|
|
555
|
-
advertiser_id: z.string(),
|
|
556
|
-
total_pages: z.number(),
|
|
557
|
-
pages: z.array(advertiserLandingPageSchema.extend({ analysis: landingAnalysisSchema }))
|
|
558
|
-
});
|
|
559
|
-
var LANDING_ANALYSE_BATCH = 5;
|
|
560
|
-
var analyseLandingPagesRequestSchema = z.object({
|
|
561
|
-
urls: z.array(z.string().min(1)).min(1).max(LANDING_ANALYSE_BATCH)
|
|
562
|
-
});
|
|
563
|
-
var analyseLandingPagesResponseSchema = z.object({
|
|
564
|
-
pages: z.array(z.object({ url: z.string(), status: landingAnalysisStatusSchema, error: z.string().nullable() }))
|
|
565
|
-
});
|
|
566
|
-
var resolvePreviewSchema = z.object({
|
|
567
|
-
platform: adLibraryPlatformSchema,
|
|
568
|
-
external_id: z.string(),
|
|
569
|
-
name: z.string(),
|
|
570
|
-
image_url: z.string().nullable(),
|
|
571
|
-
category: z.string().nullable(),
|
|
572
|
-
industry: z.string().nullable(),
|
|
573
|
-
website: z.string().nullable(),
|
|
574
|
-
followers: z.number().nullable()
|
|
575
|
-
});
|
|
576
|
-
var followedStatusSchema = z.enum(["discovering", "ingesting", "ready"]);
|
|
577
|
-
var followedAdvertiserSchema = z.object({
|
|
578
|
-
// Baker subscription row id (used to unfollow).
|
|
579
|
-
followed_id: z.string(),
|
|
580
|
-
advertiser_id: z.string(),
|
|
581
|
-
label: z.string(),
|
|
582
|
-
image_url: z.string().nullable(),
|
|
583
|
-
platforms: z.array(z.object({ platform: adLibraryPlatformSchema, external_id: z.string() })),
|
|
584
|
-
status: followedStatusSchema,
|
|
585
|
-
active_ad_count: z.number().nullable(),
|
|
586
|
-
total_ad_count: z.number().nullable(),
|
|
587
|
-
family_count: z.number().nullable(),
|
|
588
|
-
// Progress while status is "discovering" or "ingesting". `adding_ingested`
|
|
589
|
-
// and `adding_enqueued` are both counts for the CURRENT run, so they read as
|
|
590
|
-
// a fraction; `total_ad_count` is the brand's whole corpus and is not.
|
|
591
|
-
adding_discovered: z.number().nullable(),
|
|
592
|
-
adding_enqueued: z.number().nullable(),
|
|
593
|
-
adding_ingested: z.number().nullable(),
|
|
594
|
-
// A discovery job ended in failure, so this brand's ads are under-counted.
|
|
595
|
-
// Distinguishes "we couldn't finish looking" from "this brand runs no ads".
|
|
596
|
-
discovery_failed: z.boolean().nullable(),
|
|
597
|
-
// The current run is still in line upstream: nothing has started on it yet,
|
|
598
|
-
// which on a backed-up queue can last hours. Optional for older backends.
|
|
599
|
-
adding_waiting: z.boolean().optional(),
|
|
600
|
-
// When the run's poll last checked in (ms). See `isScanInFlight`.
|
|
601
|
-
adding_checked_at: z.number().optional()
|
|
602
|
-
});
|
|
603
|
-
var FOLLOWED_SCAN_QUIET_MS = 15 * 6e4;
|
|
604
|
-
var followingListResponseSchema = z.object({
|
|
605
|
-
following: z.array(followedAdvertiserSchema)
|
|
606
|
-
});
|
|
607
|
-
var brandDiscoverySchema = z.object({
|
|
608
|
-
accounts: z.array(resolvePreviewSchema),
|
|
609
|
-
suggestions: z.array(resolvePreviewSchema)
|
|
610
|
-
});
|
|
611
|
-
var discoverRequestSchema = z.object({ input: z.string().min(1) });
|
|
612
|
-
var BRAND_ACCOUNTS_MAX = 20;
|
|
613
|
-
function brandAccountInput(account) {
|
|
614
|
-
return ACCOUNT_INPUT[account.platform](account.external_id);
|
|
615
|
-
}
|
|
616
|
-
var ACCOUNT_INPUT = {
|
|
617
|
-
meta: (id) => `https://www.facebook.com/ads/library/?view_all_page_id=${id}`,
|
|
618
|
-
linkedin: (id) => `https://www.linkedin.com/company/${id}`,
|
|
619
|
-
google: (id) => id,
|
|
620
|
-
tiktok: (id) => id
|
|
621
|
-
};
|
|
622
|
-
function adLibraryUrl(account) {
|
|
623
|
-
return LIBRARY_URL[account.platform](account.external_id);
|
|
624
|
-
}
|
|
625
|
-
var LIBRARY_URL = {
|
|
626
|
-
meta: (id) => `https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=ALL&view_all_page_id=${encodeURIComponent(id)}`,
|
|
627
|
-
linkedin: (id) => `https://www.linkedin.com/ad-library/search?companyIds=${encodeURIComponent(id)}`,
|
|
628
|
-
// TikTok's library is searched by the advertiser's registered name, which is the id we keep.
|
|
629
|
-
tiktok: (id) => `https://library.tiktok.com/ads?region=all&adv_name=${encodeURIComponent(id)}&query_type=1`,
|
|
630
|
-
google: (id) => `https://adstransparency.google.com/advertiser/${encodeURIComponent(id)}?region=anywhere`
|
|
631
|
-
};
|
|
632
|
-
var followRequestSchema = z.object({
|
|
633
|
-
input: z.string().min(1),
|
|
634
|
-
// Retired: every platform is tried for every input. Still accepted so older
|
|
635
|
-
// CLIs keep working; a profile link already says which platform it is.
|
|
636
|
-
platform: adLibraryPlatformSchema.optional(),
|
|
637
|
-
// Optional override for the display label; defaults to the resolved name.
|
|
638
|
-
label: z.string().optional()
|
|
639
|
-
});
|
|
640
|
-
var followResponseSchema = z.object({
|
|
641
|
-
// "following" = subscribed to an advertiser already in the corpus (no
|
|
642
|
-
// ingestion). "added" = a new advertiser was enqueued for discovery.
|
|
643
|
-
// "ambiguous" = the identity mapped to multiple corpus advertisers; the
|
|
644
|
-
// caller must pick one of `candidates`. "unconfirmed" = only accounts named
|
|
645
|
-
// like the brand turned up (`suggestions`), so nothing was followed.
|
|
646
|
-
status: z.enum(["following", "added", "ambiguous", "unconfirmed"]),
|
|
647
|
-
advertiser: followedAdvertiserSchema.nullable(),
|
|
648
|
-
preview: resolvePreviewSchema.nullable(),
|
|
649
|
-
candidates: z.array(corpusAdvertiserSchema).nullable(),
|
|
650
|
-
// Accounts only named like the brand (another market's page), not tracked
|
|
651
|
-
// until added with `add-accounts`. Present on a single follow.
|
|
652
|
-
suggestions: z.array(resolvePreviewSchema).optional()
|
|
653
|
-
});
|
|
654
|
-
var libraryAddRequestSchema = z.object({ input: z.string().min(1) });
|
|
655
|
-
var libraryAddResponseSchema = z.object({
|
|
656
|
-
// "added" = new to the library, its ads are being collected. "in_library" =
|
|
657
|
-
// already there (any account it did not have yet is being collected).
|
|
658
|
-
// "ambiguous" = the accounts belong to several brands already in it, see
|
|
659
|
-
// `candidates`. "unconfirmed" = only accounts named like the brand turned up
|
|
660
|
-
// (`suggestions`), so nothing was added.
|
|
661
|
-
status: z.enum(["added", "in_library", "ambiguous", "unconfirmed"]),
|
|
662
|
-
advertiser_id: z.string().nullable(),
|
|
663
|
-
label: z.string().nullable(),
|
|
664
|
-
// The accounts it was added with: those its website links, or the link given.
|
|
665
|
-
accounts: z.array(resolvePreviewSchema),
|
|
666
|
-
// How many accounts are being collected now; 0 when the library had them all.
|
|
667
|
-
collecting: z.number(),
|
|
668
|
-
candidates: z.array(corpusAdvertiserSchema).nullable(),
|
|
669
|
-
suggestions: z.array(resolvePreviewSchema)
|
|
670
|
-
});
|
|
671
|
-
var FOLLOW_BATCH_MAX = 50;
|
|
672
|
-
var followBatchRequestSchema = z.object({
|
|
673
|
-
// One entry per brand — a domain (best; resolves both Meta + LinkedIn), a
|
|
674
|
-
// profile / ad-library URL, or a brand name.
|
|
675
|
-
inputs: z.array(z.string().min(1)).min(1).max(FOLLOW_BATCH_MAX),
|
|
676
|
-
// Retired: every platform is tried for every input. Still accepted so older
|
|
677
|
-
// CLIs keep working.
|
|
678
|
-
platform: adLibraryPlatformSchema.optional()
|
|
679
|
-
});
|
|
680
|
-
var followBatchResultSchema = z.object({
|
|
681
|
-
// Echoes the input so the caller can line results up with what it sent.
|
|
682
|
-
input: z.string(),
|
|
683
|
-
// "following"/"added" mirror the single-follow statuses; "ambiguous" needs a
|
|
684
|
-
// manual pick; "failed" = we couldn't resolve or add it (see `error`).
|
|
685
|
-
status: z.enum(["following", "added", "ambiguous", "failed"]),
|
|
686
|
-
advertiser: followedAdvertiserSchema.nullable(),
|
|
687
|
-
// Present only when status is "failed" — a plain-language reason.
|
|
688
|
-
error: z.string().nullable()
|
|
689
|
-
});
|
|
690
|
-
var followBatchResponseSchema = z.object({
|
|
691
|
-
results: z.array(followBatchResultSchema),
|
|
692
|
-
// Rollup counts across the batch for a one-glance summary.
|
|
693
|
-
followed_count: z.number(),
|
|
694
|
-
added_count: z.number(),
|
|
695
|
-
ambiguous_count: z.number(),
|
|
696
|
-
failed_count: z.number()
|
|
697
|
-
});
|
|
698
|
-
var addBrandAccountsRequestSchema = z.object({
|
|
699
|
-
advertiser_id: z.string().min(1),
|
|
700
|
-
inputs: z.array(z.string().min(1)).min(1).max(BRAND_ACCOUNTS_MAX)
|
|
701
|
-
});
|
|
702
|
-
var addBrandAccountsResponseSchema = z.object({
|
|
703
|
-
advertiser: followedAdvertiserSchema.nullable(),
|
|
704
|
-
// Newly tracked; their ads are being collected.
|
|
705
|
-
added: z.array(resolvePreviewSchema),
|
|
706
|
-
// Already part of this brand — nothing to do.
|
|
707
|
-
already_tracked: z.array(resolvePreviewSchema),
|
|
708
|
-
// Inputs nothing could be found for, each with a plain-language reason.
|
|
709
|
-
failed: z.array(z.object({ input: z.string(), error: z.string() }))
|
|
710
|
-
});
|
|
711
|
-
var unfollowRequestSchema = z.object({
|
|
712
|
-
// Accept either the Baker subscription id or the corpus advertiser id.
|
|
713
|
-
followed_id: z.string().optional(),
|
|
714
|
-
advertiser_id: z.string().optional()
|
|
715
|
-
});
|
|
716
|
-
var unfollowResponseSchema = z.object({ removed: z.boolean() });
|
|
717
|
-
var platformWinnersSchema = z.object({
|
|
718
|
-
platform: adLibraryPlatformSchema,
|
|
719
|
-
winners: z.array(winningAdSchema)
|
|
720
|
-
});
|
|
721
|
-
var advertiserWinnersResponseSchema = z.object({
|
|
722
|
-
advertiser_id: z.string(),
|
|
723
|
-
winners: z.array(winningAdSchema),
|
|
724
|
-
// `per_platform`: each platform's own top winners. Scores are not comparable
|
|
725
|
-
// across platforms, so the all-platform list can be one platform's ads only.
|
|
726
|
-
by_platform: z.array(platformWinnersSchema).optional()
|
|
727
|
-
});
|
|
728
|
-
var advertiserAdsRunningSchema = z.enum(["all", "running", "stopped"]);
|
|
729
|
-
var ADVERTISER_ADS_MAX_LIMIT = 100;
|
|
730
|
-
var advertiserAdsRequestSchema = z.object({
|
|
731
|
-
id: z.string().min(1),
|
|
732
|
-
platform: adLibraryPlatformSchema.optional(),
|
|
733
|
-
running: advertiserAdsRunningSchema.default("all"),
|
|
734
|
-
// Comma list ("text,video"): only those formats; every format when absent.
|
|
735
|
-
format: z.string().transform(
|
|
736
|
-
(s) => s.split(",").map((f) => f.trim()).filter(Boolean)
|
|
737
|
-
).pipe(z.array(adFormatSchema).min(1)).optional(),
|
|
738
|
-
limit: z.coerce.number().int().min(1).max(ADVERTISER_ADS_MAX_LIMIT).default(24),
|
|
739
|
-
offset: z.coerce.number().int().min(0).default(0)
|
|
740
|
-
});
|
|
741
|
-
var advertiserAdsResponseSchema = z.object({
|
|
742
|
-
advertiser_id: z.string(),
|
|
743
|
-
ads: z.array(winningAdSchema),
|
|
744
|
-
// Every ad the filters match; null from an older library, where a short page means the end.
|
|
745
|
-
total: z.number().nullable()
|
|
746
|
-
});
|
|
747
|
-
var searchHeadlineHookSchema = z.enum([
|
|
748
|
-
"category",
|
|
749
|
-
"brand",
|
|
750
|
-
"free",
|
|
751
|
-
"price_discount",
|
|
752
|
-
"outcome",
|
|
753
|
-
"proof",
|
|
754
|
-
"new_timely",
|
|
755
|
-
"comparison",
|
|
756
|
-
"audience",
|
|
757
|
-
"location",
|
|
758
|
-
"feature",
|
|
759
|
-
"call_to_action",
|
|
760
|
-
"question"
|
|
761
|
-
]);
|
|
762
|
-
var searchCopyRequestSchema = z.object({
|
|
763
|
-
id: z.string().min(1),
|
|
764
|
-
limit: z.coerce.number().int().min(1).max(100).default(15)
|
|
765
|
-
});
|
|
766
|
-
var searchCopyPartSchema = z.object({
|
|
767
|
-
text: z.string(),
|
|
768
|
-
// "dropped": every ad that carried it has stopped.
|
|
769
|
-
status: z.enum(["running", "dropped"]),
|
|
770
|
-
ads: z.number(),
|
|
771
|
-
running_ads: z.number(),
|
|
772
|
-
first_seen: z.string().nullable(),
|
|
773
|
-
last_seen: z.string().nullable(),
|
|
774
|
-
longest_days: z.number().nullable(),
|
|
775
|
-
landing_pages: z.array(z.string()),
|
|
776
|
-
example_ad_id: z.string()
|
|
777
|
-
});
|
|
778
|
-
var searchCopySchema = z.object({
|
|
779
|
-
// `read`: ads whose parts have been read; the rest were extracted before.
|
|
780
|
-
totals: z.object({ ads: z.number(), running: z.number(), read: z.number(), with_sitelinks: z.number() }),
|
|
781
|
-
// Distinct parts of each kind, past the list cut. Optional: an older library does not send it.
|
|
782
|
-
part_totals: z.object({ headlines: z.number(), descriptions: z.number(), sitelinks: z.number(), callouts: z.number() }).optional(),
|
|
783
|
-
headlines: z.array(
|
|
784
|
-
searchCopyPartSchema.extend({ hook: searchHeadlineHookSchema.nullable(), names_rival: z.boolean() })
|
|
785
|
-
),
|
|
786
|
-
descriptions: z.array(searchCopyPartSchema),
|
|
787
|
-
sitelinks: z.array(searchCopyPartSchema),
|
|
788
|
-
callouts: z.array(searchCopyPartSchema),
|
|
789
|
-
hooks: z.array(z.object({ hook: searchHeadlineHookSchema, running: z.number(), dropped: z.number() })),
|
|
790
|
-
rival_headlines: z.array(z.string())
|
|
791
|
-
});
|
|
792
|
-
var searchCopyResponseSchema = searchCopySchema.extend({ advertiser_id: z.string() });
|
|
793
|
-
var searchCopyPartKindSchema = z.enum(["headlines", "descriptions", "sitelinks", "callouts"]);
|
|
794
|
-
var searchCopyPageRequestSchema = z.object({
|
|
795
|
-
id: z.string().min(1),
|
|
796
|
-
part: searchCopyPartKindSchema,
|
|
797
|
-
offset: z.coerce.number().int().min(0).default(0),
|
|
798
|
-
limit: z.coerce.number().int().min(1).max(100).default(15)
|
|
799
|
-
});
|
|
800
|
-
var searchCopyPageSchema = z.object({
|
|
801
|
-
parts: z.array(
|
|
802
|
-
searchCopyPartSchema.extend({
|
|
803
|
-
hook: searchHeadlineHookSchema.nullable().optional(),
|
|
804
|
-
names_rival: z.boolean().optional()
|
|
805
|
-
})
|
|
806
|
-
),
|
|
807
|
-
total: z.number()
|
|
808
|
-
});
|
|
809
|
-
var searchCopyPageResponseSchema = searchCopyPageSchema.extend({
|
|
810
|
-
advertiser_id: z.string(),
|
|
811
|
-
part: searchCopyPartKindSchema,
|
|
812
|
-
offset: z.number()
|
|
813
|
-
});
|
|
814
|
-
var feedRequestSchema = z.object({
|
|
815
|
-
// Optional subset of your followed advertiser ids to narrow to ("trim down
|
|
816
|
-
// per advertiser"). Ids you don't follow are ignored and echoed back in
|
|
817
|
-
// `unknown_requested`. Omit to browse winners across every brand you follow.
|
|
818
|
-
advertiser_ids: z.array(z.string()).optional(),
|
|
819
|
-
platform: adLibraryPlatformSchema.optional(),
|
|
820
|
-
winner_category: z.array(z.string()).optional(),
|
|
821
|
-
format: z.array(z.string()).optional(),
|
|
822
|
-
// The feed shows designed pictures and videos by default; `true` adds Google
|
|
823
|
-
// search text, Shopping and app ads.
|
|
824
|
-
all_kinds: z.boolean().optional(),
|
|
825
|
-
// Winners kept per advertiser so no single brand floods the feed. `0` = no
|
|
826
|
-
// cap. Default applied by the route.
|
|
827
|
-
per_advertiser: z.number().int().min(0).max(50).optional(),
|
|
828
|
-
// Total winners returned across all followed advertisers.
|
|
829
|
-
limit: z.number().int().min(1).max(200).optional()
|
|
830
|
-
});
|
|
831
|
-
var feedResponseSchema = z.object({
|
|
832
|
-
// The feed only ever reads followed brands, so every winner is `followed`:
|
|
833
|
-
// the same `source` a scoped search carries, so the surfaces agree.
|
|
834
|
-
winners: z.array(winningAdSchema.extend({ source: winnerSourceSchema })),
|
|
835
|
-
// How many brands the company follows (regardless of the trim).
|
|
836
|
-
following_count: z.number(),
|
|
837
|
-
// The advertiser ids actually queried (follows ∩ requested subset).
|
|
838
|
-
advertiser_ids: z.array(z.string()),
|
|
839
|
-
// Requested ids that aren't followed — a hint the caller mistyped or hasn't
|
|
840
|
-
// followed them yet.
|
|
841
|
-
unknown_requested: z.array(z.string())
|
|
842
|
-
});
|
|
843
|
-
var seedCatalogFieldSchema = z.enum(["hook_archetype", "mechanism_type", "static_format_pattern"]);
|
|
844
|
-
var seedCatalogRequestSchema = z.object({
|
|
845
|
-
field: seedCatalogFieldSchema,
|
|
846
|
-
platform: z.string().optional(),
|
|
847
|
-
awareness_stage: z.string().optional(),
|
|
848
|
-
industry: z.string().optional(),
|
|
849
|
-
limit: z.number().int().min(1).max(100).optional()
|
|
850
|
-
});
|
|
851
|
-
var patternSeedSchema = z.object({
|
|
852
|
-
key: z.string(),
|
|
853
|
-
count: z.number(),
|
|
854
|
-
sum_winner_score: z.number(),
|
|
855
|
-
mean_winner_score: z.number(),
|
|
856
|
-
winner_share: z.number(),
|
|
857
|
-
// How the seed did inside the brands that used it, the order of the catalog:
|
|
858
|
-
// the mean, over brands, of how much more often their creatives with the seed
|
|
859
|
-
// ran 60 days than their others (0 until five brands have a verdict), and
|
|
860
|
-
// how many brands it won and lost inside.
|
|
861
|
-
lift: z.number(),
|
|
862
|
-
brands_for: z.number(),
|
|
863
|
-
brands_against: z.number(),
|
|
864
|
-
// Per-segment counts (platform/awareness_stage/industry → value → n); present
|
|
865
|
-
// only on `--full`, so the response can stay lean by default.
|
|
866
|
-
breakdown_by: z.record(z.string(), z.unknown()).nullable()
|
|
867
|
-
});
|
|
868
|
-
var seedCatalogSegmentSchema = z.object({
|
|
869
|
-
platform: z.string().nullable(),
|
|
870
|
-
awareness_stage: z.string().nullable(),
|
|
871
|
-
industry: z.string().nullable()
|
|
872
|
-
});
|
|
873
|
-
var seedCatalogResponseSchema = z.object({
|
|
874
|
-
field: z.string(),
|
|
875
|
-
segment: seedCatalogSegmentSchema.nullable(),
|
|
876
|
-
patterns: z.array(patternSeedSchema)
|
|
877
|
-
});
|
|
878
|
-
var adContentRequestSchema = z.object({
|
|
879
|
-
ad_id: z.string().min(1),
|
|
880
|
-
platform: adLibraryPlatformSchema.optional()
|
|
881
|
-
});
|
|
882
|
-
var referenceReadRequestSchema = z.object({
|
|
883
|
-
ad_id: z.string().min(1),
|
|
884
|
-
platform: adLibraryPlatformSchema.default("meta")
|
|
885
|
-
});
|
|
886
|
-
var referenceReadResponseSchema = z.object({
|
|
887
|
-
blueprint: z.record(z.string(), z.unknown()),
|
|
888
|
-
elements: z.array(z.unknown()),
|
|
889
|
-
credits_charged: z.number(),
|
|
890
|
-
reused: z.boolean()
|
|
891
|
-
});
|
|
892
|
-
var adContentOverlaySchema = z.object({
|
|
893
|
-
text: z.string(),
|
|
894
|
-
appears_at_s: z.number().nullable(),
|
|
895
|
-
position: z.string().nullable(),
|
|
896
|
-
role: z.string().nullable(),
|
|
897
|
-
card: z.number().nullable()
|
|
898
|
-
});
|
|
899
|
-
var adContentSpeechSchema = z.object({
|
|
900
|
-
speech_pct_of_runtime: z.number().nullable(),
|
|
901
|
-
speaker_count: z.number().nullable(),
|
|
902
|
-
voiceover_vs_sync: z.string().nullable(),
|
|
903
|
-
is_direct_address: z.boolean().nullable(),
|
|
904
|
-
speech_emotion_dominant: z.string().nullable()
|
|
905
|
-
});
|
|
906
|
-
var adContentPacingSchema = z.object({
|
|
907
|
-
scene_count: z.number().nullable(),
|
|
908
|
-
avg_shot_length_s: z.number().nullable(),
|
|
909
|
-
pacing_shape: z.string().nullable(),
|
|
910
|
-
hook_ends_at_s: z.number().nullable(),
|
|
911
|
-
cta_first_shown_at_s: z.number().nullable(),
|
|
912
|
-
product_first_appears_at_s: z.number().nullable()
|
|
913
|
-
});
|
|
914
|
-
var adContentMusicSchema = z.object({
|
|
915
|
-
track_title: z.string().nullable(),
|
|
916
|
-
track_artist: z.string().nullable()
|
|
917
|
-
});
|
|
918
|
-
var adContentLayoutSchema = z.object({
|
|
919
|
-
format_pattern: z.string().nullable(),
|
|
920
|
-
composition: z.string().nullable(),
|
|
921
|
-
focal_subject: z.string().nullable(),
|
|
922
|
-
aspect_ratio: z.string().nullable(),
|
|
923
|
-
background: z.string().nullable(),
|
|
924
|
-
palette_mood: z.string().nullable(),
|
|
925
|
-
colors: z.array(z.string()),
|
|
926
|
-
production: z.string().nullable(),
|
|
927
|
-
aesthetic: z.array(z.string()),
|
|
928
|
-
cta_in_image: z.string().nullable(),
|
|
929
|
-
markers: z.array(z.string()),
|
|
930
|
-
card_roles: z.array(z.string())
|
|
931
|
-
});
|
|
932
|
-
var adContentMessageSchema = z.object({
|
|
933
|
-
awareness_stage: z.string().nullable(),
|
|
934
|
-
sophistication: z.string().nullable(),
|
|
935
|
-
mechanism: z.string().nullable(),
|
|
936
|
-
pain_points: z.array(z.string()),
|
|
937
|
-
desires: z.array(z.string()),
|
|
938
|
-
value_props: z.array(z.string()),
|
|
939
|
-
objections_handled: z.array(z.string()),
|
|
940
|
-
proof: z.array(z.string()),
|
|
941
|
-
risk_reversal: z.array(z.string())
|
|
942
|
-
});
|
|
943
|
-
var adContentOfferSchema = z.object({
|
|
944
|
-
offer_type: z.string().nullable(),
|
|
945
|
-
pricing_model: z.string().nullable(),
|
|
946
|
-
entry_price: z.string().nullable(),
|
|
947
|
-
no_credit_card: z.boolean().nullable(),
|
|
948
|
-
guarantee: z.array(z.string()),
|
|
949
|
-
guarantee_days: z.number().nullable(),
|
|
950
|
-
urgency: z.string().nullable(),
|
|
951
|
-
bonus: z.string().nullable()
|
|
952
|
-
});
|
|
953
|
-
var adLifecycleSchema = z.object({
|
|
954
|
-
stage: adLifecycleStageSchema,
|
|
955
|
-
survived_test: z.boolean(),
|
|
956
|
-
test: creativeTestSchema.nullable()
|
|
957
|
-
});
|
|
958
|
-
var GOOGLE_AD_TYPES = ["search", "display", "shopping", "youtube", "app"];
|
|
959
|
-
var googleAdTypeSchema = z.enum(GOOGLE_AD_TYPES);
|
|
960
|
-
var landingElsewhereSchema = z.enum([
|
|
961
|
-
"meta_native",
|
|
962
|
-
"linkedin_native",
|
|
963
|
-
"messaging",
|
|
964
|
-
"social_profile",
|
|
965
|
-
"app_store",
|
|
966
|
-
"file"
|
|
967
|
-
]);
|
|
968
|
-
var adContentSearchAdSchema = z.object({
|
|
969
|
-
// A hook this version does not know reads as none rather than losing the ad's parts.
|
|
970
|
-
headlines: z.array(z.object({ text: z.string(), hook: searchHeadlineHookSchema.nullable().catch(null) })),
|
|
971
|
-
descriptions: z.array(z.string()),
|
|
972
|
-
sitelinks: z.array(z.string()),
|
|
973
|
-
callouts: z.array(z.string()),
|
|
974
|
-
rating: z.object({ stars: z.number().nullable(), reviews: z.number().nullable() }).nullable()
|
|
975
|
-
});
|
|
976
|
-
var adContentSchema = z.object({
|
|
977
|
-
ad_id: z.string().nullable(),
|
|
978
|
-
advertiser: z.string().nullable(),
|
|
979
|
-
advertiser_id: z.string().nullable(),
|
|
980
|
-
platform: z.string().nullable(),
|
|
981
|
-
format: z.string().nullable(),
|
|
982
|
-
media_kind: z.string().nullable(),
|
|
983
|
-
media_url: z.string().nullable(),
|
|
984
|
-
winner_score: z.number().nullable(),
|
|
985
|
-
winner_category: z.string().nullable(),
|
|
986
|
-
summary: z.string().nullable(),
|
|
987
|
-
angle: z.string().nullable(),
|
|
988
|
-
hook_archetype: z.string().nullable(),
|
|
989
|
-
// Spoken words (video only; null when the ad has no speech track).
|
|
990
|
-
transcript: z.string().nullable(),
|
|
991
|
-
has_speech: z.boolean().nullable(),
|
|
992
|
-
speech: adContentSpeechSchema,
|
|
993
|
-
// On-screen text / captions.
|
|
994
|
-
has_captions: z.boolean().nullable(),
|
|
995
|
-
caption_style: z.string().nullable(),
|
|
996
|
-
on_screen_text: z.array(adContentOverlaySchema),
|
|
997
|
-
// Copy the viewer reads outside the media.
|
|
998
|
-
primary_text: z.string().nullable(),
|
|
999
|
-
headline: z.string().nullable(),
|
|
1000
|
-
// Where the ad sends people: the page a short or tracking link leads to once
|
|
1001
|
-
// followed. Null when the link opens no page of the brand's; optional while
|
|
1002
|
-
// an older backend does not send it.
|
|
1003
|
-
landing_url: z.string().nullable().optional(),
|
|
1004
|
-
// Why the link opens no page: an Instant Form or Experience inside Meta, a
|
|
1005
|
-
// chat, an app store, a social profile, a LinkedIn page, a file.
|
|
1006
|
-
landing_elsewhere: landingElsewhereSchema.nullable().optional(),
|
|
1007
|
-
cta: z.string().nullable(),
|
|
1008
|
-
// Structure + soundtrack.
|
|
1009
|
-
pacing: adContentPacingSchema,
|
|
1010
|
-
music: adContentMusicSchema,
|
|
1011
|
-
layout: adContentLayoutSchema,
|
|
1012
|
-
message: adContentMessageSchema,
|
|
1013
|
-
offer: adContentOfferSchema,
|
|
1014
|
-
// Where the ad is in its life, whether it is the version its brand kept
|
|
1015
|
-
// after testing, and the test when it is one version of a tested concept.
|
|
1016
|
-
// Absent on an older ad-dna.
|
|
1017
|
-
lifecycle: adLifecycleSchema.nullable().optional(),
|
|
1018
|
-
// Which kind of Google ad it is; null off Google or when the library does
|
|
1019
|
-
// not say. Absent on an older ad-dna.
|
|
1020
|
-
google_ad_type: googleAdTypeSchema.nullable().optional(),
|
|
1021
|
-
// A Google search ad's headlines, descriptions, sitelinks, callouts and
|
|
1022
|
-
// rating; null on every other ad. A search ad has no layout, colours or
|
|
1023
|
-
// on-screen text of its own (Google draws it), so those stay empty on it.
|
|
1024
|
-
// Absent on an older backend.
|
|
1025
|
-
search_ad: adContentSearchAdSchema.nullable().optional()
|
|
1026
|
-
});
|
|
1027
|
-
var adContentResponseSchema = z.object({ ad: adContentSchema });
|
|
1028
|
-
var adDnaColorSchema = z.object({
|
|
1029
|
-
hex: z.string(),
|
|
1030
|
-
share: z.number().nullable()
|
|
1031
|
-
});
|
|
1032
|
-
var adDnaSceneSchema = z.object({
|
|
1033
|
-
start_s: z.number(),
|
|
1034
|
-
end_s: z.number(),
|
|
1035
|
-
role: z.string().nullable(),
|
|
1036
|
-
visual: z.string(),
|
|
1037
|
-
speech: z.string().nullable(),
|
|
1038
|
-
on_screen_text: z.string().nullable(),
|
|
1039
|
-
sound: z.string().nullable()
|
|
1040
|
-
});
|
|
1041
|
-
var adDnaMomentSchema = z.object({
|
|
1042
|
-
kind: z.enum(["hook_ends", "product", "price", "cta", "logo"]),
|
|
1043
|
-
at_s: z.number()
|
|
1044
|
-
});
|
|
1045
|
-
var adDnaStorySchema = z.object({
|
|
1046
|
-
duration_s: z.number().nullable(),
|
|
1047
|
-
summary: z.string().nullable(),
|
|
1048
|
-
hook: z.string().nullable(),
|
|
1049
|
-
scenes: z.array(adDnaSceneSchema),
|
|
1050
|
-
moments: z.array(adDnaMomentSchema)
|
|
1051
|
-
});
|
|
1052
|
-
var adDnaCardSchema = z.object({
|
|
1053
|
-
index: z.number(),
|
|
1054
|
-
role: z.string().nullable(),
|
|
1055
|
-
layout: z.string().nullable(),
|
|
1056
|
-
colors: z.array(adDnaColorSchema),
|
|
1057
|
-
open_loop: z.string().nullable(),
|
|
1058
|
-
transition: z.string().nullable()
|
|
1059
|
-
});
|
|
1060
|
-
var adDnaAgeReachSchema = z.object({
|
|
1061
|
-
age_range: z.string(),
|
|
1062
|
-
female: z.number(),
|
|
1063
|
-
male: z.number(),
|
|
1064
|
-
unknown: z.number()
|
|
1065
|
-
});
|
|
1066
|
-
var adDnaReachSchema = z.object({
|
|
1067
|
-
total: z.number().nullable(),
|
|
1068
|
-
eu_total: z.number().nullable(),
|
|
1069
|
-
ages: z.object({ min: z.number(), max: z.number() }).nullable(),
|
|
1070
|
-
gender: z.string().nullable(),
|
|
1071
|
-
locations: z.array(z.string()),
|
|
1072
|
-
excluded_locations: z.array(z.string()),
|
|
1073
|
-
channels: z.array(z.string()),
|
|
1074
|
-
by_age: z.array(adDnaAgeReachSchema)
|
|
1075
|
-
});
|
|
1076
|
-
var adDnaTraitSchema = z.object({
|
|
1077
|
-
key: z.string(),
|
|
1078
|
-
value: z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])
|
|
1079
|
-
});
|
|
1080
|
-
var adDnaTraitGroupKeySchema = z.enum([
|
|
1081
|
-
"audience",
|
|
1082
|
-
"business",
|
|
1083
|
-
"message",
|
|
1084
|
-
"copy",
|
|
1085
|
-
"look",
|
|
1086
|
-
"cast",
|
|
1087
|
-
"pacing",
|
|
1088
|
-
"sound",
|
|
1089
|
-
"on_screen_text",
|
|
1090
|
-
"branding",
|
|
1091
|
-
"subject",
|
|
1092
|
-
"cta_visual",
|
|
1093
|
-
"markers",
|
|
1094
|
-
"carousel",
|
|
1095
|
-
"offer",
|
|
1096
|
-
"delivery"
|
|
1097
|
-
]);
|
|
1098
|
-
var adDnaTraitGroupSchema = z.object({
|
|
1099
|
-
key: adDnaTraitGroupKeySchema,
|
|
1100
|
-
traits: z.array(adDnaTraitSchema)
|
|
1101
|
-
});
|
|
1102
|
-
var adDnaDetailSchema = z.object({
|
|
1103
|
-
palette: z.array(adDnaColorSchema),
|
|
1104
|
-
background_hex: z.string().nullable(),
|
|
1105
|
-
button_hex: z.string().nullable(),
|
|
1106
|
-
story: adDnaStorySchema.nullable(),
|
|
1107
|
-
cards: z.array(adDnaCardSchema),
|
|
1108
|
-
reach: adDnaReachSchema.nullable(),
|
|
1109
|
-
groups: z.array(adDnaTraitGroupSchema),
|
|
1110
|
-
extracted_at: z.string().nullable()
|
|
1111
|
-
});
|
|
1112
|
-
var adCardMediaSchema = z.object({
|
|
1113
|
-
index: z.number(),
|
|
1114
|
-
url: z.string(),
|
|
1115
|
-
kind: z.enum(["image", "video"]).nullable()
|
|
1116
|
-
});
|
|
1117
|
-
var adDetailSchema = z.object({
|
|
1118
|
-
content: adContentSchema,
|
|
1119
|
-
dna: adDnaDetailSchema,
|
|
1120
|
-
card_media: z.array(adCardMediaSchema)
|
|
1121
|
-
});
|
|
1122
|
-
|
|
1123
|
-
// src/schemas.ts
|
|
1124
|
-
var registry = /* @__PURE__ */ new Map();
|
|
1125
|
-
var tree;
|
|
1126
|
-
function registerCommandTree(root) {
|
|
1127
|
-
tree = root;
|
|
1128
|
-
}
|
|
1129
|
-
function commandTree() {
|
|
1130
|
-
return tree;
|
|
1131
|
-
}
|
|
1132
|
-
function registerSchema(schema) {
|
|
1133
|
-
registry.set(schema.command, schema);
|
|
1134
|
-
}
|
|
1135
|
-
function listSchemas() {
|
|
1136
|
-
return [...registry.keys()];
|
|
1137
|
-
}
|
|
1138
|
-
function spellingKey(name) {
|
|
1139
|
-
return name.toLowerCase().replaceAll("-", "");
|
|
1140
|
-
}
|
|
1141
|
-
function resolveSchemaName(words, names) {
|
|
1142
|
-
const joined = words.join(".");
|
|
1143
|
-
if (names.includes(joined)) {
|
|
1144
|
-
return joined;
|
|
1145
|
-
}
|
|
1146
|
-
const matches = names.filter((name) => spellingKey(name) === spellingKey(joined));
|
|
1147
|
-
return matches.length === 1 ? matches[0] : void 0;
|
|
1148
|
-
}
|
|
1149
|
-
function findSchema(words) {
|
|
1150
|
-
const name = resolveSchemaName(words, listSchemas());
|
|
1151
|
-
return name === void 0 ? void 0 : registry.get(name);
|
|
1152
|
-
}
|
|
1153
|
-
|
|
1154
|
-
// src/unknown-flags.ts
|
|
1155
|
-
import { stripVTControlCharacters } from "util";
|
|
1156
|
-
import { parseArgs } from "citty";
|
|
1157
|
-
import { quote } from "shell-quote";
|
|
1158
|
-
var ALWAYS_ACCEPTED = /* @__PURE__ */ new Set(["help", "h", "version"]);
|
|
1159
|
-
function subCommandsOf(command) {
|
|
1160
|
-
const sub = command.subCommands;
|
|
1161
|
-
return sub && typeof sub === "object" ? sub : null;
|
|
1162
|
-
}
|
|
1163
|
-
function argsOf(command) {
|
|
1164
|
-
const args = command.args;
|
|
1165
|
-
return args && typeof args === "object" ? args : null;
|
|
1166
|
-
}
|
|
1167
|
-
function resolveCommand(root, argv) {
|
|
1168
|
-
let command = root;
|
|
1169
|
-
for (const token of argv) {
|
|
1170
|
-
if (token === "--" || token.startsWith("-")) {
|
|
1171
|
-
break;
|
|
1172
|
-
}
|
|
1173
|
-
const subCommands = subCommandsOf(command);
|
|
1174
|
-
if (!subCommands) {
|
|
1175
|
-
break;
|
|
1176
|
-
}
|
|
1177
|
-
const next = subCommands[token];
|
|
1178
|
-
if (next === void 0) {
|
|
1179
|
-
break;
|
|
1180
|
-
}
|
|
1181
|
-
if (typeof next !== "object") {
|
|
1182
|
-
return { command, resolved: false };
|
|
1183
|
-
}
|
|
1184
|
-
command = next;
|
|
1185
|
-
}
|
|
1186
|
-
return { command, resolved: true };
|
|
1187
|
-
}
|
|
1188
|
-
function typeOf(def) {
|
|
1189
|
-
return def && typeof def === "object" ? def.type : void 0;
|
|
1190
|
-
}
|
|
1191
|
-
function acceptedNames(command) {
|
|
1192
|
-
const args = argsOf(command);
|
|
1193
|
-
if (!args) {
|
|
1194
|
-
return null;
|
|
1195
|
-
}
|
|
1196
|
-
const names = new Set(ALWAYS_ACCEPTED);
|
|
1197
|
-
for (const [name, def] of Object.entries(args)) {
|
|
1198
|
-
if (typeOf(def) === "positional") {
|
|
1199
|
-
continue;
|
|
1200
|
-
}
|
|
1201
|
-
for (const spelling of [name, kebab(name), camel(name)]) {
|
|
1202
|
-
names.add(spelling);
|
|
1203
|
-
if (typeOf(def) === "boolean") {
|
|
1204
|
-
names.add(`no-${spelling}`);
|
|
1205
|
-
}
|
|
1206
|
-
}
|
|
1207
|
-
}
|
|
1208
|
-
return names;
|
|
1209
|
-
}
|
|
1210
|
-
function kebab(name) {
|
|
1211
|
-
return name.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
1212
|
-
}
|
|
1213
|
-
function camel(name) {
|
|
1214
|
-
return name.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
1215
|
-
}
|
|
1216
|
-
function findUnknownFlags(root, argv) {
|
|
1217
|
-
const { command, resolved } = resolveCommand(root, argv);
|
|
1218
|
-
if (!resolved) {
|
|
1219
|
-
return [];
|
|
1220
|
-
}
|
|
1221
|
-
const accepted = acceptedNames(command);
|
|
1222
|
-
if (!accepted) {
|
|
1223
|
-
return [];
|
|
1224
|
-
}
|
|
1225
|
-
const unknown = [];
|
|
1226
|
-
for (const token of argv) {
|
|
1227
|
-
if (token === "--") {
|
|
1228
|
-
break;
|
|
1229
|
-
}
|
|
1230
|
-
if (!token.startsWith("--")) {
|
|
1231
|
-
continue;
|
|
1232
|
-
}
|
|
1233
|
-
const name = token.slice(2).split("=")[0] ?? "";
|
|
1234
|
-
if (name.length > 0 && !accepted.has(name) && !unknown.includes(token)) {
|
|
1235
|
-
unknown.push(token);
|
|
1236
|
-
}
|
|
1237
|
-
}
|
|
1238
|
-
return unknown;
|
|
1239
|
-
}
|
|
1240
|
-
var SYNONYMS = {
|
|
1241
|
-
from: ["start-date", "start", "since"],
|
|
1242
|
-
since: ["start-date", "start"],
|
|
1243
|
-
start: ["start-date", "since"],
|
|
1244
|
-
to: ["end-date", "end", "until"],
|
|
1245
|
-
until: ["end-date", "end"],
|
|
1246
|
-
end: ["end-date", "until"],
|
|
1247
|
-
path: ["landing"],
|
|
1248
|
-
url: ["landing"]
|
|
1249
|
-
};
|
|
1250
|
-
function closestFlag(unknown, command) {
|
|
1251
|
-
const accepted = acceptedNames(command);
|
|
1252
|
-
if (!accepted) {
|
|
1253
|
-
return null;
|
|
1254
|
-
}
|
|
1255
|
-
const name = unknown.replace(/^--/, "").split("=")[0] ?? "";
|
|
1256
|
-
const synonym = SYNONYMS[name]?.find((candidate) => accepted.has(candidate));
|
|
1257
|
-
if (synonym) {
|
|
1258
|
-
return `--${synonym}`;
|
|
1259
|
-
}
|
|
1260
|
-
const scored = [...accepted].filter((candidate) => !ALWAYS_ACCEPTED.has(candidate)).map((candidate) => ({
|
|
1261
|
-
candidate,
|
|
1262
|
-
prefix: sharedPrefix(name, candidate),
|
|
1263
|
-
distance: editDistance(name, candidate)
|
|
1264
|
-
})).filter(({ prefix, distance }) => prefix >= 4 || distance <= typoBudget(name)).sort((a, b) => b.prefix - a.prefix || a.distance - b.distance);
|
|
1265
|
-
return scored[0] ? `--${scored[0].candidate}` : null;
|
|
1266
|
-
}
|
|
1267
|
-
function typoBudget(name) {
|
|
1268
|
-
return Math.max(1, Math.floor(name.length / 3));
|
|
1269
|
-
}
|
|
1270
|
-
function sharedPrefix(a, b) {
|
|
1271
|
-
let i = 0;
|
|
1272
|
-
while (i < a.length && i < b.length && a[i] === b[i]) {
|
|
1273
|
-
i++;
|
|
1274
|
-
}
|
|
1275
|
-
return i;
|
|
1276
|
-
}
|
|
1277
|
-
function editDistance(a, b) {
|
|
1278
|
-
let previous = Array.from({ length: b.length + 1 }, (_, j) => j);
|
|
1279
|
-
for (let i = 1; i <= a.length; i++) {
|
|
1280
|
-
const current = [i];
|
|
1281
|
-
for (let j = 1; j <= b.length; j++) {
|
|
1282
|
-
const substitution = (previous[j - 1] ?? 0) + (a[i - 1] === b[j - 1] ? 0 : 1);
|
|
1283
|
-
current.push(Math.min((previous[j] ?? 0) + 1, (current[j - 1] ?? 0) + 1, substitution));
|
|
1284
|
-
}
|
|
1285
|
-
previous = current;
|
|
1286
|
-
}
|
|
1287
|
-
return previous[b.length] ?? 0;
|
|
1288
|
-
}
|
|
1289
|
-
function commandFor(root, argv) {
|
|
1290
|
-
const { command, resolved } = resolveCommand(root, argv);
|
|
1291
|
-
return resolved ? command : null;
|
|
1292
|
-
}
|
|
1293
|
-
function suggestFlag(unknown, command) {
|
|
1294
|
-
const flag = closestFlag(unknown, command);
|
|
1295
|
-
if (!flag) {
|
|
1296
|
-
return null;
|
|
1297
|
-
}
|
|
1298
|
-
const args = argsOf(command) ?? {};
|
|
1299
|
-
const name = flag.slice(2);
|
|
1300
|
-
const def = args[name] ?? args[camel(name)];
|
|
1301
|
-
const described = def && typeof def === "object" ? def.description : void 0;
|
|
1302
|
-
const description = typeof described === "string" ? described.split(/(?<!\b(?:e\.g|i\.e|vs))\.\s/)[0]?.trim().replace(/\.$/, "") : "";
|
|
1303
|
-
return description ? { flag, description } : { flag };
|
|
1304
|
-
}
|
|
1305
|
-
function suggestionText(suggestion) {
|
|
1306
|
-
if (!suggestion) {
|
|
1307
|
-
return "";
|
|
1308
|
-
}
|
|
1309
|
-
return suggestion.description ? `Did you mean ${suggestion.flag}? It is described as: ${suggestion.description}. ` : `Did you mean ${suggestion.flag}? `;
|
|
1310
|
-
}
|
|
1311
|
-
var OUTPUT_EXPLANATION = "This command has no --output option: `--output json` is accepted by every command that prints the JSON envelope, and md or files only where `baker schema` lists `output`. Drop the option and read the default output. ";
|
|
1312
|
-
function unknownFlagEnvelope(unknown, commandPath, suggestion, hasSchema) {
|
|
1313
|
-
const list = unknown.join(", ");
|
|
1314
|
-
return {
|
|
1315
|
-
ok: false,
|
|
1316
|
-
error: {
|
|
1317
|
-
code: "UNKNOWN_ARGUMENT",
|
|
1318
|
-
message: `${list} ${unknown.length > 1 ? "are not options" : "is not an option"} of \`baker ${commandPath}\`.`,
|
|
1319
|
-
fix: {
|
|
1320
|
-
action: hasSchema ? "check_schema" : "check_help",
|
|
1321
|
-
explanation: (unknown.some((flag) => flag === "--output" || flag.startsWith("--output=")) ? OUTPUT_EXPLANATION : "") + suggestionText(suggestion) + `Run \`${hasSchema ? `baker schema ${commandPath}` : `baker ${commandPath} --help`}\` to see every option this command takes. Do not re-run the same call: until this version an unrecognised option was accepted and ignored, so a command that looked like it had filtered or narrowed the result was in fact answering the unfiltered question.`
|
|
1322
|
-
},
|
|
1323
|
-
retryable: false
|
|
1324
|
-
}
|
|
1325
|
-
};
|
|
1326
|
-
}
|
|
1327
|
-
function commandPathOf(root, argv) {
|
|
1328
|
-
const path = [];
|
|
1329
|
-
let command = root;
|
|
1330
|
-
for (const token of argv) {
|
|
1331
|
-
if (token === "--" || token.startsWith("-")) {
|
|
1332
|
-
break;
|
|
1333
|
-
}
|
|
1334
|
-
const subCommands = subCommandsOf(command);
|
|
1335
|
-
const next = subCommands?.[token];
|
|
1336
|
-
if (next === void 0 || typeof next !== "object") {
|
|
1337
|
-
break;
|
|
1338
|
-
}
|
|
1339
|
-
path.push(token);
|
|
1340
|
-
command = next;
|
|
1341
|
-
}
|
|
1342
|
-
return path.join(" ");
|
|
1343
|
-
}
|
|
1344
|
-
function refuseUnknownFlags(root, argv, typed = argv) {
|
|
1345
|
-
const refusal = unknownFlagRefusal(root, argv, typed);
|
|
1346
|
-
if (!refusal) {
|
|
1347
|
-
return;
|
|
1348
|
-
}
|
|
1349
|
-
process.stdout.write(`${JSON.stringify(refusal, null, 2)}
|
|
1350
|
-
`);
|
|
1351
|
-
process.exit(1);
|
|
1352
|
-
}
|
|
1353
|
-
function unknownFlagRefusal(root, argv, typed = argv) {
|
|
1354
|
-
const unknown = findUnknownFlags(root, argv);
|
|
1355
|
-
if (unknown.length === 0) {
|
|
1356
|
-
return null;
|
|
1357
|
-
}
|
|
1358
|
-
const command = commandFor(root, argv);
|
|
1359
|
-
const first = unknown[0];
|
|
1360
|
-
const suggestion = command && first ? suggestFlag(first, command) : null;
|
|
1361
|
-
const path = commandPathOf(root, argv);
|
|
1362
|
-
const envelope = unknownFlagEnvelope(unknown, path, suggestion, findSchema(path.split(" ")) !== void 0);
|
|
1363
|
-
if (!command || !first) {
|
|
1364
|
-
return envelope;
|
|
1365
|
-
}
|
|
1366
|
-
const positional = positionalNamed(first, command);
|
|
1367
|
-
if (!positional) {
|
|
1368
|
-
return envelope;
|
|
1369
|
-
}
|
|
1370
|
-
const correctedCommand = unknown.length === 1 ? positionalCall(command, path, argv, typed, root, first, positional) : null;
|
|
1371
|
-
return {
|
|
1372
|
-
...envelope,
|
|
1373
|
-
error: {
|
|
1374
|
-
...envelope.error,
|
|
1375
|
-
fix: {
|
|
1376
|
-
action: "use_positional",
|
|
1377
|
-
explanation: `\`${first.split("=")[0]}\` is not an option: \`${positional.name}\` is a positional argument of \`baker ${path}\`, so write its value bare, with no flag${positional.index === 0 ? ", right after the command" : ""}.`,
|
|
1378
|
-
...correctedCommand ? { correctedCommand } : {},
|
|
1379
|
-
usage: usageLine(path, usageArgsOf(command)),
|
|
1380
|
-
validOptions: optionsOf(command)
|
|
1381
|
-
}
|
|
1382
|
-
}
|
|
1383
|
-
};
|
|
1384
|
-
}
|
|
1385
|
-
function usageArgsOf(command) {
|
|
1386
|
-
return Object.entries(argsOf(command) ?? {}).map(([name, def]) => {
|
|
1387
|
-
const {
|
|
1388
|
-
required,
|
|
1389
|
-
default: fallback,
|
|
1390
|
-
description
|
|
1391
|
-
} = def ?? {};
|
|
1392
|
-
const positional = typeOf(def) === "positional";
|
|
1393
|
-
return {
|
|
1394
|
-
name,
|
|
1395
|
-
positional,
|
|
1396
|
-
required: positional ? required !== false && fallback === void 0 : required === true,
|
|
1397
|
-
boolean: typeOf(def) === "boolean",
|
|
1398
|
-
description: typeof description === "string" ? description : ""
|
|
1399
|
-
};
|
|
1400
|
-
});
|
|
1401
|
-
}
|
|
1402
|
-
function optionsOf(command) {
|
|
1403
|
-
return usageArgsOf(command).filter((arg) => !arg.positional).map((arg) => `--${kebab(arg.name)}`);
|
|
1404
|
-
}
|
|
1405
|
-
function usageLine(path, args) {
|
|
1406
|
-
const positionals = args.filter((arg) => arg.positional).map((arg) => arg.required ? `<${arg.name}>` : `[${arg.name}]`);
|
|
1407
|
-
const options = args.filter((arg) => !arg.positional);
|
|
1408
|
-
const required = options.filter((arg) => arg.required).map((arg) => arg.boolean ? `--${kebab(arg.name)}` : `--${kebab(arg.name)} <${kebab(arg.name)}>`);
|
|
1409
|
-
const more = options.length > required.length ? ["[options]"] : [];
|
|
1410
|
-
return ["baker", path, ...positionals, ...required, ...more].filter((part) => part !== "").join(" ");
|
|
1411
|
-
}
|
|
1412
|
-
function positionalsOf(command) {
|
|
1413
|
-
return Object.entries(argsOf(command) ?? {}).filter(([, def]) => typeOf(def) === "positional").map(([name]) => name);
|
|
1414
|
-
}
|
|
1415
|
-
function positionalNamed(flag, command) {
|
|
1416
|
-
const key = spellingKey(flag.replace(/^--/, "").split("=")[0] ?? "");
|
|
1417
|
-
const positionals = positionalsOf(command);
|
|
1418
|
-
const index = positionals.findIndex((name2) => spellingKey(name2) === key);
|
|
1419
|
-
const name = positionals[index];
|
|
1420
|
-
return name === void 0 ? null : { name, index };
|
|
1421
|
-
}
|
|
1422
|
-
function positionalCall(command, path, argv, typed, root, flag, positional) {
|
|
1423
|
-
const judged = withoutOption(argv, path, flag);
|
|
1424
|
-
const written = withoutOption(typed, path, flag);
|
|
1425
|
-
if (positional.index !== 0 || !judged || !written || commandPathOf(root, typed) !== path) {
|
|
1426
|
-
return null;
|
|
1427
|
-
}
|
|
1428
|
-
try {
|
|
1429
|
-
if (parseArgs(judged.others, positionalsOptional(command))._.length > 0) {
|
|
1430
|
-
return null;
|
|
1431
|
-
}
|
|
1432
|
-
} catch {
|
|
1433
|
-
return null;
|
|
1434
|
-
}
|
|
1435
|
-
const words = written.value.startsWith("-") ? [...written.others, "--", written.value] : [written.value, ...written.others];
|
|
1436
|
-
return `baker ${path} ${words.map(shellWord).join(" ")}`;
|
|
1437
|
-
}
|
|
1438
|
-
function shellWord(word) {
|
|
1439
|
-
if (word.includes("'") && word.includes("!")) {
|
|
1440
|
-
return `'${word.replaceAll("'", `'\\''`)}'`;
|
|
1441
|
-
}
|
|
1442
|
-
return quote([word]);
|
|
1443
|
-
}
|
|
1444
|
-
function positionalsOptional(command) {
|
|
1445
|
-
return Object.fromEntries(
|
|
1446
|
-
Object.entries(argsOf(command) ?? {}).map(([name, def]) => [
|
|
1447
|
-
name,
|
|
1448
|
-
typeOf(def) === "positional" ? { ...def, required: false } : def
|
|
1449
|
-
])
|
|
1450
|
-
);
|
|
1451
|
-
}
|
|
1452
|
-
function withoutOption(argv, path, flag) {
|
|
1453
|
-
const rest = argv.slice(path === "" ? 0 : path.split(" ").length);
|
|
1454
|
-
const at = rest.indexOf(flag);
|
|
1455
|
-
const inline = flag.includes("=");
|
|
1456
|
-
const value = inline ? flag.slice(flag.indexOf("=") + 1) : rest[at + 1];
|
|
1457
|
-
if (at < 0 || value === void 0 || value === "" || !inline && value.startsWith("-")) {
|
|
1458
|
-
return null;
|
|
1459
|
-
}
|
|
1460
|
-
return { value, others: [...rest.slice(0, at), ...rest.slice(at + (inline ? 1 : 2))] };
|
|
1461
|
-
}
|
|
1462
|
-
function lookItUp(commandPath) {
|
|
1463
|
-
const hasSchema = commandPath !== "" && findSchema(commandPath.split(" ")) !== void 0;
|
|
1464
|
-
return hasSchema ? { action: "check_schema", how: `Run \`baker schema ${commandPath}\` to see every argument it takes.` } : {
|
|
1465
|
-
action: "check_help",
|
|
1466
|
-
how: `Run \`baker${commandPath ? ` ${commandPath}` : ""} --help\` to see every argument it takes.`
|
|
1467
|
-
};
|
|
1468
|
-
}
|
|
1469
|
-
function invalidArgsEnvelope(message, commandPath, explanation = "") {
|
|
1470
|
-
const { action, how } = lookItUp(commandPath);
|
|
1471
|
-
return {
|
|
1472
|
-
ok: false,
|
|
1473
|
-
error: {
|
|
1474
|
-
code: "INVALID_ARGS",
|
|
1475
|
-
message,
|
|
1476
|
-
fix: { action, explanation: `${explanation}${how}` },
|
|
1477
|
-
retryable: false
|
|
1478
|
-
}
|
|
1479
|
-
};
|
|
1480
|
-
}
|
|
1481
|
-
function subCommandNames(command) {
|
|
1482
|
-
return Object.keys(subCommandsOf(command) ?? {});
|
|
1483
|
-
}
|
|
1484
|
-
function closestSubCommand(name, parent) {
|
|
1485
|
-
const scored = subCommandNames(parent).map((candidate) => ({ candidate, distance: editDistance(name, candidate) })).filter(({ distance }) => distance <= Math.max(2, typoBudget(name))).sort((a, b) => a.distance - b.distance);
|
|
1486
|
-
return scored[0]?.candidate ?? null;
|
|
1487
|
-
}
|
|
1488
|
-
var CITTY_REFUSALS = /* @__PURE__ */ new Set(["EARG", "E_UNKNOWN_COMMAND", "E_NO_COMMAND"]);
|
|
1489
|
-
function cittyRefusalCode(error) {
|
|
1490
|
-
if (!(error instanceof Error) || error.name !== "CLIError") {
|
|
1491
|
-
return null;
|
|
1492
|
-
}
|
|
1493
|
-
const code = error.code;
|
|
1494
|
-
return typeof code === "string" && CITTY_REFUSALS.has(code) ? code : null;
|
|
1495
|
-
}
|
|
1496
|
-
function firstUnknownWord(argv, pathLength, command) {
|
|
1497
|
-
const rest = argv.slice(pathLength);
|
|
1498
|
-
try {
|
|
1499
|
-
return parseArgs(rest, argsOf(command) ?? {})._[0];
|
|
1500
|
-
} catch {
|
|
1501
|
-
return rest.find((token) => !token.startsWith("-"));
|
|
1502
|
-
}
|
|
1503
|
-
}
|
|
1504
|
-
function parseRefusalEnvelope(error, root, argv) {
|
|
1505
|
-
const code = cittyRefusalCode(error);
|
|
1506
|
-
if (code === null || !(error instanceof Error)) {
|
|
1507
|
-
return null;
|
|
1508
|
-
}
|
|
1509
|
-
const path = commandPathOf(root, argv);
|
|
1510
|
-
const command = commandFor(root, argv) ?? root;
|
|
1511
|
-
const where = `\`baker${path ? ` ${path}` : ""}\``;
|
|
1512
|
-
if (code === "E_UNKNOWN_COMMAND") {
|
|
1513
|
-
const word = firstUnknownWord(argv, path === "" ? 0 : path.split(" ").length, command) ?? "";
|
|
1514
|
-
const closest = closestSubCommand(word, command);
|
|
1515
|
-
return invalidArgsEnvelope(
|
|
1516
|
-
`\`${word}\` is not a command of ${where}. Its commands: ${subCommandNames(command).join(", ")}.`,
|
|
1517
|
-
path,
|
|
1518
|
-
closest ? `Did you mean \`baker${path ? ` ${path}` : ""} ${closest}\`? ` : ""
|
|
1519
|
-
);
|
|
1520
|
-
}
|
|
1521
|
-
if (code === "E_NO_COMMAND") {
|
|
1522
|
-
return invalidArgsEnvelope(`${where} needs a command: one of ${subCommandNames(command).join(", ")}.`, path);
|
|
1523
|
-
}
|
|
1524
|
-
return invalidArgsEnvelope(missingArgMessage(error.message, where), path);
|
|
1525
|
-
}
|
|
1526
|
-
function missingArgMessage(cittyMessage, where) {
|
|
1527
|
-
const plain = stripVTControlCharacters(cittyMessage);
|
|
1528
|
-
const positional = /^Missing required positional argument: (\S+)/.exec(plain)?.[1];
|
|
1529
|
-
const missing = positional ? `<${positional.toLowerCase()}>` : /^Missing required argument: (--\S+)/.exec(plain)?.[1];
|
|
1530
|
-
return missing ? `${missing} is required by ${where}.` : `${plain.replace(/\.$/, "")} (${where}).`;
|
|
1531
|
-
}
|
|
1532
|
-
var READS_ITS_OWN_POSITIONALS = [
|
|
1533
|
-
"schema",
|
|
1534
|
-
"actions status",
|
|
1535
|
-
"credentials",
|
|
1536
|
-
"images download",
|
|
1537
|
-
"landing critique",
|
|
1538
|
-
"ads performance families choices",
|
|
1539
|
-
"ads google",
|
|
1540
|
-
"ads meta",
|
|
1541
|
-
"ads linkedin",
|
|
1542
|
-
"ads x",
|
|
1543
|
-
"ads chatgpt",
|
|
1544
|
-
...[
|
|
1545
|
-
"key-event",
|
|
1546
|
-
"custom-dimension",
|
|
1547
|
-
"custom-metric",
|
|
1548
|
-
"custom-event",
|
|
1549
|
-
"data-retention",
|
|
1550
|
-
"audience",
|
|
1551
|
-
"property",
|
|
1552
|
-
"ads-link",
|
|
1553
|
-
"enhanced-measurement",
|
|
1554
|
-
"draft"
|
|
1555
|
-
].map((name) => `ga4 ${name}`),
|
|
1556
|
-
...["tag", "trigger", "variable", "folder", "builtin", "draft"].map((name) => `tag-manager ${name}`),
|
|
1557
|
-
...["product", "promotions", "change", "draft", "changes", "undo"].map((name) => `shopify ${name}`)
|
|
1558
|
-
];
|
|
1559
|
-
function readsItsOwnPositionals(commandPath) {
|
|
1560
|
-
return READS_ITS_OWN_POSITIONALS.some((entry) => commandPath === entry || commandPath.startsWith(`${entry} `));
|
|
1561
|
-
}
|
|
1562
|
-
function findStrayPositionals(root, argv) {
|
|
1563
|
-
const { command, resolved } = resolveCommand(root, argv);
|
|
1564
|
-
const args = argsOf(command) ?? {};
|
|
1565
|
-
const path = commandPathOf(root, argv);
|
|
1566
|
-
if (!resolved || subCommandsOf(command) || argv.includes("--") || readsItsOwnPositionals(path)) {
|
|
1567
|
-
return [];
|
|
1568
|
-
}
|
|
1569
|
-
const rest = argv.slice(path === "" ? 0 : path.split(" ").length);
|
|
1570
|
-
let positionals;
|
|
1571
|
-
try {
|
|
1572
|
-
positionals = parseArgs(rest, args)._;
|
|
1573
|
-
} catch {
|
|
1574
|
-
return [];
|
|
1575
|
-
}
|
|
1576
|
-
const declared = Object.values(args).filter((def) => typeOf(def) === "positional").length;
|
|
1577
|
-
return positionals.slice(declared);
|
|
1578
|
-
}
|
|
1579
|
-
var BOOLEAN_WORD = /^(true|false)$/i;
|
|
1580
|
-
function refuseStrayPositionals(root, argv) {
|
|
1581
|
-
const stray = findStrayPositionals(root, argv);
|
|
1582
|
-
if (stray.length === 0) {
|
|
1583
|
-
return;
|
|
1584
|
-
}
|
|
1585
|
-
const path = commandPathOf(root, argv);
|
|
1586
|
-
const declared = Object.entries(argsOf(commandFor(root, argv) ?? root) ?? {}).filter(([, def]) => typeOf(def) === "positional").map(([name]) => `<${name}>`);
|
|
1587
|
-
const takes = declared.length === 0 ? "takes no positional argument" : `takes only ${declared.join(" ")}`;
|
|
1588
|
-
const booleanWord = stray.some((word) => BOOLEAN_WORD.test(word)) ? "A boolean flag written with a space is set to TRUE and the word is dropped: attach it instead (--flag=false), or use --no-flag. " : "";
|
|
1589
|
-
process.stdout.write(
|
|
1590
|
-
`${JSON.stringify(
|
|
1591
|
-
invalidArgsEnvelope(
|
|
1592
|
-
`${stray.map((word) => `\`${word}\``).join(", ")}: \`baker ${path}\` ${takes}, so ${stray.length > 1 ? "these were" : "this was"} not read.`,
|
|
1593
|
-
path,
|
|
1594
|
-
`${booleanWord}Pass each value with the flag it belongs to (\`--name value\`), or drop it. `
|
|
1595
|
-
),
|
|
1596
|
-
null,
|
|
1597
|
-
2
|
|
1598
|
-
)}
|
|
1599
|
-
`
|
|
1600
|
-
);
|
|
1601
|
-
process.exit(1);
|
|
1602
|
-
}
|
|
1603
|
-
|
|
1604
|
-
// src/printed-envelope.ts
|
|
1605
|
-
function parsePrintedEnvelope(text) {
|
|
1606
|
-
let parsed;
|
|
1607
|
-
try {
|
|
1608
|
-
parsed = JSON.parse(text);
|
|
1609
|
-
} catch {
|
|
1610
|
-
return null;
|
|
1611
|
-
}
|
|
1612
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
1613
|
-
return null;
|
|
1614
|
-
}
|
|
1615
|
-
return typeof parsed.ok === "boolean" ? parsed : null;
|
|
1616
|
-
}
|
|
1617
|
-
function reprint(text, envelope) {
|
|
1618
|
-
const indent = text.trimStart().startsWith("{\n") ? 2 : void 0;
|
|
1619
|
-
return `${JSON.stringify(envelope, null, indent)}${text.endsWith("\n") ? "\n" : ""}`;
|
|
1620
|
-
}
|
|
1621
|
-
function withHint(envelope, hint) {
|
|
1622
|
-
return { ...envelope, hints: [...Array.isArray(envelope.hints) ? envelope.hints : [], hint] };
|
|
1623
|
-
}
|
|
1624
|
-
function rewriteWrites(stream, rewrite) {
|
|
1625
|
-
let applied = false;
|
|
1626
|
-
const write2 = stream.write.bind(stream);
|
|
1627
|
-
stream.write = (chunk, ...rest) => {
|
|
1628
|
-
const rewritten = typeof chunk === "string" ? rewrite(chunk) : null;
|
|
1629
|
-
if (rewritten === null) {
|
|
1630
|
-
return write2(chunk, ...rest);
|
|
1631
|
-
}
|
|
1632
|
-
applied = true;
|
|
1633
|
-
return write2(rewritten, ...rest);
|
|
1634
|
-
};
|
|
1635
|
-
return { sawEnvelope: () => applied };
|
|
1636
|
-
}
|
|
1637
|
-
|
|
1638
|
-
// src/output-flag.ts
|
|
1639
|
-
var FLAG = "--output";
|
|
1640
|
-
var ENVELOPE = "json";
|
|
1641
|
-
var PRINTS_NO_ENVELOPE = /* @__PURE__ */ new Set(["analytics sending-events", "canvas sync-definition"]);
|
|
1642
|
-
var PRINTS_PROGRESS_BEFORE_ENVELOPE = /* @__PURE__ */ new Set(["canvas run", "canvas rerun"]);
|
|
1643
|
-
var OUTPUT_IS_NOT_A_FORMAT = /* @__PURE__ */ new Set(["creatives publish"]);
|
|
1644
|
-
function printsDataEnvelope(commandPath) {
|
|
1645
|
-
return !PRINTS_NO_ENVELOPE.has(commandPath) && !PRINTS_PROGRESS_BEFORE_ENVELOPE.has(commandPath);
|
|
1646
|
-
}
|
|
1647
|
-
function declaredArg(command, name) {
|
|
1648
|
-
const args = command.args;
|
|
1649
|
-
if (!args || typeof args !== "object" || !(name in args)) {
|
|
1650
|
-
return null;
|
|
1651
|
-
}
|
|
1652
|
-
const def = args[name];
|
|
1653
|
-
return def && typeof def === "object" ? def : {};
|
|
1654
|
-
}
|
|
1655
|
-
function envelopeRequests(argv) {
|
|
1656
|
-
const end = argv.indexOf("--");
|
|
1657
|
-
const limit = end === -1 ? argv.length : end;
|
|
1658
|
-
const found = [];
|
|
1659
|
-
for (let index = 0; index < limit; index++) {
|
|
1660
|
-
const token = argv[index];
|
|
1661
|
-
if (token === `${FLAG}=${ENVELOPE}`) {
|
|
1662
|
-
found.push({ index, length: 1 });
|
|
1663
|
-
} else if (token === FLAG && argv[index + 1] === ENVELOPE && index + 1 < limit) {
|
|
1664
|
-
found.push({ index, length: 2 });
|
|
1665
|
-
index++;
|
|
1666
|
-
}
|
|
1667
|
-
}
|
|
1668
|
-
return found;
|
|
1669
|
-
}
|
|
1670
|
-
function outputFlagForCommand(root, argv) {
|
|
1671
|
-
const requests = envelopeRequests(argv);
|
|
1672
|
-
if (requests.length === 0) {
|
|
1673
|
-
return argv;
|
|
1674
|
-
}
|
|
1675
|
-
const command = commandFor(root, argv);
|
|
1676
|
-
if (!command) {
|
|
1677
|
-
return argv;
|
|
1678
|
-
}
|
|
1679
|
-
const path = commandPathOf(root, argv);
|
|
1680
|
-
const ownFormat = declaredArg(command, "output") !== null && !OUTPUT_IS_NOT_A_FORMAT.has(path);
|
|
1681
|
-
if (ownFormat || PRINTS_NO_ENVELOPE.has(path)) {
|
|
1682
|
-
return argv;
|
|
1683
|
-
}
|
|
1684
|
-
const jsonSwitch = declaredArg(command, "json")?.type === "boolean";
|
|
1685
|
-
const dropped = new Set(requests.flatMap(({ index, length }) => length === 2 ? [index, index + 1] : [index]));
|
|
1686
|
-
const first = requests[0]?.index;
|
|
1687
|
-
return argv.flatMap((token, index) => {
|
|
1688
|
-
if (!dropped.has(index)) {
|
|
1689
|
-
return [token];
|
|
1690
|
-
}
|
|
1691
|
-
return jsonSwitch && index === first ? ["--json"] : [];
|
|
1692
|
-
});
|
|
1693
|
-
}
|
|
1694
|
-
function asksForEnvelopeAlone(root, argv) {
|
|
1695
|
-
return envelopeRequests(argv).length > 0 && PRINTS_PROGRESS_BEFORE_ENVELOPE.has(commandPathOf(root, argv));
|
|
1696
|
-
}
|
|
1697
|
-
function envelopeAloneOnStdout(stdout, stderr) {
|
|
1698
|
-
const toStdout = stdout.write.bind(stdout);
|
|
1699
|
-
const toStderr = stderr.write.bind(stderr);
|
|
1700
|
-
const route = (chunk, ...rest) => typeof chunk === "string" && parsePrintedEnvelope(chunk) !== null ? toStdout(chunk, ...rest) : toStderr(chunk, ...rest);
|
|
1701
|
-
stdout.write = route;
|
|
1702
|
-
stderr.write = route;
|
|
1703
|
-
}
|
|
1704
|
-
|
|
1705
|
-
// src/field-mask.ts
|
|
1706
|
-
var FLAG2 = "--fields";
|
|
1707
|
-
function parseFields(value) {
|
|
1708
|
-
return value.split(",").map((field) => field.trim()).filter((field) => field.length > 0);
|
|
1709
|
-
}
|
|
1710
|
-
function takeFieldsFlag(root, argv) {
|
|
1711
|
-
const end = argv.indexOf("--");
|
|
1712
|
-
const limit = end === -1 ? argv.length : end;
|
|
1713
|
-
const taken = /* @__PURE__ */ new Set();
|
|
1714
|
-
const fields = [];
|
|
1715
|
-
for (let index = 0; index < limit; index++) {
|
|
1716
|
-
const token = argv[index] ?? "";
|
|
1717
|
-
if (token.startsWith(`${FLAG2}=`)) {
|
|
1718
|
-
taken.add(index);
|
|
1719
|
-
fields.push(...parseFields(token.slice(FLAG2.length + 1)));
|
|
1720
|
-
} else if (token === FLAG2) {
|
|
1721
|
-
const value = argv[index + 1];
|
|
1722
|
-
if (value === void 0 || index + 1 >= limit || value.startsWith("-")) {
|
|
1723
|
-
return { argv, fields: null };
|
|
1724
|
-
}
|
|
1725
|
-
taken.add(index).add(index + 1);
|
|
1726
|
-
fields.push(...parseFields(value));
|
|
1727
|
-
index++;
|
|
1728
|
-
}
|
|
1729
|
-
}
|
|
1730
|
-
if (taken.size === 0 || fields.length === 0) {
|
|
1731
|
-
return { argv, fields: null };
|
|
1732
|
-
}
|
|
1733
|
-
const command = commandFor(root, argv);
|
|
1734
|
-
if (!command || declaredArg(command, "fields") || !printsDataEnvelope(commandPathOf(root, argv))) {
|
|
1735
|
-
return { argv, fields: null };
|
|
1736
|
-
}
|
|
1737
|
-
return { argv: argv.filter((_, index) => !taken.has(index)), fields };
|
|
1738
|
-
}
|
|
1739
|
-
function isRecord(value) {
|
|
1740
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1741
|
-
}
|
|
1742
|
-
function pick(record, fields) {
|
|
1743
|
-
return Object.fromEntries(fields.filter((field) => field in record).map((field) => [field, record[field]]));
|
|
1744
|
-
}
|
|
1745
|
-
function soleList(data) {
|
|
1746
|
-
const lists = Object.entries(data).filter(
|
|
1747
|
-
(entry) => Array.isArray(entry[1]) && entry[1].length > 0 && entry[1].every((item) => isRecord(item))
|
|
1748
|
-
);
|
|
1749
|
-
return lists.length === 1 ? lists[0] ?? null : null;
|
|
1750
|
-
}
|
|
1751
|
-
function wrappedList(data, fields) {
|
|
1752
|
-
const rowFields = fields.filter((field) => !(field in data));
|
|
1753
|
-
const list = soleList(data);
|
|
1754
|
-
if (list === null || !list[1].some((row) => rowFields.some((field) => field in row))) {
|
|
1755
|
-
return null;
|
|
1756
|
-
}
|
|
1757
|
-
return list[0];
|
|
1758
|
-
}
|
|
1759
|
-
function recordsOf(data, fields) {
|
|
1760
|
-
if (Array.isArray(data)) {
|
|
1761
|
-
return data;
|
|
1762
|
-
}
|
|
1763
|
-
if (!isRecord(data)) {
|
|
1764
|
-
return [];
|
|
1765
|
-
}
|
|
1766
|
-
const list = wrappedList(data, fields);
|
|
1767
|
-
return list === null ? [data] : data[list];
|
|
1768
|
-
}
|
|
1769
|
-
function maskData(data, fields) {
|
|
1770
|
-
const maskWith = (keep) => (item) => isRecord(item) ? pick(item, keep) : item;
|
|
1771
|
-
if (Array.isArray(data)) {
|
|
1772
|
-
return data.map(maskWith(fields));
|
|
1773
|
-
}
|
|
1774
|
-
if (!isRecord(data)) {
|
|
1775
|
-
return data;
|
|
1776
|
-
}
|
|
1777
|
-
const list = wrappedList(data, fields);
|
|
1778
|
-
if (list === null) {
|
|
1779
|
-
return pick(data, fields);
|
|
1780
|
-
}
|
|
1781
|
-
const wrapperFields = fields.filter((field) => field in data);
|
|
1782
|
-
const rows = recordsOf(data, fields).map(maskWith(fields.filter((field) => !(field in data))));
|
|
1783
|
-
return { ...wrapperFields.length > 0 ? pick(data, wrapperFields) : data, [list]: rows };
|
|
1784
|
-
}
|
|
1785
|
-
function unmatchedHint(data, fields) {
|
|
1786
|
-
const records = recordsOf(data, fields).filter(isRecord);
|
|
1787
|
-
if (records.length === 0) {
|
|
1788
|
-
return null;
|
|
1789
|
-
}
|
|
1790
|
-
const keys = isRecord(data) ? [data, ...soleList(data)?.[1] ?? []] : records;
|
|
1791
|
-
const carried = new Set(keys.flatMap((record) => Object.keys(record)));
|
|
1792
|
-
const unmatched = fields.filter((field) => !carried.has(field));
|
|
1793
|
-
if (unmatched.length === 0) {
|
|
1794
|
-
return null;
|
|
1795
|
-
}
|
|
1796
|
-
return `--fields matched nothing for: ${unmatched.join(", ")}. The keys data carries are: ${[...carried].join(", ")}.`;
|
|
1797
|
-
}
|
|
1798
|
-
var NO_DATA_HINT = "--fields was not applied: this result carries no data to narrow, so it is printed whole. Drop --fields on this command.";
|
|
1799
|
-
function maskPrintedEnvelope(text, fields) {
|
|
1800
|
-
const parsed = parsePrintedEnvelope(text);
|
|
1801
|
-
if (parsed === null) {
|
|
1802
|
-
return null;
|
|
1803
|
-
}
|
|
1804
|
-
if (parsed.ok !== true || "dryRun" in parsed) {
|
|
1805
|
-
return text;
|
|
1806
|
-
}
|
|
1807
|
-
return reprint(text, maskEnvelope(parsed, fields));
|
|
1808
|
-
}
|
|
1809
|
-
function maskEnvelope(envelope, fields) {
|
|
1810
|
-
if (!("data" in envelope)) {
|
|
1811
|
-
return withHint(envelope, NO_DATA_HINT);
|
|
1812
|
-
}
|
|
1813
|
-
const masked = { ...envelope, data: maskData(envelope.data, fields) };
|
|
1814
|
-
const miss = unmatchedHint(envelope.data, fields);
|
|
1815
|
-
return miss ? withHint(masked, miss) : masked;
|
|
1816
|
-
}
|
|
1817
|
-
function maskWrites(stream, fields) {
|
|
1818
|
-
return rewriteWrites(stream, (text) => maskPrintedEnvelope(text, fields));
|
|
1819
|
-
}
|
|
1820
|
-
function installFieldMask(fields, commandPath) {
|
|
1821
|
-
const mask = maskWrites(process.stdout, fields);
|
|
1822
|
-
process.on("exit", () => {
|
|
1823
|
-
if (!mask.sawEnvelope()) {
|
|
1824
|
-
process.stderr.write(
|
|
1825
|
-
`--fields was not applied: \`baker ${commandPath}\` printed no JSON envelope to narrow. Add --output json to get the envelope, or drop --fields.
|
|
1826
|
-
`
|
|
1827
|
-
);
|
|
1828
|
-
}
|
|
1829
|
-
});
|
|
1830
|
-
}
|
|
1831
|
-
|
|
1832
|
-
// src/output.ts
|
|
1833
|
-
var ASPECT_RATIO_MAP = {
|
|
1834
|
-
"1:1": 1,
|
|
1835
|
-
"16:9": 16 / 9,
|
|
1836
|
-
"9:16": 9 / 16,
|
|
1837
|
-
"2:3": 2 / 3,
|
|
1838
|
-
"3:4": 3 / 4,
|
|
1839
|
-
"1:2": 1 / 2,
|
|
1840
|
-
"2:1": 2,
|
|
1841
|
-
"4:5": 4 / 5,
|
|
1842
|
-
"3:2": 3 / 2,
|
|
1843
|
-
"4:3": 4 / 3
|
|
1844
|
-
};
|
|
1845
|
-
var ASPECT_RATIO_TOLERANCE = 0.08;
|
|
1846
|
-
function formatAspectRatio(ratio) {
|
|
1847
|
-
if (ratio === void 0 || ratio === null) {
|
|
1848
|
-
return null;
|
|
1849
|
-
}
|
|
1850
|
-
for (const [label, value] of Object.entries(ASPECT_RATIO_MAP)) {
|
|
1851
|
-
if (Math.abs(ratio - value) / value < ASPECT_RATIO_TOLERANCE) {
|
|
1852
|
-
return label;
|
|
1853
|
-
}
|
|
1854
|
-
}
|
|
1855
|
-
return null;
|
|
1856
|
-
}
|
|
1857
|
-
function groupSummary(record) {
|
|
1858
|
-
const key = record.groupKey;
|
|
1859
|
-
if (typeof key !== "string" || !key) {
|
|
1860
|
-
return null;
|
|
1861
|
-
}
|
|
1862
|
-
const index = typeof record.groupIndex === "number" ? record.groupIndex : null;
|
|
1863
|
-
const size = typeof record.groupSize === "number" ? record.groupSize : null;
|
|
1864
|
-
return {
|
|
1865
|
-
key,
|
|
1866
|
-
kind: typeof record.groupKind === "string" ? record.groupKind : null,
|
|
1867
|
-
position: index === null ? null : size === null ? `${index + 1}` : `${index + 1} of ${size}`,
|
|
1868
|
-
title: typeof record.groupTitle === "string" ? record.groupTitle : null,
|
|
1869
|
-
url: typeof record.groupUrl === "string" ? record.groupUrl : null
|
|
1870
|
-
};
|
|
1871
|
-
}
|
|
1872
|
-
function peopleLines(value) {
|
|
1873
|
-
if (!Array.isArray(value)) {
|
|
1874
|
-
return [];
|
|
1875
|
-
}
|
|
1876
|
-
return value.flatMap((entry) => {
|
|
1877
|
-
const person = asRecord(entry);
|
|
1878
|
-
const role = typeof person.role === "string" ? person.role : "";
|
|
1879
|
-
if (!role) {
|
|
1880
|
-
return [];
|
|
1881
|
-
}
|
|
1882
|
-
const identity = typeof person.identity === "string" && person.identity ? ` \u2014 ${person.identity}` : "";
|
|
1883
|
-
const appearance = typeof person.appearance === "string" && person.appearance ? ` (${person.appearance})` : "";
|
|
1884
|
-
const speaking = person.speaking === true ? " [speaking]" : "";
|
|
1885
|
-
return [`${role}${identity}${appearance}${speaking}`];
|
|
1886
|
-
});
|
|
1887
|
-
}
|
|
1888
|
-
function compactImage(image) {
|
|
1889
|
-
const analysis = asRecord(image.analysis);
|
|
1890
|
-
return {
|
|
1891
|
-
_id: String(image._id ?? ""),
|
|
1892
|
-
name: String(image.name ?? ""),
|
|
1893
|
-
imageUrl: String(image.imageUrl ?? ""),
|
|
1894
|
-
description: String(image.description ?? ""),
|
|
1895
|
-
tags: Array.isArray(image.tags) ? image.tags : [],
|
|
1896
|
-
// Two numbers that are not about choosing the image but about placing it.
|
|
1897
|
-
// A remote <BakerImage> with no width/height makes Astro DOWNLOAD the file
|
|
1898
|
-
// at build time just to measure it — one request per image per build, on a
|
|
1899
|
-
// build that is otherwise offline, and a single dropped connection there
|
|
1900
|
-
// fails a client's whole verify. They are cheap enough to always carry, and
|
|
1901
|
-
// burying them behind --full meant the agent placing the image never had
|
|
1902
|
-
// them.
|
|
1903
|
-
width: typeof image.width === "number" ? image.width : null,
|
|
1904
|
-
height: typeof image.height === "number" ? image.height : null,
|
|
1905
|
-
// The facts that decide a pick, so choosing does not need a second call:
|
|
1906
|
-
// whose brand it is, who is in it, and what text is burned in.
|
|
1907
|
-
subject: typeof analysis.subject === "string" ? analysis.subject : null,
|
|
1908
|
-
brandOwnership: typeof analysis.brandOwnership === "string" ? analysis.brandOwnership : null,
|
|
1909
|
-
people: peopleLines(analysis.people),
|
|
1910
|
-
textInImage: Array.isArray(analysis.textInImage) ? analysis.textInImage : [],
|
|
1911
|
-
group: groupSummary(image)
|
|
1912
|
-
};
|
|
1913
|
-
}
|
|
1914
|
-
function fullImage(image) {
|
|
1915
|
-
const compact = compactImage(image);
|
|
1916
|
-
return {
|
|
1917
|
-
...compact,
|
|
1918
|
-
aspectRatio: formatAspectRatio(image.aspectRatio),
|
|
1919
|
-
dominantColor: image.dominantColor ?? null,
|
|
1920
|
-
imagePalette: Array.isArray(image.imagePalette) ? image.imagePalette : [],
|
|
1921
|
-
source: String(image.source ?? ""),
|
|
1922
|
-
externalUrl: image.externalUrl ?? null,
|
|
1923
|
-
originalFilename: image.originalFilename ?? null,
|
|
1924
|
-
descriptionContext: image.descriptionContext ?? null,
|
|
1925
|
-
style: typeof asRecord(image.analysis).style === "string" ? asRecord(image.analysis).style : null,
|
|
1926
|
-
composition: typeof asRecord(image.analysis).composition === "string" ? asRecord(image.analysis).composition : null,
|
|
1927
|
-
usageNotes: typeof asRecord(image.analysis).usageNotes === "string" ? asRecord(image.analysis).usageNotes : null,
|
|
1928
|
-
createdAt: image.createdAt ?? null
|
|
1929
|
-
};
|
|
1930
|
-
}
|
|
1931
|
-
function imageNormalizer(record, full) {
|
|
1932
|
-
if (full) {
|
|
1933
|
-
return fullImage(record);
|
|
1934
|
-
}
|
|
1935
|
-
return compactImage(record);
|
|
1936
|
-
}
|
|
1937
|
-
function sellingFacts(analysis) {
|
|
1938
|
-
return {
|
|
1939
|
-
format: typeof analysis.format === "string" ? analysis.format : null,
|
|
1940
|
-
tone: typeof analysis.tone === "string" ? analysis.tone : null,
|
|
1941
|
-
productClaims: Array.isArray(analysis.productClaims) ? analysis.productClaims : null
|
|
1942
|
-
};
|
|
1943
|
-
}
|
|
1944
|
-
function compactVideo(video) {
|
|
1945
|
-
const analysis = asRecord(video.analysis);
|
|
1946
|
-
const sceneCount = typeof video.sceneCount === "number" ? video.sceneCount : Array.isArray(video.scenes) ? video.scenes.length : 0;
|
|
1947
|
-
return {
|
|
1948
|
-
_id: String(video._id ?? ""),
|
|
1949
|
-
name: String(video.name ?? ""),
|
|
1950
|
-
thumbnailUrl: String(video.thumbnailUrl ?? ""),
|
|
1951
|
-
description: String(video.description ?? ""),
|
|
1952
|
-
tags: Array.isArray(video.tags) ? video.tags : [],
|
|
1953
|
-
status: String(video.status ?? ""),
|
|
1954
|
-
// What decides whether this clip is usable, without a second call: who is
|
|
1955
|
-
// on camera and in what role, what language they speak, how it opens, and
|
|
1956
|
-
// how many beats there are to cut from.
|
|
1957
|
-
subject: typeof analysis.subject === "string" ? analysis.subject : null,
|
|
1958
|
-
brandOwnership: typeof analysis.brandOwnership === "string" ? analysis.brandOwnership : null,
|
|
1959
|
-
people: peopleLines(analysis.people),
|
|
1960
|
-
spokenLanguages: Array.isArray(analysis.spokenLanguages) ? analysis.spokenLanguages : [],
|
|
1961
|
-
hook: typeof analysis.hook === "string" ? analysis.hook : null,
|
|
1962
|
-
...sellingFacts(analysis),
|
|
1963
|
-
sceneCount,
|
|
1964
|
-
group: groupSummary(video)
|
|
1965
|
-
};
|
|
1966
|
-
}
|
|
1967
|
-
function sceneDecoration(scene) {
|
|
1968
|
-
const shot = typeof scene.shot === "string" && scene.shot ? ` [${scene.shot}]` : "";
|
|
1969
|
-
const change = typeof scene.visualChange === "string" && scene.visualChange ? ` <${scene.visualChange}>` : "";
|
|
1970
|
-
const overlayText = Array.isArray(scene.onScreenText) ? scene.onScreenText.filter(Boolean) : [];
|
|
1971
|
-
let overlay = "";
|
|
1972
|
-
if (scene.hasOverlay === true) {
|
|
1973
|
-
overlay = overlayText.length > 0 ? ` \u2014 banner: "${overlayText.join('" / "')}"` : " \u2014 banner";
|
|
1974
|
-
} else if (scene.hasOverlay === false) {
|
|
1975
|
-
overlay = " \u2014 clean frame";
|
|
1976
|
-
}
|
|
1977
|
-
const spoken = typeof scene.spoken === "string" && scene.spoken ? ` \u2014 says: "${scene.spoken}"` : "";
|
|
1978
|
-
return `${shot}${change}${overlay}${spoken}`;
|
|
1979
|
-
}
|
|
1980
|
-
function sceneLines(value) {
|
|
1981
|
-
if (!Array.isArray(value)) {
|
|
1982
|
-
return [];
|
|
1983
|
-
}
|
|
1984
|
-
return value.flatMap((s) => {
|
|
1985
|
-
const scene = asRecord(s);
|
|
1986
|
-
const title = typeof scene.title === "string" ? scene.title : "";
|
|
1987
|
-
if (!title) {
|
|
1988
|
-
return [];
|
|
1989
|
-
}
|
|
1990
|
-
const start = round2(scene.startSecond);
|
|
1991
|
-
const end = round2(scene.endSecond);
|
|
1992
|
-
const range = start !== null && end !== null ? ` (${start}-${end}s)` : "";
|
|
1993
|
-
return [`${title}${range}${sceneDecoration(scene)}`];
|
|
1994
|
-
});
|
|
1995
|
-
}
|
|
1996
|
-
function fullVideo(video) {
|
|
1997
|
-
const compact = compactVideo(video);
|
|
1998
|
-
return {
|
|
1999
|
-
...compact,
|
|
2000
|
-
duration: video.duration ?? null,
|
|
2001
|
-
muxPlaybackId: String(video.muxPlaybackId ?? ""),
|
|
2002
|
-
source: String(video.source ?? ""),
|
|
2003
|
-
// The spoken transcript + AI scene breakdown of the client's own clip — the
|
|
2004
|
-
// "understand what's in this video" payload. Kept out of the compact/search
|
|
2005
|
-
// projection (too large for a list) and surfaced here on --full.
|
|
2006
|
-
transcript: video.transcript ?? null,
|
|
2007
|
-
transcript_segment_count: Array.isArray(video.transcriptSegments) ? video.transcriptSegments.length : 0,
|
|
2008
|
-
scenes: sceneLines(video.scenes),
|
|
2009
|
-
originalFilename: video.originalFilename ?? null,
|
|
2010
|
-
descriptionContext: video.descriptionContext ?? null,
|
|
2011
|
-
shotStyle: typeof asRecord(video.analysis).shotStyle === "string" ? asRecord(video.analysis).shotStyle : null,
|
|
2012
|
-
audioStyle: typeof asRecord(video.analysis).audioStyle === "string" ? asRecord(video.analysis).audioStyle : null,
|
|
2013
|
-
onScreenText: Array.isArray(asRecord(video.analysis).onScreenText) ? asRecord(video.analysis).onScreenText : [],
|
|
2014
|
-
usageNotes: typeof asRecord(video.analysis).usageNotes === "string" ? asRecord(video.analysis).usageNotes : null,
|
|
2015
|
-
createdAt: video.createdAt ?? null
|
|
2016
|
-
};
|
|
2017
|
-
}
|
|
2018
|
-
function videoNormalizer(record, full) {
|
|
2019
|
-
if (full) {
|
|
2020
|
-
return fullVideo(record);
|
|
2021
|
-
}
|
|
2022
|
-
return compactVideo(record);
|
|
2023
|
-
}
|
|
2024
|
-
function truncate(text, maxLength) {
|
|
2025
|
-
if (text.length <= maxLength) return text;
|
|
2026
|
-
return `${text.slice(0, maxLength)}...`;
|
|
2027
|
-
}
|
|
2028
|
-
function compactTestimonial(record) {
|
|
2029
|
-
return {
|
|
2030
|
-
_id: String(record._id ?? ""),
|
|
2031
|
-
reviewerName: String(record.reviewerName ?? ""),
|
|
2032
|
-
reviewText: truncate(String(record.reviewText ?? ""), 200),
|
|
2033
|
-
rating: record.rating ?? null,
|
|
2034
|
-
sentiment: record.sentiment ?? null,
|
|
2035
|
-
tags: Array.isArray(record.tags) ? record.tags : [],
|
|
2036
|
-
sourceType: String(record.sourceType ?? "")
|
|
2037
|
-
};
|
|
2038
|
-
}
|
|
2039
|
-
function fullTestimonial(record) {
|
|
2040
|
-
const compact = compactTestimonial(record);
|
|
2041
|
-
return {
|
|
2042
|
-
...compact,
|
|
2043
|
-
reviewText: String(record.reviewText ?? ""),
|
|
2044
|
-
highlight: record.highlight ?? null,
|
|
2045
|
-
summary: record.summary ?? null,
|
|
2046
|
-
language: record.language ?? null,
|
|
2047
|
-
reviewerImageUrl: record.reviewerImageUrl ?? null,
|
|
2048
|
-
sourceUrl: record.sourceUrl ?? null,
|
|
2049
|
-
reviewDate: record.reviewDate ?? null,
|
|
2050
|
-
createdAt: record.createdAt ?? null,
|
|
2051
|
-
status: String(record.status ?? "")
|
|
2052
|
-
};
|
|
2053
|
-
}
|
|
2054
|
-
function testimonialNormalizer(record, full) {
|
|
2055
|
-
if (full) {
|
|
2056
|
-
return fullTestimonial(record);
|
|
2057
|
-
}
|
|
2058
|
-
return compactTestimonial(record);
|
|
2059
|
-
}
|
|
2060
|
-
function round2(value) {
|
|
2061
|
-
if (typeof value !== "number" || Number.isNaN(value)) {
|
|
2062
|
-
return null;
|
|
2063
|
-
}
|
|
2064
|
-
return Math.round(value * 100) / 100;
|
|
2065
|
-
}
|
|
2066
|
-
function asRecord(value) {
|
|
2067
|
-
return value && typeof value === "object" ? value : {};
|
|
2068
|
-
}
|
|
2069
|
-
function bakerUses(value) {
|
|
2070
|
-
const uses = asRecord(value);
|
|
2071
|
-
const companies = typeof uses.companies === "number" ? uses.companies : 0;
|
|
2072
|
-
if (companies === 0) return {};
|
|
2073
|
-
const count = (n) => typeof n === "number" && n > 0 ? n : void 0;
|
|
2074
|
-
const approved = count(uses.approved);
|
|
2075
|
-
const rejected = count(uses.rejected);
|
|
2076
|
-
return {
|
|
2077
|
-
baker_uses: companies,
|
|
2078
|
-
...uses.ours === true ? { already_adapted: true } : {},
|
|
2079
|
-
...approved !== void 0 ? { approved } : {},
|
|
2080
|
-
...rejected !== void 0 ? { rejected } : {}
|
|
2081
|
-
};
|
|
2082
|
-
}
|
|
2083
|
-
function dnaMove(dna) {
|
|
2084
|
-
const text = (value) => typeof value === "string" && value ? value : void 0;
|
|
2085
|
-
const visual = text(dna.visual);
|
|
2086
|
-
const container = text(dna.container);
|
|
2087
|
-
const mechanism = text(dna.mechanism);
|
|
2088
|
-
return {
|
|
2089
|
-
...visual ? { visual } : {},
|
|
2090
|
-
...container ? { container } : {},
|
|
2091
|
-
...mechanism ? { mechanism } : {}
|
|
2092
|
-
};
|
|
2093
|
-
}
|
|
2094
|
-
function dnaAudience(dna) {
|
|
2095
|
-
const text = (value) => typeof value === "string" && value ? value : void 0;
|
|
2096
|
-
const audienceTemperature = text(dna.audience_temperature);
|
|
2097
|
-
const funnelStage = text(dna.funnel_stage);
|
|
2098
|
-
const advertiserSize = text(dna.advertiser_size);
|
|
2099
|
-
const presumes = typeof dna.presumes_brand_knowledge === "boolean" ? dna.presumes_brand_knowledge : void 0;
|
|
2100
|
-
const reason = presumes ? text(dna.brand_knowledge_reason) : void 0;
|
|
2101
|
-
return {
|
|
2102
|
-
...audienceTemperature ? { audience_temperature: audienceTemperature } : {},
|
|
2103
|
-
...funnelStage ? { funnel_stage: funnelStage } : {},
|
|
2104
|
-
...advertiserSize ? { advertiser_size: advertiserSize } : {},
|
|
2105
|
-
...presumes !== void 0 ? { presumes_brand_knowledge: presumes } : {},
|
|
2106
|
-
...reason ? { brand_knowledge_reason: reason } : {}
|
|
2107
|
-
};
|
|
2108
|
-
}
|
|
2109
|
-
function partnershipFields(value) {
|
|
2110
|
-
if (value === null || typeof value !== "object") return {};
|
|
2111
|
-
const partner = asRecord(value).partner_name;
|
|
2112
|
-
return { partnership: true, ...typeof partner === "string" && partner ? { partner } : {} };
|
|
2113
|
-
}
|
|
2114
|
-
function compactWinningAd(record) {
|
|
2115
|
-
const dna = asRecord(record.dna);
|
|
2116
|
-
return {
|
|
2117
|
-
advertiser: String(record.advertiser ?? ""),
|
|
2118
|
-
platform: String(record.platform ?? ""),
|
|
2119
|
-
format: String(record.format ?? ""),
|
|
2120
|
-
relevance: round2(record.relevance),
|
|
2121
|
-
winner_score: round2(record.winner_score),
|
|
2122
|
-
winner_category: typeof record.winner_category === "string" ? record.winner_category : null,
|
|
2123
|
-
proof: proofStrength(typeof record.winner_score === "number" ? record.winner_score : null),
|
|
2124
|
-
days_active: typeof record.days_active === "number" ? record.days_active : null,
|
|
2125
|
-
active: typeof record.active === "boolean" ? record.active : null,
|
|
2126
|
-
summary: String(dna.creative_concept ?? ""),
|
|
2127
|
-
advertiser_id: String(record.advertiser_id ?? ""),
|
|
2128
|
-
ad_id: String(record.ad_id ?? ""),
|
|
2129
|
-
media_url: String(record.media_url ?? ""),
|
|
2130
|
-
...typeof record.stage === "string" ? { stage: record.stage } : {},
|
|
2131
|
-
...record.survived_test === true ? { survived_test: true } : {},
|
|
2132
|
-
...partnershipFields(record.partnership),
|
|
2133
|
-
...dnaMove(dna),
|
|
2134
|
-
...dnaAudience(dna),
|
|
2135
|
-
...bakerUses(record.baker_uses),
|
|
2136
|
-
...record.source === "followed" || record.source === "library" ? { source: record.source } : {}
|
|
2137
|
-
};
|
|
2138
|
-
}
|
|
2139
|
-
function fullWinningAd(record) {
|
|
2140
|
-
const compact = compactWinningAd(record);
|
|
2141
|
-
const dna = asRecord(record.dna);
|
|
2142
|
-
return {
|
|
2143
|
-
...compact,
|
|
2144
|
-
media_kind: record.media_kind ?? null,
|
|
2145
|
-
reach: record.reach ?? null,
|
|
2146
|
-
angle: dna.angle ?? null,
|
|
2147
|
-
awareness_stage: dna.awareness_stage ?? null,
|
|
2148
|
-
target_persona: dna.target_persona ?? null,
|
|
2149
|
-
hook_archetype: dna.hook_archetype ?? null,
|
|
2150
|
-
mechanism: dna.mechanism ?? null,
|
|
2151
|
-
industry: dna.industry ?? null
|
|
2152
|
-
};
|
|
2153
|
-
}
|
|
2154
|
-
function winningAdNormalizer(record, full) {
|
|
2155
|
-
if (full) {
|
|
2156
|
-
return fullWinningAd(record);
|
|
2157
|
-
}
|
|
2158
|
-
return compactWinningAd(record);
|
|
2159
|
-
}
|
|
2160
|
-
function inImageLine(item, text, detailed) {
|
|
2161
|
-
const card = typeof item.card === "number" ? `card ${item.card} \xB7 ` : "";
|
|
2162
|
-
const role = typeof item.role === "string" && item.role.length > 0 ? `${item.role}: ` : "";
|
|
2163
|
-
const position = detailed && typeof item.position === "string" && item.position.length > 0 ? ` [${item.position}]` : "";
|
|
2164
|
-
return `${card}${role}${text}${position}`;
|
|
2165
|
-
}
|
|
2166
|
-
function overlayLines(value, detailed = false, inImage = false) {
|
|
2167
|
-
if (!Array.isArray(value)) {
|
|
2168
|
-
return [];
|
|
2169
|
-
}
|
|
2170
|
-
return value.flatMap((o) => {
|
|
2171
|
-
const item = asRecord(o);
|
|
2172
|
-
const text = typeof item.text === "string" ? item.text : "";
|
|
2173
|
-
if (!text) {
|
|
2174
|
-
return [];
|
|
2175
|
-
}
|
|
2176
|
-
if (inImage) {
|
|
2177
|
-
return [inImageLine(item, text, detailed)];
|
|
2178
|
-
}
|
|
2179
|
-
const at = round2(item.appears_at_s);
|
|
2180
|
-
let line = at !== null ? `${text} @${at}s` : text;
|
|
2181
|
-
if (detailed) {
|
|
2182
|
-
const tags = [item.role, item.position].filter((t) => typeof t === "string" && t.length > 0);
|
|
2183
|
-
if (tags.length) {
|
|
2184
|
-
line += ` [${tags.join(", ")}]`;
|
|
2185
|
-
}
|
|
2186
|
-
}
|
|
2187
|
-
return [line];
|
|
2188
|
-
});
|
|
2189
|
-
}
|
|
2190
|
-
var STOPPED_STAGES = /* @__PURE__ */ new Set(["killed_early", "retired"]);
|
|
2191
|
-
function adLifecycleFields(adId, value) {
|
|
2192
|
-
const lifecycle = asRecord(value);
|
|
2193
|
-
if (typeof lifecycle.stage !== "string") return {};
|
|
2194
|
-
const test = asRecord(lifecycle.test);
|
|
2195
|
-
const keptAdId = typeof test.winner_ad_id === "string" ? test.winner_ad_id : null;
|
|
2196
|
-
const thisVersion = keptAdId !== null && keptAdId === adId ? "kept" : STOPPED_STAGES.has(lifecycle.stage) ? "cut" : "running";
|
|
2197
|
-
return {
|
|
2198
|
-
stage: lifecycle.stage,
|
|
2199
|
-
...lifecycle.survived_test === true ? { survived_test: true } : {},
|
|
2200
|
-
...typeof test.status === "string" ? {
|
|
2201
|
-
test: {
|
|
2202
|
-
status: test.status,
|
|
2203
|
-
versions: test.versions,
|
|
2204
|
-
this_version: thisVersion,
|
|
2205
|
-
kept_ad_id: keptAdId,
|
|
2206
|
-
what_differed: test.what_differed ?? []
|
|
2207
|
-
}
|
|
2208
|
-
} : {}
|
|
2209
|
-
};
|
|
2210
|
-
}
|
|
2211
|
-
function landingAndKind(record) {
|
|
2212
|
-
return {
|
|
2213
|
-
...typeof record.landing_url === "string" ? { landing_url: record.landing_url } : {},
|
|
2214
|
-
// Why the link opens no page: meta_native (an Instant Form or Experience), messaging, app_store…
|
|
2215
|
-
...typeof record.landing_elsewhere === "string" ? { landing_elsewhere: record.landing_elsewhere } : {},
|
|
2216
|
-
...typeof record.google_ad_type === "string" ? { google_ad_type: record.google_ad_type } : {}
|
|
2217
|
-
};
|
|
2218
|
-
}
|
|
2219
|
-
function searchAdParts(raw) {
|
|
2220
|
-
const parsed = adContentSearchAdSchema.safeParse(raw);
|
|
2221
|
-
if (!parsed.success) return {};
|
|
2222
|
-
const { headlines, descriptions, sitelinks, callouts, rating } = parsed.data;
|
|
2223
|
-
return filledOnly({
|
|
2224
|
-
headlines: headlines.map((h) => h.hook ? `${h.text} (${h.hook})` : h.text),
|
|
2225
|
-
descriptions,
|
|
2226
|
-
sitelinks,
|
|
2227
|
-
callouts,
|
|
2228
|
-
rating
|
|
2229
|
-
});
|
|
2230
|
-
}
|
|
2231
|
-
function compactAdContent(record) {
|
|
2232
|
-
const inImage = record.format === "static" || record.format === "carousel";
|
|
2233
|
-
return {
|
|
2234
|
-
ad_id: record.ad_id ?? null,
|
|
2235
|
-
advertiser: record.advertiser ?? null,
|
|
2236
|
-
format: record.format ?? null,
|
|
2237
|
-
media_kind: record.media_kind ?? null,
|
|
2238
|
-
media_url: record.media_url ?? null,
|
|
2239
|
-
summary: record.summary ?? null,
|
|
2240
|
-
transcript: record.transcript ?? null,
|
|
2241
|
-
on_screen_text: overlayLines(record.on_screen_text, false, inImage),
|
|
2242
|
-
// The container a static reference is built on (comparison_table, before_after_split…).
|
|
2243
|
-
...inImage ? { format_pattern: asRecord(record.layout).format_pattern ?? null } : {},
|
|
2244
|
-
has_captions: typeof record.has_captions === "boolean" ? record.has_captions : null,
|
|
2245
|
-
primary_text: record.primary_text ?? null,
|
|
2246
|
-
headline: record.headline ?? null,
|
|
2247
|
-
cta: record.cta ?? null,
|
|
2248
|
-
...landingAndKind(record),
|
|
2249
|
-
...searchAdParts(record.search_ad),
|
|
2250
|
-
...adLifecycleFields(record.ad_id, record.lifecycle)
|
|
2251
|
-
};
|
|
2252
|
-
}
|
|
2253
|
-
function filledOnly(value) {
|
|
2254
|
-
return Object.fromEntries(
|
|
2255
|
-
Object.entries(asRecord(value)).filter(
|
|
2256
|
-
([, v]) => v !== null && v !== void 0 && !(Array.isArray(v) && v.length === 0)
|
|
2257
|
-
)
|
|
2258
|
-
);
|
|
2259
|
-
}
|
|
2260
|
-
function fullAdContent(record) {
|
|
2261
|
-
const speech = asRecord(record.speech);
|
|
2262
|
-
const pacing = asRecord(record.pacing);
|
|
2263
|
-
const music = asRecord(record.music);
|
|
2264
|
-
return {
|
|
2265
|
-
...compactAdContent(record),
|
|
2266
|
-
platform: record.platform ?? null,
|
|
2267
|
-
// Re-derive with role/position tags — the lean compact version dropped them.
|
|
2268
|
-
on_screen_text: overlayLines(
|
|
2269
|
-
record.on_screen_text,
|
|
2270
|
-
true,
|
|
2271
|
-
record.format === "static" || record.format === "carousel"
|
|
2272
|
-
),
|
|
2273
|
-
winner_score: round2(record.winner_score),
|
|
2274
|
-
winner_category: record.winner_category ?? null,
|
|
2275
|
-
angle: record.angle ?? null,
|
|
2276
|
-
hook_archetype: record.hook_archetype ?? null,
|
|
2277
|
-
caption_style: record.caption_style ?? null,
|
|
2278
|
-
has_speech: typeof record.has_speech === "boolean" ? record.has_speech : null,
|
|
2279
|
-
speech_pct_of_runtime: round2(speech.speech_pct_of_runtime),
|
|
2280
|
-
speaker_count: speech.speaker_count ?? null,
|
|
2281
|
-
voiceover_vs_sync: speech.voiceover_vs_sync ?? null,
|
|
2282
|
-
is_direct_address: typeof speech.is_direct_address === "boolean" ? speech.is_direct_address : null,
|
|
2283
|
-
speech_emotion_dominant: speech.speech_emotion_dominant ?? null,
|
|
2284
|
-
scene_count: pacing.scene_count ?? null,
|
|
2285
|
-
avg_shot_length_s: round2(pacing.avg_shot_length_s),
|
|
2286
|
-
pacing_shape: pacing.pacing_shape ?? null,
|
|
2287
|
-
hook_ends_at_s: round2(pacing.hook_ends_at_s),
|
|
2288
|
-
cta_first_shown_at_s: round2(pacing.cta_first_shown_at_s),
|
|
2289
|
-
product_first_appears_at_s: round2(pacing.product_first_appears_at_s),
|
|
2290
|
-
music_track_title: music.track_title ?? null,
|
|
2291
|
-
music_track_artist: music.track_artist ?? null,
|
|
2292
|
-
// How it is built, how it persuades, and what it offers, flattened like
|
|
2293
|
-
// speech/pacing above so --output md renders them, and only when present.
|
|
2294
|
-
...filledOnly(record.layout),
|
|
2295
|
-
...filledOnly(record.message),
|
|
2296
|
-
...filledOnly(record.offer)
|
|
2297
|
-
};
|
|
2298
|
-
}
|
|
2299
|
-
function adContentNormalizer(record, full) {
|
|
2300
|
-
return full ? fullAdContent(record) : compactAdContent(record);
|
|
2301
|
-
}
|
|
2302
|
-
function applyFieldMask(data, fields) {
|
|
2303
|
-
const result = {};
|
|
2304
|
-
for (const field of fields) {
|
|
2305
|
-
if (field in data) {
|
|
2306
|
-
result[field] = data[field];
|
|
2307
|
-
}
|
|
2308
|
-
}
|
|
2309
|
-
return result;
|
|
2310
|
-
}
|
|
2311
|
-
function write(text) {
|
|
2312
|
-
process.stdout.write(text);
|
|
2313
|
-
}
|
|
2314
|
-
function writeJson(envelope) {
|
|
2315
|
-
write(`${JSON.stringify(envelope, null, 2)}
|
|
2316
|
-
`);
|
|
2317
|
-
}
|
|
2318
|
-
function cell(value) {
|
|
2319
|
-
if (value === null || value === void 0) return "";
|
|
2320
|
-
return typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
2321
|
-
}
|
|
2322
|
-
function writeFiles(data, fields) {
|
|
2323
|
-
write(`${fields.join(" ")}
|
|
2324
|
-
`);
|
|
2325
|
-
for (const item of data) {
|
|
2326
|
-
const values = fields.map((f) => cell(item[f]));
|
|
2327
|
-
write(`${values.join(" ")}
|
|
2328
|
-
`);
|
|
2329
|
-
}
|
|
2330
|
-
}
|
|
2331
|
-
function writeMd(data, fields) {
|
|
2332
|
-
write(`| ${fields.join(" | ")} |
|
|
2333
|
-
`);
|
|
2334
|
-
write(`| ${fields.map(() => "---").join(" | ")} |
|
|
2335
|
-
`);
|
|
2336
|
-
for (const item of data) {
|
|
2337
|
-
const values = fields.map((f) => cell(item[f]));
|
|
2338
|
-
write(`| ${values.join(" | ")} |
|
|
2339
|
-
`);
|
|
2340
|
-
}
|
|
2341
|
-
}
|
|
2342
|
-
function normalizeData(envelope, fields, full, normalizer) {
|
|
2343
|
-
const raw = Array.isArray(envelope.data) ? envelope.data : [envelope.data];
|
|
2344
|
-
const items = raw.map((item) => {
|
|
2345
|
-
const record = item;
|
|
2346
|
-
return normalizer(record, full);
|
|
2347
|
-
});
|
|
2348
|
-
if (fields) {
|
|
2349
|
-
return items.map((item) => applyFieldMask(item, fields));
|
|
2350
|
-
}
|
|
2351
|
-
return items;
|
|
2352
|
-
}
|
|
2353
|
-
function writeOutput(envelope, format, fields, full, normalizer) {
|
|
2354
|
-
if (!envelope.ok || "dryRun" in envelope) {
|
|
2355
|
-
writeJson(envelope);
|
|
2356
|
-
return;
|
|
2357
|
-
}
|
|
2358
|
-
if (format === "json") {
|
|
2359
|
-
write(`${JSON.stringify(fields ? maskEnvelope(envelope, fields) : envelope, null, 2)}
|
|
2360
|
-
`);
|
|
2361
|
-
return;
|
|
2362
|
-
}
|
|
2363
|
-
if (format !== "files" && format !== "md") {
|
|
2364
|
-
process.stderr.write(`Unknown --output "${String(format)}". Valid formats: json, files, md. Using json.
|
|
2365
|
-
`);
|
|
2366
|
-
writeJson(envelope);
|
|
2367
|
-
return;
|
|
2368
|
-
}
|
|
2369
|
-
const items = normalizeData(envelope, fields, full ?? false, normalizer ?? imageNormalizer);
|
|
2370
|
-
const displayFields = fields ?? Object.keys(items[0] ?? {});
|
|
2371
|
-
if (format === "files") {
|
|
2372
|
-
writeFiles(items, displayFields);
|
|
2373
|
-
} else {
|
|
2374
|
-
writeMd(items, displayFields);
|
|
2375
|
-
}
|
|
2376
|
-
writeHints(envelope.hints);
|
|
2377
|
-
}
|
|
2378
|
-
function writeHints(hints) {
|
|
2379
|
-
for (const hint of hints ?? []) {
|
|
2380
|
-
process.stderr.write(`${hint}
|
|
2381
|
-
`);
|
|
2382
|
-
}
|
|
2383
|
-
}
|
|
2384
|
-
|
|
2385
|
-
export {
|
|
2386
|
-
staticFormatPatternSchema,
|
|
2387
|
-
winnersSortSchema,
|
|
2388
|
-
winnerSearchScopeSchema,
|
|
2389
|
-
scopedWinnersSearchRequestSchema,
|
|
2390
|
-
proofStrength,
|
|
2391
|
-
LANDING_ANALYSE_BATCH,
|
|
2392
|
-
BRAND_ACCOUNTS_MAX,
|
|
2393
|
-
brandAccountInput,
|
|
2394
|
-
adLibraryUrl,
|
|
2395
|
-
FOLLOW_BATCH_MAX,
|
|
2396
|
-
advertiserAdsRequestSchema,
|
|
2397
|
-
searchCopyPartKindSchema,
|
|
2398
|
-
referenceReadResponseSchema,
|
|
2399
|
-
parsePrintedEnvelope,
|
|
2400
|
-
reprint,
|
|
2401
|
-
withHint,
|
|
2402
|
-
rewriteWrites,
|
|
2403
|
-
registerCommandTree,
|
|
2404
|
-
commandTree,
|
|
2405
|
-
registerSchema,
|
|
2406
|
-
listSchemas,
|
|
2407
|
-
spellingKey,
|
|
2408
|
-
findSchema,
|
|
2409
|
-
commandFor,
|
|
2410
|
-
commandPathOf,
|
|
2411
|
-
refuseUnknownFlags,
|
|
2412
|
-
usageArgsOf,
|
|
2413
|
-
usageLine,
|
|
2414
|
-
parseRefusalEnvelope,
|
|
2415
|
-
refuseStrayPositionals,
|
|
2416
|
-
printsDataEnvelope,
|
|
2417
|
-
declaredArg,
|
|
2418
|
-
outputFlagForCommand,
|
|
2419
|
-
asksForEnvelopeAlone,
|
|
2420
|
-
envelopeAloneOnStdout,
|
|
2421
|
-
takeFieldsFlag,
|
|
2422
|
-
maskEnvelope,
|
|
2423
|
-
installFieldMask,
|
|
2424
|
-
compactImage,
|
|
2425
|
-
fullImage,
|
|
2426
|
-
compactVideo,
|
|
2427
|
-
videoNormalizer,
|
|
2428
|
-
testimonialNormalizer,
|
|
2429
|
-
compactWinningAd,
|
|
2430
|
-
fullWinningAd,
|
|
2431
|
-
winningAdNormalizer,
|
|
2432
|
-
adContentNormalizer,
|
|
2433
|
-
applyFieldMask,
|
|
2434
|
-
writeJson,
|
|
2435
|
-
writeOutput
|
|
2436
|
-
};
|
|
2437
|
-
//# sourceMappingURL=chunk-FSGJSREN.js.map
|