@koda-sl/baker-cli 0.481.0-dev.2d33e194f → 0.482.0-dev.a5555ab55
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 +131 -149
- package/canvas/avocado-tutorial.json +3 -3
- package/canvas/hello-world-overlay.json +1 -1
- package/dist/account-7LUQWY6Q.js +49 -0
- package/dist/account-ELL7ZZLM.js +80 -0
- package/dist/account-KZVOT6HL.js +79 -0
- package/dist/account-reads-LA45L6G3.js +218 -0
- package/dist/account-writes-CEPERFD6.js +66 -0
- package/dist/accounts-7G556DH4.js +77 -0
- package/dist/accounts-E4TVYTUR.js +115 -0
- package/dist/accounts-HC7GPQNG.js +611 -0
- package/dist/accounts-SMB3TNXX.js +114 -0
- package/dist/accounts-UA2ZWRN4.js +75 -0
- package/dist/actions-V6YP5C3X.js +55 -0
- package/dist/active-entities-MCL7UEGV.js +103 -0
- package/dist/activecampaign-CHZEHRHZ.js +935 -0
- package/dist/activecampaign-CHZEHRHZ.js.map +1 -0
- package/dist/activities-IQPJPP4B.js +74 -0
- package/dist/ad-group-writes-XGSCEQTW.js +170 -0
- package/dist/ad-groups-GKOLDGET.js +68 -0
- package/dist/ad-writes-VVD36JKH.js +174 -0
- package/dist/add-3MD72QMT.js +104 -0
- package/dist/add-5IGUQHVZ.js +105 -0
- package/dist/add-BK5AQI5A.js +97 -0
- package/dist/add-TSQNUP5N.js +302 -0
- package/dist/add-accounts-CJSV5NPL.js +91 -0
- package/dist/ads-EKZVHKPN.js +77 -0
- package/dist/ads-HXX2IAFF.js +113 -0
- package/dist/ads-KRM4WAMZ.js +40 -0
- package/dist/ads-KRM4WAMZ.js.map +1 -0
- package/dist/ads-RAUM6ISF.js +128 -0
- package/dist/adsets-LPN6WFGF.js +176 -0
- package/dist/advertisers-DS2NRWKI.js +125 -0
- package/dist/advertisers-XJG7XDK7.js +120 -0
- package/dist/analytics-DO4UKW2H.js +1976 -0
- package/dist/analytics-JVT2OBQC.js +433 -0
- package/dist/analytics-JVT2OBQC.js.map +1 -0
- package/dist/animate-G4P3OEJE.js +480 -0
- package/dist/assign-72YAL6TP.js +77 -0
- package/dist/audience-size-M5NU4QYN.js +73 -0
- package/dist/audience-size-M5NU4QYN.js.map +1 -0
- package/dist/audiences-3LRCLHTQ.js +85 -0
- package/dist/audiences-BU4JZJT7.js +268 -0
- package/dist/audiences-XEZHACKH.js +78 -0
- package/dist/audit-22KQAHJR.js +151 -0
- package/dist/audit-YEGQU474.js +88 -0
- package/dist/autocomplete-KLNQIK5T.js +111 -0
- package/dist/avatars-VO6FMJFB.js +38 -0
- package/dist/bid-pricing-52HDANYL.js +100 -0
- package/dist/bid-pricing-52HDANYL.js.map +1 -0
- package/dist/brand-XXNOVSGE.js +22 -0
- package/dist/brief-JIARAUIR.js +538 -0
- package/dist/brief-JIARAUIR.js.map +1 -0
- package/dist/businesses-PRRYPR7H.js +53 -0
- package/dist/campaign-groups-JFOFU76X.js +95 -0
- package/dist/campaign-writes-NSEJCINS.js +170 -0
- package/dist/campaign-writes-PKWLLKB5.js +165 -0
- package/dist/campaigns-4SOLY7OR.js +110 -0
- package/dist/campaigns-5AZMOOID.js +107 -0
- package/dist/campaigns-H4VK3GKK.js +109 -0
- package/dist/campaigns-VWN2XPK2.js +76 -0
- package/dist/canvas-TTV7QZZT.js +46 -0
- package/dist/capabilities-VJ53ROIP.js +144 -0
- package/dist/cards-WHMCSRZX.js +85 -0
- package/dist/catalog-43BSTAT6.js +65 -0
- package/dist/catalog-43BSTAT6.js.map +1 -0
- package/dist/catalogs-XH5NHH4C.js +128 -0
- package/dist/changes-F6WUXFC3.js +135 -0
- package/dist/chatgpt-K6KNTME4.js +47 -0
- package/dist/chats-PWLQO7UY.js +262 -0
- package/dist/check-545MAB4E.js +104 -0
- package/dist/check-545MAB4E.js.map +1 -0
- package/dist/chunk-232YUPUI.js +125 -0
- package/dist/chunk-23H4ZJRP.js +136 -0
- package/dist/chunk-2FSEESJU.js +1744 -0
- package/dist/chunk-2FSEESJU.js.map +1 -0
- package/dist/chunk-2QSPPWOU.js +6306 -0
- package/dist/chunk-2QSPPWOU.js.map +1 -0
- package/dist/chunk-2WTD5Y34.js +66 -0
- package/dist/chunk-2WTD5Y34.js.map +1 -0
- package/dist/chunk-3BKNGXCL.js +23992 -0
- package/dist/chunk-3BKNGXCL.js.map +1 -0
- package/dist/chunk-3OCSWUHV.js +67 -0
- package/dist/chunk-3UBTVAFJ.js +392 -0
- package/dist/chunk-3UBTVAFJ.js.map +1 -0
- package/dist/chunk-3ZHOBEQD.js +122 -0
- package/dist/chunk-3ZHOBEQD.js.map +1 -0
- package/dist/chunk-46TND6YK.js +207 -0
- package/dist/chunk-46TND6YK.js.map +1 -0
- package/dist/chunk-5SRHACZW.js +274 -0
- package/dist/chunk-5WMTPYKT.js +84 -0
- package/dist/chunk-64HQDJ2E.js +344 -0
- package/dist/chunk-64HQDJ2E.js.map +1 -0
- package/dist/chunk-6JWEGFM5.js +174 -0
- package/dist/chunk-6OIKNJ7G.js +26 -0
- package/dist/chunk-7RBJ2Z7Z.js +172 -0
- package/dist/chunk-AOZ7547I.js +159 -0
- package/dist/chunk-AOZ7547I.js.map +1 -0
- package/dist/chunk-B7FVPHCW.js +843 -0
- package/dist/chunk-B7FVPHCW.js.map +1 -0
- package/dist/chunk-BC2BXRXY.js +2887 -0
- package/dist/chunk-BC2BXRXY.js.map +1 -0
- package/dist/chunk-BFRIRZRZ.js +98 -0
- package/dist/chunk-BFZS3WHS.js +84 -0
- package/dist/chunk-BITS62MF.js +77 -0
- package/dist/chunk-BLAHHMPF.js +333 -0
- package/dist/chunk-C7MENOP5.js +224 -0
- package/dist/chunk-C7MENOP5.js.map +1 -0
- package/dist/chunk-CM6FCSWN.js +644 -0
- package/dist/chunk-CM6FCSWN.js.map +1 -0
- package/dist/chunk-CSN6L345.js +547 -0
- package/dist/chunk-CSN6L345.js.map +1 -0
- package/dist/chunk-CVBKW75S.js +296 -0
- package/dist/chunk-D4LKZJYJ.js +76 -0
- package/dist/chunk-D6KHVUDS.js +297 -0
- package/dist/chunk-D7KR6KXR.js +66 -0
- package/dist/chunk-D7KR6KXR.js.map +1 -0
- package/dist/chunk-DDES6J6A.js +97 -0
- package/dist/chunk-DDES6J6A.js.map +1 -0
- package/dist/chunk-DMVDVZJK.js +97 -0
- package/dist/chunk-DMVDVZJK.js.map +1 -0
- package/dist/chunk-DWX44QL6.js +75 -0
- package/dist/chunk-EE72SSB2.js +472 -0
- package/dist/chunk-EE72SSB2.js.map +1 -0
- package/dist/chunk-F3CZFUXZ.js +3187 -0
- package/dist/chunk-F3CZFUXZ.js.map +1 -0
- package/dist/chunk-F5IH7G2F.js +1919 -0
- package/dist/chunk-F5IH7G2F.js.map +1 -0
- package/dist/chunk-FNA277HP.js +97 -0
- package/dist/chunk-FQXGII24.js +592 -0
- package/dist/chunk-FU7HJWGM.js +26 -0
- package/dist/chunk-G5GV6SUK.js +399 -0
- package/dist/chunk-G5GV6SUK.js.map +1 -0
- package/dist/chunk-GD6UJDOB.js +665 -0
- package/dist/chunk-GDLQ6SGW.js +46 -0
- package/dist/chunk-GEKXIXMG.js +106 -0
- package/dist/chunk-GJWMPTUE.js +156 -0
- package/dist/chunk-GJWMPTUE.js.map +1 -0
- package/dist/chunk-GLW7UJLB.js +58 -0
- package/dist/chunk-GM46ZEYP.js +831 -0
- package/dist/chunk-GM46ZEYP.js.map +1 -0
- package/dist/chunk-H5HDZ7IC.js +139 -0
- package/dist/chunk-HNEYIWXW.js +8896 -0
- package/dist/chunk-HNEYIWXW.js.map +1 -0
- package/dist/chunk-I2WRZJAC.js +46 -0
- package/dist/chunk-I2WRZJAC.js.map +1 -0
- package/dist/chunk-I44SNQ34.js +275 -0
- package/dist/chunk-I5VZVQBZ.js +35 -0
- package/dist/chunk-IC6SDOED.js +45 -0
- package/dist/chunk-IN4G7X6W.js +94 -0
- package/dist/chunk-IPLE5K5E.js +188 -0
- package/dist/chunk-IYELKHBG.js +197 -0
- package/dist/chunk-JQNO6JCV.js +206 -0
- package/dist/chunk-JRFVSSKP.js +160 -0
- package/dist/chunk-JRFVSSKP.js.map +1 -0
- package/dist/chunk-JYBLCIRN.js +106 -0
- package/dist/chunk-K3TNTBZJ.js +52 -0
- package/dist/chunk-K4NMOWG7.js +455 -0
- package/dist/chunk-KOVQ2JGM.js +903 -0
- package/dist/chunk-KOVQ2JGM.js.map +1 -0
- package/dist/chunk-KPYDTIAI.js +317 -0
- package/dist/chunk-KPYDTIAI.js.map +1 -0
- package/dist/chunk-KXSXZAC2.js +225 -0
- package/dist/chunk-KXSXZAC2.js.map +1 -0
- package/dist/chunk-LCW3U4EA.js +25 -0
- package/dist/chunk-LFXE2G6R.js +61 -0
- package/dist/chunk-LFXE2G6R.js.map +1 -0
- package/dist/chunk-LMZAOTRX.js +846 -0
- package/dist/chunk-M6UNISGO.js +66 -0
- package/dist/chunk-M6UNISGO.js.map +1 -0
- package/dist/chunk-MI3JB5KB.js +76 -0
- package/dist/chunk-MJQBXFW6.js +74 -0
- package/dist/chunk-MK3OJZIU.js +23 -0
- package/dist/chunk-MPACDBH5.js +74 -0
- package/dist/chunk-MXWOYFI2.js +544 -0
- package/dist/chunk-MXWOYFI2.js.map +1 -0
- package/dist/chunk-N5O67GK5.js +215 -0
- package/dist/chunk-OP7DNHD2.js +137 -0
- package/dist/chunk-OP7DNHD2.js.map +1 -0
- package/dist/chunk-P3TNRS56.js +149 -0
- package/dist/chunk-P5PX2G7E.js +225 -0
- package/dist/chunk-P5PX2G7E.js.map +1 -0
- package/dist/chunk-PAJJXZ3Z.js +170 -0
- package/dist/chunk-PHPXAMY3.js +346 -0
- package/dist/chunk-PNVEV3XP.js +8928 -0
- package/dist/chunk-PNVEV3XP.js.map +1 -0
- package/dist/chunk-QABSQADZ.js +56 -0
- package/dist/chunk-QKABEX3F.js +148 -0
- package/dist/chunk-QKABEX3F.js.map +1 -0
- package/dist/chunk-QTLZXIF3.js +5366 -0
- package/dist/chunk-QTLZXIF3.js.map +1 -0
- package/dist/chunk-QVQKCVP7.js +85 -0
- package/dist/chunk-QVQKCVP7.js.map +1 -0
- package/dist/chunk-QYAI24PN.js +172 -0
- package/dist/chunk-QZHGIJOW.js +51 -0
- package/dist/chunk-REMR5FHD.js +91 -0
- package/dist/chunk-REMR5FHD.js.map +1 -0
- package/dist/chunk-RGX7AQ2K.js +131 -0
- package/dist/chunk-RGX7AQ2K.js.map +1 -0
- package/dist/chunk-RMNKCVRB.js +275 -0
- package/dist/chunk-RMNKCVRB.js.map +1 -0
- package/dist/chunk-ROX7LQRR.js +19 -0
- package/dist/chunk-S7A34DOA.js +111 -0
- package/dist/chunk-S7A34DOA.js.map +1 -0
- package/dist/chunk-S7B2TOOU.js +98 -0
- package/dist/chunk-SFJW2KED.js +166 -0
- package/dist/chunk-SIKCVWM3.js +76 -0
- package/dist/chunk-SK2N45LO.js +1079 -0
- package/dist/chunk-SOKVXKRM.js +74 -0
- package/dist/chunk-STNCMKL6.js +191 -0
- package/dist/chunk-SWL4AAPP.js +320 -0
- package/dist/chunk-SWL4AAPP.js.map +1 -0
- package/dist/chunk-TBHRRQZD.js +942 -0
- package/dist/chunk-TBHRRQZD.js.map +1 -0
- package/dist/chunk-TKPVVD52.js +169 -0
- package/dist/chunk-TNB5EIFV.js +433 -0
- package/dist/chunk-TUSR5R7I.js +57 -0
- package/dist/chunk-TY4BDVLG.js +624 -0
- package/dist/chunk-TY4BDVLG.js.map +1 -0
- package/dist/chunk-U63S2JWI.js +167 -0
- package/dist/chunk-U63S2JWI.js.map +1 -0
- package/dist/chunk-ULPO72IQ.js +225 -0
- package/dist/chunk-UTLIQBRY.js +604 -0
- package/dist/chunk-UTLIQBRY.js.map +1 -0
- package/dist/chunk-UWT7RCL3.js +363 -0
- package/dist/chunk-V4UIM4QE.js +103 -0
- package/dist/chunk-WHSTZRUY.js +64 -0
- package/dist/chunk-WHSTZRUY.js.map +1 -0
- package/dist/chunk-WNSE7N75.js +2123 -0
- package/dist/chunk-WNSE7N75.js.map +1 -0
- package/dist/chunk-XDZVBX6L.js +220 -0
- package/dist/chunk-XDZVBX6L.js.map +1 -0
- package/dist/chunk-XF5R2FQT.js +3868 -0
- package/dist/chunk-XF5R2FQT.js.map +1 -0
- package/dist/chunk-XFJNCZXA.js +142 -0
- package/dist/chunk-XFJNCZXA.js.map +1 -0
- package/dist/chunk-XGOEX2VJ.js +55 -0
- package/dist/chunk-XLJVJ5TK.js +1518 -0
- package/dist/chunk-XLJVJ5TK.js.map +1 -0
- package/dist/chunk-XP4G2DJL.js +494 -0
- package/dist/chunk-XZ4YMCZK.js +66 -0
- package/dist/chunk-Y3VRMFGF.js +42 -0
- package/dist/chunk-YU2XIIL3.js +191 -0
- package/dist/chunk-YU2XIIL3.js.map +1 -0
- package/dist/chunk-ZBUWO4XH.js +1599 -0
- package/dist/chunk-ZBUWO4XH.js.map +1 -0
- package/dist/chunk-ZJ6HUCRK.js +89 -0
- package/dist/chunk-ZJ6HUCRK.js.map +1 -0
- package/dist/claim-QHXKN7W6.js +197 -0
- package/dist/cli.js +101 -81
- package/dist/cli.js.map +1 -1
- package/dist/client-WL2FKW4T.js +19 -0
- package/dist/code-NXN7QYKU.js +76 -0
- package/dist/companies-PGVT62JL.js +195 -0
- package/dist/complete-TCTR3XVD.js +81 -0
- package/dist/config-VOF57KBL.js +88 -0
- package/dist/connect-4S7JLICS.js +42 -0
- package/dist/content-KA25YYO3.js +85 -0
- package/dist/conversation-DI4WMEL2.js +93 -0
- package/dist/conversion-report-KL4LIVY5.js +125 -0
- package/dist/conversion-upload-command-EIKJU5ZW.js +438 -0
- package/dist/conversion-writes-MPBCTVSP.js +120 -0
- package/dist/conversions-ACYT6K7H.js +76 -0
- package/dist/conversions-JTYMFX66.js +135 -0
- package/dist/countries-XGMZWUGP.js +82 -0
- package/dist/create-3QA7X2DD.js +207 -0
- package/dist/create-AFVT5JTH.js +235 -0
- package/dist/create-TYCOMVWR.js +59 -0
- package/dist/create-VFXEJ3EV.js +132 -0
- package/dist/create-VFXEJ3EV.js.map +1 -0
- package/dist/creatives-5VY3LT6X.js +58 -0
- package/dist/creatives-5VY3LT6X.js.map +1 -0
- package/dist/creatives-E6N2YLHE.js +182 -0
- package/dist/creatives-YJ3CXZQC.js +87 -0
- package/dist/credentials-34I6ZZWU.js +287 -0
- package/dist/critique-JM5QADYW.js +1451 -0
- package/dist/critique-JM5QADYW.js.map +1 -0
- package/dist/critique-OCVV6N3U.js +227 -0
- package/dist/critique-OCVV6N3U.js.map +1 -0
- package/dist/crm-4F3LFOZD.js +318 -0
- package/dist/crm-MNBYNP5R.js +224 -0
- package/dist/crop-7UTYG7GS.js +113 -0
- package/dist/currency-3QTI5RSB.js +88 -0
- package/dist/custom-conversions-YRYE65PU.js +125 -0
- package/dist/customers-VNYNT2EQ.js +56 -0
- package/dist/decide-TWKH5QQU.js +199 -0
- package/dist/delete-2GIIUPA3.js +69 -0
- package/dist/delete-AZEVPMVO.js +64 -0
- package/dist/delete-AZEVPMVO.js.map +1 -0
- package/dist/delete-GLLYPNNB.js +71 -0
- package/dist/delete-J7DXPGKD.js +71 -0
- package/dist/delete-PRJGFA2U.js +54 -0
- package/dist/delete-UZRHYEPK.js +66 -0
- package/dist/demographics-JMZA7MB6.js +138 -0
- package/dist/describe-5QCPRSIG.js +97 -0
- package/dist/describe-L3UC6MIL.js +97 -0
- package/dist/dimensions-POH4JXEM.js +101 -0
- package/dist/discard-OH3B5P4C.js +66 -0
- package/dist/discover-5GLET36U.js +172 -0
- package/dist/discover-XAJKZCMM.js +93 -0
- package/dist/domain-K3IILLYE.js +98 -0
- package/dist/download-N4J5WFHD.js +299 -0
- package/dist/draft-2KHUZTIE.js +217 -0
- package/dist/draft-7RYDPOFS.js +307 -0
- package/dist/draft-BB3UUWJP.js +328 -0
- package/dist/draft-EWDOIXSH.js +233 -0
- package/dist/draft-IL37WDST.js +103 -0
- package/dist/draft-KDMYGLWN.js +100 -0
- package/dist/draft-LZL6VWHX.js +306 -0
- package/dist/draft-VXGZDBC7.js +281 -0
- package/dist/engine/index.d.ts +31 -1
- package/dist/engine/index.js +15 -14
- package/dist/env-5MUVYE2L.js +51 -0
- package/dist/experiment-G3FQVAJU.js +1397 -0
- package/dist/export-OLDI32HM.js +168 -0
- package/dist/extract-PPS6ONQN.js +113 -0
- package/dist/facets-PAWOEHOK.js +114 -0
- package/dist/favorites-4ELADD3R.js +178 -0
- package/dist/feed-XIY5TVDL.js +177 -0
- package/dist/feedback-GAGIKZ6B.js +106 -0
- package/dist/feedback-GAGIKZ6B.js.map +1 -0
- package/dist/feedback-record-ZORDBRV2.js +260 -0
- package/dist/feedback-record-ZORDBRV2.js.map +1 -0
- package/dist/fetch-M5GIBURQ.js +176 -0
- package/dist/fetch-YWUVDMUH.js +139 -0
- package/dist/find-EVY4XEIQ.js +134 -0
- package/dist/find-EVY4XEIQ.js.map +1 -0
- package/dist/fit-DGCYW7LN.js +62 -0
- package/dist/flows-TD6PNUDM.js +247 -0
- package/dist/flows-TD6PNUDM.js.map +1 -0
- package/dist/follow-ZTPZKIMZ.js +94 -0
- package/dist/follow-competitors-6QDVQ4VJ.js +112 -0
- package/dist/following-PBZLZFGQ.js +113 -0
- package/dist/fonts-IQ6XOUGU.js +36 -0
- package/dist/forecast-FACEH4WR.js +118 -0
- package/dist/forecast-FACEH4WR.js.map +1 -0
- package/dist/forecast-YXOKAWDZ.js +168 -0
- package/dist/funding-ULBMKUMW.js +85 -0
- package/dist/funnel-CJRFDTCD.js +394 -0
- package/dist/ga4-2BL5YAYN.js +55 -0
- package/dist/generate-D3LUXFJT.js +263 -0
- package/dist/generate-D3LUXFJT.js.map +1 -0
- package/dist/get-6RZU4M6W.js +63 -0
- package/dist/get-7GCEJ6KG.js +92 -0
- package/dist/get-JRMJLLU5.js +79 -0
- package/dist/get-JRMJLLU5.js.map +1 -0
- package/dist/get-MZWUMHEF.js +61 -0
- package/dist/get-NUL4YJG5.js +56 -0
- package/dist/get-OAZZHUZP.js +59 -0
- package/dist/get-OHU2N7B7.js +63 -0
- package/dist/gif-NYZYV5RY.js +102 -0
- package/dist/gif-NYZYV5RY.js.map +1 -0
- package/dist/google-7STODZQR.js +136 -0
- package/dist/google-URYXWN5O.js +3190 -0
- package/dist/google-URYXWN5O.js.map +1 -0
- package/dist/google-ads-BB7CF4NV.js +195 -0
- package/dist/group-D5WXNFCP.js +43 -0
- package/dist/group-Y5PLETFT.js +43 -0
- package/dist/gsc-UU3T2C6B.js +30 -0
- package/dist/history-OQAOTEO3.js +67 -0
- package/dist/history-Q47TKZJS.js +133 -0
- package/dist/hubspot-A6O5GVTH.js +779 -0
- package/dist/icon-GB7UH5RF.js +137 -0
- package/dist/ideas-LD6X753E.js +40 -0
- package/dist/images-XY5DLJEA.js +92 -0
- package/dist/images-XY5DLJEA.js.map +1 -0
- package/dist/improve-U5USRH4G.js +86 -0
- package/dist/ingest-PUMTHASV.js +107 -0
- package/dist/ingest-WWNSA6VZ.js +23 -0
- package/dist/insights-4HT2NAYP.js +423 -0
- package/dist/insights-4HT2NAYP.js.map +1 -0
- package/dist/insights-PZXFCMX2.js +122 -0
- package/dist/insights-PZXFCMX2.js.map +1 -0
- package/dist/inspect-5PRLZLF5.js +189 -0
- package/dist/inspiration-XQYHBJY2.js +53 -0
- package/dist/intent-4QVVI4FF.js +95 -0
- package/dist/job-CGQHEANB.js +202 -0
- package/dist/job-create-SZYJT2NC.js +109 -0
- package/dist/job-status-6LAKLCKH.js +74 -0
- package/dist/keep-3MJSHWU3.js +78 -0
- package/dist/keyword-gap-YMMDRYVK.js +130 -0
- package/dist/keyword-metrics-FB7FCYK6.js +197 -0
- package/dist/keywords-for-site-YZYALONY.js +128 -0
- package/dist/landing-XOCPIOWX.js +28 -0
- package/dist/landings-ZLKUP66P.js +151 -0
- package/dist/languages-3IJVDS5Z.js +55 -0
- package/dist/languages-R3Y2IOFU.js +40 -0
- package/dist/launches-RG2SWEXM.js +19 -0
- package/dist/layerize-SJYK6HPD.js +190 -0
- package/dist/leads-2XOSAYP4.js +293 -0
- package/dist/leads-SWINPYEP.js +90 -0
- package/dist/learn-6HVDSTTJ.js +204 -0
- package/dist/learn-6HVDSTTJ.js.map +1 -0
- package/dist/library-Q4OU7VR7.js +109 -0
- package/dist/library-Q4OU7VR7.js.map +1 -0
- package/dist/lighthouse-FALRSVQH.js +75 -0
- package/dist/line-item-writes-FG3TY4W4.js +208 -0
- package/dist/line-items-ZNVBFA4H.js +103 -0
- package/dist/link-IFEXIUDW.js +64 -0
- package/dist/linkedin-NINSMEW6.js +1045 -0
- package/dist/linkedin-NINSMEW6.js.map +1 -0
- package/dist/list-2ZTOMTES.js +65 -0
- package/dist/list-FR2OVRVL.js +151 -0
- package/dist/list-GK6LNWIW.js +76 -0
- package/dist/list-K65FY6SV.js +303 -0
- package/dist/list-RJG3FMZR.js +64 -0
- package/dist/list-RJG3FMZR.js.map +1 -0
- package/dist/list-RR53EF3O.js +57 -0
- package/dist/list-TB677Q2F.js +50 -0
- package/dist/list-VTVRZIYL.js +51 -0
- package/dist/locations-6IH7WGRG.js +40 -0
- package/dist/locations-VL2G22Y5.js +67 -0
- package/dist/log-TAKCMC2C.js +92 -0
- package/dist/logo-YSNUUT33.js +18 -0
- package/dist/lookup-RH5N3OWJ.js +22 -0
- package/dist/make-EWHS4EHQ.js +1345 -0
- package/dist/make-EWHS4EHQ.js.map +1 -0
- package/dist/map-DWLEYXSW.js +433 -0
- package/dist/map-DWLEYXSW.js.map +1 -0
- package/dist/mcp-NNQZ5B7N.js +463 -0
- package/dist/media-ES2UBGYW.js +15 -0
- package/dist/media-MPXEXN4O.js +89 -0
- package/dist/media-sources-OAFBA62X.js +32 -0
- package/dist/members-SS7IBYVE.js +44 -0
- package/dist/meme-FMHHKWVU.js +100 -0
- package/dist/meme-FMHHKWVU.js.map +1 -0
- package/dist/meta-AOIPEDV5.js +69 -0
- package/dist/metrics-YLAREC4T.js +152 -0
- package/dist/models-IH6KE6OH.js +155 -0
- package/dist/normalize-NR5RS3WR.js +806 -0
- package/dist/normalize-WOZTAI6C.js +141 -0
- package/dist/options-PL44BV5E.js +122 -0
- package/dist/options-PL44BV5E.js.map +1 -0
- package/dist/organization-SQBODZUK.js +328 -0
- package/dist/organization-SQBODZUK.js.map +1 -0
- package/dist/output-GWIP6ROX.js +24 -0
- package/dist/page-YWGBCN65.js +105 -0
- package/dist/pages-FTI44OSH.js +66 -0
- package/dist/performance-WRARV3YR.js +24 -0
- package/dist/pinterest-J442QLQS.js +96 -0
- package/dist/pixels-DWW2TDY2.js +60 -0
- package/dist/pixels-MBKR4XPX.js +108 -0
- package/dist/plan-YPE77T4R.js +207 -0
- package/dist/preview-V4YBD45S.js +169 -0
- package/dist/profile-S3MXS2VO.js +159 -0
- package/dist/profile-S3MXS2VO.js.map +1 -0
- package/dist/promoted-tweet-writes-CAD3RGU4.js +180 -0
- package/dist/promoted-tweets-NYJP3TXL.js +119 -0
- package/dist/properties-G3L2OAOL.js +101 -0
- package/dist/publish-ZW6VHB27.js +341 -0
- package/dist/publish-ZW6VHB27.js.map +1 -0
- package/dist/query-QRPBV2AR.js +61 -0
- package/dist/query-WCB5W4NW.js +236 -0
- package/dist/query-YBS6ZQ75.js +247 -0
- package/dist/questionnaire-PAK4DALP.js +93 -0
- package/dist/read-LUTB3UOR.js +141 -0
- package/dist/reddit-VJTNXORD.js +26 -0
- package/dist/refresh-6I52WXG5.js +94 -0
- package/dist/release-LSSYP2ZJ.js +60 -0
- package/dist/relevant-pages-2XHS5WP4.js +99 -0
- package/dist/remove-K62YJYGT.js +50 -0
- package/dist/remove-X6DNVS67.js +48 -0
- package/dist/reopen-RPVEBQVR.js +63 -0
- package/dist/rerun-ETH2NEEX.js +90 -0
- package/dist/rerun-ETH2NEEX.js.map +1 -0
- package/dist/research-4ASN2KMB.js +62 -0
- package/dist/research-6J3EOBAL.js +262 -0
- package/dist/reset-ETORO5UO.js +54 -0
- package/dist/reset-YVTYHSTY.js +54 -0
- package/dist/resolve-BI7GB5U2.js +121 -0
- package/dist/retry-2ZZCKSRW.js +62 -0
- package/dist/retry-QZ7YHXF3.js +60 -0
- package/dist/retry-failed-EJBP4236.js +45 -0
- package/dist/rules-KEHQEXEU.js +96 -0
- package/dist/rules-KEHQEXEU.js.map +1 -0
- package/dist/rules-add-IDBWO6XV.js +462 -0
- package/dist/rules-add-IDBWO6XV.js.map +1 -0
- package/dist/run-FFASB4YB.js +65 -0
- package/dist/run-KYEOLJFV.js +66 -0
- package/dist/run-KYEOLJFV.js.map +1 -0
- package/dist/scaffold-ad-EKCXHZPT.js +1511 -0
- package/dist/scaffold-ad-EKCXHZPT.js.map +1 -0
- package/dist/scaffold-static-ad-MWKTXATN.js +1005 -0
- package/dist/scaffold-static-ad-MWKTXATN.js.map +1 -0
- package/dist/scaffold-video-BYPPH352.js +883 -0
- package/dist/scaffold-video-BYPPH352.js.map +1 -0
- package/dist/schedule-4BK2ML6F.js +61 -0
- package/dist/schedule-IDZC6M32.js +66 -0
- package/dist/scheduled-agents-GMGP3G6T.js +50 -0
- package/dist/scheduled-agents-GMGP3G6T.js.map +1 -0
- package/dist/schema-EFR7NGJG.js +69 -0
- package/dist/schema-EFR7NGJG.js.map +1 -0
- package/dist/schema-QPPWADIL.js +132 -0
- package/dist/scrape-J2Y7YZ4Z.js +2241 -0
- package/dist/screenshot-K7ZGTVTE.js +102 -0
- package/dist/search-CI7LEOOK.js +92 -0
- package/dist/search-GCSQ6CSD.js +174 -0
- package/dist/search-I6DRUXBX.js +224 -0
- package/dist/search-TTL7VQET.js +26 -0
- package/dist/search-VT2KUAH6.js +91 -0
- package/dist/search-copy-N2AIJNUH.js +168 -0
- package/dist/seeds-EYYQCMGF.js +101 -0
- package/dist/select-CPFKK57J.js +101 -0
- package/dist/select-CPFKK57J.js.map +1 -0
- package/dist/sends-RHVFV2XM.js +309 -0
- package/dist/sequences-5DUWNSWQ.js +146 -0
- package/dist/set-prompt-TJ3UTNYS.js +193 -0
- package/dist/set-prompt-TJ3UTNYS.js.map +1 -0
- package/dist/setup-links-C3EUV2RX.js +141 -0
- package/dist/shared-NDRFKAH7.js +31 -0
- package/dist/site-W5W7FCUD.js +177 -0
- package/dist/sitemaps-QKKXMXMV.js +87 -0
- package/dist/sites-GRC6CCCK.js +101 -0
- package/dist/skills-UML6GSW6.js +47 -0
- package/dist/sources-AWODYZDS.js +454 -0
- package/dist/sources-AWODYZDS.js.map +1 -0
- package/dist/sources-SGGLJIOA.js +30 -0
- package/dist/stale-KILEXX57.js +71 -0
- package/dist/stale-KILEXX57.js.map +1 -0
- package/dist/stats-RCLQE4HJ.js +34 -0
- package/dist/status-KUSLGZD7.js +62 -0
- package/dist/sticker-SINY47WT.js +94 -0
- package/dist/stock-ECRBD7RP.js +179 -0
- package/dist/studio-LMDDQWRY.js +49 -0
- package/dist/sync-2MFUI3ME.js +54 -0
- package/dist/sync-IE4AAVGY.js +265 -0
- package/dist/sync-IE4AAVGY.js.map +1 -0
- package/dist/sync-TCY4NX7J.js +54 -0
- package/dist/sync-definition-DGSAZGQZ.js +64 -0
- package/dist/tag-manager-G3LBQZUL.js +43 -0
- package/dist/tags-IHLO2NDM.js +20 -0
- package/dist/tags-QQLYW2QQ.js +224 -0
- package/dist/tags-QXRKKRIR.js +20 -0
- package/dist/tags-U5YWCPFW.js +20 -0
- package/dist/tags-ZYVOKGHU.js +26 -0
- package/dist/targeting-constants-KEKYU5JQ.js +118 -0
- package/dist/targeting-criteria-AEBSY6OY.js +113 -0
- package/dist/targets-5Q2OFVXL.js +103 -0
- package/dist/targets-5Q2OFVXL.js.map +1 -0
- package/dist/testimonials-O52ULRAU.js +32 -0
- package/dist/themes-26XFWSWC.js +94 -0
- package/dist/top-companies-OMGAFFWN.js +108 -0
- package/dist/translate-C5LZ6KVN.js +604 -0
- package/dist/translate-C5LZ6KVN.js.map +1 -0
- package/dist/triggers-PTPG6OQ6.js +142 -0
- package/dist/triggers-PTPG6OQ6.js.map +1 -0
- package/dist/tweets-C3QUKS3I.js +123 -0
- package/dist/unfollow-ZI5QU7RD.js +46 -0
- package/dist/unlink-3BAXM2OH.js +67 -0
- package/dist/unstage-7F7JI6HY.js +95 -0
- package/dist/unstage-EFW465VN.js +85 -0
- package/dist/unstage-EFW465VN.js.map +1 -0
- package/dist/update-2RCIXWP3.js +98 -0
- package/dist/update-5A7Q7S6I.js +63 -0
- package/dist/update-VTUB2M5I.js +188 -0
- package/dist/update-VTUB2M5I.js.map +1 -0
- package/dist/update-XPRHUFBR.js +152 -0
- package/dist/update-XPRHUFBR.js.map +1 -0
- package/dist/upload-KO46L76G.js +150 -0
- package/dist/upload-Y3TACPEN.js +126 -0
- package/dist/upscale-SJ7SCSRS.js +109 -0
- package/dist/url-options-6CNDIUDM.js +130 -0
- package/dist/url-params-ZUYOLAJG.js +98 -0
- package/dist/use-6ULEM3WE.js +95 -0
- package/dist/validate-KPJLIGYY.js +117 -0
- package/dist/validate-KPJLIGYY.js.map +1 -0
- package/dist/variant-5TRRSYBB.js +338 -0
- package/dist/videos-EFMNE6U2.js +39 -0
- package/dist/view-ABSWZMXW.js +121 -0
- package/dist/viewer-check-2GI26EKA.js +80 -0
- package/dist/viewer-check-2GI26EKA.js.map +1 -0
- package/dist/web-4JGYRY36.js +140 -0
- package/dist/winners-KRISBKOR.js +113 -0
- package/dist/winning-ads-6SXA4HGB.js +84 -0
- package/dist/write-commands-HCQI4Y27.js +737 -0
- package/dist/write-commands-LQXKNBA5.js +1015 -0
- package/dist/write-commands-QCI6XBM7.js +206 -0
- package/dist/write-commands-RHCCPMAE.js +713 -0
- package/dist/x-LUEUC3XO.js +47 -0
- package/package.json +2 -1
- package/dist/account-67PZBEP6.js +0 -79
- package/dist/account-HZC6X2PH.js +0 -49
- package/dist/account-TQUV64XP.js +0 -80
- package/dist/account-reads-IRBTERTY.js +0 -218
- package/dist/account-writes-ALDSHAEV.js +0 -66
- package/dist/accounts-4P54UY6F.js +0 -115
- package/dist/accounts-6UNBLIUH.js +0 -75
- package/dist/accounts-GVTZN4VE.js +0 -114
- package/dist/accounts-NJ6TF6WH.js +0 -611
- package/dist/accounts-WTB737BM.js +0 -77
- package/dist/actions-D3BOWDEB.js +0 -55
- package/dist/active-entities-J2O76SRP.js +0 -103
- package/dist/activities-2J7FTZMN.js +0 -74
- package/dist/ad-group-writes-PQKDCMQF.js +0 -170
- package/dist/ad-groups-NGYEJMV4.js +0 -68
- package/dist/ad-writes-77FVHJTS.js +0 -174
- package/dist/add-2FHPLALV.js +0 -105
- package/dist/add-2XJYOGKW.js +0 -104
- package/dist/add-62JPGFD4.js +0 -302
- package/dist/add-JP76KCCY.js +0 -97
- package/dist/add-accounts-M5Y4DQFM.js +0 -91
- package/dist/ads-DB5NDHX5.js +0 -128
- package/dist/ads-J2F7BSHR.js +0 -45
- package/dist/ads-J2F7BSHR.js.map +0 -1
- package/dist/ads-LYNA2I7B.js +0 -77
- package/dist/ads-W2IPUWHQ.js +0 -113
- package/dist/adsets-PY5ZKGBO.js +0 -176
- package/dist/advertisers-BVAZ4XUX.js +0 -125
- package/dist/advertisers-NZPJQF7W.js +0 -120
- package/dist/analytics-K2QIWKBN.js +0 -444
- package/dist/analytics-K2QIWKBN.js.map +0 -1
- package/dist/analytics-NTPZKMYK.js +0 -1976
- package/dist/animate-EIV2OHXT.js +0 -480
- package/dist/assign-UNIA5YDC.js +0 -77
- package/dist/audience-size-4NN6ENP5.js +0 -94
- package/dist/audience-size-4NN6ENP5.js.map +0 -1
- package/dist/audiences-45ZCY2VZ.js +0 -268
- package/dist/audiences-UUIYQFS6.js +0 -78
- package/dist/audiences-VYFX7OFS.js +0 -85
- package/dist/audit-NSVHNA5J.js +0 -151
- package/dist/audit-OWXTLQC4.js +0 -88
- package/dist/autocomplete-EHWAQYVB.js +0 -111
- package/dist/avatars-7WZPW7BV.js +0 -38
- package/dist/bid-pricing-F5NDMS6W.js +0 -99
- package/dist/bid-pricing-F5NDMS6W.js.map +0 -1
- package/dist/brand-QAJ5VWFM.js +0 -22
- package/dist/brief-V2OB5OJW.js +0 -490
- package/dist/brief-V2OB5OJW.js.map +0 -1
- package/dist/businesses-ZH67AXR6.js +0 -53
- package/dist/campaign-groups-KFJKLNNU.js +0 -95
- package/dist/campaign-writes-BDGQ6XB3.js +0 -170
- package/dist/campaign-writes-FNMAGCKB.js +0 -165
- package/dist/campaigns-66OOGMDW.js +0 -110
- package/dist/campaigns-6HMHOXXY.js +0 -109
- package/dist/campaigns-HJTGX5WW.js +0 -76
- package/dist/campaigns-KT3J2O7S.js +0 -107
- package/dist/canvas-MQ6ZE5CZ.js +0 -46
- package/dist/capabilities-RVUMPP7C.js +0 -144
- package/dist/cards-I4BZIYUV.js +0 -85
- package/dist/catalog-NLL5VDRK.js +0 -64
- package/dist/catalog-NLL5VDRK.js.map +0 -1
- package/dist/catalogs-B2NKQO24.js +0 -128
- package/dist/changes-FX3TPYGT.js +0 -135
- package/dist/chatgpt-3NS2R442.js +0 -47
- package/dist/chats-72L7U4ML.js +0 -262
- package/dist/chunk-2KIF3U2C.js +0 -51
- package/dist/chunk-35ENAFJX.js +0 -46
- package/dist/chunk-3ZWHAIMU.js +0 -207
- package/dist/chunk-3ZWHAIMU.js.map +0 -1
- package/dist/chunk-4DM6OAQ6.js +0 -2065
- package/dist/chunk-4DM6OAQ6.js.map +0 -1
- package/dist/chunk-4TU2MWBJ.js +0 -275
- package/dist/chunk-57UECM77.js +0 -98
- package/dist/chunk-5HYSKH77.js +0 -315
- package/dist/chunk-5HYSKH77.js.map +0 -1
- package/dist/chunk-65BQAJMH.js +0 -136
- package/dist/chunk-6GFJFTG6.js +0 -75
- package/dist/chunk-6HPIWZHS.js +0 -76
- package/dist/chunk-73B3RQJC.js +0 -610
- package/dist/chunk-73B3RQJC.js.map +0 -1
- package/dist/chunk-7GYM4I5I.js +0 -206
- package/dist/chunk-7NTION5F.js +0 -26
- package/dist/chunk-7SX73SH2.js +0 -2902
- package/dist/chunk-7SX73SH2.js.map +0 -1
- package/dist/chunk-AFDPISNJ.js +0 -111
- package/dist/chunk-AFDPISNJ.js.map +0 -1
- package/dist/chunk-AIDXJHZ4.js +0 -433
- package/dist/chunk-AR7PU7BB.js +0 -76
- package/dist/chunk-AXVOBRQT.js +0 -1442
- package/dist/chunk-AXVOBRQT.js.map +0 -1
- package/dist/chunk-BBBZR7MF.js +0 -160
- package/dist/chunk-BBBZR7MF.js.map +0 -1
- package/dist/chunk-BVYPRGPG.js +0 -92
- package/dist/chunk-BVYPRGPG.js.map +0 -1
- package/dist/chunk-CAMX6OHF.js +0 -3182
- package/dist/chunk-CAMX6OHF.js.map +0 -1
- package/dist/chunk-CBCGVPHB.js +0 -125
- package/dist/chunk-CECS3DHZ.js +0 -333
- package/dist/chunk-CZYUZL6R.js +0 -3151
- package/dist/chunk-CZYUZL6R.js.map +0 -1
- package/dist/chunk-D5MF337I.js +0 -97
- package/dist/chunk-DDTILZXI.js +0 -103
- package/dist/chunk-DL2W4N7J.js +0 -52
- package/dist/chunk-DLUWHZCE.js +0 -225
- package/dist/chunk-EOGPNV25.js +0 -509
- package/dist/chunk-EOGPNV25.js.map +0 -1
- package/dist/chunk-F3FSD6BO.js +0 -96
- package/dist/chunk-F3FSD6BO.js.map +0 -1
- package/dist/chunk-FDG2LLX7.js +0 -494
- package/dist/chunk-FE7T32YL.js +0 -163
- package/dist/chunk-FE7T32YL.js.map +0 -1
- package/dist/chunk-FIN4ZXGJ.js +0 -70
- package/dist/chunk-FIN4ZXGJ.js.map +0 -1
- package/dist/chunk-FO5EP6DA.js +0 -24008
- package/dist/chunk-FO5EP6DA.js.map +0 -1
- package/dist/chunk-FSGTITIW.js +0 -622
- package/dist/chunk-FSGTITIW.js.map +0 -1
- package/dist/chunk-FSPV2DUG.js +0 -310
- package/dist/chunk-FSPV2DUG.js.map +0 -1
- package/dist/chunk-FYAWA3FO.js +0 -1830
- package/dist/chunk-FYAWA3FO.js.map +0 -1
- package/dist/chunk-G3KO2HFZ.js +0 -35
- package/dist/chunk-GKXMIXEV.js +0 -166
- package/dist/chunk-GT4UFORX.js +0 -296
- package/dist/chunk-GZ6YS7TG.js +0 -106
- package/dist/chunk-H7JOVRHO.js +0 -106
- package/dist/chunk-IJDF7D4U.js +0 -139
- package/dist/chunk-INJHF7AF.js +0 -172
- package/dist/chunk-IZFGTGFR.js +0 -67
- package/dist/chunk-J2QOKD2F.js +0 -76
- package/dist/chunk-J5WZ7SAD.js +0 -346
- package/dist/chunk-JC6GNMA7.js +0 -297
- package/dist/chunk-KB5HBQEK.js +0 -25
- package/dist/chunk-KB5XJHQX.js +0 -216
- package/dist/chunk-KB5XJHQX.js.map +0 -1
- package/dist/chunk-KM4AAAHZ.js +0 -5187
- package/dist/chunk-KM4AAAHZ.js.map +0 -1
- package/dist/chunk-LFZTGIPJ.js +0 -384
- package/dist/chunk-LFZTGIPJ.js.map +0 -1
- package/dist/chunk-LHNL6JM2.js +0 -309
- package/dist/chunk-LHNL6JM2.js.map +0 -1
- package/dist/chunk-LMHVLUD4.js +0 -175
- package/dist/chunk-LMHVLUD4.js.map +0 -1
- package/dist/chunk-NAMEFVWL.js +0 -1743
- package/dist/chunk-NAMEFVWL.js.map +0 -1
- package/dist/chunk-NFSLRRIE.js +0 -77
- package/dist/chunk-NORAJYUI.js +0 -172
- package/dist/chunk-NQTSHC7Z.js +0 -304
- package/dist/chunk-NQTSHC7Z.js.map +0 -1
- package/dist/chunk-O3LHCQ7Q.js +0 -136
- package/dist/chunk-O3LHCQ7Q.js.map +0 -1
- package/dist/chunk-O4ABJ352.js +0 -4410
- package/dist/chunk-O4ABJ352.js.map +0 -1
- package/dist/chunk-O5XLQUDS.js +0 -846
- package/dist/chunk-OI7KSXZM.js +0 -6265
- package/dist/chunk-OI7KSXZM.js.map +0 -1
- package/dist/chunk-OO67YTPM.js +0 -35
- package/dist/chunk-OO67YTPM.js.map +0 -1
- package/dist/chunk-OXBPKBSK.js +0 -6667
- package/dist/chunk-OXBPKBSK.js.map +0 -1
- package/dist/chunk-P3XJUOWT.js +0 -474
- package/dist/chunk-P3XJUOWT.js.map +0 -1
- package/dist/chunk-P3ZJIIDS.js +0 -57
- package/dist/chunk-P5T7OZKV.js +0 -26
- package/dist/chunk-P66JWKAL.js +0 -533
- package/dist/chunk-P66JWKAL.js.map +0 -1
- package/dist/chunk-PA5MYVQY.js +0 -66
- package/dist/chunk-PELW56D7.js +0 -45
- package/dist/chunk-PGVF4SB7.js +0 -169
- package/dist/chunk-Q676JHJA.js +0 -58
- package/dist/chunk-QDOVBGKZ.js +0 -149
- package/dist/chunk-QHIUJXU7.js +0 -363
- package/dist/chunk-QJPPPQPD.js +0 -98
- package/dist/chunk-QNEX7FEC.js +0 -174
- package/dist/chunk-QTL4NJ5I.js +0 -65
- package/dist/chunk-QTL4NJ5I.js.map +0 -1
- package/dist/chunk-QWX3QJNM.js +0 -170
- package/dist/chunk-QXDEZKAR.js +0 -455
- package/dist/chunk-QXDEZKAR.js.map +0 -1
- package/dist/chunk-RG7OMI5W.js +0 -1621
- package/dist/chunk-RG7OMI5W.js.map +0 -1
- package/dist/chunk-RUHMLPH5.js +0 -455
- package/dist/chunk-SJLIV6PF.js +0 -19
- package/dist/chunk-SLCSLVGS.js +0 -274
- package/dist/chunk-THU74XR6.js +0 -96
- package/dist/chunk-THU74XR6.js.map +0 -1
- package/dist/chunk-TY7TEU3T.js +0 -1079
- package/dist/chunk-UXTZ5MBE.js +0 -56
- package/dist/chunk-V43RLLZE.js +0 -55
- package/dist/chunk-V7PMSMPF.js +0 -817
- package/dist/chunk-V7PMSMPF.js.map +0 -1
- package/dist/chunk-VFSLIDXA.js +0 -42
- package/dist/chunk-VHMNSO2B.js +0 -84
- package/dist/chunk-VKH6LSC2.js +0 -188
- package/dist/chunk-VTCBPYGE.js +0 -592
- package/dist/chunk-W6ASM6UP.js +0 -197
- package/dist/chunk-W7KB3LJE.js +0 -60
- package/dist/chunk-W7KB3LJE.js.map +0 -1
- package/dist/chunk-WESRVXFS.js +0 -133
- package/dist/chunk-WESRVXFS.js.map +0 -1
- package/dist/chunk-WILN7TD6.js +0 -84
- package/dist/chunk-YGK7ZHNI.js +0 -337
- package/dist/chunk-YGK7ZHNI.js.map +0 -1
- package/dist/chunk-YGL5LTEA.js +0 -665
- package/dist/chunk-YONSWWCF.js +0 -215
- package/dist/chunk-Z5KBRTB2.js +0 -191
- package/dist/chunk-Z62XZCBE.js +0 -541
- package/dist/chunk-Z62XZCBE.js.map +0 -1
- package/dist/chunk-ZBKBTTHD.js +0 -74
- package/dist/chunk-ZJR5E53N.js +0 -23
- package/dist/chunk-ZLU5QDLU.js +0 -486
- package/dist/chunk-ZLU5QDLU.js.map +0 -1
- package/dist/chunk-ZNNC6B75.js +0 -94
- package/dist/chunk-ZO2YLHRW.js +0 -74
- package/dist/chunk-ZPJE6D7W.js +0 -74
- package/dist/claim-DIITRUIN.js +0 -197
- package/dist/client-LY2JCQS2.js +0 -19
- package/dist/code-7CBNYUPU.js +0 -76
- package/dist/companies-HHSYHL74.js +0 -195
- package/dist/complete-M3TURPU5.js +0 -81
- package/dist/config-7COTFJWK.js +0 -88
- package/dist/connect-TQL5EVVE.js +0 -42
- package/dist/content-OXMONMHJ.js +0 -85
- package/dist/conversation-GE273GC4.js +0 -93
- package/dist/conversion-report-BH4HH2Q3.js +0 -125
- package/dist/conversion-upload-command-QWWYCTNV.js +0 -438
- package/dist/conversion-writes-HG2O6JI7.js +0 -120
- package/dist/conversions-DP6ZF57D.js +0 -135
- package/dist/conversions-XPSN7SOW.js +0 -76
- package/dist/countries-UXAUGSBR.js +0 -82
- package/dist/create-ENQWVWGB.js +0 -59
- package/dist/create-NVXJP477.js +0 -207
- package/dist/create-PITWGVAS.js +0 -130
- package/dist/create-PITWGVAS.js.map +0 -1
- package/dist/create-XLZYNFKN.js +0 -235
- package/dist/creatives-O3444SBT.js +0 -182
- package/dist/creatives-ONKKGW5T.js +0 -87
- package/dist/creatives-U6IKIQBT.js +0 -51
- package/dist/creatives-U6IKIQBT.js.map +0 -1
- package/dist/credentials-3UY7RVUL.js +0 -287
- package/dist/critique-3LMW73QJ.js +0 -1449
- package/dist/critique-3LMW73QJ.js.map +0 -1
- package/dist/critique-KB32Y4AW.js +0 -213
- package/dist/critique-KB32Y4AW.js.map +0 -1
- package/dist/crm-OX67TBWD.js +0 -224
- package/dist/crm-XXU5XZIQ.js +0 -318
- package/dist/crop-3ZV5BFCA.js +0 -113
- package/dist/currency-XP4EMU4M.js +0 -88
- package/dist/custom-conversions-TV23XQHW.js +0 -125
- package/dist/customers-EJ7FVCTC.js +0 -56
- package/dist/decide-EGQ3CRHI.js +0 -199
- package/dist/delete-55IHV25V.js +0 -63
- package/dist/delete-55IHV25V.js.map +0 -1
- package/dist/delete-GXLPIGTC.js +0 -54
- package/dist/delete-MUPTLWHI.js +0 -71
- package/dist/delete-OW2N4WIA.js +0 -66
- package/dist/delete-R2SEUSLV.js +0 -69
- package/dist/delete-ZGBBWFAW.js +0 -71
- package/dist/demographics-K6DEWUE5.js +0 -138
- package/dist/describe-4O3VCV6L.js +0 -97
- package/dist/describe-FCTM53MM.js +0 -97
- package/dist/dimensions-AD4VS5AH.js +0 -101
- package/dist/discard-NZ7FQJEE.js +0 -66
- package/dist/discover-OISU5EJF.js +0 -172
- package/dist/discover-UQXQUPNO.js +0 -93
- package/dist/domain-DXBHNZLO.js +0 -98
- package/dist/download-IE6XLFHM.js +0 -299
- package/dist/draft-DB6KMBCH.js +0 -306
- package/dist/draft-ENA7S4Y7.js +0 -103
- package/dist/draft-HJBAG3SN.js +0 -307
- package/dist/draft-ICEVLF4E.js +0 -328
- package/dist/draft-MGKJ5RYI.js +0 -100
- package/dist/draft-OBFKQEPK.js +0 -281
- package/dist/draft-OOHU6NMA.js +0 -217
- package/dist/draft-S6VPKZYY.js +0 -233
- package/dist/env-YLOVBOAE.js +0 -43
- package/dist/experiment-PHFP6IBM.js +0 -1397
- package/dist/export-R2IMUCQO.js +0 -168
- package/dist/extract-OQP3TSQG.js +0 -113
- package/dist/facets-NUKR7I57.js +0 -114
- package/dist/favorites-NS73FDG5.js +0 -178
- package/dist/feed-SQPOB7SP.js +0 -177
- package/dist/feedback-SQAAAKOQ.js +0 -66
- package/dist/feedback-SQAAAKOQ.js.map +0 -1
- package/dist/feedback-record-7W7WBHSQ.js +0 -175
- package/dist/feedback-record-7W7WBHSQ.js.map +0 -1
- package/dist/fetch-PQ3NOPIE.js +0 -139
- package/dist/fetch-PTSAVQW5.js +0 -176
- package/dist/find-Y22AANDE.js +0 -134
- package/dist/find-Y22AANDE.js.map +0 -1
- package/dist/fit-IITU6UWC.js +0 -45
- package/dist/flows-ZLF3QJ76.js +0 -247
- package/dist/flows-ZLF3QJ76.js.map +0 -1
- package/dist/follow-N3DQZV7M.js +0 -94
- package/dist/follow-competitors-BZPCBGIB.js +0 -112
- package/dist/following-KESWTEBR.js +0 -113
- package/dist/fonts-FG6XMK5A.js +0 -34
- package/dist/forecast-43XBSHJR.js +0 -168
- package/dist/forecast-MAFZQ4UF.js +0 -104
- package/dist/forecast-MAFZQ4UF.js.map +0 -1
- package/dist/funding-HYSCYS62.js +0 -85
- package/dist/funnel-32CNV57L.js +0 -394
- package/dist/ga4-J2KTNCD4.js +0 -55
- package/dist/generate-G3I5BLLW.js +0 -262
- package/dist/generate-G3I5BLLW.js.map +0 -1
- package/dist/get-3P2EQLP3.js +0 -63
- package/dist/get-FJB3X44Z.js +0 -61
- package/dist/get-GDF5V3RN.js +0 -78
- package/dist/get-GDF5V3RN.js.map +0 -1
- package/dist/get-MBGO4VJD.js +0 -63
- package/dist/get-NOKSZPIV.js +0 -59
- package/dist/get-W7MKBMQ3.js +0 -56
- package/dist/get-WHC4SRYK.js +0 -92
- package/dist/gif-SFYVDLCU.js +0 -94
- package/dist/gif-SFYVDLCU.js.map +0 -1
- package/dist/google-THWFDDHJ.js +0 -3191
- package/dist/google-THWFDDHJ.js.map +0 -1
- package/dist/google-XRAMIES5.js +0 -136
- package/dist/google-ads-N55SE2CB.js +0 -195
- package/dist/group-6RDJTWVN.js +0 -43
- package/dist/group-TZJCKHKS.js +0 -43
- package/dist/gsc-HD6UFRYM.js +0 -30
- package/dist/history-4RWCE7WW.js +0 -67
- package/dist/history-IROFQ6LA.js +0 -133
- package/dist/hubspot-75N4AI43.js +0 -779
- package/dist/icon-BMCDFGMN.js +0 -137
- package/dist/ideas-7UQMXLI5.js +0 -32
- package/dist/images-OFR3S2U4.js +0 -90
- package/dist/images-OFR3S2U4.js.map +0 -1
- package/dist/improve-P6F2HXYQ.js +0 -86
- package/dist/ingest-HGR7KSG4.js +0 -107
- package/dist/ingest-XU4WXE4U.js +0 -23
- package/dist/insights-7SI2TB72.js +0 -128
- package/dist/insights-7SI2TB72.js.map +0 -1
- package/dist/insights-P5VIDOZN.js +0 -432
- package/dist/insights-P5VIDOZN.js.map +0 -1
- package/dist/inspect-TL2VZBN7.js +0 -189
- package/dist/inspiration-7WTS3AVI.js +0 -53
- package/dist/intent-OCZE4O7R.js +0 -95
- package/dist/job-XMPQ27SJ.js +0 -202
- package/dist/job-create-HTDQHPEF.js +0 -109
- package/dist/job-status-L7WUTZ2C.js +0 -74
- package/dist/keep-42SLV4CR.js +0 -78
- package/dist/keyword-gap-323NE4AK.js +0 -130
- package/dist/keyword-metrics-V6DGO7U5.js +0 -197
- package/dist/keywords-for-site-ANSLXBHB.js +0 -128
- package/dist/landing-K25GUBLZ.js +0 -28
- package/dist/landings-5IYXHA5Z.js +0 -151
- package/dist/languages-SRFGW6Z3.js +0 -55
- package/dist/languages-US6JUATO.js +0 -40
- package/dist/launches-7U4TPNO3.js +0 -108
- package/dist/launches-7U4TPNO3.js.map +0 -1
- package/dist/layerize-U672AXED.js +0 -190
- package/dist/leads-MXUQISOC.js +0 -293
- package/dist/leads-UJVKPRXX.js +0 -90
- package/dist/learn-XTEU4K66.js +0 -203
- package/dist/learn-XTEU4K66.js.map +0 -1
- package/dist/library-RPFXNER4.js +0 -109
- package/dist/library-RPFXNER4.js.map +0 -1
- package/dist/lighthouse-SJ4QNLUS.js +0 -75
- package/dist/line-item-writes-NURRHJ7P.js +0 -208
- package/dist/line-items-PC6QWV5J.js +0 -103
- package/dist/link-ZSXKCLQD.js +0 -64
- package/dist/linkedin-EZJJBKY3.js +0 -1008
- package/dist/linkedin-EZJJBKY3.js.map +0 -1
- package/dist/list-ECF3RA26.js +0 -303
- package/dist/list-GQ65MC2N.js +0 -65
- package/dist/list-K56J7FZW.js +0 -51
- package/dist/list-M4Z3WYPM.js +0 -76
- package/dist/list-N7ZLO2LE.js +0 -63
- package/dist/list-N7ZLO2LE.js.map +0 -1
- package/dist/list-Q5ZZRPHO.js +0 -151
- package/dist/list-SXYVDDMU.js +0 -57
- package/dist/list-XFIOXFB2.js +0 -50
- package/dist/locations-LZUHWKZY.js +0 -40
- package/dist/locations-NG4YXIBT.js +0 -67
- package/dist/log-EEBJQ6X2.js +0 -92
- package/dist/logo-4JOWGJ5A.js +0 -18
- package/dist/lookup-7NBZ64TE.js +0 -22
- package/dist/make-3J5EK52U.js +0 -633
- package/dist/make-3J5EK52U.js.map +0 -1
- package/dist/map-JVVNH2RI.js +0 -404
- package/dist/map-JVVNH2RI.js.map +0 -1
- package/dist/mcp-DAKGMA2Z.js +0 -463
- package/dist/media-2SWDJDA6.js +0 -15
- package/dist/media-R64YP7T2.js +0 -89
- package/dist/media-sources-L2X3KRDU.js +0 -32
- package/dist/members-22BOEGQS.js +0 -44
- package/dist/meta-RBHF2RG3.js +0 -69
- package/dist/metrics-IXRQZVSM.js +0 -152
- package/dist/models-BDXZ56GI.js +0 -155
- package/dist/normalize-JAE3NVOX.js +0 -141
- package/dist/normalize-P5Q3F7FU.js +0 -806
- package/dist/options-YTIU3BDC.js +0 -121
- package/dist/options-YTIU3BDC.js.map +0 -1
- package/dist/output-ZL62UZHQ.js +0 -24
- package/dist/page-FZ7IZ5CV.js +0 -105
- package/dist/pages-SS7TZTHV.js +0 -66
- package/dist/performance-FOOV624A.js +0 -24
- package/dist/performance-VYEANYQ5.js +0 -4707
- package/dist/performance-VYEANYQ5.js.map +0 -1
- package/dist/pinterest-UETS7U7U.js +0 -96
- package/dist/pixels-LCTMLKGP.js +0 -108
- package/dist/pixels-MPZYWGFD.js +0 -60
- package/dist/plan-V74EVXTW.js +0 -207
- package/dist/preview-RU54Z4EM.js +0 -169
- package/dist/profile-NQOIBLJL.js +0 -150
- package/dist/profile-NQOIBLJL.js.map +0 -1
- package/dist/promoted-tweet-writes-FQRFU7PB.js +0 -180
- package/dist/promoted-tweets-L2L3V5SF.js +0 -119
- package/dist/properties-ZUDQH3LE.js +0 -101
- package/dist/publish-5XTAHTM4.js +0 -322
- package/dist/publish-5XTAHTM4.js.map +0 -1
- package/dist/query-26T7XATH.js +0 -236
- package/dist/query-SHUOHXTO.js +0 -247
- package/dist/query-XISUHMBR.js +0 -62
- package/dist/questionnaire-UG55JLVW.js +0 -93
- package/dist/read-UYSQAXRV.js +0 -141
- package/dist/reddit-BCB4FT6J.js +0 -26
- package/dist/refresh-WY5NPNLX.js +0 -94
- package/dist/release-JBSPPNQE.js +0 -60
- package/dist/relevant-pages-OU5H56KY.js +0 -99
- package/dist/remove-2KACTXKP.js +0 -48
- package/dist/remove-M5P7M5JU.js +0 -50
- package/dist/reopen-J3VW5766.js +0 -63
- package/dist/rerun-5MRYJG6U.js +0 -84
- package/dist/rerun-5MRYJG6U.js.map +0 -1
- package/dist/research-4CAA5CA2.js +0 -262
- package/dist/research-7LBTJ2B2.js +0 -62
- package/dist/reset-DBWWGCXY.js +0 -54
- package/dist/reset-DJSSXC4Y.js +0 -54
- package/dist/resolve-BNRUYS56.js +0 -121
- package/dist/retry-TMRIFGVT.js +0 -62
- package/dist/retry-WRBGLB7O.js +0 -60
- package/dist/retry-failed-NWLH6WHK.js +0 -45
- package/dist/run-TA3DP6QG.js +0 -59
- package/dist/run-VVTLDRRW.js +0 -65
- package/dist/run-VVTLDRRW.js.map +0 -1
- package/dist/scaffold-ad-7DSV6XDB.js +0 -1548
- package/dist/scaffold-ad-7DSV6XDB.js.map +0 -1
- package/dist/scaffold-static-ad-BEZ37QWN.js +0 -971
- package/dist/scaffold-static-ad-BEZ37QWN.js.map +0 -1
- package/dist/scaffold-video-SPCMTYK3.js +0 -872
- package/dist/scaffold-video-SPCMTYK3.js.map +0 -1
- package/dist/schedule-BQQGYGT7.js +0 -61
- package/dist/schedule-S547HPUT.js +0 -66
- package/dist/scheduled-agents-4Q6WS333.js +0 -49
- package/dist/scheduled-agents-4Q6WS333.js.map +0 -1
- package/dist/schema-DDEWM5ZX.js +0 -132
- package/dist/schema-SQIP75WG.js +0 -63
- package/dist/schema-SQIP75WG.js.map +0 -1
- package/dist/scrape-TI6S2W7I.js +0 -2241
- package/dist/screenshot-XFAYY4WW.js +0 -102
- package/dist/search-4HIOKYFR.js +0 -26
- package/dist/search-D2IV7KFJ.js +0 -92
- package/dist/search-IZPDHRJ4.js +0 -224
- package/dist/search-KFDL2IGG.js +0 -91
- package/dist/search-VJBKRD2U.js +0 -174
- package/dist/search-copy-QZXCAGK4.js +0 -168
- package/dist/seeds-VUNZMHZH.js +0 -101
- package/dist/select-U5TPAXGY.js +0 -94
- package/dist/select-U5TPAXGY.js.map +0 -1
- package/dist/sends-7HWLIOUO.js +0 -309
- package/dist/sequences-5RAGZE7L.js +0 -146
- package/dist/set-prompt-MHU4WI3Q.js +0 -185
- package/dist/set-prompt-MHU4WI3Q.js.map +0 -1
- package/dist/setup-links-SPIGXQTY.js +0 -141
- package/dist/shared-3CGGKICB.js +0 -31
- package/dist/site-FW6K6L6M.js +0 -177
- package/dist/sitemaps-3WDYQHYR.js +0 -87
- package/dist/sites-G4DQ2Z2X.js +0 -101
- package/dist/skills-PA26HXEP.js +0 -47
- package/dist/sources-4NAC6HV6.js +0 -421
- package/dist/sources-4NAC6HV6.js.map +0 -1
- package/dist/sources-PMBWG4KO.js +0 -30
- package/dist/stale-5IMY6MWC.js +0 -63
- package/dist/stale-5IMY6MWC.js.map +0 -1
- package/dist/stats-Q35I5DRW.js +0 -34
- package/dist/status-62SUXUWW.js +0 -62
- package/dist/sticker-MC2IAIQB.js +0 -94
- package/dist/stock-B7LKMKUK.js +0 -179
- package/dist/studio-BB2EVW5I.js +0 -49
- package/dist/sync-CLZDZL5F.js +0 -54
- package/dist/sync-XCHBEBZG.js +0 -279
- package/dist/sync-XCHBEBZG.js.map +0 -1
- package/dist/sync-YTHNOAAM.js +0 -54
- package/dist/sync-definition-DYSVT7BJ.js +0 -52
- package/dist/tag-manager-EAREWVYR.js +0 -43
- package/dist/tags-53AG3FYG.js +0 -20
- package/dist/tags-7TH7TVR6.js +0 -224
- package/dist/tags-EB4RE3ML.js +0 -20
- package/dist/tags-EUEWDTTN.js +0 -20
- package/dist/tags-ICAWBCOR.js +0 -26
- package/dist/targeting-constants-IFE72XKL.js +0 -118
- package/dist/targeting-criteria-WZDGJKOI.js +0 -113
- package/dist/targets-OKJ6A4YL.js +0 -102
- package/dist/targets-OKJ6A4YL.js.map +0 -1
- package/dist/templates-IA5TDCCZ.js +0 -178
- package/dist/templates-IA5TDCCZ.js.map +0 -1
- package/dist/testimonials-THHR5JH5.js +0 -32
- package/dist/themes-ZFRM6AVO.js +0 -94
- package/dist/top-companies-63Q475IA.js +0 -108
- package/dist/translate-XKUWIIOS.js +0 -598
- package/dist/translate-XKUWIIOS.js.map +0 -1
- package/dist/triggers-XLKO2QXQ.js +0 -141
- package/dist/triggers-XLKO2QXQ.js.map +0 -1
- package/dist/tweets-7EZRFG3Y.js +0 -123
- package/dist/unfollow-WBBTVEHE.js +0 -46
- package/dist/unlink-P7KU54YU.js +0 -67
- package/dist/unstage-EG7AUE5X.js +0 -84
- package/dist/unstage-EG7AUE5X.js.map +0 -1
- package/dist/unstage-GHXGDOT2.js +0 -95
- package/dist/update-7EWDO32L.js +0 -98
- package/dist/update-BVYGB4YL.js +0 -142
- package/dist/update-BVYGB4YL.js.map +0 -1
- package/dist/update-KVMQOVQK.js +0 -63
- package/dist/update-N74F5KXB.js +0 -155
- package/dist/update-N74F5KXB.js.map +0 -1
- package/dist/upload-6PYPHPCZ.js +0 -126
- package/dist/upload-NA62W5RS.js +0 -150
- package/dist/upscale-RXJUBHXN.js +0 -109
- package/dist/url-options-EUDXLDBD.js +0 -130
- package/dist/url-params-DBJSM2LP.js +0 -98
- package/dist/use-MHPNS4V4.js +0 -95
- package/dist/validate-TTAGVGM2.js +0 -88
- package/dist/validate-TTAGVGM2.js.map +0 -1
- package/dist/variant-ZFCWILPG.js +0 -338
- package/dist/videos-DUG7JYUA.js +0 -39
- package/dist/view-PYCGDGT2.js +0 -121
- package/dist/viewer-check-HIMNCZGY.js +0 -68
- package/dist/web-SDG42OBC.js +0 -140
- package/dist/winners-AI4PVSOI.js +0 -113
- package/dist/winning-ads-KGAYAIPG.js +0 -84
- package/dist/write-commands-34L5LJIB.js +0 -713
- package/dist/write-commands-5TJ3LQ5F.js +0 -737
- package/dist/write-commands-OYMWOFEY.js +0 -1015
- package/dist/write-commands-R3UCCBUI.js +0 -206
- package/dist/x-VNRVGVLI.js +0 -47
- /package/dist/{account-HZC6X2PH.js.map → account-7LUQWY6Q.js.map} +0 -0
- /package/dist/{account-TQUV64XP.js.map → account-ELL7ZZLM.js.map} +0 -0
- /package/dist/{account-67PZBEP6.js.map → account-KZVOT6HL.js.map} +0 -0
- /package/dist/{account-reads-IRBTERTY.js.map → account-reads-LA45L6G3.js.map} +0 -0
- /package/dist/{account-writes-ALDSHAEV.js.map → account-writes-CEPERFD6.js.map} +0 -0
- /package/dist/{accounts-WTB737BM.js.map → accounts-7G556DH4.js.map} +0 -0
- /package/dist/{accounts-4P54UY6F.js.map → accounts-E4TVYTUR.js.map} +0 -0
- /package/dist/{accounts-NJ6TF6WH.js.map → accounts-HC7GPQNG.js.map} +0 -0
- /package/dist/{accounts-GVTZN4VE.js.map → accounts-SMB3TNXX.js.map} +0 -0
- /package/dist/{accounts-6UNBLIUH.js.map → accounts-UA2ZWRN4.js.map} +0 -0
- /package/dist/{actions-D3BOWDEB.js.map → actions-V6YP5C3X.js.map} +0 -0
- /package/dist/{active-entities-J2O76SRP.js.map → active-entities-MCL7UEGV.js.map} +0 -0
- /package/dist/{activities-2J7FTZMN.js.map → activities-IQPJPP4B.js.map} +0 -0
- /package/dist/{ad-group-writes-PQKDCMQF.js.map → ad-group-writes-XGSCEQTW.js.map} +0 -0
- /package/dist/{ad-groups-NGYEJMV4.js.map → ad-groups-GKOLDGET.js.map} +0 -0
- /package/dist/{ad-writes-77FVHJTS.js.map → ad-writes-VVD36JKH.js.map} +0 -0
- /package/dist/{add-2XJYOGKW.js.map → add-3MD72QMT.js.map} +0 -0
- /package/dist/{add-2FHPLALV.js.map → add-5IGUQHVZ.js.map} +0 -0
- /package/dist/{add-JP76KCCY.js.map → add-BK5AQI5A.js.map} +0 -0
- /package/dist/{add-62JPGFD4.js.map → add-TSQNUP5N.js.map} +0 -0
- /package/dist/{add-accounts-M5Y4DQFM.js.map → add-accounts-CJSV5NPL.js.map} +0 -0
- /package/dist/{ads-LYNA2I7B.js.map → ads-EKZVHKPN.js.map} +0 -0
- /package/dist/{ads-W2IPUWHQ.js.map → ads-HXX2IAFF.js.map} +0 -0
- /package/dist/{ads-DB5NDHX5.js.map → ads-RAUM6ISF.js.map} +0 -0
- /package/dist/{adsets-PY5ZKGBO.js.map → adsets-LPN6WFGF.js.map} +0 -0
- /package/dist/{advertisers-BVAZ4XUX.js.map → advertisers-DS2NRWKI.js.map} +0 -0
- /package/dist/{advertisers-NZPJQF7W.js.map → advertisers-XJG7XDK7.js.map} +0 -0
- /package/dist/{analytics-NTPZKMYK.js.map → analytics-DO4UKW2H.js.map} +0 -0
- /package/dist/{animate-EIV2OHXT.js.map → animate-G4P3OEJE.js.map} +0 -0
- /package/dist/{assign-UNIA5YDC.js.map → assign-72YAL6TP.js.map} +0 -0
- /package/dist/{audiences-VYFX7OFS.js.map → audiences-3LRCLHTQ.js.map} +0 -0
- /package/dist/{audiences-45ZCY2VZ.js.map → audiences-BU4JZJT7.js.map} +0 -0
- /package/dist/{audiences-UUIYQFS6.js.map → audiences-XEZHACKH.js.map} +0 -0
- /package/dist/{audit-NSVHNA5J.js.map → audit-22KQAHJR.js.map} +0 -0
- /package/dist/{audit-OWXTLQC4.js.map → audit-YEGQU474.js.map} +0 -0
- /package/dist/{autocomplete-EHWAQYVB.js.map → autocomplete-KLNQIK5T.js.map} +0 -0
- /package/dist/{avatars-7WZPW7BV.js.map → avatars-VO6FMJFB.js.map} +0 -0
- /package/dist/{brand-QAJ5VWFM.js.map → brand-XXNOVSGE.js.map} +0 -0
- /package/dist/{businesses-ZH67AXR6.js.map → businesses-PRRYPR7H.js.map} +0 -0
- /package/dist/{campaign-groups-KFJKLNNU.js.map → campaign-groups-JFOFU76X.js.map} +0 -0
- /package/dist/{campaign-writes-BDGQ6XB3.js.map → campaign-writes-NSEJCINS.js.map} +0 -0
- /package/dist/{campaign-writes-FNMAGCKB.js.map → campaign-writes-PKWLLKB5.js.map} +0 -0
- /package/dist/{campaigns-66OOGMDW.js.map → campaigns-4SOLY7OR.js.map} +0 -0
- /package/dist/{campaigns-KT3J2O7S.js.map → campaigns-5AZMOOID.js.map} +0 -0
- /package/dist/{campaigns-6HMHOXXY.js.map → campaigns-H4VK3GKK.js.map} +0 -0
- /package/dist/{campaigns-HJTGX5WW.js.map → campaigns-VWN2XPK2.js.map} +0 -0
- /package/dist/{canvas-MQ6ZE5CZ.js.map → canvas-TTV7QZZT.js.map} +0 -0
- /package/dist/{capabilities-RVUMPP7C.js.map → capabilities-VJ53ROIP.js.map} +0 -0
- /package/dist/{cards-I4BZIYUV.js.map → cards-WHMCSRZX.js.map} +0 -0
- /package/dist/{catalogs-B2NKQO24.js.map → catalogs-XH5NHH4C.js.map} +0 -0
- /package/dist/{changes-FX3TPYGT.js.map → changes-F6WUXFC3.js.map} +0 -0
- /package/dist/{chatgpt-3NS2R442.js.map → chatgpt-K6KNTME4.js.map} +0 -0
- /package/dist/{chats-72L7U4ML.js.map → chats-PWLQO7UY.js.map} +0 -0
- /package/dist/{chunk-CBCGVPHB.js.map → chunk-232YUPUI.js.map} +0 -0
- /package/dist/{chunk-65BQAJMH.js.map → chunk-23H4ZJRP.js.map} +0 -0
- /package/dist/{chunk-IZFGTGFR.js.map → chunk-3OCSWUHV.js.map} +0 -0
- /package/dist/{chunk-SLCSLVGS.js.map → chunk-5SRHACZW.js.map} +0 -0
- /package/dist/{chunk-VHMNSO2B.js.map → chunk-5WMTPYKT.js.map} +0 -0
- /package/dist/{chunk-QNEX7FEC.js.map → chunk-6JWEGFM5.js.map} +0 -0
- /package/dist/{chunk-P5T7OZKV.js.map → chunk-6OIKNJ7G.js.map} +0 -0
- /package/dist/{chunk-INJHF7AF.js.map → chunk-7RBJ2Z7Z.js.map} +0 -0
- /package/dist/{chunk-57UECM77.js.map → chunk-BFRIRZRZ.js.map} +0 -0
- /package/dist/{chunk-WILN7TD6.js.map → chunk-BFZS3WHS.js.map} +0 -0
- /package/dist/{chunk-NFSLRRIE.js.map → chunk-BITS62MF.js.map} +0 -0
- /package/dist/{chunk-CECS3DHZ.js.map → chunk-BLAHHMPF.js.map} +0 -0
- /package/dist/{chunk-GT4UFORX.js.map → chunk-CVBKW75S.js.map} +0 -0
- /package/dist/{chunk-J2QOKD2F.js.map → chunk-D4LKZJYJ.js.map} +0 -0
- /package/dist/{chunk-JC6GNMA7.js.map → chunk-D6KHVUDS.js.map} +0 -0
- /package/dist/{chunk-6GFJFTG6.js.map → chunk-DWX44QL6.js.map} +0 -0
- /package/dist/{chunk-D5MF337I.js.map → chunk-FNA277HP.js.map} +0 -0
- /package/dist/{chunk-VTCBPYGE.js.map → chunk-FQXGII24.js.map} +0 -0
- /package/dist/{chunk-7NTION5F.js.map → chunk-FU7HJWGM.js.map} +0 -0
- /package/dist/{chunk-YGL5LTEA.js.map → chunk-GD6UJDOB.js.map} +0 -0
- /package/dist/{chunk-35ENAFJX.js.map → chunk-GDLQ6SGW.js.map} +0 -0
- /package/dist/{chunk-GZ6YS7TG.js.map → chunk-GEKXIXMG.js.map} +0 -0
- /package/dist/{chunk-Q676JHJA.js.map → chunk-GLW7UJLB.js.map} +0 -0
- /package/dist/{chunk-IJDF7D4U.js.map → chunk-H5HDZ7IC.js.map} +0 -0
- /package/dist/{chunk-4TU2MWBJ.js.map → chunk-I44SNQ34.js.map} +0 -0
- /package/dist/{chunk-G3KO2HFZ.js.map → chunk-I5VZVQBZ.js.map} +0 -0
- /package/dist/{chunk-PELW56D7.js.map → chunk-IC6SDOED.js.map} +0 -0
- /package/dist/{chunk-ZNNC6B75.js.map → chunk-IN4G7X6W.js.map} +0 -0
- /package/dist/{chunk-VKH6LSC2.js.map → chunk-IPLE5K5E.js.map} +0 -0
- /package/dist/{chunk-W6ASM6UP.js.map → chunk-IYELKHBG.js.map} +0 -0
- /package/dist/{chunk-7GYM4I5I.js.map → chunk-JQNO6JCV.js.map} +0 -0
- /package/dist/{chunk-H7JOVRHO.js.map → chunk-JYBLCIRN.js.map} +0 -0
- /package/dist/{chunk-DL2W4N7J.js.map → chunk-K3TNTBZJ.js.map} +0 -0
- /package/dist/{chunk-RUHMLPH5.js.map → chunk-K4NMOWG7.js.map} +0 -0
- /package/dist/{chunk-KB5HBQEK.js.map → chunk-LCW3U4EA.js.map} +0 -0
- /package/dist/{chunk-O5XLQUDS.js.map → chunk-LMZAOTRX.js.map} +0 -0
- /package/dist/{chunk-6HPIWZHS.js.map → chunk-MI3JB5KB.js.map} +0 -0
- /package/dist/{chunk-ZBKBTTHD.js.map → chunk-MJQBXFW6.js.map} +0 -0
- /package/dist/{chunk-ZJR5E53N.js.map → chunk-MK3OJZIU.js.map} +0 -0
- /package/dist/{chunk-ZO2YLHRW.js.map → chunk-MPACDBH5.js.map} +0 -0
- /package/dist/{chunk-YONSWWCF.js.map → chunk-N5O67GK5.js.map} +0 -0
- /package/dist/{chunk-QDOVBGKZ.js.map → chunk-P3TNRS56.js.map} +0 -0
- /package/dist/{chunk-QWX3QJNM.js.map → chunk-PAJJXZ3Z.js.map} +0 -0
- /package/dist/{chunk-J5WZ7SAD.js.map → chunk-PHPXAMY3.js.map} +0 -0
- /package/dist/{chunk-UXTZ5MBE.js.map → chunk-QABSQADZ.js.map} +0 -0
- /package/dist/{chunk-NORAJYUI.js.map → chunk-QYAI24PN.js.map} +0 -0
- /package/dist/{chunk-2KIF3U2C.js.map → chunk-QZHGIJOW.js.map} +0 -0
- /package/dist/{chunk-SJLIV6PF.js.map → chunk-ROX7LQRR.js.map} +0 -0
- /package/dist/{chunk-QJPPPQPD.js.map → chunk-S7B2TOOU.js.map} +0 -0
- /package/dist/{chunk-GKXMIXEV.js.map → chunk-SFJW2KED.js.map} +0 -0
- /package/dist/{chunk-AR7PU7BB.js.map → chunk-SIKCVWM3.js.map} +0 -0
- /package/dist/{chunk-TY7TEU3T.js.map → chunk-SK2N45LO.js.map} +0 -0
- /package/dist/{chunk-ZPJE6D7W.js.map → chunk-SOKVXKRM.js.map} +0 -0
- /package/dist/{chunk-Z5KBRTB2.js.map → chunk-STNCMKL6.js.map} +0 -0
- /package/dist/{chunk-PGVF4SB7.js.map → chunk-TKPVVD52.js.map} +0 -0
- /package/dist/{chunk-AIDXJHZ4.js.map → chunk-TNB5EIFV.js.map} +0 -0
- /package/dist/{chunk-P3ZJIIDS.js.map → chunk-TUSR5R7I.js.map} +0 -0
- /package/dist/{chunk-DLUWHZCE.js.map → chunk-ULPO72IQ.js.map} +0 -0
- /package/dist/{chunk-QHIUJXU7.js.map → chunk-UWT7RCL3.js.map} +0 -0
- /package/dist/{chunk-DDTILZXI.js.map → chunk-V4UIM4QE.js.map} +0 -0
- /package/dist/{chunk-V43RLLZE.js.map → chunk-XGOEX2VJ.js.map} +0 -0
- /package/dist/{chunk-FDG2LLX7.js.map → chunk-XP4G2DJL.js.map} +0 -0
- /package/dist/{chunk-PA5MYVQY.js.map → chunk-XZ4YMCZK.js.map} +0 -0
- /package/dist/{chunk-VFSLIDXA.js.map → chunk-Y3VRMFGF.js.map} +0 -0
- /package/dist/{claim-DIITRUIN.js.map → claim-QHXKN7W6.js.map} +0 -0
- /package/dist/{client-LY2JCQS2.js.map → client-WL2FKW4T.js.map} +0 -0
- /package/dist/{code-7CBNYUPU.js.map → code-NXN7QYKU.js.map} +0 -0
- /package/dist/{companies-HHSYHL74.js.map → companies-PGVT62JL.js.map} +0 -0
- /package/dist/{complete-M3TURPU5.js.map → complete-TCTR3XVD.js.map} +0 -0
- /package/dist/{config-7COTFJWK.js.map → config-VOF57KBL.js.map} +0 -0
- /package/dist/{connect-TQL5EVVE.js.map → connect-4S7JLICS.js.map} +0 -0
- /package/dist/{content-OXMONMHJ.js.map → content-KA25YYO3.js.map} +0 -0
- /package/dist/{conversation-GE273GC4.js.map → conversation-DI4WMEL2.js.map} +0 -0
- /package/dist/{conversion-report-BH4HH2Q3.js.map → conversion-report-KL4LIVY5.js.map} +0 -0
- /package/dist/{conversion-upload-command-QWWYCTNV.js.map → conversion-upload-command-EIKJU5ZW.js.map} +0 -0
- /package/dist/{conversion-writes-HG2O6JI7.js.map → conversion-writes-MPBCTVSP.js.map} +0 -0
- /package/dist/{conversions-XPSN7SOW.js.map → conversions-ACYT6K7H.js.map} +0 -0
- /package/dist/{conversions-DP6ZF57D.js.map → conversions-JTYMFX66.js.map} +0 -0
- /package/dist/{countries-UXAUGSBR.js.map → countries-XGMZWUGP.js.map} +0 -0
- /package/dist/{create-NVXJP477.js.map → create-3QA7X2DD.js.map} +0 -0
- /package/dist/{create-XLZYNFKN.js.map → create-AFVT5JTH.js.map} +0 -0
- /package/dist/{create-ENQWVWGB.js.map → create-TYCOMVWR.js.map} +0 -0
- /package/dist/{creatives-O3444SBT.js.map → creatives-E6N2YLHE.js.map} +0 -0
- /package/dist/{creatives-ONKKGW5T.js.map → creatives-YJ3CXZQC.js.map} +0 -0
- /package/dist/{credentials-3UY7RVUL.js.map → credentials-34I6ZZWU.js.map} +0 -0
- /package/dist/{crm-XXU5XZIQ.js.map → crm-4F3LFOZD.js.map} +0 -0
- /package/dist/{crm-OX67TBWD.js.map → crm-MNBYNP5R.js.map} +0 -0
- /package/dist/{crop-3ZV5BFCA.js.map → crop-7UTYG7GS.js.map} +0 -0
- /package/dist/{currency-XP4EMU4M.js.map → currency-3QTI5RSB.js.map} +0 -0
- /package/dist/{custom-conversions-TV23XQHW.js.map → custom-conversions-YRYE65PU.js.map} +0 -0
- /package/dist/{customers-EJ7FVCTC.js.map → customers-VNYNT2EQ.js.map} +0 -0
- /package/dist/{decide-EGQ3CRHI.js.map → decide-TWKH5QQU.js.map} +0 -0
- /package/dist/{delete-R2SEUSLV.js.map → delete-2GIIUPA3.js.map} +0 -0
- /package/dist/{delete-ZGBBWFAW.js.map → delete-GLLYPNNB.js.map} +0 -0
- /package/dist/{delete-MUPTLWHI.js.map → delete-J7DXPGKD.js.map} +0 -0
- /package/dist/{delete-GXLPIGTC.js.map → delete-PRJGFA2U.js.map} +0 -0
- /package/dist/{delete-OW2N4WIA.js.map → delete-UZRHYEPK.js.map} +0 -0
- /package/dist/{demographics-K6DEWUE5.js.map → demographics-JMZA7MB6.js.map} +0 -0
- /package/dist/{describe-FCTM53MM.js.map → describe-5QCPRSIG.js.map} +0 -0
- /package/dist/{describe-4O3VCV6L.js.map → describe-L3UC6MIL.js.map} +0 -0
- /package/dist/{dimensions-AD4VS5AH.js.map → dimensions-POH4JXEM.js.map} +0 -0
- /package/dist/{discard-NZ7FQJEE.js.map → discard-OH3B5P4C.js.map} +0 -0
- /package/dist/{discover-OISU5EJF.js.map → discover-5GLET36U.js.map} +0 -0
- /package/dist/{discover-UQXQUPNO.js.map → discover-XAJKZCMM.js.map} +0 -0
- /package/dist/{domain-DXBHNZLO.js.map → domain-K3IILLYE.js.map} +0 -0
- /package/dist/{download-IE6XLFHM.js.map → download-N4J5WFHD.js.map} +0 -0
- /package/dist/{draft-OOHU6NMA.js.map → draft-2KHUZTIE.js.map} +0 -0
- /package/dist/{draft-HJBAG3SN.js.map → draft-7RYDPOFS.js.map} +0 -0
- /package/dist/{draft-ICEVLF4E.js.map → draft-BB3UUWJP.js.map} +0 -0
- /package/dist/{draft-S6VPKZYY.js.map → draft-EWDOIXSH.js.map} +0 -0
- /package/dist/{draft-ENA7S4Y7.js.map → draft-IL37WDST.js.map} +0 -0
- /package/dist/{draft-MGKJ5RYI.js.map → draft-KDMYGLWN.js.map} +0 -0
- /package/dist/{draft-DB6KMBCH.js.map → draft-LZL6VWHX.js.map} +0 -0
- /package/dist/{draft-OBFKQEPK.js.map → draft-VXGZDBC7.js.map} +0 -0
- /package/dist/{env-YLOVBOAE.js.map → env-5MUVYE2L.js.map} +0 -0
- /package/dist/{experiment-PHFP6IBM.js.map → experiment-G3FQVAJU.js.map} +0 -0
- /package/dist/{export-R2IMUCQO.js.map → export-OLDI32HM.js.map} +0 -0
- /package/dist/{extract-OQP3TSQG.js.map → extract-PPS6ONQN.js.map} +0 -0
- /package/dist/{facets-NUKR7I57.js.map → facets-PAWOEHOK.js.map} +0 -0
- /package/dist/{favorites-NS73FDG5.js.map → favorites-4ELADD3R.js.map} +0 -0
- /package/dist/{feed-SQPOB7SP.js.map → feed-XIY5TVDL.js.map} +0 -0
- /package/dist/{fetch-PTSAVQW5.js.map → fetch-M5GIBURQ.js.map} +0 -0
- /package/dist/{fetch-PQ3NOPIE.js.map → fetch-YWUVDMUH.js.map} +0 -0
- /package/dist/{fit-IITU6UWC.js.map → fit-DGCYW7LN.js.map} +0 -0
- /package/dist/{follow-N3DQZV7M.js.map → follow-ZTPZKIMZ.js.map} +0 -0
- /package/dist/{follow-competitors-BZPCBGIB.js.map → follow-competitors-6QDVQ4VJ.js.map} +0 -0
- /package/dist/{following-KESWTEBR.js.map → following-PBZLZFGQ.js.map} +0 -0
- /package/dist/{fonts-FG6XMK5A.js.map → fonts-IQ6XOUGU.js.map} +0 -0
- /package/dist/{forecast-43XBSHJR.js.map → forecast-YXOKAWDZ.js.map} +0 -0
- /package/dist/{funding-HYSCYS62.js.map → funding-ULBMKUMW.js.map} +0 -0
- /package/dist/{funnel-32CNV57L.js.map → funnel-CJRFDTCD.js.map} +0 -0
- /package/dist/{ga4-J2KTNCD4.js.map → ga4-2BL5YAYN.js.map} +0 -0
- /package/dist/{get-MBGO4VJD.js.map → get-6RZU4M6W.js.map} +0 -0
- /package/dist/{get-WHC4SRYK.js.map → get-7GCEJ6KG.js.map} +0 -0
- /package/dist/{get-FJB3X44Z.js.map → get-MZWUMHEF.js.map} +0 -0
- /package/dist/{get-W7MKBMQ3.js.map → get-NUL4YJG5.js.map} +0 -0
- /package/dist/{get-NOKSZPIV.js.map → get-OAZZHUZP.js.map} +0 -0
- /package/dist/{get-3P2EQLP3.js.map → get-OHU2N7B7.js.map} +0 -0
- /package/dist/{google-XRAMIES5.js.map → google-7STODZQR.js.map} +0 -0
- /package/dist/{google-ads-N55SE2CB.js.map → google-ads-BB7CF4NV.js.map} +0 -0
- /package/dist/{group-6RDJTWVN.js.map → group-D5WXNFCP.js.map} +0 -0
- /package/dist/{group-TZJCKHKS.js.map → group-Y5PLETFT.js.map} +0 -0
- /package/dist/{gsc-HD6UFRYM.js.map → gsc-UU3T2C6B.js.map} +0 -0
- /package/dist/{history-4RWCE7WW.js.map → history-OQAOTEO3.js.map} +0 -0
- /package/dist/{history-IROFQ6LA.js.map → history-Q47TKZJS.js.map} +0 -0
- /package/dist/{hubspot-75N4AI43.js.map → hubspot-A6O5GVTH.js.map} +0 -0
- /package/dist/{icon-BMCDFGMN.js.map → icon-GB7UH5RF.js.map} +0 -0
- /package/dist/{ideas-7UQMXLI5.js.map → ideas-LD6X753E.js.map} +0 -0
- /package/dist/{improve-P6F2HXYQ.js.map → improve-U5USRH4G.js.map} +0 -0
- /package/dist/{ingest-HGR7KSG4.js.map → ingest-PUMTHASV.js.map} +0 -0
- /package/dist/{ingest-XU4WXE4U.js.map → ingest-WWNSA6VZ.js.map} +0 -0
- /package/dist/{inspect-TL2VZBN7.js.map → inspect-5PRLZLF5.js.map} +0 -0
- /package/dist/{inspiration-7WTS3AVI.js.map → inspiration-XQYHBJY2.js.map} +0 -0
- /package/dist/{intent-OCZE4O7R.js.map → intent-4QVVI4FF.js.map} +0 -0
- /package/dist/{job-XMPQ27SJ.js.map → job-CGQHEANB.js.map} +0 -0
- /package/dist/{job-create-HTDQHPEF.js.map → job-create-SZYJT2NC.js.map} +0 -0
- /package/dist/{job-status-L7WUTZ2C.js.map → job-status-6LAKLCKH.js.map} +0 -0
- /package/dist/{keep-42SLV4CR.js.map → keep-3MJSHWU3.js.map} +0 -0
- /package/dist/{keyword-gap-323NE4AK.js.map → keyword-gap-YMMDRYVK.js.map} +0 -0
- /package/dist/{keyword-metrics-V6DGO7U5.js.map → keyword-metrics-FB7FCYK6.js.map} +0 -0
- /package/dist/{keywords-for-site-ANSLXBHB.js.map → keywords-for-site-YZYALONY.js.map} +0 -0
- /package/dist/{landing-K25GUBLZ.js.map → landing-XOCPIOWX.js.map} +0 -0
- /package/dist/{landings-5IYXHA5Z.js.map → landings-ZLKUP66P.js.map} +0 -0
- /package/dist/{languages-SRFGW6Z3.js.map → languages-3IJVDS5Z.js.map} +0 -0
- /package/dist/{languages-US6JUATO.js.map → languages-R3Y2IOFU.js.map} +0 -0
- /package/dist/{logo-4JOWGJ5A.js.map → launches-RG2SWEXM.js.map} +0 -0
- /package/dist/{layerize-U672AXED.js.map → layerize-SJYK6HPD.js.map} +0 -0
- /package/dist/{leads-MXUQISOC.js.map → leads-2XOSAYP4.js.map} +0 -0
- /package/dist/{leads-UJVKPRXX.js.map → leads-SWINPYEP.js.map} +0 -0
- /package/dist/{lighthouse-SJ4QNLUS.js.map → lighthouse-FALRSVQH.js.map} +0 -0
- /package/dist/{line-item-writes-NURRHJ7P.js.map → line-item-writes-FG3TY4W4.js.map} +0 -0
- /package/dist/{line-items-PC6QWV5J.js.map → line-items-ZNVBFA4H.js.map} +0 -0
- /package/dist/{link-ZSXKCLQD.js.map → link-IFEXIUDW.js.map} +0 -0
- /package/dist/{list-GQ65MC2N.js.map → list-2ZTOMTES.js.map} +0 -0
- /package/dist/{list-Q5ZZRPHO.js.map → list-FR2OVRVL.js.map} +0 -0
- /package/dist/{list-M4Z3WYPM.js.map → list-GK6LNWIW.js.map} +0 -0
- /package/dist/{list-ECF3RA26.js.map → list-K65FY6SV.js.map} +0 -0
- /package/dist/{list-SXYVDDMU.js.map → list-RR53EF3O.js.map} +0 -0
- /package/dist/{list-XFIOXFB2.js.map → list-TB677Q2F.js.map} +0 -0
- /package/dist/{list-K56J7FZW.js.map → list-VTVRZIYL.js.map} +0 -0
- /package/dist/{locations-LZUHWKZY.js.map → locations-6IH7WGRG.js.map} +0 -0
- /package/dist/{locations-NG4YXIBT.js.map → locations-VL2G22Y5.js.map} +0 -0
- /package/dist/{log-EEBJQ6X2.js.map → log-TAKCMC2C.js.map} +0 -0
- /package/dist/{lookup-7NBZ64TE.js.map → logo-YSNUUT33.js.map} +0 -0
- /package/dist/{output-ZL62UZHQ.js.map → lookup-RH5N3OWJ.js.map} +0 -0
- /package/dist/{mcp-DAKGMA2Z.js.map → mcp-NNQZ5B7N.js.map} +0 -0
- /package/dist/{media-2SWDJDA6.js.map → media-ES2UBGYW.js.map} +0 -0
- /package/dist/{media-R64YP7T2.js.map → media-MPXEXN4O.js.map} +0 -0
- /package/dist/{media-sources-L2X3KRDU.js.map → media-sources-OAFBA62X.js.map} +0 -0
- /package/dist/{members-22BOEGQS.js.map → members-SS7IBYVE.js.map} +0 -0
- /package/dist/{meta-RBHF2RG3.js.map → meta-AOIPEDV5.js.map} +0 -0
- /package/dist/{metrics-IXRQZVSM.js.map → metrics-YLAREC4T.js.map} +0 -0
- /package/dist/{models-BDXZ56GI.js.map → models-IH6KE6OH.js.map} +0 -0
- /package/dist/{normalize-P5Q3F7FU.js.map → normalize-NR5RS3WR.js.map} +0 -0
- /package/dist/{normalize-JAE3NVOX.js.map → normalize-WOZTAI6C.js.map} +0 -0
- /package/dist/{performance-FOOV624A.js.map → output-GWIP6ROX.js.map} +0 -0
- /package/dist/{page-FZ7IZ5CV.js.map → page-YWGBCN65.js.map} +0 -0
- /package/dist/{pages-SS7TZTHV.js.map → pages-FTI44OSH.js.map} +0 -0
- /package/dist/{query-XISUHMBR.js.map → performance-WRARV3YR.js.map} +0 -0
- /package/dist/{pinterest-UETS7U7U.js.map → pinterest-J442QLQS.js.map} +0 -0
- /package/dist/{pixels-MPZYWGFD.js.map → pixels-DWW2TDY2.js.map} +0 -0
- /package/dist/{pixels-LCTMLKGP.js.map → pixels-MBKR4XPX.js.map} +0 -0
- /package/dist/{plan-V74EVXTW.js.map → plan-YPE77T4R.js.map} +0 -0
- /package/dist/{preview-RU54Z4EM.js.map → preview-V4YBD45S.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-FQRFU7PB.js.map → promoted-tweet-writes-CAD3RGU4.js.map} +0 -0
- /package/dist/{promoted-tweets-L2L3V5SF.js.map → promoted-tweets-NYJP3TXL.js.map} +0 -0
- /package/dist/{properties-ZUDQH3LE.js.map → properties-G3L2OAOL.js.map} +0 -0
- /package/dist/{reddit-BCB4FT6J.js.map → query-QRPBV2AR.js.map} +0 -0
- /package/dist/{query-26T7XATH.js.map → query-WCB5W4NW.js.map} +0 -0
- /package/dist/{query-SHUOHXTO.js.map → query-YBS6ZQ75.js.map} +0 -0
- /package/dist/{questionnaire-UG55JLVW.js.map → questionnaire-PAK4DALP.js.map} +0 -0
- /package/dist/{read-UYSQAXRV.js.map → read-LUTB3UOR.js.map} +0 -0
- /package/dist/{run-TA3DP6QG.js.map → reddit-VJTNXORD.js.map} +0 -0
- /package/dist/{refresh-WY5NPNLX.js.map → refresh-6I52WXG5.js.map} +0 -0
- /package/dist/{release-JBSPPNQE.js.map → release-LSSYP2ZJ.js.map} +0 -0
- /package/dist/{relevant-pages-OU5H56KY.js.map → relevant-pages-2XHS5WP4.js.map} +0 -0
- /package/dist/{remove-M5P7M5JU.js.map → remove-K62YJYGT.js.map} +0 -0
- /package/dist/{remove-2KACTXKP.js.map → remove-X6DNVS67.js.map} +0 -0
- /package/dist/{reopen-J3VW5766.js.map → reopen-RPVEBQVR.js.map} +0 -0
- /package/dist/{research-7LBTJ2B2.js.map → research-4ASN2KMB.js.map} +0 -0
- /package/dist/{research-4CAA5CA2.js.map → research-6J3EOBAL.js.map} +0 -0
- /package/dist/{reset-DJSSXC4Y.js.map → reset-ETORO5UO.js.map} +0 -0
- /package/dist/{reset-DBWWGCXY.js.map → reset-YVTYHSTY.js.map} +0 -0
- /package/dist/{resolve-BNRUYS56.js.map → resolve-BI7GB5U2.js.map} +0 -0
- /package/dist/{retry-TMRIFGVT.js.map → retry-2ZZCKSRW.js.map} +0 -0
- /package/dist/{retry-WRBGLB7O.js.map → retry-QZ7YHXF3.js.map} +0 -0
- /package/dist/{retry-failed-NWLH6WHK.js.map → retry-failed-EJBP4236.js.map} +0 -0
- /package/dist/{search-4HIOKYFR.js.map → run-FFASB4YB.js.map} +0 -0
- /package/dist/{schedule-BQQGYGT7.js.map → schedule-4BK2ML6F.js.map} +0 -0
- /package/dist/{schedule-S547HPUT.js.map → schedule-IDZC6M32.js.map} +0 -0
- /package/dist/{schema-DDEWM5ZX.js.map → schema-QPPWADIL.js.map} +0 -0
- /package/dist/{scrape-TI6S2W7I.js.map → scrape-J2Y7YZ4Z.js.map} +0 -0
- /package/dist/{screenshot-XFAYY4WW.js.map → screenshot-K7ZGTVTE.js.map} +0 -0
- /package/dist/{search-D2IV7KFJ.js.map → search-CI7LEOOK.js.map} +0 -0
- /package/dist/{search-VJBKRD2U.js.map → search-GCSQ6CSD.js.map} +0 -0
- /package/dist/{search-IZPDHRJ4.js.map → search-I6DRUXBX.js.map} +0 -0
- /package/dist/{shared-3CGGKICB.js.map → search-TTL7VQET.js.map} +0 -0
- /package/dist/{search-KFDL2IGG.js.map → search-VT2KUAH6.js.map} +0 -0
- /package/dist/{search-copy-QZXCAGK4.js.map → search-copy-N2AIJNUH.js.map} +0 -0
- /package/dist/{seeds-VUNZMHZH.js.map → seeds-EYYQCMGF.js.map} +0 -0
- /package/dist/{sends-7HWLIOUO.js.map → sends-RHVFV2XM.js.map} +0 -0
- /package/dist/{sequences-5RAGZE7L.js.map → sequences-5DUWNSWQ.js.map} +0 -0
- /package/dist/{setup-links-SPIGXQTY.js.map → setup-links-C3EUV2RX.js.map} +0 -0
- /package/dist/{sync-definition-DYSVT7BJ.js.map → shared-NDRFKAH7.js.map} +0 -0
- /package/dist/{site-FW6K6L6M.js.map → site-W5W7FCUD.js.map} +0 -0
- /package/dist/{sitemaps-3WDYQHYR.js.map → sitemaps-QKKXMXMV.js.map} +0 -0
- /package/dist/{sites-G4DQ2Z2X.js.map → sites-GRC6CCCK.js.map} +0 -0
- /package/dist/{skills-PA26HXEP.js.map → skills-UML6GSW6.js.map} +0 -0
- /package/dist/{sources-PMBWG4KO.js.map → sources-SGGLJIOA.js.map} +0 -0
- /package/dist/{stats-Q35I5DRW.js.map → stats-RCLQE4HJ.js.map} +0 -0
- /package/dist/{status-62SUXUWW.js.map → status-KUSLGZD7.js.map} +0 -0
- /package/dist/{sticker-MC2IAIQB.js.map → sticker-SINY47WT.js.map} +0 -0
- /package/dist/{stock-B7LKMKUK.js.map → stock-ECRBD7RP.js.map} +0 -0
- /package/dist/{studio-BB2EVW5I.js.map → studio-LMDDQWRY.js.map} +0 -0
- /package/dist/{sync-CLZDZL5F.js.map → sync-2MFUI3ME.js.map} +0 -0
- /package/dist/{sync-YTHNOAAM.js.map → sync-TCY4NX7J.js.map} +0 -0
- /package/dist/{viewer-check-HIMNCZGY.js.map → sync-definition-DGSAZGQZ.js.map} +0 -0
- /package/dist/{tag-manager-EAREWVYR.js.map → tag-manager-G3LBQZUL.js.map} +0 -0
- /package/dist/{tags-53AG3FYG.js.map → tags-IHLO2NDM.js.map} +0 -0
- /package/dist/{tags-7TH7TVR6.js.map → tags-QQLYW2QQ.js.map} +0 -0
- /package/dist/{tags-EUEWDTTN.js.map → tags-QXRKKRIR.js.map} +0 -0
- /package/dist/{tags-EB4RE3ML.js.map → tags-U5YWCPFW.js.map} +0 -0
- /package/dist/{tags-ICAWBCOR.js.map → tags-ZYVOKGHU.js.map} +0 -0
- /package/dist/{targeting-constants-IFE72XKL.js.map → targeting-constants-KEKYU5JQ.js.map} +0 -0
- /package/dist/{targeting-criteria-WZDGJKOI.js.map → targeting-criteria-AEBSY6OY.js.map} +0 -0
- /package/dist/{testimonials-THHR5JH5.js.map → testimonials-O52ULRAU.js.map} +0 -0
- /package/dist/{themes-ZFRM6AVO.js.map → themes-26XFWSWC.js.map} +0 -0
- /package/dist/{top-companies-63Q475IA.js.map → top-companies-OMGAFFWN.js.map} +0 -0
- /package/dist/{tweets-7EZRFG3Y.js.map → tweets-C3QUKS3I.js.map} +0 -0
- /package/dist/{unfollow-WBBTVEHE.js.map → unfollow-ZI5QU7RD.js.map} +0 -0
- /package/dist/{unlink-P7KU54YU.js.map → unlink-3BAXM2OH.js.map} +0 -0
- /package/dist/{unstage-GHXGDOT2.js.map → unstage-7F7JI6HY.js.map} +0 -0
- /package/dist/{update-7EWDO32L.js.map → update-2RCIXWP3.js.map} +0 -0
- /package/dist/{update-KVMQOVQK.js.map → update-5A7Q7S6I.js.map} +0 -0
- /package/dist/{upload-NA62W5RS.js.map → upload-KO46L76G.js.map} +0 -0
- /package/dist/{upload-6PYPHPCZ.js.map → upload-Y3TACPEN.js.map} +0 -0
- /package/dist/{upscale-RXJUBHXN.js.map → upscale-SJ7SCSRS.js.map} +0 -0
- /package/dist/{url-options-EUDXLDBD.js.map → url-options-6CNDIUDM.js.map} +0 -0
- /package/dist/{url-params-DBJSM2LP.js.map → url-params-ZUYOLAJG.js.map} +0 -0
- /package/dist/{use-MHPNS4V4.js.map → use-6ULEM3WE.js.map} +0 -0
- /package/dist/{variant-ZFCWILPG.js.map → variant-5TRRSYBB.js.map} +0 -0
- /package/dist/{videos-DUG7JYUA.js.map → videos-EFMNE6U2.js.map} +0 -0
- /package/dist/{view-PYCGDGT2.js.map → view-ABSWZMXW.js.map} +0 -0
- /package/dist/{web-SDG42OBC.js.map → web-4JGYRY36.js.map} +0 -0
- /package/dist/{winners-AI4PVSOI.js.map → winners-KRISBKOR.js.map} +0 -0
- /package/dist/{winning-ads-KGAYAIPG.js.map → winning-ads-6SXA4HGB.js.map} +0 -0
- /package/dist/{write-commands-5TJ3LQ5F.js.map → write-commands-HCQI4Y27.js.map} +0 -0
- /package/dist/{write-commands-OYMWOFEY.js.map → write-commands-LQXKNBA5.js.map} +0 -0
- /package/dist/{write-commands-R3UCCBUI.js.map → write-commands-QCI6XBM7.js.map} +0 -0
- /package/dist/{write-commands-34L5LJIB.js.map → write-commands-RHCCPMAE.js.map} +0 -0
- /package/dist/{x-VNRVGVLI.js.map → x-LUEUC3XO.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/viewer-profile.ts"],"sourcesContent":["import { asRecord } from \"./commands/ads/list-rows.ts\";\n\n/**\n * Who will see an ad, read off what the ad set actually targets rather than what\n * anyone hopes it targets — or, with no ad set, off the Knowledge and the brief.\n * `baker ads meta adsets --audience` prints it; a creative records it in its\n * `_definition.md` (`viewer`), and the viewer check plays it.\n */\n\nexport const VIEWER_TEMPERATURE_VALUES = [\"cold\", \"warm\", \"hot\"] as const;\nexport const VIEWER_KNOWS_VALUES = [\"brand\", \"offer\", \"product\"] as const;\nexport const VIEWER_SOURCE_VALUES = [\"targeting\", \"knowledge\"] as const;\n\nexport type ViewerTemperature = (typeof VIEWER_TEMPERATURE_VALUES)[number];\nexport type ViewerKnows = (typeof VIEWER_KNOWS_VALUES)[number];\n\n/**\n * Where the viewer lives and how they are spoken to (D1): the country (`global` for a version\n * that runs in several), the language variant, the currency and the form of address.\n */\nexport interface ViewerMarket {\n country: string;\n language?: string;\n currency?: string;\n address?: string;\n}\n\nexport interface ViewerProfile {\n temperature: ViewerTemperature;\n knows: ViewerKnows[];\n placements: string[];\n source: (typeof VIEWER_SOURCE_VALUES)[number];\n reasons: string[];\n /** Where they live: read off the ad set's countries, else COMPANY.md. */\n market?: ViewerMarket;\n}\n\ntype MarketFacts = {\n name: string;\n names: RegExp;\n language: string;\n languageName: string;\n currency: string;\n address: string;\n};\n\n/** The markets our ads run in, with how an ad speaks there. A country not listed keeps its code alone. */\nconst MARKETS: Readonly<Record<string, MarketFacts>> = {\n ES: {\n name: \"Spain\",\n names: /(?<![\\p{L}\\d])(spain|españa|espana)(?![\\p{L}\\d])/iu,\n language: \"es-ES\",\n languageName: \"Spanish from Spain\",\n currency: \"EUR\",\n address: \"tú\",\n },\n MX: {\n name: \"Mexico\",\n names: /(?<![\\p{L}\\d])(mexico|méxico)(?![\\p{L}\\d])/iu,\n language: \"es-MX\",\n languageName: \"Mexican Spanish\",\n currency: \"MXN\",\n address: \"tú\",\n },\n AR: {\n name: \"Argentina\",\n names: /(?<![\\p{L}\\d])(argentina)(?![\\p{L}\\d])/iu,\n language: \"es-AR\",\n languageName: \"Argentinian Spanish\",\n currency: \"ARS\",\n address: \"vos\",\n },\n CO: {\n name: \"Colombia\",\n names: /(?<![\\p{L}\\d])(colombia)(?![\\p{L}\\d])/iu,\n language: \"es-CO\",\n languageName: \"Colombian Spanish\",\n currency: \"COP\",\n address: \"tú\",\n },\n CL: {\n name: \"Chile\",\n names: /(?<![\\p{L}\\d])(chile)(?![\\p{L}\\d])/iu,\n language: \"es-CL\",\n languageName: \"Chilean Spanish\",\n currency: \"CLP\",\n address: \"tú\",\n },\n PE: {\n name: \"Peru\",\n names: /(?<![\\p{L}\\d])(peru|perú)(?![\\p{L}\\d])/iu,\n language: \"es-PE\",\n languageName: \"Peruvian Spanish\",\n currency: \"PEN\",\n address: \"tú\",\n },\n BR: {\n name: \"Brazil\",\n names: /(?<![\\p{L}\\d])(brazil|brasil)(?![\\p{L}\\d])/iu,\n language: \"pt-BR\",\n languageName: \"Brazilian Portuguese\",\n currency: \"BRL\",\n address: \"você\",\n },\n PT: {\n name: \"Portugal\",\n names: /(?<![\\p{L}\\d])(portugal)(?![\\p{L}\\d])/iu,\n language: \"pt-PT\",\n languageName: \"European Portuguese\",\n currency: \"EUR\",\n address: \"tu\",\n },\n GB: {\n name: \"the United Kingdom\",\n names: /(?<![\\p{L}\\d])(united kingdom|uk|britain|england)(?![\\p{L}\\d])/iu,\n language: \"en-GB\",\n languageName: \"British English\",\n currency: \"GBP\",\n address: \"you\",\n },\n IE: {\n name: \"Ireland\",\n names: /(?<![\\p{L}\\d])(ireland)(?![\\p{L}\\d])/iu,\n language: \"en-IE\",\n languageName: \"Irish English\",\n currency: \"EUR\",\n address: \"you\",\n },\n US: {\n name: \"the United States\",\n names: /(?<![\\p{L}\\d])(united states|usa|u\\.s\\.)(?![\\p{L}\\d])/iu,\n language: \"en-US\",\n languageName: \"American English\",\n currency: \"USD\",\n address: \"you\",\n },\n DE: {\n name: \"Germany\",\n names: /(?<![\\p{L}\\d])(germany|deutschland)(?![\\p{L}\\d])/iu,\n language: \"de-DE\",\n languageName: \"German\",\n currency: \"EUR\",\n address: \"du\",\n },\n FR: {\n name: \"France\",\n names: /(?<![\\p{L}\\d])(france)(?![\\p{L}\\d])/iu,\n language: \"fr-FR\",\n languageName: \"French\",\n currency: \"EUR\",\n address: \"vous\",\n },\n IT: {\n name: \"Italy\",\n names: /(?<![\\p{L}\\d])(italy|italia)(?![\\p{L}\\d])/iu,\n language: \"it-IT\",\n languageName: \"Italian\",\n currency: \"EUR\",\n address: \"tu\",\n },\n};\n\n/**\n * The market an ad set's countries make: one country is its own market; several are one global\n * version in the campaign's language, with market-neutral people, places and money. Pure.\n */\nexport function marketOfCountries(countries: readonly string[]): ViewerMarket | undefined {\n const codes = [...new Set(countries.map((c) => c.trim().toUpperCase()).filter(Boolean))];\n if (codes.length === 0) return undefined;\n if (codes.length > 1) return { country: \"global\" };\n const code = codes[0] as string;\n const facts = MARKETS[code];\n return facts\n ? { country: code, language: facts.language, currency: facts.currency, address: facts.address }\n : { country: code };\n}\n\n/** The market COMPANY.md names on its first market or geography line that names a country. Pure. */\nexport function marketFromCompanyDoc(doc: string | null | undefined): ViewerMarket | undefined {\n const marketLine =\n /(?<![\\p{L}\\d])(markets?|geo|geograph\\w*|country|countries|país|paises|países|mercados?|marchés?|pays|\\w*markt|mercato|mercati|paese)(?![\\p{L}\\d])/iu;\n for (const line of (doc ?? \"\").split(\"\\n\")) {\n if (!marketLine.test(line)) continue;\n const found = Object.entries(MARKETS)\n .filter(([, facts]) => facts.names.test(line))\n .map(([code]) => code);\n const market = marketOfCountries(found);\n if (market) return market;\n }\n return undefined;\n}\n\n/** The market in the viewer's own terms, for a model that plays them. Pure. */\nexport function describeMarket(market: ViewerMarket): string {\n if (market.country === \"global\") return \"a person in any of the countries the ad runs in\";\n const facts = MARKETS[market.country];\n const where = facts?.name ?? market.country;\n const language = facts && market.language === facts.language ? facts.languageName : market.language;\n return [\n `a person living in ${where}`,\n language ? ` who reads ${language} natively` : \"\",\n market.currency ? `, pays in ${market.currency}` : \"\",\n market.address ? ` and is spoken to as ${market.address}` : \"\",\n ].join(\"\");\n}\n\n/** The country a market names, in words (\"Mexico\"); null for a global version. */\nexport function marketCountryName(market: ViewerMarket): string | null {\n return market.country === \"global\" ? null : (MARKETS[market.country]?.name ?? market.country);\n}\n\nexport interface AdSetTargetingInput {\n targeting?: unknown;\n}\n\nexport interface CustomAudienceInput {\n id?: unknown;\n name?: unknown;\n subtype?: unknown;\n}\n\nexport interface CampaignInput {\n objective?: unknown;\n}\n\nfunction text(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\n/** The `{ id, name }` entries of a targeting list such as `custom_audiences`. */\nfunction audienceRefs(value: unknown): Array<{ id: string; name: string }> {\n if (!Array.isArray(value)) return [];\n return value.flatMap((entry) => {\n const ref = asRecord(entry);\n const id = text(ref?.id);\n return id ? [{ id, name: text(ref?.name) }] : [];\n });\n}\n\n/** What one custom audience's members have already been through with the brand. */\ninterface AudienceTier {\n temperature: ViewerTemperature;\n knows: ViewerKnows[];\n}\n\ninterface AudienceRead extends AudienceTier {\n /** Who its members are, in the words a reason prints. */\n who: string;\n}\n\n/**\n * What an audience's NAME says its members are, as the decision model read it in the advertiser's\n * own language (`audience-names.ts`). A pixel or event audience's subtype says where its members\n * came from, not what they did: \"Purchasers 180d\" and \"All visitors 30d\" are both WEBSITE, and\n * the name is the one place an account records the event. Undefined when the name was not read.\n */\nexport type AudienceNameReading = (name: string) => { buyers: boolean; lookalike: boolean } | undefined;\n\nconst COLD: AudienceTier = { temperature: \"cold\", knows: [] };\n\nfunction tierOf(\n audience: CustomAudienceInput | undefined,\n ref: { name: string },\n readName: AudienceNameReading | undefined,\n): AudienceRead {\n const subtype = text(audience?.subtype).toUpperCase();\n const name = text(audience?.name) || ref.name;\n const read = readName?.(name);\n // Meta names a lookalike after its seed (\"Lookalike (GB, 1%) - Purchasers\"), so it is ruled out before the name is read.\n if (subtype === \"LOOKALIKE\" || (!subtype && read?.lookalike)) {\n return { ...COLD, who: \"a lookalike: strangers who resemble the seed\" };\n }\n if (read?.buyers) return { temperature: \"hot\", knows: [\"brand\", \"offer\", \"product\"], who: \"buyers\" };\n if (subtype === \"WEBSITE\") return { temperature: \"warm\", knows: [\"brand\", \"offer\"], who: \"site visitors\" };\n if (subtype === \"CUSTOM\") {\n return { temperature: \"hot\", knows: [\"brand\", \"offer\", \"product\"], who: \"an uploaded customer list\" };\n }\n // Every other custom audience is people who met the brand somewhere: a Page, a profile, a video, the app.\n return { temperature: \"warm\", knows: [\"brand\"], who: \"people who engaged with the brand\" };\n}\n\nexport function classifyAudience(\n adSet: AdSetTargetingInput,\n audiences: readonly CustomAudienceInput[],\n campaign: CampaignInput | undefined,\n readName?: AudienceNameReading,\n): ViewerProfile {\n const targeting = asRecord(adSet.targeting) ?? {};\n const byId = new Map(audiences.map((audience) => [text(audience.id), audience]));\n const includedRefs = audienceRefs(targeting.custom_audiences);\n const included = includedRefs.map((ref) => tierOf(byId.get(ref.id), ref, readName));\n const reasons: string[] = [\n includedRefs.length === 0\n ? \"No custom audience: Meta finds new people from age, place and interests, so every viewer is a stranger.\"\n : `Reaches ${includedRefs.map((ref, i) => `\"${ref.name || ref.id}\" (${included[i]?.who})`).join(\", \")}.`,\n ];\n const unlisted = includedRefs.filter((ref) => !byId.has(ref.id));\n if (unlisted.length > 0) {\n reasons.push(`${quoteNames(unlisted)} is not in this account's audience list, so it was read from its name alone.`);\n }\n let reached = coldestOf(included);\n if (asRecord(targeting.targeting_automation)?.advantage_audience === 1 && included.length > 0) {\n reached = belowHot(reached);\n reasons.push(\n \"Advantage+ audience treats the chosen audiences as suggestions and reaches past them, so part of the delivery goes to people who have never bought.\",\n );\n }\n const excludedRefs = audienceRefs(targeting.excluded_custom_audiences);\n if (excludedRefs.length > 0) reasons.push(`Keeps out ${quoteNames(excludedRefs)}.`);\n if (excludedRefs.some((ref) => tierOf(byId.get(ref.id), ref, readName).temperature === \"hot\")) {\n reached = belowHot(reached);\n reasons.push(\"Buyers are excluded, so nobody reached has used the product.\");\n }\n const objective = text(campaign?.objective);\n if (reached.temperature === \"cold\" && ASKS_TO_ACT.test(objective)) {\n reasons.push(\n `Campaign objective ${objective} asks a stranger to act on first contact, so the ad alone must say what is offered and to whom.`,\n );\n }\n const countries = strings(asRecord(targeting.geo_locations)?.countries);\n const market = marketOfCountries(countries);\n if (market?.country === \"global\") {\n reasons.push(\n `Runs in ${countries.join(\", \")}: one version for every market, with no country's places, money or faces.`,\n );\n }\n const placements = placementsOf(targeting);\n if (placements.length === 0) {\n reasons.push(\n \"Advantage+ placements: Meta picks the surface, so the ad must also work full-screen in Stories and Reels, not only in the feed.\",\n );\n }\n return {\n temperature: reached.temperature,\n knows: reached.knows,\n placements: placements.length > 0 ? placements : [\"automatic\"],\n source: \"targeting\",\n reasons,\n ...(market ? { market } : {}),\n };\n}\n\n/**\n * The objective says what the campaign wants from a viewer, never who the viewer is:\n * a conversion campaign on broad targeting still meets strangers. So it adds a reason\n * and never moves the temperature.\n */\nconst ASKS_TO_ACT =\n /^(OUTCOME_SALES|OUTCOME_LEADS|OUTCOME_APP_PROMOTION|CONVERSIONS|LEAD_GENERATION|PRODUCT_CATALOG_SALES)$/;\n\nfunction strings(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n}\n\n/**\n * `instagram_positions` calls the feed `stream` and Facebook's Reels are already\n * `facebook_reels`; one `<platform>_<surface>` spelling reads the same for both.\n */\nfunction placementsOf(targeting: Record<string, unknown>): string[] {\n return strings(targeting.publisher_platforms).flatMap((platform) => {\n const positions = strings(targeting[`${platform}_positions`]);\n // A platform with no positions of its own is every surface on it.\n if (positions.length === 0) return [platform];\n return positions.map((position) => {\n const surface = platform === \"instagram\" && position === \"stream\" ? \"feed\" : position;\n return surface.startsWith(`${platform}_`) ? surface : `${platform}_${surface}`;\n });\n });\n}\n\nfunction quoteNames(refs: ReadonlyArray<{ id: string; name: string }>): string {\n return refs.map((ref) => `\"${ref.name || ref.id}\"`).join(\", \");\n}\n\n/** Only buyers know the product itself; anyone short of that knows at most the brand and its offer. */\nfunction belowHot(tier: AudienceTier): AudienceTier {\n if (tier.temperature !== \"hot\") return tier;\n return { temperature: \"warm\", knows: tier.knows.filter((known) => known !== \"product\") };\n}\n\nconst WARMTH: Record<ViewerTemperature, number> = { cold: 0, warm: 1, hot: 2 };\n\n/**\n * Meta delivers to anyone in ANY included audience, so the ad has to work on the\n * coldest of them, and it can only lean on what every one of them already knows.\n */\nfunction coldestOf(tiers: readonly AudienceTier[]): AudienceTier {\n const [first, ...rest] = tiers;\n if (!first) return COLD;\n return rest.reduce<AudienceTier>(\n (acc, tier) => ({\n temperature: WARMTH[tier.temperature] < WARMTH[acc.temperature] ? tier.temperature : acc.temperature,\n knows: acc.knows.filter((known) => tier.knows.includes(known)),\n }),\n first,\n );\n}\n\n/** The awareness stages a creative's `awareness` field takes (the scaffold `creatives` collection). */\nexport const AWARENESS_VALUES = [\"unaware\", \"problem_aware\", \"solution_aware\", \"product_aware\", \"most_aware\"] as const;\n\nexport type Awareness = (typeof AWARENESS_VALUES)[number];\n\n/** Until a viewer is aware of the product, they know nothing of the brand behind it either. */\nconst BY_AWARENESS: Record<Awareness, AudienceTier> = {\n unaware: COLD,\n problem_aware: COLD,\n solution_aware: COLD,\n product_aware: { temperature: \"warm\", knows: [\"brand\", \"offer\"] },\n most_aware: { temperature: \"hot\", knows: [\"brand\", \"offer\", \"product\"] },\n};\n\n/**\n * A persona segment says what the viewer already did with the brand only when it is\n * defined by it (\"Existing customers up for renewal\", \"Leads who went quiet\"). Phrases,\n * not words: \"Marketing leads at SaaS firms\" are job titles, not leads.\n */\nconst CUSTOMER_SEGMENT =\n /\\b(existing|current|past|former|returning|repeat)\\s+(customers?|clients?|buyers?|members?|subscribers?|users?)\\b|\\bclientes\\s+(actuales|existentes)\\b|\\bantiguos\\s+clientes\\b/i;\nconst CONTACT_SEGMENT =\n /\\b(leads?|prospects?)\\s+(who|that)\\b|\\b(site|website|web)\\s+visitors\\b|\\babandon(ed|s)?\\s+(carts?|checkouts?|forms?)\\b|\\btrial\\s+users\\b|\\bvisitantes\\b/i;\n\nfunction tierOfSegment(segment: string): AudienceTier | undefined {\n if (CUSTOMER_SEGMENT.test(segment)) return { temperature: \"hot\", knows: [\"brand\", \"offer\", \"product\"] };\n if (CONTACT_SEGMENT.test(segment)) return { temperature: \"warm\", knows: [\"brand\", \"offer\"] };\n return undefined;\n}\n\nexport interface KnowledgeViewerInput {\n /** The segment line (frontmatter `segment`, else the title) of each persona the ad is for. */\n personas: readonly string[];\n /** The awareness stage the concept was written for, when the brief set one. */\n awareness?: Awareness;\n}\n\n/**\n * The viewer when there is no ad set to read. The Knowledge describes who a persona\n * is, almost never what they already know about the brand, so the stranger is the\n * default and only an explicit signal warms it.\n */\nexport function viewerFromKnowledge(input: KnowledgeViewerInput): ViewerProfile {\n const reasons = [\"No ad set to read, so this viewer comes from the Knowledge and the brief, not from targeting.\"];\n let tier = COLD;\n if (input.awareness) {\n tier = BY_AWARENESS[input.awareness];\n reasons.push(`The concept is written for a ${input.awareness.replace(\"_\", \"-\")} viewer.`);\n } else {\n const warmed = input.personas.flatMap((segment) => {\n const read = tierOfSegment(segment);\n return read ? [{ segment, read }] : [];\n });\n if (warmed.length > 0 && warmed.length === input.personas.length) {\n tier = coldestOf(warmed.map((entry) => entry.read));\n reasons.push(\n `The persona is defined by what they already did with the brand: ${warmed.map((entry) => `\"${entry.segment}\"`).join(\", \")}.`,\n );\n } else {\n reasons.push(\"Nothing on file says the viewer knows the brand: design for a stranger.\");\n }\n }\n return { temperature: tier.temperature, knows: tier.knows, placements: [\"automatic\"], source: \"knowledge\", reasons };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BRAND_DIR,
|
|
3
|
+
inkLuma,
|
|
4
|
+
logoArtwork
|
|
5
|
+
} from "./chunk-QTLZXIF3.js";
|
|
6
|
+
import {
|
|
7
|
+
fetchExternalBytes
|
|
8
|
+
} from "./chunk-BLAHHMPF.js";
|
|
9
|
+
import {
|
|
10
|
+
apiGet,
|
|
11
|
+
apiPost
|
|
12
|
+
} from "./chunk-XDZVBX6L.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/canvas/clientLogo.ts
|
|
15
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
16
|
+
import * as cheerio from "cheerio";
|
|
17
|
+
import path from "path";
|
|
18
|
+
function decideClientLogo(domain, lookup) {
|
|
19
|
+
if (!domain) return { use: false, reason: "no_domain" };
|
|
20
|
+
const verdict = lookup?.brandMatch?.verdict;
|
|
21
|
+
if (verdict === "mismatch") {
|
|
22
|
+
return { use: false, reason: "mismatch", ...lookup?.brandMatch?.name ? { wrongBrand: lookup.brandMatch.name } : {} };
|
|
23
|
+
}
|
|
24
|
+
if (verdict !== "confirmed") return { use: false, reason: "unverified" };
|
|
25
|
+
const url = lookup?.hits?.map((hit) => hit.imageUrl ?? hit.sourceUrl).find((candidate) => Boolean(candidate));
|
|
26
|
+
return url ? { use: true, url } : { use: false, reason: "no_hits" };
|
|
27
|
+
}
|
|
28
|
+
function clientLogoMissNote(decision, domain) {
|
|
29
|
+
switch (decision.reason) {
|
|
30
|
+
case "no_domain":
|
|
31
|
+
return "Baker has no website on record for this company, so their mark could not be looked up.";
|
|
32
|
+
case "mismatch":
|
|
33
|
+
return `The mark found for \`${domain}\` belongs to ${decision.wrongBrand ?? "a different company"}, not to this client, so it was not used.`;
|
|
34
|
+
default:
|
|
35
|
+
return `No brand mark could be confirmed for \`${domain}\`, so nothing was placed.`;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function hostOf(site) {
|
|
39
|
+
try {
|
|
40
|
+
return new URL(/^https?:\/\//i.test(site) ? site : `https://${site}`).hostname.replace(/^www\./i, "").toLowerCase();
|
|
41
|
+
} catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
var NOT_THE_LOGO = /favicon|apple-touch|sprite|(?:^|[/_.-])icons?(?:[/_.-]|$)|client|customer|partner|testimonial|trust|badge|award/i;
|
|
46
|
+
function sayings(hit, url) {
|
|
47
|
+
const meta = hit.providerMeta ?? {};
|
|
48
|
+
const given = ["alt", "class", "id", "title"].map((key) => typeof meta[key] === "string" ? meta[key] : "");
|
|
49
|
+
return [new URL(url).pathname, hit.name ?? "", hit.description ?? "", ...given].join(" ");
|
|
50
|
+
}
|
|
51
|
+
function logoFromExtract(hits, domain) {
|
|
52
|
+
const own = hostOf(domain);
|
|
53
|
+
if (!own) return null;
|
|
54
|
+
const candidates = hits.flatMap((hit) => {
|
|
55
|
+
const url = hit.url ?? hit.imageUrl ?? hit.sourceUrl;
|
|
56
|
+
const host = url ? hostOf(url) : null;
|
|
57
|
+
if (!url || !host || host !== own && !host.endsWith(`.${own}`)) return [];
|
|
58
|
+
const said = sayings(hit, url);
|
|
59
|
+
if (!/logo/i.test(said) || NOT_THE_LOGO.test(said)) return [];
|
|
60
|
+
return [{ url, score: (/\.svg(?:\?|$)/i.test(url) ? 2 : 0) + (/logo/i.test(new URL(url).pathname) ? 1 : 0) }];
|
|
61
|
+
});
|
|
62
|
+
candidates.sort((a, b) => b.score - a.score || a.url.length - b.url.length);
|
|
63
|
+
return candidates[0]?.url ?? null;
|
|
64
|
+
}
|
|
65
|
+
var MAX_INLINE_SVG = 3e5;
|
|
66
|
+
var BRAND_PLACES = "header, nav, [role=banner]";
|
|
67
|
+
var IMAGE_ADDRESS = ["src", "data-src", "data-lazy-src", "data-original"];
|
|
68
|
+
function logoFromPage(html, pageUrl, domain) {
|
|
69
|
+
const own = hostOf(domain);
|
|
70
|
+
if (!own) return null;
|
|
71
|
+
const $ = cheerio.load(html);
|
|
72
|
+
for (const el of $(`${BRAND_PLACES}`).find("img, svg").toArray()) {
|
|
73
|
+
const node = $(el);
|
|
74
|
+
const said = [node, node.closest("a")].flatMap((n) => ["class", "id", "alt", "aria-label", "title"].map((k) => n.attr(k) ?? "")).join(" ");
|
|
75
|
+
if (!/logo/i.test(said) || NOT_THE_LOGO.test(said)) continue;
|
|
76
|
+
if (el.tagName === "svg") {
|
|
77
|
+
const svg = standaloneSvg($, node);
|
|
78
|
+
if (svg) return { kind: "svg", svg };
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const url = IMAGE_ADDRESS.map((k) => node.attr(k)?.trim() ?? "").filter((a) => a !== "" && !a.startsWith("data:")).map((a) => absolute(a, pageUrl)).find((a) => a !== null);
|
|
82
|
+
const host = url ? hostOf(url) : null;
|
|
83
|
+
if (url && host && (host === own || host.endsWith(`.${own}`))) return { kind: "url", url };
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
function absolute(address, base) {
|
|
88
|
+
try {
|
|
89
|
+
const url = new URL(address, base);
|
|
90
|
+
return /^https?:$/.test(url.protocol) ? url.href : null;
|
|
91
|
+
} catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function standaloneSvg($, node) {
|
|
96
|
+
const draws = node.find("path, circle, rect, polygon, polyline, ellipse, line, text").length > 0;
|
|
97
|
+
if (!draws || node.find("use").length > 0) return null;
|
|
98
|
+
const copy = node.clone();
|
|
99
|
+
if (!copy.attr("xmlns")) copy.attr("xmlns", "http://www.w3.org/2000/svg");
|
|
100
|
+
const svg = $.html(copy);
|
|
101
|
+
return svg.length <= MAX_INLINE_SVG ? svg : null;
|
|
102
|
+
}
|
|
103
|
+
function logoTone(inkLuma2) {
|
|
104
|
+
return inkLuma2 !== null && inkLuma2 > 170 ? "dark" : "light";
|
|
105
|
+
}
|
|
106
|
+
function withLogoRegistered(tokensJson, logo) {
|
|
107
|
+
if (tokensJson === null) return null;
|
|
108
|
+
let tokens;
|
|
109
|
+
try {
|
|
110
|
+
tokens = JSON.parse(tokensJson);
|
|
111
|
+
} catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
if (!tokens || typeof tokens !== "object" || Array.isArray(tokens)) return null;
|
|
115
|
+
const doc = tokens;
|
|
116
|
+
const logos = Array.isArray(doc.logos) ? doc.logos : [];
|
|
117
|
+
if (logos.some((l) => l?.path === logo.path)) return null;
|
|
118
|
+
const next = { ...doc, logos: [...logos, { variant: "logo", background: logo.background, path: logo.path }] };
|
|
119
|
+
return `${JSON.stringify(next, null, 2)}
|
|
120
|
+
`;
|
|
121
|
+
}
|
|
122
|
+
function logoMissingHint(company, domain) {
|
|
123
|
+
return `No logo on file for ${company}: add it on the Brand page${domain ? ` (we could not find it on ${domain})` : ""}.`;
|
|
124
|
+
}
|
|
125
|
+
function extensionOf(url) {
|
|
126
|
+
return /\.(svg|png|jpg|jpeg|webp)(?:\?|$)/i.exec(url)?.[1]?.toLowerCase() ?? "svg";
|
|
127
|
+
}
|
|
128
|
+
var MAX_LOGO_BYTES = 3e6;
|
|
129
|
+
async function downloaded(url) {
|
|
130
|
+
try {
|
|
131
|
+
const { buffer } = await fetchExternalBytes(url, { maxBytes: MAX_LOGO_BYTES });
|
|
132
|
+
return buffer.byteLength > 0 ? { bytes: buffer, extension: extensionOf(url) } : null;
|
|
133
|
+
} catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async function logoOnSite(domain) {
|
|
138
|
+
const host = hostOf(domain);
|
|
139
|
+
if (!host) return null;
|
|
140
|
+
const page = `https://${host}/`;
|
|
141
|
+
try {
|
|
142
|
+
const { buffer } = await fetchExternalBytes(page, { maxBytes: MAX_LOGO_BYTES });
|
|
143
|
+
const found = logoFromPage(buffer.toString("utf8"), page, domain);
|
|
144
|
+
if (found?.kind === "svg") return { bytes: Buffer.from(found.svg, "utf8"), extension: "svg" };
|
|
145
|
+
const file = found ? await downloaded(found.url) : null;
|
|
146
|
+
if (file) return file;
|
|
147
|
+
} catch {
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const listed = await apiPost("/api/images/extract", { url: page, limit: 50 });
|
|
151
|
+
const url = logoFromExtract(listed.hits ?? [], domain);
|
|
152
|
+
return url ? await downloaded(url) : null;
|
|
153
|
+
} catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async function logoSource(domain) {
|
|
158
|
+
let lookup = null;
|
|
159
|
+
if (domain) {
|
|
160
|
+
try {
|
|
161
|
+
lookup = await apiPost("/api/images/logo", { domain, variant: "logo", autoIngest: 1 });
|
|
162
|
+
} catch {
|
|
163
|
+
lookup = null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const decision = decideClientLogo(domain, lookup);
|
|
167
|
+
if (decision.use) {
|
|
168
|
+
const file = await downloaded(decision.url);
|
|
169
|
+
if (file) return file;
|
|
170
|
+
}
|
|
171
|
+
if (domain && !(decision.use === false && decision.reason === "mismatch")) {
|
|
172
|
+
const file = await logoOnSite(domain);
|
|
173
|
+
if (file) return file;
|
|
174
|
+
}
|
|
175
|
+
return { note: clientLogoMissNote(decision.use ? { use: false, reason: "no_hits" } : decision, domain) };
|
|
176
|
+
}
|
|
177
|
+
async function inkOf(bytes) {
|
|
178
|
+
try {
|
|
179
|
+
return inkLuma((await logoArtwork(bytes)).data);
|
|
180
|
+
} catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function fetchClientLogo(root = ".") {
|
|
185
|
+
let domain;
|
|
186
|
+
let company;
|
|
187
|
+
try {
|
|
188
|
+
const found = await apiGet("/api/company");
|
|
189
|
+
domain = found.data.domain?.trim() || void 0;
|
|
190
|
+
company = found.data.name;
|
|
191
|
+
} catch {
|
|
192
|
+
domain = void 0;
|
|
193
|
+
}
|
|
194
|
+
const named = { ...domain ? { domain } : {}, ...company ? { company } : {} };
|
|
195
|
+
const source = await logoSource(domain);
|
|
196
|
+
if ("note" in source) return { ok: false, reason: source.note, ...named };
|
|
197
|
+
try {
|
|
198
|
+
const tone = logoTone(await inkOf(source.bytes));
|
|
199
|
+
const dir = path.join(root, BRAND_DIR, "logos");
|
|
200
|
+
await mkdir(dir, { recursive: true });
|
|
201
|
+
const file = path.join(dir, `logo-${tone}.${source.extension}`);
|
|
202
|
+
await writeFile(file, source.bytes);
|
|
203
|
+
await registerLogo(root, path.join(BRAND_DIR, "logos", path.basename(file)), tone);
|
|
204
|
+
return { ok: true, path: file, ...named };
|
|
205
|
+
} catch {
|
|
206
|
+
return { ok: false, reason: clientLogoMissNote({ use: false, reason: "no_hits" }, domain), ...named };
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async function registerLogo(root, relative, background) {
|
|
210
|
+
const tokensPath = path.join(root, BRAND_DIR, "tokens.json");
|
|
211
|
+
const next = withLogoRegistered(await readFile(tokensPath, "utf8").catch(() => null), { path: relative, background });
|
|
212
|
+
if (next !== null) await writeFile(tokensPath, next, "utf8").catch(() => void 0);
|
|
213
|
+
}
|
|
214
|
+
async function withClientLogo(root, kit, reread, fetch = fetchClientLogo) {
|
|
215
|
+
if (kit.logo) return { kit };
|
|
216
|
+
const fetched = await fetch(root).catch(() => null);
|
|
217
|
+
if (fetched?.ok) return { kit: await reread() };
|
|
218
|
+
return { kit, hint: logoMissingHint(fetched?.company ?? "your company", fetched?.domain) };
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export {
|
|
222
|
+
fetchClientLogo,
|
|
223
|
+
withClientLogo
|
|
224
|
+
};
|
|
225
|
+
//# sourceMappingURL=chunk-KXSXZAC2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/canvas/clientLogo.ts"],"sourcesContent":["/**\n * Fetching the client's OWN brand mark when the workspace has none yet.\n *\n * An ad with a person in it and no logo used to stop dead, and the remedy on offer — \"put\n * the client's real mark in src/brand/logos/\" — is not something the agent can do: it has\n * no access to the client's design files. Measured on a real run, that refusal cost nine\n * tool calls and produced nothing: it tried `baker images logo withbaker.com` (OUR domain,\n * not the client's), then an icon library, then `curl`ed an SVG off iconify, then offered\n * to ship the ad unbranded. An earlier run drew a mark by hand; another ran `strings` over\n * the CLI looking for a switch.\n *\n * The mark is fetchable — Brandfetch holds it, keyed by the company's own domain, which\n * Baker has on record and the Runtime could not read until now. So the path from \"no logo\"\n * to \"the client's logo\" is one lookup, not a conversation. It is tried before an ad is\n * built without a mark, which is what happens now when the lookup finds none.\n */\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport * as cheerio from \"cheerio\";\nimport path from \"node:path\";\nimport type { CompanyGetResponse, ImagesExtractResponse, ImagesLogoResponse } from \"@baker/api\";\nimport { apiGet, apiPost } from \"../../client.ts\";\nimport { fetchExternalBytes } from \"../../lib/externalFetch.ts\";\nimport { logoArtwork } from \"../../engine/nodes/local/lib/logo-raster.ts\";\nimport { BRAND_DIR, inkLuma } from \"../../engine/scaffold/ad-brand-source.ts\";\n\n/** Brandfetch's verdict plus the variants it returned, as `baker images logo` reports them. */\nexport type LogoLookup = {\n brandMatch?: { verdict: \"confirmed\" | \"mismatch\" | \"unverified\"; name?: string };\n hits?: ReadonlyArray<{ imageUrl?: string; sourceUrl?: string }>;\n};\n\nexport type LogoDecision =\n | { use: true; url: string }\n | { use: false; reason: \"no_domain\" | \"mismatch\" | \"unverified\" | \"no_hits\"; wrongBrand?: string };\n\n/**\n * Whether a lookup may be placed on the client's ad, unattended.\n *\n * Only `confirmed`. A logo hit carries no content signal — `/domain/<anything>/logo`\n * returns 200 and somebody's wordmark — and `brandMatch` is the only field that separates\n * \"this is their mark\" from \"this is a mark\". On anything else the ad is worth stopping\n * for, because a stand-in ships an ad wearing another company's brand, which is worse than\n * an ad that is late.\n *\n * `confirmed` is a floor and not a ceiling: it says the RECORD matches, not the artwork.\n * That residual risk is why this only ever runs when the alternative is no ad at all.\n */\nexport function decideClientLogo(domain: string | undefined, lookup: LogoLookup | null): LogoDecision {\n if (!domain) return { use: false, reason: \"no_domain\" };\n const verdict = lookup?.brandMatch?.verdict;\n if (verdict === \"mismatch\") {\n return { use: false, reason: \"mismatch\", ...(lookup?.brandMatch?.name ? { wrongBrand: lookup.brandMatch.name } : {}) };\n }\n if (verdict !== \"confirmed\") return { use: false, reason: \"unverified\" };\n const url = lookup?.hits?.map((hit) => hit.imageUrl ?? hit.sourceUrl).find((candidate) => Boolean(candidate));\n return url ? { use: true, url } : { use: false, reason: \"no_hits\" };\n}\n\n/**\n * What the lookup found, for the hint on an ad built without a mark. Never just \"it\n * failed\": a mark that belongs to another company is worth naming, so nobody retries into it.\n */\nexport function clientLogoMissNote(decision: Extract<LogoDecision, { use: false }>, domain?: string): string {\n switch (decision.reason) {\n case \"no_domain\":\n return \"Baker has no website on record for this company, so their mark could not be looked up.\";\n case \"mismatch\":\n return (\n `The mark found for \\`${domain}\\` belongs to ${decision.wrongBrand ?? \"a different company\"}, not to this ` +\n \"client, so it was not used.\"\n );\n default:\n return `No brand mark could be confirmed for \\`${domain}\\`, so nothing was placed.`;\n }\n}\n\n/** An image the company's own site holds, as `baker images extract` reports it. */\ntype ExtractHit = {\n url?: string;\n imageUrl?: string;\n sourceUrl?: string;\n name?: string;\n description?: string;\n providerMeta?: Record<string, unknown>;\n};\n\n/** The host of a website as the company records it (`cubicup.com`, `https://www.cubicup.com/`), without `www.`. */\nfunction hostOf(site: string): string | null {\n try {\n return new URL(/^https?:\\/\\//i.test(site) ? site : `https://${site}`).hostname.replace(/^www\\./i, \"\").toLowerCase();\n } catch {\n return null;\n }\n}\n\n/** Files that hold a favicon, an icon sheet or another company's mark, never the company's logo. */\nconst NOT_THE_LOGO = /favicon|apple-touch|sprite|(?:^|[/_.-])icons?(?:[/_.-]|$)|client|customer|partner|testimonial|trust|badge|award/i;\n\n/** What an image says about itself: its address, name, description, and the alt, class or id the page gave it. */\nfunction sayings(hit: ExtractHit, url: string): string {\n const meta = hit.providerMeta ?? {};\n const given = [\"alt\", \"class\", \"id\", \"title\"].map((key) => (typeof meta[key] === \"string\" ? meta[key] : \"\"));\n return [new URL(url).pathname, hit.name ?? \"\", hit.description ?? \"\", ...given].join(\" \");\n}\n\n/**\n * The company's own logo among the images its website holds (`baker images extract https://<domain>`):\n * an image served from its own domain that says it is a logo, in its address, name or the alt, class\n * or id the page gave it, a vector first and the shortest address among equals. Another company's\n * mark, a favicon or a logo hosted elsewhere is never taken: a wrong mark is worse than a late ad. Pure.\n */\nexport function logoFromExtract(hits: readonly ExtractHit[], domain: string): string | null {\n const own = hostOf(domain);\n if (!own) return null;\n const candidates = hits.flatMap((hit) => {\n const url = hit.url ?? hit.imageUrl ?? hit.sourceUrl;\n const host = url ? hostOf(url) : null;\n if (!url || !host || (host !== own && !host.endsWith(`.${own}`))) return [];\n const said = sayings(hit, url);\n if (!/logo/i.test(said) || NOT_THE_LOGO.test(said)) return [];\n return [{ url, score: (/\\.svg(?:\\?|$)/i.test(url) ? 2 : 0) + (/logo/i.test(new URL(url).pathname) ? 1 : 0) }];\n });\n candidates.sort((a, b) => b.score - a.score || a.url.length - b.url.length);\n return candidates[0]?.url ?? null;\n}\n\n\n/** The logo a company's own page holds: an address its image is served from, or the inline SVG it draws. */\ntype PageLogo = { kind: \"url\"; url: string } | { kind: \"svg\"; svg: string };\n\n/** The largest inline SVG taken as a logo; a page's whole illustration is not one. */\nconst MAX_INLINE_SVG = 300_000;\n/** Where a page keeps its brand: its header, its navigation, its banner. */\nconst BRAND_PLACES = \"header, nav, [role=banner]\";\n/** The attributes a lazy-loaded image keeps its address in, the plain one first. */\nconst IMAGE_ADDRESS = [\"src\", \"data-src\", \"data-lazy-src\", \"data-original\"];\n\n/**\n * The company's own logo as its page shows it (`html`, fetched from `pageUrl`): an <img> or an inline\n * <svg> in the header, navigation or banner that says it is the logo in its own or its link's class,\n * id, alt or title. A header's logo is authoritative: nothing outside it counts, an image from another\n * domain never does (a press logo, a partner's mark, a CDN's rewrite), nor a sprite reference. Pure.\n */\nexport function logoFromPage(html: string, pageUrl: string, domain: string): PageLogo | null {\n const own = hostOf(domain);\n if (!own) return null;\n const $ = cheerio.load(html);\n for (const el of $(`${BRAND_PLACES}`).find(\"img, svg\").toArray()) {\n const node = $(el);\n const said = [node, node.closest(\"a\")]\n .flatMap((n) => [\"class\", \"id\", \"alt\", \"aria-label\", \"title\"].map((k) => n.attr(k) ?? \"\"))\n .join(\" \");\n if (!/logo/i.test(said) || NOT_THE_LOGO.test(said)) continue;\n if (el.tagName === \"svg\") {\n const svg = standaloneSvg($, node);\n if (svg) return { kind: \"svg\", svg };\n continue;\n }\n const url = IMAGE_ADDRESS.map((k) => node.attr(k)?.trim() ?? \"\")\n .filter((a) => a !== \"\" && !a.startsWith(\"data:\"))\n .map((a) => absolute(a, pageUrl))\n .find((a): a is string => a !== null);\n const host = url ? hostOf(url) : null;\n if (url && host && (host === own || host.endsWith(`.${own}`))) return { kind: \"url\", url };\n }\n return null;\n}\n\nfunction absolute(address: string, base: string): string | null {\n try {\n const url = new URL(address, base);\n return /^https?:$/.test(url.protocol) ? url.href : null;\n } catch {\n return null;\n }\n}\n\n/** An inline <svg> as a file of its own (its namespace stated); null when it draws nothing itself or is too large. */\nfunction standaloneSvg($: cheerio.CheerioAPI, node: ReturnType<cheerio.CheerioAPI>): string | null {\n const draws = node.find(\"path, circle, rect, polygon, polyline, ellipse, line, text\").length > 0;\n if (!draws || node.find(\"use\").length > 0) return null;\n const copy = node.clone();\n if (!copy.attr(\"xmlns\")) copy.attr(\"xmlns\", \"http://www.w3.org/2000/svg\");\n const svg = $.html(copy);\n return svg.length <= MAX_INLINE_SVG ? svg : null;\n}\n/**\n * The ground a logo file is meant for, from how light its ink is (0-255): the convention tokens.json\n * and the file names share, `logo-light` for a dark-inked mark that reads on a light ground. Pure.\n */\nexport function logoTone(inkLuma: number | null): \"light\" | \"dark\" {\n return inkLuma !== null && inkLuma > 170 ? \"dark\" : \"light\";\n}\n\n/**\n * `tokens.json` (its text) with the logo file registered under `logos`; null when there is no\n * tokens.json to add it to, it does not parse, or the file is already there (nothing to write). Pure.\n */\nexport function withLogoRegistered(\n tokensJson: string | null,\n logo: { path: string; background: \"light\" | \"dark\" },\n): string | null {\n if (tokensJson === null) return null;\n let tokens: unknown;\n try {\n tokens = JSON.parse(tokensJson);\n } catch {\n return null;\n }\n if (!tokens || typeof tokens !== \"object\" || Array.isArray(tokens)) return null;\n const doc = tokens as { logos?: unknown };\n const logos = Array.isArray(doc.logos) ? doc.logos : [];\n if (logos.some((l) => (l as { path?: unknown } | null)?.path === logo.path)) return null;\n const next = { ...doc, logos: [...logos, { variant: \"logo\", background: logo.background, path: logo.path }] };\n return `${JSON.stringify(next, null, 2)}\\n`;\n}\n\n/** The hint when no logo could be found for the company: where the person adds it. Pure. */\nexport function logoMissingHint(company: string, domain: string | undefined): string {\n return `No logo on file for ${company}: add it on the Brand page${domain ? ` (we could not find it on ${domain})` : \"\"}.`;\n}\n\n/** The file extension a logo address ends in, svg when it names none (a mark saved under the wrong extension renders as nothing). */\nfunction extensionOf(url: string): string {\n return /\\.(svg|png|jpg|jpeg|webp)(?:\\?|$)/i.exec(url)?.[1]?.toLowerCase() ?? \"svg\";\n}\n\n/** The largest logo file taken from a server; the page is read at a few times that. */\nconst MAX_LOGO_BYTES = 3_000_000;\n\ntype LogoSource = { bytes: Buffer; extension: string };\n\n/** The logo file at an address, or null when the server will not give it. */\nasync function downloaded(url: string): Promise<LogoSource | null> {\n try {\n const { buffer } = await fetchExternalBytes(url, { maxBytes: MAX_LOGO_BYTES });\n return buffer.byteLength > 0 ? { bytes: buffer, extension: extensionOf(url) } : null;\n } catch {\n return null;\n }\n}\n\n/** The logo the company's own website holds: the header's, which is authoritative, else a logo among the images the site lists. */\nasync function logoOnSite(domain: string): Promise<LogoSource | null> {\n const host = hostOf(domain);\n if (!host) return null;\n const page = `https://${host}/`;\n try {\n const { buffer } = await fetchExternalBytes(page, { maxBytes: MAX_LOGO_BYTES });\n const found = logoFromPage(buffer.toString(\"utf8\"), page, domain);\n if (found?.kind === \"svg\") return { bytes: Buffer.from(found.svg, \"utf8\"), extension: \"svg\" };\n const file = found ? await downloaded(found.url) : null;\n if (file) return file;\n } catch {\n // The page did not load: the images it lists may still say which one is the logo.\n }\n try {\n const listed = await apiPost<ImagesExtractResponse>(\"/api/images/extract\", { url: page, limit: 50 });\n const url = logoFromExtract(listed.hits ?? [], domain);\n return url ? await downloaded(url) : null;\n } catch {\n return null;\n }\n}\n\n/** The client's logo file: Brandfetch's when it confirms the brand, else the company's own website's; else why none. */\nasync function logoSource(domain: string | undefined): Promise<LogoSource | { note: string }> {\n let lookup: LogoLookup | null = null;\n if (domain) {\n try {\n lookup = await apiPost<ImagesLogoResponse>(\"/api/images/logo\", { domain, variant: \"logo\", autoIngest: 1 });\n } catch {\n lookup = null;\n }\n }\n const decision = decideClientLogo(domain, lookup);\n if (decision.use) {\n const file = await downloaded(decision.url);\n if (file) return file;\n }\n // Brandfetch holds none (or a doubtful one): the company's own website is authoritative about its logo.\n if (domain && !(decision.use === false && decision.reason === \"mismatch\")) {\n const file = await logoOnSite(domain);\n if (file) return file;\n }\n return { note: clientLogoMissNote(decision.use ? { use: false, reason: \"no_hits\" } : decision, domain) };\n}\n\n/** The mean ink of a logo file, 0-255; null when it cannot be read. */\nasync function inkOf(bytes: Buffer): Promise<number | null> {\n try {\n return inkLuma((await logoArtwork(bytes)).data);\n } catch {\n return null;\n }\n}\n\n/**\n * Fetch the client's own brand mark and write it into the workspace (`root`):\n * `src/brand/logos/logo-<light|dark>.<ext>`, registered in tokens.json so every ad finds it.\n *\n * Only ever called when the workspace has no mark. Their domain is on record with Baker; Brandfetch\n * holds the mark against it when it has one, else the company's own website does.\n *\n * Never places an unconfirmed one (see `decideClientLogo`): a wrong mark is a worse\n * outcome than a late ad. On any failure this returns the sentence the agent should act\n * on, rather than a stack trace.\n */\nexport async function fetchClientLogo(\n root = \".\",\n): Promise<{ ok: true; path: string; domain?: string } | { ok: false; reason: string; domain?: string; company?: string }> {\n let domain: string | undefined;\n let company: string | undefined;\n try {\n const found = await apiGet<CompanyGetResponse>(\"/api/company\");\n domain = found.data.domain?.trim() || undefined;\n company = found.data.name;\n } catch {\n // A company read that fails is not the agent's problem to debug mid-ad; it lands on\n // the same path as \"no domain on record\" and offers the same two ways out.\n domain = undefined;\n }\n const named = { ...(domain ? { domain } : {}), ...(company ? { company } : {}) };\n const source = await logoSource(domain);\n if (\"note\" in source) return { ok: false, reason: source.note, ...named };\n try {\n const tone = logoTone(await inkOf(source.bytes));\n const dir = path.join(root, BRAND_DIR, \"logos\");\n await mkdir(dir, { recursive: true });\n const file = path.join(dir, `logo-${tone}.${source.extension}`);\n await writeFile(file, source.bytes);\n await registerLogo(root, path.join(BRAND_DIR, \"logos\", path.basename(file)), tone);\n return { ok: true, path: file, ...named };\n } catch {\n return { ok: false, reason: clientLogoMissNote({ use: false, reason: \"no_hits\" }, domain), ...named };\n }\n}\n\n/** Register the file in the workspace's tokens.json, when it has one; a failure to is not the logo's. */\nasync function registerLogo(root: string, relative: string, background: \"light\" | \"dark\"): Promise<void> {\n const tokensPath = path.join(root, BRAND_DIR, \"tokens.json\");\n const next = withLogoRegistered(await readFile(tokensPath, \"utf8\").catch(() => null), { path: relative, background });\n if (next !== null) await writeFile(tokensPath, next, \"utf8\").catch(() => undefined);\n}\n\n/**\n * The brand kit with the company's logo in it: as it is when it has one, else the logo fetched from\n * Brandfetch or the company's own website and the kit read again (`reread`). With none found the kit\n * is as it was and `hint` says where the person adds it. `fetch` is the lookup. Never throws.\n */\nexport async function withClientLogo<Kit extends { logo?: string }>(\n root: string,\n kit: Kit,\n reread: () => Promise<Kit>,\n fetch: typeof fetchClientLogo = fetchClientLogo,\n): Promise<{ kit: Kit; hint?: string }> {\n if (kit.logo) return { kit };\n const fetched = await fetch(root).catch(() => null);\n if (fetched?.ok) return { kit: await reread() };\n return { kit, hint: logoMissingHint(fetched?.company ?? \"your company\", fetched?.domain) };\n}\n"],"mappings":"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","names":["inkLuma"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiError,
|
|
3
|
+
apiGet,
|
|
4
|
+
apiPost
|
|
5
|
+
} from "./chunk-XDZVBX6L.js";
|
|
6
|
+
|
|
7
|
+
// src/commands/avatars/transport.ts
|
|
8
|
+
function unwrap(response) {
|
|
9
|
+
if (response.ok === false || response.data === void 0) {
|
|
10
|
+
throw new ApiError("INTERNAL_ERROR", response.error?.message ?? "The avatars service returned an unusable answer");
|
|
11
|
+
}
|
|
12
|
+
return response.data;
|
|
13
|
+
}
|
|
14
|
+
async function readAvatars(path, params) {
|
|
15
|
+
return unwrap(await apiGet(path, params));
|
|
16
|
+
}
|
|
17
|
+
async function writeAvatars(path, body, opts) {
|
|
18
|
+
return unwrap(await apiPost(path, body, opts));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
readAvatars,
|
|
23
|
+
writeAvatars
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-LCW3U4EA.js.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import {
|
|
2
|
+
COST_TYPES,
|
|
3
|
+
OBJECTIVE_TYPES,
|
|
4
|
+
calendarDaySchema,
|
|
5
|
+
targetingCriteriaSchema
|
|
6
|
+
} from "./chunk-2QSPPWOU.js";
|
|
7
|
+
|
|
8
|
+
// ../api/src/ads-linkedin/planning.ts
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
var moneySchema = z.object({
|
|
11
|
+
amount: z.string().regex(/^\d+(\.\d+)?$/, "use a plain amount such as 250 or 5.57"),
|
|
12
|
+
currencyCode: z.string().regex(/^[A-Z]{3}$/).optional()
|
|
13
|
+
});
|
|
14
|
+
var accountIdSchema = z.string().min(1);
|
|
15
|
+
var linkedinBidPricingRequestSchema = z.object({
|
|
16
|
+
accountId: accountIdSchema,
|
|
17
|
+
objectiveType: z.enum(OBJECTIVE_TYPES),
|
|
18
|
+
costType: z.enum(COST_TYPES).default("CPC"),
|
|
19
|
+
campaignType: z.enum(["SPONSORED_UPDATES", "TEXT_AD", "SPONSORED_INMAILS"]).default("SPONSORED_UPDATES"),
|
|
20
|
+
/** EXACT = audience expansion off, the playbook default. */
|
|
21
|
+
matchType: z.enum(["EXACT", "AUDIENCE_EXPANDED"]).default("EXACT"),
|
|
22
|
+
targetingCriteria: targetingCriteriaSchema,
|
|
23
|
+
skipCache: z.boolean().optional()
|
|
24
|
+
});
|
|
25
|
+
var LINKEDIN_FORECAST_DEFAULT_DAYS = 30;
|
|
26
|
+
var linkedinForecastRequestSchema = z.object({
|
|
27
|
+
accountId: accountIdSchema,
|
|
28
|
+
objectiveType: z.enum(OBJECTIVE_TYPES).optional(),
|
|
29
|
+
costType: z.enum(COST_TYPES).default("CPC"),
|
|
30
|
+
campaignType: z.enum(["SPONSORED_UPDATES", "SPONSORED_INMAILS", "DYNAMIC"]).default("SPONSORED_UPDATES"),
|
|
31
|
+
/** First forecast day (UTC); defaults to tomorrow — LinkedIn forecasts only the future. */
|
|
32
|
+
startDate: calendarDaySchema.optional(),
|
|
33
|
+
days: z.number().int().min(1).max(365).default(LINKEDIN_FORECAST_DEFAULT_DAYS),
|
|
34
|
+
dailyBudget: moneySchema.optional(),
|
|
35
|
+
totalBudget: moneySchema.optional(),
|
|
36
|
+
/** A manual bid; without one LinkedIn forecasts its automated bidding. */
|
|
37
|
+
bid: moneySchema.optional(),
|
|
38
|
+
optimizationTarget: z.string().regex(/^[A-Z_]+$/).optional(),
|
|
39
|
+
targetingCriteria: targetingCriteriaSchema,
|
|
40
|
+
/** Add LinkedIn's raw series (daily, 7-day, 30-day) to the summary. */
|
|
41
|
+
full: z.boolean().default(false),
|
|
42
|
+
skipCache: z.boolean().optional()
|
|
43
|
+
}).superRefine((req, ctx) => {
|
|
44
|
+
if (!req.dailyBudget && !req.totalBudget) {
|
|
45
|
+
ctx.addIssue({
|
|
46
|
+
code: "custom",
|
|
47
|
+
path: ["totalBudget"],
|
|
48
|
+
message: "a budget is required (daily or total) \u2014 LinkedIn forecasts what a budget buys"
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
if (req.dailyBudget && req.totalBudget) {
|
|
52
|
+
ctx.addIssue({ code: "custom", path: ["totalBudget"], message: "pass a daily or a total budget, not both" });
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
linkedinBidPricingRequestSchema,
|
|
58
|
+
LINKEDIN_FORECAST_DEFAULT_DAYS,
|
|
59
|
+
linkedinForecastRequestSchema
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=chunk-LFXE2G6R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../api/src/ads-linkedin/planning.ts"],"sourcesContent":["/**\n * Wire contracts for `POST /api/ads/linkedin/bid-pricing` and\n * `POST /api/ads/linkedin/forecast` — LinkedIn's suggested bid and delivery\n * forecast for a campaign that doesn't exist yet. Money without a currency\n * takes the ad account's.\n */\nimport { z } from \"zod\";\nimport { calendarDaySchema } from \"../calendarDays\";\nimport { COST_TYPES, OBJECTIVE_TYPES } from \"./limits\";\nimport { targetingCriteriaSchema } from \"./ops\";\n\nconst moneySchema = z.object({\n amount: z.string().regex(/^\\d+(\\.\\d+)?$/, \"use a plain amount such as 250 or 5.57\"),\n currencyCode: z\n .string()\n .regex(/^[A-Z]{3}$/)\n .optional(),\n});\nexport type LinkedinPlanningMoney = z.infer<typeof moneySchema>;\n\nconst accountIdSchema = z.string().min(1);\n\nexport const linkedinBidPricingRequestSchema = z.object({\n accountId: accountIdSchema,\n objectiveType: z.enum(OBJECTIVE_TYPES),\n costType: z.enum(COST_TYPES).default(\"CPC\"),\n campaignType: z.enum([\"SPONSORED_UPDATES\", \"TEXT_AD\", \"SPONSORED_INMAILS\"]).default(\"SPONSORED_UPDATES\"),\n /** EXACT = audience expansion off, the playbook default. */\n matchType: z.enum([\"EXACT\", \"AUDIENCE_EXPANDED\"]).default(\"EXACT\"),\n targetingCriteria: targetingCriteriaSchema,\n skipCache: z.boolean().optional(),\n});\nexport type LinkedinBidPricingRequestInput = z.input<typeof linkedinBidPricingRequestSchema>;\n\nexport const LINKEDIN_FORECAST_DEFAULT_DAYS = 30;\n\nexport const linkedinForecastRequestSchema = z\n .object({\n accountId: accountIdSchema,\n objectiveType: z.enum(OBJECTIVE_TYPES).optional(),\n costType: z.enum(COST_TYPES).default(\"CPC\"),\n campaignType: z.enum([\"SPONSORED_UPDATES\", \"SPONSORED_INMAILS\", \"DYNAMIC\"]).default(\"SPONSORED_UPDATES\"),\n /** First forecast day (UTC); defaults to tomorrow — LinkedIn forecasts only the future. */\n startDate: calendarDaySchema.optional(),\n days: z.number().int().min(1).max(365).default(LINKEDIN_FORECAST_DEFAULT_DAYS),\n dailyBudget: moneySchema.optional(),\n totalBudget: moneySchema.optional(),\n /** A manual bid; without one LinkedIn forecasts its automated bidding. */\n bid: moneySchema.optional(),\n optimizationTarget: z\n .string()\n .regex(/^[A-Z_]+$/)\n .optional(),\n targetingCriteria: targetingCriteriaSchema,\n /** Add LinkedIn's raw series (daily, 7-day, 30-day) to the summary. */\n full: z.boolean().default(false),\n skipCache: z.boolean().optional(),\n })\n .superRefine((req, ctx) => {\n if (!req.dailyBudget && !req.totalBudget) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"totalBudget\"],\n message: \"a budget is required (daily or total) — LinkedIn forecasts what a budget buys\",\n });\n }\n if (req.dailyBudget && req.totalBudget) {\n ctx.addIssue({ code: \"custom\", path: [\"totalBudget\"], message: \"pass a daily or a total budget, not both\" });\n }\n });\nexport type LinkedinForecastRequestInput = z.input<typeof linkedinForecastRequestSchema>;\n"],"mappings":";;;;;;;;AAMA,SAAS,SAAS;AAKlB,IAAM,cAAc,EAAE,OAAO;AAAA,EAC3B,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,wCAAwC;AAAA,EAClF,cAAc,EACX,OAAO,EACP,MAAM,YAAY,EAClB,SAAS;AACd,CAAC;AAGD,IAAM,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC;AAEjC,IAAM,kCAAkC,EAAE,OAAO;AAAA,EACtD,WAAW;AAAA,EACX,eAAe,EAAE,KAAK,eAAe;AAAA,EACrC,UAAU,EAAE,KAAK,UAAU,EAAE,QAAQ,KAAK;AAAA,EAC1C,cAAc,EAAE,KAAK,CAAC,qBAAqB,WAAW,mBAAmB,CAAC,EAAE,QAAQ,mBAAmB;AAAA;AAAA,EAEvG,WAAW,EAAE,KAAK,CAAC,SAAS,mBAAmB,CAAC,EAAE,QAAQ,OAAO;AAAA,EACjE,mBAAmB;AAAA,EACnB,WAAW,EAAE,QAAQ,EAAE,SAAS;AAClC,CAAC;AAGM,IAAM,iCAAiC;AAEvC,IAAM,gCAAgC,EAC1C,OAAO;AAAA,EACN,WAAW;AAAA,EACX,eAAe,EAAE,KAAK,eAAe,EAAE,SAAS;AAAA,EAChD,UAAU,EAAE,KAAK,UAAU,EAAE,QAAQ,KAAK;AAAA,EAC1C,cAAc,EAAE,KAAK,CAAC,qBAAqB,qBAAqB,SAAS,CAAC,EAAE,QAAQ,mBAAmB;AAAA;AAAA,EAEvG,WAAW,kBAAkB,SAAS;AAAA,EACtC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,8BAA8B;AAAA,EAC7E,aAAa,YAAY,SAAS;AAAA,EAClC,aAAa,YAAY,SAAS;AAAA;AAAA,EAElC,KAAK,YAAY,SAAS;AAAA,EAC1B,oBAAoB,EACjB,OAAO,EACP,MAAM,WAAW,EACjB,SAAS;AAAA,EACZ,mBAAmB;AAAA;AAAA,EAEnB,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC/B,WAAW,EAAE,QAAQ,EAAE,SAAS;AAClC,CAAC,EACA,YAAY,CAAC,KAAK,QAAQ;AACzB,MAAI,CAAC,IAAI,eAAe,CAAC,IAAI,aAAa;AACxC,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,aAAa;AAAA,MACpB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,IAAI,eAAe,IAAI,aAAa;AACtC,QAAI,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,aAAa,GAAG,SAAS,2CAA2C,CAAC;AAAA,EAC7G;AACF,CAAC;","names":[]}
|