@koda-sl/baker-cli 0.465.0 → 0.467.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -1
- package/dist/account-2VTEV5C3.js +79 -0
- package/dist/account-2VTEV5C3.js.map +1 -0
- package/dist/account-HZC6X2PH.js +49 -0
- package/dist/account-MLX2MQTO.js +80 -0
- package/dist/account-reads-FCETXYI7.js +218 -0
- package/dist/account-writes-UNVXSLMV.js +66 -0
- package/dist/accounts-4P54UY6F.js +115 -0
- package/dist/accounts-6UNBLIUH.js +75 -0
- package/dist/accounts-GVTZN4VE.js +114 -0
- package/dist/accounts-PSNCMJLI.js +611 -0
- package/dist/accounts-PSNCMJLI.js.map +1 -0
- package/dist/accounts-XVQVPFDG.js +77 -0
- package/dist/accounts-XVQVPFDG.js.map +1 -0
- package/dist/actions-MEKXFKDN.js +55 -0
- package/dist/active-entities-UGHMVRWH.js +103 -0
- package/dist/activities-2J7FTZMN.js +74 -0
- package/dist/ad-group-writes-2YEZNT5Q.js +170 -0
- package/dist/ad-groups-YXVIPI7B.js +68 -0
- package/dist/ad-writes-HBNG55VT.js +174 -0
- package/dist/add-2FHPLALV.js +105 -0
- package/dist/add-JEMGWBRH.js +104 -0
- package/dist/add-JEMGWBRH.js.map +1 -0
- package/dist/add-JP76KCCY.js +97 -0
- package/dist/add-OZIORHYQ.js +302 -0
- package/dist/add-OZIORHYQ.js.map +1 -0
- package/dist/add-accounts-M5Y4DQFM.js +91 -0
- package/dist/ads-DB5NDHX5.js +128 -0
- package/dist/ads-NDV3GOIW.js +40 -0
- package/dist/ads-QBXR7IPO.js +77 -0
- package/dist/ads-W2IPUWHQ.js +113 -0
- package/dist/adsets-PY5ZKGBO.js +176 -0
- package/dist/advertisers-7BN7X2IH.js +120 -0
- package/dist/advertisers-7BN7X2IH.js.map +1 -0
- package/dist/advertisers-BVAZ4XUX.js +125 -0
- package/dist/analytics-CQMJG7S4.js +1976 -0
- package/dist/analytics-CQMJG7S4.js.map +1 -0
- package/dist/analytics-S6P7FO7Z.js +433 -0
- package/dist/analytics-S6P7FO7Z.js.map +1 -0
- package/dist/animate-QEHFEQHZ.js +480 -0
- package/dist/assign-NNI5YU4M.js +77 -0
- package/dist/assign-NNI5YU4M.js.map +1 -0
- package/dist/audience-size-BCKF7ETB.js +94 -0
- package/dist/audience-size-BCKF7ETB.js.map +1 -0
- package/dist/audiences-NTT3HZN7.js +85 -0
- package/dist/audiences-QWJ34WIW.js +268 -0
- package/dist/audiences-UUIYQFS6.js +78 -0
- package/dist/audit-3IEVQLR4.js +151 -0
- package/dist/audit-3IEVQLR4.js.map +1 -0
- package/dist/audit-OWXTLQC4.js +88 -0
- package/dist/autocomplete-5PN6N7DQ.js +111 -0
- package/dist/autocomplete-5PN6N7DQ.js.map +1 -0
- package/dist/avatars-3PC7FTU3.js +38 -0
- package/dist/bid-pricing-S5IU2BQW.js +99 -0
- package/dist/bid-pricing-S5IU2BQW.js.map +1 -0
- package/dist/brand-XVXQ7VAU.js +22 -0
- package/dist/brief-SZSPXGG4.js +490 -0
- package/dist/businesses-ZH67AXR6.js +53 -0
- package/dist/campaign-groups-SBUN3CVL.js +95 -0
- package/dist/campaign-groups-SBUN3CVL.js.map +1 -0
- package/dist/campaign-writes-2LMGW7FW.js +165 -0
- package/dist/campaign-writes-2LMGW7FW.js.map +1 -0
- package/dist/campaign-writes-4N3LQJL2.js +170 -0
- package/dist/campaigns-5FH5THMS.js +76 -0
- package/dist/campaigns-66OOGMDW.js +110 -0
- package/dist/campaigns-CYPLOBK3.js +109 -0
- package/dist/campaigns-CYPLOBK3.js.map +1 -0
- package/dist/campaigns-QUQQYMIO.js +107 -0
- package/dist/canvas-3GSDOZTI.js +46 -0
- package/dist/canvas-3GSDOZTI.js.map +1 -0
- package/dist/capabilities-UP52NQJ7.js +144 -0
- package/dist/capabilities-UP52NQJ7.js.map +1 -0
- package/dist/cards-RSMTBND3.js +85 -0
- package/dist/catalog-YDDBFPRO.js +64 -0
- package/dist/catalog-YDDBFPRO.js.map +1 -0
- package/dist/catalogs-3IYC53GK.js +128 -0
- package/dist/changes-U263PWVD.js +135 -0
- package/dist/chatgpt-O64OJE6R.js +47 -0
- package/dist/chats-FP44JQYE.js +262 -0
- package/dist/chats-FP44JQYE.js.map +1 -0
- package/dist/chunk-35ENAFJX.js +46 -0
- package/dist/chunk-3KIH22M7.js +207 -0
- package/dist/chunk-4DM6OAQ6.js +2065 -0
- package/dist/chunk-4DM6OAQ6.js.map +1 -0
- package/dist/chunk-4FCLXJYW.js +1442 -0
- package/dist/chunk-4OSBBGG5.js +304 -0
- package/dist/chunk-57UECM77.js +98 -0
- package/dist/chunk-5Q3XCLMS.js +455 -0
- package/dist/chunk-65BQAJMH.js +136 -0
- package/dist/chunk-6GFJFTG6.js +75 -0
- package/dist/chunk-6GKC2PBR.js +160 -0
- package/dist/chunk-6HPIWZHS.js +76 -0
- package/dist/chunk-73B3RQJC.js +610 -0
- package/dist/chunk-7MQVCSA7.js +310 -0
- package/dist/chunk-7NTION5F.js +26 -0
- package/dist/chunk-A3VUXG5G.js +1079 -0
- package/dist/chunk-A3VUXG5G.js.map +1 -0
- package/dist/chunk-AQ4HEXUH.js +1830 -0
- package/dist/chunk-AUWN3C2K.js +474 -0
- package/dist/chunk-B3SPFCKC.js +494 -0
- package/dist/chunk-CBCGVPHB.js +125 -0
- package/dist/chunk-CECS3DHZ.js +333 -0
- package/dist/chunk-CHFKTRB5.js +665 -0
- package/dist/chunk-D24DJ7DB.js +67 -0
- package/dist/chunk-D5MF337I.js +97 -0
- package/dist/chunk-DL2W4N7J.js +52 -0
- package/dist/chunk-DL2W4N7J.js.map +1 -0
- package/dist/chunk-DLUWHZCE.js +225 -0
- package/dist/chunk-ECBHE5S6.js +51 -0
- package/dist/chunk-EXZ2NIKX.js +111 -0
- package/dist/chunk-F3FSD6BO.js +96 -0
- package/dist/chunk-F5XU546T.js +23 -0
- package/dist/chunk-G3KO2HFZ.js +35 -0
- package/dist/chunk-GIWHHCD6.js +145 -0
- package/dist/chunk-GIWHHCD6.js.map +1 -0
- package/dist/chunk-GKXMIXEV.js +166 -0
- package/dist/chunk-GT4UFORX.js +296 -0
- package/dist/chunk-GWM4DCAK.js +4410 -0
- package/dist/chunk-GZ6YS7TG.js +106 -0
- package/dist/chunk-H7JOVRHO.js +106 -0
- package/dist/chunk-HF5V7TWU.js +592 -0
- package/dist/chunk-HM25R6XJ.js +433 -0
- package/dist/chunk-HWSUW5PX.js +169 -0
- package/dist/chunk-I7R3YSZF.js +346 -0
- package/dist/chunk-IJDF7D4U.js +139 -0
- package/dist/chunk-IK2S7QGF.js +363 -0
- package/dist/chunk-INI7U2SZ.js +188 -0
- package/dist/chunk-INJHF7AF.js +172 -0
- package/dist/chunk-J2QOKD2F.js +76 -0
- package/dist/chunk-J57EXXFU.js +175 -0
- package/dist/chunk-JE5NMVRX.js +274 -0
- package/dist/chunk-JHLGXB6K.js +45 -0
- package/dist/chunk-JSEPE5EP.js +23992 -0
- package/dist/chunk-JSKBCXI5.js +3151 -0
- package/dist/chunk-JSKBCXI5.js.map +1 -0
- package/dist/chunk-KB5HBQEK.js +25 -0
- package/dist/chunk-KB5XJHQX.js +216 -0
- package/dist/chunk-KB5XJHQX.js.map +1 -0
- package/dist/chunk-KCCWCK6L.js +6667 -0
- package/dist/chunk-KTL2D7NT.js +96 -0
- package/dist/chunk-KWTKAYCG.js +1599 -0
- package/dist/chunk-LHNL6JM2.js +309 -0
- package/dist/chunk-MPXDQWYI.js +57 -0
- package/dist/chunk-NAMEFVWL.js +1743 -0
- package/dist/chunk-NAMEFVWL.js.map +1 -0
- package/dist/chunk-NBYP5N4X.js +509 -0
- package/dist/chunk-NOSWSBLW.js +382 -0
- package/dist/chunk-O3LHCQ7Q.js +136 -0
- package/dist/chunk-P5H2BL4J.js +92 -0
- package/dist/chunk-P66JWKAL.js +533 -0
- package/dist/chunk-PA5MYVQY.js +66 -0
- package/dist/chunk-Q676JHJA.js +58 -0
- package/dist/chunk-QDOVBGKZ.js +149 -0
- package/dist/chunk-QN5VAYER.js +622 -0
- package/dist/chunk-QNEX7FEC.js +174 -0
- package/dist/chunk-QTL4NJ5I.js +65 -0
- package/dist/chunk-QXDEZKAR.js +455 -0
- package/dist/chunk-QXDEZKAR.js.map +1 -0
- package/dist/chunk-R3GZRH43.js +98 -0
- package/dist/chunk-R7CQCE3E.js +103 -0
- package/dist/chunk-RFJ3S47F.js +172 -0
- package/dist/chunk-RV67UWHI.js +5187 -0
- package/dist/chunk-RV67UWHI.js.map +1 -0
- package/dist/chunk-TMQ5LHZ3.js +159 -0
- package/dist/chunk-TRLVH7T3.js +846 -0
- package/dist/chunk-UUBFYAVE.js +337 -0
- package/dist/chunk-UXTZ5MBE.js +56 -0
- package/dist/chunk-V43RLLZE.js +55 -0
- package/dist/chunk-V4UFNEHE.js +541 -0
- package/dist/chunk-V5L5QD7R.js +60 -0
- package/dist/chunk-VAYFVC5B.js +297 -0
- package/dist/chunk-VFSLIDXA.js +42 -0
- package/dist/chunk-VHMNSO2B.js +84 -0
- package/dist/chunk-VOH2QWVG.js +275 -0
- package/dist/chunk-WESRVXFS.js +133 -0
- package/dist/chunk-WILN7TD6.js +84 -0
- package/dist/chunk-WXC3I4CT.js +6188 -0
- package/dist/chunk-X4DLIDFW.js +197 -0
- package/dist/chunk-XUMMI5WJ.js +817 -0
- package/dist/chunk-XUMMI5WJ.js.map +1 -0
- package/dist/chunk-YONSWWCF.js +215 -0
- package/dist/chunk-YONSWWCF.js.map +1 -0
- package/dist/chunk-YT74ZEVP.js +206 -0
- package/dist/chunk-Z5KBRTB2.js +191 -0
- package/dist/chunk-ZBKBTTHD.js +74 -0
- package/dist/chunk-ZFIYN7KP.js +19 -0
- package/dist/chunk-ZLU5QDLU.js +486 -0
- package/dist/chunk-ZNNC6B75.js +94 -0
- package/dist/chunk-ZO2YLHRW.js +74 -0
- package/dist/chunk-ZPJE6D7W.js +74 -0
- package/dist/claim-Y5HNMIGT.js +197 -0
- package/dist/claim-Y5HNMIGT.js.map +1 -0
- package/dist/cli.js +40 -37
- package/dist/cli.js.map +1 -1
- package/dist/client-LY2JCQS2.js +19 -0
- package/dist/code-7CBNYUPU.js +76 -0
- package/dist/companies-KXL2F27Q.js +195 -0
- package/dist/companies-KXL2F27Q.js.map +1 -0
- package/dist/complete-Y47RTEZU.js +81 -0
- package/dist/complete-Y47RTEZU.js.map +1 -0
- package/dist/config-7COTFJWK.js +88 -0
- package/dist/connect-VOCZSB3W.js +42 -0
- package/dist/content-OXMONMHJ.js +85 -0
- package/dist/conversation-DJLUJC2V.js +93 -0
- package/dist/conversation-DJLUJC2V.js.map +1 -0
- package/dist/conversion-report-ZRNV7X7D.js +125 -0
- package/dist/conversion-upload-command-IMHHSGYU.js +438 -0
- package/dist/conversion-writes-7N5UDQGH.js +120 -0
- package/dist/conversions-CRRH74GZ.js +135 -0
- package/dist/conversions-CRRH74GZ.js.map +1 -0
- package/dist/conversions-QOXRO26I.js +76 -0
- package/dist/countries-UXAUGSBR.js +82 -0
- package/dist/create-4HHYBOZF.js +59 -0
- package/dist/create-4HHYBOZF.js.map +1 -0
- package/dist/create-FVIVHA37.js +207 -0
- package/dist/create-FVIVHA37.js.map +1 -0
- package/dist/create-XSXCJ2IS.js +235 -0
- package/dist/create-XSXCJ2IS.js.map +1 -0
- package/dist/create-YTCXQUUX.js +130 -0
- package/dist/create-YTCXQUUX.js.map +1 -0
- package/dist/creatives-6DJPLVV7.js +182 -0
- package/dist/creatives-6DJPLVV7.js.map +1 -0
- package/dist/creatives-F26GDJG2.js +51 -0
- package/dist/creatives-ONKKGW5T.js +87 -0
- package/dist/credentials-6W4YNIWY.js +287 -0
- package/dist/credentials-6W4YNIWY.js.map +1 -0
- package/dist/critique-EFZPHFIS.js +213 -0
- package/dist/critique-EFZPHFIS.js.map +1 -0
- package/dist/critique-JNWRNCVW.js +1449 -0
- package/dist/critique-JNWRNCVW.js.map +1 -0
- package/dist/crm-E3BPZUW3.js +224 -0
- package/dist/crm-E3BPZUW3.js.map +1 -0
- package/dist/crm-MAZU2GZR.js +318 -0
- package/dist/crm-MAZU2GZR.js.map +1 -0
- package/dist/crop-3ZV5BFCA.js +113 -0
- package/dist/currency-PGLGLRKU.js +88 -0
- package/dist/custom-conversions-TV23XQHW.js +125 -0
- package/dist/customers-I2EHMEX3.js +56 -0
- package/dist/decide-EGQ3CRHI.js +199 -0
- package/dist/decide-EGQ3CRHI.js.map +1 -0
- package/dist/delete-A5NP6I7U.js +54 -0
- package/dist/delete-A5NP6I7U.js.map +1 -0
- package/dist/delete-MN6GZAZH.js +66 -0
- package/dist/delete-MN6GZAZH.js.map +1 -0
- package/dist/delete-MUPTLWHI.js +71 -0
- package/dist/delete-QMIJ5Z3V.js +63 -0
- package/dist/delete-QMIJ5Z3V.js.map +1 -0
- package/dist/delete-R2SEUSLV.js +69 -0
- package/dist/delete-ZGBBWFAW.js +71 -0
- package/dist/demographics-3DHCGMUR.js +138 -0
- package/dist/demographics-3DHCGMUR.js.map +1 -0
- package/dist/describe-4O3VCV6L.js +97 -0
- package/dist/describe-FCTM53MM.js +97 -0
- package/dist/dimensions-AD4VS5AH.js +101 -0
- package/dist/discard-7QUFDYVK.js +66 -0
- package/dist/discard-7QUFDYVK.js.map +1 -0
- package/dist/discover-6XSPNZYE.js +172 -0
- package/dist/discover-UQXQUPNO.js +93 -0
- package/dist/domain-NRPTYLT2.js +98 -0
- package/dist/domain-NRPTYLT2.js.map +1 -0
- package/dist/download-IE6XLFHM.js +299 -0
- package/dist/draft-24B2O3SG.js +217 -0
- package/dist/draft-24B2O3SG.js.map +1 -0
- package/dist/draft-ENA7S4Y7.js +103 -0
- package/dist/draft-FGPMNIZK.js +306 -0
- package/dist/draft-FGPMNIZK.js.map +1 -0
- package/dist/draft-MGKJ5RYI.js +100 -0
- package/dist/draft-PPRDQDGW.js +307 -0
- package/dist/draft-R5RZ72PS.js +328 -0
- package/dist/draft-R5RZ72PS.js.map +1 -0
- package/dist/draft-S6VPKZYY.js +233 -0
- package/dist/draft-VVDI2OR3.js +281 -0
- package/dist/engine/index.js +12 -13
- package/dist/env-YLOVBOAE.js +43 -0
- package/dist/experiment-PHFP6IBM.js +1397 -0
- package/dist/export-R2IMUCQO.js +168 -0
- package/dist/extract-OQP3TSQG.js +113 -0
- package/dist/facets-HFX6SZT6.js +114 -0
- package/dist/facets-HFX6SZT6.js.map +1 -0
- package/dist/favorites-NS73FDG5.js +178 -0
- package/dist/feed-SQPOB7SP.js +177 -0
- package/dist/feedback-XHSJBBEJ.js +66 -0
- package/dist/feedback-record-Z7Z4AW2L.js +175 -0
- package/dist/feedback-record-Z7Z4AW2L.js.map +1 -0
- package/dist/fetch-PQ3NOPIE.js +139 -0
- package/dist/fetch-TPRDJJGI.js +176 -0
- package/dist/fetch-TPRDJJGI.js.map +1 -0
- package/dist/find-Y22AANDE.js +134 -0
- package/dist/fit-XJPM6573.js +45 -0
- package/dist/flows-NF3IHOVV.js +247 -0
- package/dist/flows-NF3IHOVV.js.map +1 -0
- package/dist/follow-N3DQZV7M.js +94 -0
- package/dist/follow-competitors-BZPCBGIB.js +112 -0
- package/dist/following-KESWTEBR.js +113 -0
- package/dist/fonts-3FX3OYEQ.js +34 -0
- package/dist/forecast-CYSEUIS4.js +168 -0
- package/dist/forecast-MO4PAKTH.js +104 -0
- package/dist/forecast-MO4PAKTH.js.map +1 -0
- package/dist/funding-G6S4UVU5.js +85 -0
- package/dist/funnel-MM4AXAE7.js +394 -0
- package/dist/funnel-MM4AXAE7.js.map +1 -0
- package/dist/ga4-2QHOA4RO.js +55 -0
- package/dist/generate-F4FDRDAW.js +262 -0
- package/dist/get-3P2EQLP3.js +63 -0
- package/dist/get-FJB3X44Z.js +61 -0
- package/dist/get-HV2VIJYO.js +78 -0
- package/dist/get-HV2VIJYO.js.map +1 -0
- package/dist/get-LHL6CGOR.js +56 -0
- package/dist/get-LHL6CGOR.js.map +1 -0
- package/dist/get-MBGO4VJD.js +63 -0
- package/dist/get-NOKSZPIV.js +59 -0
- package/dist/get-WHC4SRYK.js +92 -0
- package/dist/gif-SFYVDLCU.js +94 -0
- package/dist/google-MY45TUC4.js +3190 -0
- package/dist/google-XRAMIES5.js +136 -0
- package/dist/google-ads-DMOYC7OY.js +195 -0
- package/dist/google-ads-DMOYC7OY.js.map +1 -0
- package/dist/group-6RDJTWVN.js +43 -0
- package/dist/group-TZJCKHKS.js +43 -0
- package/dist/gsc-HD6UFRYM.js +30 -0
- package/dist/history-2WBZRPPE.js +67 -0
- package/dist/history-PY5BYL7T.js +133 -0
- package/dist/history-PY5BYL7T.js.map +1 -0
- package/dist/hubspot-WQ6P3TZL.js +779 -0
- package/dist/hubspot-WQ6P3TZL.js.map +1 -0
- package/dist/icon-BMCDFGMN.js +137 -0
- package/dist/ideas-VLHUTFHP.js +32 -0
- package/dist/images-C4TBUPXM.js +90 -0
- package/dist/improve-P6F2HXYQ.js +86 -0
- package/dist/ingest-SXT33KE6.js +23 -0
- package/dist/ingest-V42IQ2FN.js +107 -0
- package/dist/ingest-V42IQ2FN.js.map +1 -0
- package/dist/insights-DI4W3D2Y.js +423 -0
- package/dist/insights-X75LRPS3.js +122 -0
- package/dist/inspect-YO5ER5OK.js +189 -0
- package/dist/inspect-YO5ER5OK.js.map +1 -0
- package/dist/inspiration-MDCCU2CF.js +53 -0
- package/dist/intent-A4SOIFKK.js +95 -0
- package/dist/job-QDLPQFIT.js +202 -0
- package/dist/job-create-6XKD5GEC.js +109 -0
- package/dist/job-status-MH7CGLWC.js +74 -0
- package/dist/keep-42SLV4CR.js +78 -0
- package/dist/keyword-gap-D4P2CC2L.js +130 -0
- package/dist/keyword-metrics-JLTZ4533.js +197 -0
- package/dist/keyword-metrics-JLTZ4533.js.map +1 -0
- package/dist/keywords-for-site-UCUPPHVX.js +128 -0
- package/dist/keywords-for-site-UCUPPHVX.js.map +1 -0
- package/dist/landing-JWD3U2K5.js +28 -0
- package/dist/landings-5IYXHA5Z.js +151 -0
- package/dist/languages-HX4FD3GX.js +40 -0
- package/dist/languages-SRFGW6Z3.js +55 -0
- package/dist/launches-7U4TPNO3.js +108 -0
- package/dist/layerize-U672AXED.js +190 -0
- package/dist/leads-MXUQISOC.js +293 -0
- package/dist/leads-WMKTJWW5.js +90 -0
- package/dist/leads-WMKTJWW5.js.map +1 -0
- package/dist/learn-C4AJ2JDS.js +203 -0
- package/dist/learn-C4AJ2JDS.js.map +1 -0
- package/dist/library-RPFXNER4.js +109 -0
- package/dist/lighthouse-SJ4QNLUS.js +75 -0
- package/dist/line-item-writes-N5XUSGEM.js +208 -0
- package/dist/line-item-writes-N5XUSGEM.js.map +1 -0
- package/dist/line-items-QIBNOEOH.js +103 -0
- package/dist/link-ZC6MH7AP.js +64 -0
- package/dist/link-ZC6MH7AP.js.map +1 -0
- package/dist/linkedin-MIEUUP4J.js +1008 -0
- package/dist/linkedin-MIEUUP4J.js.map +1 -0
- package/dist/list-GQ65MC2N.js +65 -0
- package/dist/list-HT4HZWF4.js +63 -0
- package/dist/list-HT4HZWF4.js.map +1 -0
- package/dist/list-K56J7FZW.js +51 -0
- package/dist/list-LLBBUXTM.js +151 -0
- package/dist/list-LLBBUXTM.js.map +1 -0
- package/dist/list-LYRCC67M.js +303 -0
- package/dist/list-LYRCC67M.js.map +1 -0
- package/dist/list-M4Z3WYPM.js +76 -0
- package/dist/list-SXYVDDMU.js +57 -0
- package/dist/list-XFIOXFB2.js +50 -0
- package/dist/locations-PQWB7EGC.js +40 -0
- package/dist/locations-WNSET6RM.js +67 -0
- package/dist/log-SXXIU7ZP.js +92 -0
- package/dist/log-SXXIU7ZP.js.map +1 -0
- package/dist/logo-4JOWGJ5A.js +18 -0
- package/dist/lookup-QGGSAHOO.js +22 -0
- package/dist/make-6OQBIYWC.js +633 -0
- package/dist/map-YMFE54VT.js +404 -0
- package/dist/map-YMFE54VT.js.map +1 -0
- package/dist/mcp-QAZ4XLMN.js +463 -0
- package/dist/mcp-QAZ4XLMN.js.map +1 -0
- package/dist/media-2SWDJDA6.js +15 -0
- package/dist/media-O5L7GO72.js +89 -0
- package/dist/media-sources-LF6I6AYP.js +32 -0
- package/dist/members-RGK6FRVY.js +44 -0
- package/dist/members-RGK6FRVY.js.map +1 -0
- package/dist/meta-37L6QBOZ.js +69 -0
- package/dist/metrics-WVG3IUMH.js +152 -0
- package/dist/models-5QWYGJ7Y.js +155 -0
- package/dist/normalize-5G6MMOAB.js +141 -0
- package/dist/normalize-5G6MMOAB.js.map +1 -0
- package/dist/normalize-P5Q3F7FU.js +806 -0
- package/dist/options-TYQL4KRW.js +121 -0
- package/dist/options-TYQL4KRW.js.map +1 -0
- package/dist/output-ZL62UZHQ.js +24 -0
- package/dist/page-FZ7IZ5CV.js +105 -0
- package/dist/pages-SS7TZTHV.js +66 -0
- package/dist/performance-2K425XAN.js +24 -0
- package/dist/pinterest-UETS7U7U.js +96 -0
- package/dist/pixels-D73GQFGM.js +60 -0
- package/dist/pixels-LCTMLKGP.js +108 -0
- package/dist/plan-4HLITU3A.js +207 -0
- package/dist/preview-RU54Z4EM.js +169 -0
- package/dist/profile-NQOIBLJL.js +150 -0
- package/dist/promoted-tweet-writes-YIZGFYZO.js +180 -0
- package/dist/promoted-tweet-writes-YIZGFYZO.js.map +1 -0
- package/dist/promoted-tweets-D5NKZ3FS.js +119 -0
- package/dist/properties-ZUDQH3LE.js +101 -0
- package/dist/publish-WDHGUTNP.js +322 -0
- package/dist/publish-WDHGUTNP.js.map +1 -0
- package/dist/query-26T7XATH.js +236 -0
- package/dist/query-IJVVSB54.js +61 -0
- package/dist/query-SHUOHXTO.js +247 -0
- package/dist/questionnaire-7AEVHZDR.js +93 -0
- package/dist/read-UYSQAXRV.js +141 -0
- package/dist/reddit-YBEYPDZP.js +26 -0
- package/dist/refresh-NKBJT47F.js +94 -0
- package/dist/refresh-NKBJT47F.js.map +1 -0
- package/dist/release-4UPLYFTE.js +60 -0
- package/dist/release-4UPLYFTE.js.map +1 -0
- package/dist/relevant-pages-OI7GTPOK.js +99 -0
- package/dist/remove-2KACTXKP.js +48 -0
- package/dist/remove-HEL2YO3Q.js +50 -0
- package/dist/remove-HEL2YO3Q.js.map +1 -0
- package/dist/reopen-3RWFCQU2.js +63 -0
- package/dist/reopen-3RWFCQU2.js.map +1 -0
- package/dist/rerun-LM52CBPS.js +84 -0
- package/dist/research-547KDC54.js +62 -0
- package/dist/research-VW37GQ5K.js +262 -0
- package/dist/research-VW37GQ5K.js.map +1 -0
- package/dist/reset-LHQJDSVK.js +54 -0
- package/dist/reset-LHQJDSVK.js.map +1 -0
- package/dist/reset-OIRUQHMS.js +54 -0
- package/dist/reset-OIRUQHMS.js.map +1 -0
- package/dist/resolve-2N35OI2Y.js +121 -0
- package/dist/resolve-2N35OI2Y.js.map +1 -0
- package/dist/retry-EZRMUB4I.js +62 -0
- package/dist/retry-EZRMUB4I.js.map +1 -0
- package/dist/retry-GXH7SCNK.js +60 -0
- package/dist/retry-GXH7SCNK.js.map +1 -0
- package/dist/retry-failed-NWLH6WHK.js +45 -0
- package/dist/run-DWR24LCU.js +65 -0
- package/dist/run-DWR24LCU.js.map +1 -0
- package/dist/run-PLUL33QX.js +59 -0
- package/dist/scaffold-ad-W4RZXLDX.js +1548 -0
- package/dist/scaffold-static-ad-IPJYRAOT.js +971 -0
- package/dist/scaffold-video-XBII4YLS.js +872 -0
- package/dist/schedule-QZPDYWHK.js +61 -0
- package/dist/schedule-QZPDYWHK.js.map +1 -0
- package/dist/schedule-S547HPUT.js +66 -0
- package/dist/scheduled-agents-DWSVPMZP.js +49 -0
- package/dist/schema-O4JTYZEY.js +132 -0
- package/dist/schema-O4JTYZEY.js.map +1 -0
- package/dist/schema-SQIP75WG.js +63 -0
- package/dist/scrape-TI6S2W7I.js +2241 -0
- package/dist/screenshot-XFAYY4WW.js +102 -0
- package/dist/search-4HIOKYFR.js +26 -0
- package/dist/search-D2IV7KFJ.js +92 -0
- package/dist/search-IZPDHRJ4.js +224 -0
- package/dist/search-KFDL2IGG.js +91 -0
- package/dist/search-L3RYKE3G.js +174 -0
- package/dist/search-L3RYKE3G.js.map +1 -0
- package/dist/search-copy-QZXCAGK4.js +168 -0
- package/dist/seeds-VUNZMHZH.js +101 -0
- package/dist/select-IAHFSSDX.js +94 -0
- package/dist/select-IAHFSSDX.js.map +1 -0
- package/dist/sends-UT4WXVOS.js +309 -0
- package/dist/sequences-5RAGZE7L.js +146 -0
- package/dist/set-prompt-WVQ4AI66.js +185 -0
- package/dist/setup-links-DFGWE4CV.js +141 -0
- package/dist/setup-links-DFGWE4CV.js.map +1 -0
- package/dist/shared-3CGGKICB.js +31 -0
- package/dist/site-4XF273BE.js +177 -0
- package/dist/site-4XF273BE.js.map +1 -0
- package/dist/sitemaps-3WDYQHYR.js +87 -0
- package/dist/sites-G4DQ2Z2X.js +101 -0
- package/dist/skills-PA26HXEP.js +47 -0
- package/dist/sources-M46IYW42.js +421 -0
- package/dist/sources-M46IYW42.js.map +1 -0
- package/dist/sources-PZXOSE4S.js +30 -0
- package/dist/stale-M64FB7J3.js +63 -0
- package/dist/stale-M64FB7J3.js.map +1 -0
- package/dist/stats-6DPPYSP3.js +34 -0
- package/dist/status-C6UZ45WO.js +62 -0
- package/dist/status-C6UZ45WO.js.map +1 -0
- package/dist/sticker-MC2IAIQB.js +94 -0
- package/dist/stock-B7LKMKUK.js +179 -0
- package/dist/studio-EQ2L6OBJ.js +49 -0
- package/dist/sync-CLZDZL5F.js +54 -0
- package/dist/sync-V26UBMAN.js +265 -0
- package/dist/sync-VYOJ7G6S.js +54 -0
- package/dist/sync-VYOJ7G6S.js.map +1 -0
- package/dist/sync-definition-2SGGHSKR.js +52 -0
- package/dist/tag-manager-KIHXVFMF.js +43 -0
- package/dist/tags-6RGJF4GS.js +20 -0
- package/dist/tags-6RGJF4GS.js.map +1 -0
- package/dist/tags-FGCZJZWK.js +20 -0
- package/dist/tags-FGCZJZWK.js.map +1 -0
- package/dist/tags-JN475JPP.js +26 -0
- package/dist/tags-ODT4WI57.js +20 -0
- package/dist/tags-ODT4WI57.js.map +1 -0
- package/dist/tags-SURC65KF.js +224 -0
- package/dist/tags-SURC65KF.js.map +1 -0
- package/dist/targeting-constants-6Y5J2PPZ.js +118 -0
- package/dist/targeting-criteria-NMZD3CK6.js +113 -0
- package/dist/targets-L4M53NRI.js +102 -0
- package/dist/targets-L4M53NRI.js.map +1 -0
- package/dist/templates-5AC4336C.js +178 -0
- package/dist/templates-5AC4336C.js.map +1 -0
- package/dist/testimonials-YN2AB7U7.js +32 -0
- package/dist/themes-BYRMCXYR.js +94 -0
- package/dist/top-companies-X75ZLN4Y.js +108 -0
- package/dist/top-companies-X75ZLN4Y.js.map +1 -0
- package/dist/translate-YPVSDMH6.js +598 -0
- package/dist/translate-YPVSDMH6.js.map +1 -0
- package/dist/triggers-GBKVEQZF.js +141 -0
- package/dist/triggers-GBKVEQZF.js.map +1 -0
- package/dist/tweets-KTM7HX5R.js +123 -0
- package/dist/unfollow-WBBTVEHE.js +46 -0
- package/dist/unlink-ORHXBQKH.js +67 -0
- package/dist/unlink-ORHXBQKH.js.map +1 -0
- package/dist/unstage-2R23KGQG.js +84 -0
- package/dist/unstage-2R23KGQG.js.map +1 -0
- package/dist/unstage-GYBJZWCZ.js +95 -0
- package/dist/update-2VOYUTLV.js +155 -0
- package/dist/update-2VOYUTLV.js.map +1 -0
- package/dist/update-JTFWVXRB.js +142 -0
- package/dist/update-JTFWVXRB.js.map +1 -0
- package/dist/update-VKPYJXNK.js +63 -0
- package/dist/update-VKPYJXNK.js.map +1 -0
- package/dist/update-YTDA3XJ3.js +98 -0
- package/dist/update-YTDA3XJ3.js.map +1 -0
- package/dist/upload-NA62W5RS.js +150 -0
- package/dist/upload-V42RNE7Q.js +126 -0
- package/dist/upload-V42RNE7Q.js.map +1 -0
- package/dist/upscale-RXJUBHXN.js +109 -0
- package/dist/url-options-LZIHCPP4.js +130 -0
- package/dist/url-params-5SRJGPT6.js +98 -0
- package/dist/url-params-5SRJGPT6.js.map +1 -0
- package/dist/use-MHPNS4V4.js +95 -0
- package/dist/validate-IIOV3YJK.js +88 -0
- package/dist/variant-ZFCWILPG.js +338 -0
- package/dist/videos-MIHTMO3G.js +39 -0
- package/dist/view-PYCGDGT2.js +121 -0
- package/dist/viewer-check-65TIGVAJ.js +68 -0
- package/dist/web-2ACSE34L.js +140 -0
- package/dist/web-2ACSE34L.js.map +1 -0
- package/dist/winners-AI4PVSOI.js +113 -0
- package/dist/winning-ads-2ZOUOAYM.js +84 -0
- package/dist/winning-ads-2ZOUOAYM.js.map +1 -0
- package/dist/write-commands-34L5LJIB.js +713 -0
- package/dist/write-commands-5TJ3LQ5F.js +737 -0
- package/dist/write-commands-GLIDTGI3.js +1015 -0
- package/dist/write-commands-GLIDTGI3.js.map +1 -0
- package/dist/write-commands-R3UCCBUI.js +206 -0
- package/dist/x-V7V47E4N.js +47 -0
- package/package.json +1 -1
- package/dist/account-EVSPW2NO.js +0 -78
- package/dist/account-EVSPW2NO.js.map +0 -1
- package/dist/account-NN54QFVE.js +0 -80
- package/dist/account-W3YGN5RU.js +0 -49
- package/dist/account-reads-3UBDY7R4.js +0 -218
- package/dist/account-writes-M35QGN3H.js +0 -66
- package/dist/accounts-7X62JNDG.js +0 -115
- package/dist/accounts-IUV2RDXE.js +0 -75
- package/dist/accounts-MYN4PSB5.js +0 -610
- package/dist/accounts-MYN4PSB5.js.map +0 -1
- package/dist/accounts-NSJGNWOW.js +0 -76
- package/dist/accounts-NSJGNWOW.js.map +0 -1
- package/dist/accounts-RKAIEZ3N.js +0 -114
- package/dist/actions-R64YNGQ6.js +0 -55
- package/dist/active-entities-O2NQ6ME7.js +0 -103
- package/dist/activities-LAPEEDLI.js +0 -74
- package/dist/ad-group-writes-W757O2JA.js +0 -170
- package/dist/ad-groups-VPUTJHQ6.js +0 -68
- package/dist/ad-writes-6O7ZPQB6.js +0 -174
- package/dist/add-73WQXNDK.js +0 -301
- package/dist/add-73WQXNDK.js.map +0 -1
- package/dist/add-B5PDUYPI.js +0 -97
- package/dist/add-K54IJOCB.js +0 -103
- package/dist/add-K54IJOCB.js.map +0 -1
- package/dist/add-ZLVF72VE.js +0 -105
- package/dist/add-accounts-JJCODXBQ.js +0 -91
- package/dist/ads-3HJPFZEV.js +0 -40
- package/dist/ads-63MVBIHB.js +0 -113
- package/dist/ads-JUCDJ5ZC.js +0 -128
- package/dist/ads-KCELHZAZ.js +0 -77
- package/dist/adsets-Z43O26IR.js +0 -176
- package/dist/advertisers-IANKSIDM.js +0 -125
- package/dist/advertisers-ZGFQ3T3W.js +0 -119
- package/dist/advertisers-ZGFQ3T3W.js.map +0 -1
- package/dist/analytics-KRWVFOBE.js +0 -432
- package/dist/analytics-KRWVFOBE.js.map +0 -1
- package/dist/analytics-VVLCX7LM.js +0 -1975
- package/dist/analytics-VVLCX7LM.js.map +0 -1
- package/dist/animate-CUJNLMHT.js +0 -480
- package/dist/assign-X5DTLHIV.js +0 -76
- package/dist/assign-X5DTLHIV.js.map +0 -1
- package/dist/audience-size-PQA3NQZK.js +0 -93
- package/dist/audience-size-PQA3NQZK.js.map +0 -1
- package/dist/audiences-PLTZX3EZ.js +0 -85
- package/dist/audiences-QXQJWDVX.js +0 -78
- package/dist/audiences-YZKSBJKA.js +0 -268
- package/dist/audit-IBY6D6U3.js +0 -150
- package/dist/audit-IBY6D6U3.js.map +0 -1
- package/dist/audit-VBRVGMF2.js +0 -88
- package/dist/autocomplete-YA2DS6YM.js +0 -110
- package/dist/autocomplete-YA2DS6YM.js.map +0 -1
- package/dist/avatars-IXEYEQZD.js +0 -38
- package/dist/bid-pricing-OXIRMCY4.js +0 -98
- package/dist/bid-pricing-OXIRMCY4.js.map +0 -1
- package/dist/brand-EUGPDVYQ.js +0 -22
- package/dist/brief-GGR3JRG3.js +0 -490
- package/dist/businesses-3HJBLPMC.js +0 -53
- package/dist/campaign-groups-EPT7UL24.js +0 -94
- package/dist/campaign-groups-EPT7UL24.js.map +0 -1
- package/dist/campaign-writes-34CK5DDY.js +0 -170
- package/dist/campaign-writes-HJBJUF4F.js +0 -164
- package/dist/campaign-writes-HJBJUF4F.js.map +0 -1
- package/dist/campaigns-2SNG6SBB.js +0 -110
- package/dist/campaigns-CSEWMSLB.js +0 -108
- package/dist/campaigns-CSEWMSLB.js.map +0 -1
- package/dist/campaigns-M652OGDL.js +0 -76
- package/dist/campaigns-W7IOUU6R.js +0 -107
- package/dist/canvas-UGXQ2OUR.js +0 -46
- package/dist/canvas-UGXQ2OUR.js.map +0 -1
- package/dist/capabilities-OGOB267O.js +0 -143
- package/dist/capabilities-OGOB267O.js.map +0 -1
- package/dist/cards-RB4IQP3D.js +0 -85
- package/dist/catalog-6GXTR7XW.js +0 -65
- package/dist/catalog-6GXTR7XW.js.map +0 -1
- package/dist/catalogs-WKOWOYE6.js +0 -128
- package/dist/changes-UU3FWB63.js +0 -135
- package/dist/chatgpt-AGS322BK.js +0 -47
- package/dist/chats-TWFWA5WN.js +0 -261
- package/dist/chats-TWFWA5WN.js.map +0 -1
- package/dist/chunk-22IO6KYA.js +0 -19
- package/dist/chunk-2XJDWQE6.js +0 -6667
- package/dist/chunk-3BNFG5IH.js +0 -60
- package/dist/chunk-3JER367J.js +0 -46
- package/dist/chunk-3QDGEASC.js +0 -67
- package/dist/chunk-3QLACKNX.js +0 -310
- package/dist/chunk-4EGXTLKD.js +0 -23
- package/dist/chunk-4TOE7NXN.js +0 -188
- package/dist/chunk-4XVVTERH.js +0 -149
- package/dist/chunk-5LHDRP5F.js +0 -166
- package/dist/chunk-5PFKCXTT.js +0 -42
- package/dist/chunk-5W3GSAPI.js +0 -169
- package/dist/chunk-5ZYR2ZDH.js +0 -92
- package/dist/chunk-65VDFALQ.js +0 -846
- package/dist/chunk-6ZCYWVKZ.js +0 -486
- package/dist/chunk-7DIIZUZO.js +0 -454
- package/dist/chunk-7DIIZUZO.js.map +0 -1
- package/dist/chunk-7FCNHAAZ.js +0 -592
- package/dist/chunk-7KSJUVNK.js +0 -346
- package/dist/chunk-7LWVWFIV.js +0 -215
- package/dist/chunk-7LWVWFIV.js.map +0 -1
- package/dist/chunk-7V2FDO3O.js +0 -56
- package/dist/chunk-7YRESXIS.js +0 -125
- package/dist/chunk-ANAJIYDY.js +0 -296
- package/dist/chunk-AVMJDODA.js +0 -98
- package/dist/chunk-BXDWSA2Q.js +0 -191
- package/dist/chunk-C26QSQXP.js +0 -57
- package/dist/chunk-DJV7NHSB.js +0 -3153
- package/dist/chunk-DJV7NHSB.js.map +0 -1
- package/dist/chunk-DWUBZGYX.js +0 -541
- package/dist/chunk-DZD3XEBO.js +0 -84
- package/dist/chunk-EXSVOUU4.js +0 -174
- package/dist/chunk-FPUVMFR6.js +0 -1830
- package/dist/chunk-FXNJMN76.js +0 -160
- package/dist/chunk-G54P65K2.js +0 -76
- package/dist/chunk-GEMBH2HB.js +0 -106
- package/dist/chunk-GF5SLKYH.js +0 -55
- package/dist/chunk-GHIV4TYN.js +0 -494
- package/dist/chunk-GWKYXBZV.js +0 -1711
- package/dist/chunk-GWKYXBZV.js.map +0 -1
- package/dist/chunk-HHLEPWHB.js +0 -433
- package/dist/chunk-IKQE6HHT.js +0 -136
- package/dist/chunk-INMTAPMV.js +0 -74
- package/dist/chunk-IPQ533MQ.js +0 -622
- package/dist/chunk-ISC7J3F2.js +0 -31
- package/dist/chunk-ISC7J3F2.js.map +0 -1
- package/dist/chunk-JAEVTZ6J.js +0 -197
- package/dist/chunk-JM6XT33N.js +0 -1079
- package/dist/chunk-JM6XT33N.js.map +0 -1
- package/dist/chunk-JQH5YQOD.js +0 -337
- package/dist/chunk-KREO4YIC.js +0 -76
- package/dist/chunk-KW6VVXDJ.js +0 -23992
- package/dist/chunk-L7OTZTWV.js +0 -35
- package/dist/chunk-LUQM6DFI.js +0 -133
- package/dist/chunk-LW7OGQOG.js +0 -274
- package/dist/chunk-MLBXDAHX.js +0 -455
- package/dist/chunk-MZ7AEXVL.js +0 -74
- package/dist/chunk-NDEACMK4.js +0 -665
- package/dist/chunk-NDVUUGKL.js +0 -304
- package/dist/chunk-NH7FE2DD.js +0 -5189
- package/dist/chunk-NH7FE2DD.js.map +0 -1
- package/dist/chunk-NRWU674J.js +0 -139
- package/dist/chunk-O47IL4FE.js +0 -26
- package/dist/chunk-OEWBWKDE.js +0 -175
- package/dist/chunk-ON4ITQ3U.js +0 -111
- package/dist/chunk-PAE5XKKY.js +0 -97
- package/dist/chunk-PBHQPJZG.js +0 -474
- package/dist/chunk-PGZ4EHAA.js +0 -610
- package/dist/chunk-PJFGOJGF.js +0 -74
- package/dist/chunk-Q4BQ4OQK.js +0 -207
- package/dist/chunk-QI42BRSW.js +0 -333
- package/dist/chunk-QL57CR4R.js +0 -275
- package/dist/chunk-QMJ22KGU.js +0 -363
- package/dist/chunk-QRQ3LNSX.js +0 -297
- package/dist/chunk-QTYQPOGZ.js +0 -25
- package/dist/chunk-RIYI4BBQ.js +0 -94
- package/dist/chunk-RKOFMNU6.js +0 -819
- package/dist/chunk-RKOFMNU6.js.map +0 -1
- package/dist/chunk-S6JDX5NI.js +0 -103
- package/dist/chunk-S7HMUFO3.js +0 -65
- package/dist/chunk-SHVQFDNY.js +0 -2057
- package/dist/chunk-SHVQFDNY.js.map +0 -1
- package/dist/chunk-SPJJVPPV.js +0 -66
- package/dist/chunk-T2MH5SCT.js +0 -214
- package/dist/chunk-T2MH5SCT.js.map +0 -1
- package/dist/chunk-T4RQKMGO.js +0 -45
- package/dist/chunk-TC3SJU2O.js +0 -509
- package/dist/chunk-U3CTJ2SE.js +0 -172
- package/dist/chunk-U7DPRTS4.js +0 -382
- package/dist/chunk-UC4C6JUW.js +0 -1442
- package/dist/chunk-UQ6DXUOQ.js +0 -533
- package/dist/chunk-UU67QDR7.js +0 -58
- package/dist/chunk-UVVY55HY.js +0 -75
- package/dist/chunk-VAX5ITZ5.js +0 -309
- package/dist/chunk-W2PXP333.js +0 -1599
- package/dist/chunk-WHA3DDV6.js +0 -96
- package/dist/chunk-WY6PPZO4.js +0 -172
- package/dist/chunk-X7ZODEXJ.js +0 -36
- package/dist/chunk-X7ZODEXJ.js.map +0 -1
- package/dist/chunk-XD7F3BSP.js +0 -51
- package/dist/chunk-XPFQ3RSQ.js +0 -84
- package/dist/chunk-XX5DXKEI.js +0 -206
- package/dist/chunk-YDO5NMF3.js +0 -96
- package/dist/chunk-YHXACQKB.js +0 -4410
- package/dist/chunk-YOFHPTWU.js +0 -136
- package/dist/chunk-YSSW437J.js +0 -225
- package/dist/chunk-YX74KMNK.js +0 -106
- package/dist/chunk-ZBWUDJUC.js +0 -98
- package/dist/chunk-ZJVHZHYP.js +0 -6188
- package/dist/chunk-ZQKJIWDS.js +0 -159
- package/dist/claim-OEDHDWP2.js +0 -196
- package/dist/claim-OEDHDWP2.js.map +0 -1
- package/dist/client-P7OREXNC.js +0 -19
- package/dist/code-PRV5LVMQ.js +0 -76
- package/dist/companies-EPGH7WDU.js +0 -194
- package/dist/companies-EPGH7WDU.js.map +0 -1
- package/dist/complete-OB6F2GDY.js +0 -80
- package/dist/complete-OB6F2GDY.js.map +0 -1
- package/dist/config-Y644DINP.js +0 -88
- package/dist/connect-DGTD2N25.js +0 -41
- package/dist/content-TALOFHDP.js +0 -85
- package/dist/conversation-TKNFW3UK.js +0 -92
- package/dist/conversation-TKNFW3UK.js.map +0 -1
- package/dist/conversion-report-QZU2PAQN.js +0 -125
- package/dist/conversion-upload-command-A5X42QDR.js +0 -438
- package/dist/conversion-writes-NSAEZNCR.js +0 -120
- package/dist/conversions-OOWE5O3I.js +0 -134
- package/dist/conversions-OOWE5O3I.js.map +0 -1
- package/dist/conversions-QVNRC7CU.js +0 -76
- package/dist/countries-2I6VNSVR.js +0 -82
- package/dist/create-6BWXUH4T.js +0 -206
- package/dist/create-6BWXUH4T.js.map +0 -1
- package/dist/create-7PBP2D5I.js +0 -234
- package/dist/create-7PBP2D5I.js.map +0 -1
- package/dist/create-JAZ7UYPQ.js +0 -58
- package/dist/create-JAZ7UYPQ.js.map +0 -1
- package/dist/create-KFVDKOPX.js +0 -129
- package/dist/create-KFVDKOPX.js.map +0 -1
- package/dist/creatives-CYKVB3ZK.js +0 -181
- package/dist/creatives-CYKVB3ZK.js.map +0 -1
- package/dist/creatives-JBHNQEH4.js +0 -51
- package/dist/creatives-KNQHWJFJ.js +0 -87
- package/dist/credentials-JD7367HY.js +0 -286
- package/dist/credentials-JD7367HY.js.map +0 -1
- package/dist/critique-234EJDWZ.js +0 -1448
- package/dist/critique-234EJDWZ.js.map +0 -1
- package/dist/critique-JPUJSS3Z.js +0 -212
- package/dist/critique-JPUJSS3Z.js.map +0 -1
- package/dist/crm-AFK6H2PB.js +0 -223
- package/dist/crm-AFK6H2PB.js.map +0 -1
- package/dist/crm-SHU2VNHK.js +0 -317
- package/dist/crm-SHU2VNHK.js.map +0 -1
- package/dist/crop-4ANU2DAZ.js +0 -113
- package/dist/currency-Q7QTY444.js +0 -88
- package/dist/custom-conversions-PAH42DOH.js +0 -125
- package/dist/customers-AWIDLQKG.js +0 -55
- package/dist/delete-DEZGXUCQ.js +0 -69
- package/dist/delete-GDYLLHYS.js +0 -53
- package/dist/delete-GDYLLHYS.js.map +0 -1
- package/dist/delete-OMHFV5PL.js +0 -71
- package/dist/delete-PKWPIXF6.js +0 -62
- package/dist/delete-PKWPIXF6.js.map +0 -1
- package/dist/delete-XABKZH7Z.js +0 -71
- package/dist/delete-Y27LLJRB.js +0 -65
- package/dist/delete-Y27LLJRB.js.map +0 -1
- package/dist/demographics-6UIWUTUD.js +0 -137
- package/dist/demographics-6UIWUTUD.js.map +0 -1
- package/dist/describe-EKDSVBFK.js +0 -97
- package/dist/describe-LK3XJEXX.js +0 -97
- package/dist/dimensions-NKLUJ4I7.js +0 -101
- package/dist/discard-ZOIHZ6LZ.js +0 -65
- package/dist/discard-ZOIHZ6LZ.js.map +0 -1
- package/dist/discover-NZ4L2FAB.js +0 -93
- package/dist/discover-S24Q43VD.js +0 -172
- package/dist/domain-FSFPQHVD.js +0 -97
- package/dist/domain-FSFPQHVD.js.map +0 -1
- package/dist/download-27QM2APL.js +0 -299
- package/dist/draft-3H5DWKCM.js +0 -233
- package/dist/draft-6KLOODXX.js +0 -216
- package/dist/draft-6KLOODXX.js.map +0 -1
- package/dist/draft-JZ26MIHK.js +0 -307
- package/dist/draft-KI2HEV22.js +0 -281
- package/dist/draft-LINEUQZE.js +0 -100
- package/dist/draft-QBYS4BEE.js +0 -327
- package/dist/draft-QBYS4BEE.js.map +0 -1
- package/dist/draft-UYZXKTVR.js +0 -103
- package/dist/draft-ZS5YYGLD.js +0 -305
- package/dist/draft-ZS5YYGLD.js.map +0 -1
- package/dist/env-5OVWQ4KR.js +0 -43
- package/dist/experiment-ZY6GKKFO.js +0 -1397
- package/dist/export-EM7PJUWD.js +0 -168
- package/dist/extract-QFCDAP24.js +0 -113
- package/dist/facets-ZDSC4YPY.js +0 -113
- package/dist/facets-ZDSC4YPY.js.map +0 -1
- package/dist/favorites-A5EKOJRD.js +0 -178
- package/dist/feed-WPL7WCH7.js +0 -177
- package/dist/feedback-FOZ6M7LL.js +0 -66
- package/dist/feedback-record-4QSC2MV2.js +0 -174
- package/dist/feedback-record-4QSC2MV2.js.map +0 -1
- package/dist/fetch-2S2HM7NY.js +0 -175
- package/dist/fetch-2S2HM7NY.js.map +0 -1
- package/dist/fetch-CLHL6XXD.js +0 -139
- package/dist/find-WP6D3QCM.js +0 -134
- package/dist/fit-QOQ2KMBY.js +0 -45
- package/dist/flows-EF3WRATZ.js +0 -246
- package/dist/flows-EF3WRATZ.js.map +0 -1
- package/dist/follow-LA35GI4S.js +0 -94
- package/dist/follow-competitors-N6IUS5NO.js +0 -112
- package/dist/following-XCHW4KIF.js +0 -113
- package/dist/fonts-SKUCXIJM.js +0 -33
- package/dist/forecast-6KWNTFIO.js +0 -168
- package/dist/forecast-XAAUSN5P.js +0 -103
- package/dist/forecast-XAAUSN5P.js.map +0 -1
- package/dist/funding-M2UCPM6X.js +0 -85
- package/dist/funnel-DJGSPOR3.js +0 -393
- package/dist/funnel-DJGSPOR3.js.map +0 -1
- package/dist/ga4-QYCDH25I.js +0 -55
- package/dist/generate-OITIKU7P.js +0 -262
- package/dist/get-2FYPCEQK.js +0 -63
- package/dist/get-DKTWEZUI.js +0 -55
- package/dist/get-DKTWEZUI.js.map +0 -1
- package/dist/get-FNVMXQP3.js +0 -59
- package/dist/get-HS2ACWTQ.js +0 -92
- package/dist/get-SQESAJ4Z.js +0 -61
- package/dist/get-WVNYQQRG.js +0 -77
- package/dist/get-WVNYQQRG.js.map +0 -1
- package/dist/get-YDIJZRT3.js +0 -63
- package/dist/gif-S5EOHDRF.js +0 -94
- package/dist/google-C6U5YMTM.js +0 -136
- package/dist/google-KPER3UKQ.js +0 -3190
- package/dist/google-ads-EYEHCGFP.js +0 -194
- package/dist/google-ads-EYEHCGFP.js.map +0 -1
- package/dist/group-22AAKFSB.js +0 -43
- package/dist/group-V5VAZVOY.js +0 -43
- package/dist/gsc-AC23WZU4.js +0 -30
- package/dist/history-54PMYEOE.js +0 -132
- package/dist/history-54PMYEOE.js.map +0 -1
- package/dist/history-CJCMB2KQ.js +0 -67
- package/dist/hubspot-V3Q7TWB5.js +0 -778
- package/dist/hubspot-V3Q7TWB5.js.map +0 -1
- package/dist/icon-U4RUUEP5.js +0 -137
- package/dist/ideas-J6AJYFTI.js +0 -31
- package/dist/images-BFL4OXSL.js +0 -90
- package/dist/improve-A5UIOZOB.js +0 -86
- package/dist/ingest-JWLERIDM.js +0 -106
- package/dist/ingest-JWLERIDM.js.map +0 -1
- package/dist/ingest-RAWSXS4T.js +0 -22
- package/dist/insights-4DMLJZEE.js +0 -122
- package/dist/insights-GKGZJMAB.js +0 -423
- package/dist/inspect-MZTZ2K4G.js +0 -188
- package/dist/inspect-MZTZ2K4G.js.map +0 -1
- package/dist/inspiration-XCBXTDB6.js +0 -53
- package/dist/intent-TZD4G3JE.js +0 -95
- package/dist/job-63B2WPM2.js +0 -202
- package/dist/job-create-5PZ256PD.js +0 -109
- package/dist/job-status-H5WXV55V.js +0 -74
- package/dist/keep-HGLSG6CJ.js +0 -78
- package/dist/keyword-gap-5H6LPS7Y.js +0 -130
- package/dist/keyword-metrics-IH4FCU7C.js +0 -196
- package/dist/keyword-metrics-IH4FCU7C.js.map +0 -1
- package/dist/keywords-for-site-MDBTGZUE.js +0 -127
- package/dist/keywords-for-site-MDBTGZUE.js.map +0 -1
- package/dist/landing-YYBDXADL.js +0 -28
- package/dist/landings-LUW24CTP.js +0 -151
- package/dist/languages-7X5PROWY.js +0 -55
- package/dist/languages-Q7NLDV5C.js +0 -40
- package/dist/launches-HXMKMYJX.js +0 -108
- package/dist/layerize-SYLRTQ3A.js +0 -190
- package/dist/leads-RQG6LB7K.js +0 -293
- package/dist/leads-SDQBAGZX.js +0 -89
- package/dist/leads-SDQBAGZX.js.map +0 -1
- package/dist/learn-BKMNJ4RL.js +0 -202
- package/dist/learn-BKMNJ4RL.js.map +0 -1
- package/dist/library-PIIT56GK.js +0 -109
- package/dist/lighthouse-ASYAZ4YL.js +0 -75
- package/dist/line-item-writes-IIAXRUEP.js +0 -207
- package/dist/line-item-writes-IIAXRUEP.js.map +0 -1
- package/dist/line-items-IKBF3UU2.js +0 -103
- package/dist/link-6W5LKLN6.js +0 -63
- package/dist/link-6W5LKLN6.js.map +0 -1
- package/dist/linkedin-BJSJRWXC.js +0 -1007
- package/dist/linkedin-BJSJRWXC.js.map +0 -1
- package/dist/list-AHBRL6CF.js +0 -51
- package/dist/list-CO3EEAZK.js +0 -302
- package/dist/list-CO3EEAZK.js.map +0 -1
- package/dist/list-GW3LWBP2.js +0 -57
- package/dist/list-IDWGB4X3.js +0 -62
- package/dist/list-IDWGB4X3.js.map +0 -1
- package/dist/list-IZUXVPNL.js +0 -150
- package/dist/list-IZUXVPNL.js.map +0 -1
- package/dist/list-LQZDHNG3.js +0 -50
- package/dist/list-TSTTP5AF.js +0 -65
- package/dist/list-U46RRB5O.js +0 -76
- package/dist/locations-PQLM4426.js +0 -40
- package/dist/locations-VBHVPYER.js +0 -67
- package/dist/log-3MBBTTPW.js +0 -91
- package/dist/log-3MBBTTPW.js.map +0 -1
- package/dist/logo-YF46CHZO.js +0 -18
- package/dist/lookup-SOGUDT5P.js +0 -22
- package/dist/make-UOAOMFT3.js +0 -633
- package/dist/map-4QGLZFBQ.js +0 -403
- package/dist/map-4QGLZFBQ.js.map +0 -1
- package/dist/mcp-AYTX4TDA.js +0 -462
- package/dist/mcp-AYTX4TDA.js.map +0 -1
- package/dist/media-HX3X5ZW7.js +0 -89
- package/dist/media-VGJYSC4H.js +0 -15
- package/dist/media-sources-ESNG2EUR.js +0 -32
- package/dist/members-GSAI5DKT.js +0 -43
- package/dist/members-GSAI5DKT.js.map +0 -1
- package/dist/meta-BMUEM3KS.js +0 -69
- package/dist/metrics-N7SG5ME6.js +0 -152
- package/dist/models-DKTFCIPI.js +0 -155
- package/dist/normalize-2YBSAX54.js +0 -140
- package/dist/normalize-2YBSAX54.js.map +0 -1
- package/dist/normalize-E75DZCVO.js +0 -806
- package/dist/options-JF627M4S.js +0 -120
- package/dist/options-JF627M4S.js.map +0 -1
- package/dist/output-VNUB3ZDU.js +0 -24
- package/dist/page-T5GQ74JQ.js +0 -105
- package/dist/pages-Y6GD5TNO.js +0 -66
- package/dist/performance-VP7LFTOX.js +0 -23
- package/dist/pinterest-IO4HREWY.js +0 -96
- package/dist/pixels-QM3COIKE.js +0 -108
- package/dist/pixels-WWIVBVBD.js +0 -60
- package/dist/plan-M2L7MJEQ.js +0 -207
- package/dist/preview-VFM2WX4B.js +0 -169
- package/dist/profile-35CJMR2D.js +0 -150
- package/dist/promoted-tweet-writes-BGH7YQD3.js +0 -179
- package/dist/promoted-tweet-writes-BGH7YQD3.js.map +0 -1
- package/dist/promoted-tweets-AX3RBOMH.js +0 -119
- package/dist/properties-YPRTWLT3.js +0 -101
- package/dist/publish-QLTJ7MWQ.js +0 -321
- package/dist/publish-QLTJ7MWQ.js.map +0 -1
- package/dist/query-APOXSSD6.js +0 -236
- package/dist/query-IBHH6WZX.js +0 -247
- package/dist/query-SDOGFOUT.js +0 -61
- package/dist/questionnaire-DKZNPZMI.js +0 -93
- package/dist/read-LVAHQREC.js +0 -141
- package/dist/reddit-7KE75WNK.js +0 -25
- package/dist/refresh-U2HT4J6D.js +0 -93
- package/dist/refresh-U2HT4J6D.js.map +0 -1
- package/dist/release-YEI5C7QA.js +0 -59
- package/dist/release-YEI5C7QA.js.map +0 -1
- package/dist/relevant-pages-I3JY3IJV.js +0 -99
- package/dist/remove-4T4MG4EM.js +0 -49
- package/dist/remove-4T4MG4EM.js.map +0 -1
- package/dist/remove-QPYAI6UW.js +0 -48
- package/dist/reopen-RDQKY3A2.js +0 -62
- package/dist/reopen-RDQKY3A2.js.map +0 -1
- package/dist/rerun-SBUXP6SE.js +0 -84
- package/dist/research-GJW3K4PY.js +0 -62
- package/dist/research-QXX7N2AG.js +0 -261
- package/dist/research-QXX7N2AG.js.map +0 -1
- package/dist/reset-Q7DXAOPP.js +0 -53
- package/dist/reset-Q7DXAOPP.js.map +0 -1
- package/dist/reset-YES7QBG5.js +0 -53
- package/dist/reset-YES7QBG5.js.map +0 -1
- package/dist/resolve-XCJBMS7K.js +0 -120
- package/dist/resolve-XCJBMS7K.js.map +0 -1
- package/dist/retry-N5BAWMOX.js +0 -61
- package/dist/retry-N5BAWMOX.js.map +0 -1
- package/dist/retry-WUCEB7VA.js +0 -59
- package/dist/retry-WUCEB7VA.js.map +0 -1
- package/dist/retry-failed-XR6YAXQP.js +0 -45
- package/dist/run-2BZ43ROF.js +0 -59
- package/dist/run-YC2P6ZY6.js +0 -64
- package/dist/run-YC2P6ZY6.js.map +0 -1
- package/dist/scaffold-ad-UVCBYEXD.js +0 -1548
- package/dist/scaffold-static-ad-6MAOUZ7U.js +0 -971
- package/dist/scaffold-video-L2HMY2DR.js +0 -872
- package/dist/schedule-TLRN22JZ.js +0 -66
- package/dist/schedule-U5AUACBX.js +0 -60
- package/dist/schedule-U5AUACBX.js.map +0 -1
- package/dist/scheduled-agents-MDGPI2M4.js +0 -49
- package/dist/schema-PMUG7S5V.js +0 -63
- package/dist/schema-YURGT27S.js +0 -131
- package/dist/schema-YURGT27S.js.map +0 -1
- package/dist/scrape-ROILJTKL.js +0 -2241
- package/dist/screenshot-VWSXFIAR.js +0 -102
- package/dist/search-5FWLOOSS.js +0 -224
- package/dist/search-5VQOH7OZ.js +0 -26
- package/dist/search-5X42EKRW.js +0 -92
- package/dist/search-BBUAHFWV.js +0 -173
- package/dist/search-BBUAHFWV.js.map +0 -1
- package/dist/search-Y4YQGHK5.js +0 -91
- package/dist/search-copy-67XYV63G.js +0 -168
- package/dist/seeds-LE2CJPFA.js +0 -101
- package/dist/select-HMSZ6AAI.js +0 -93
- package/dist/select-HMSZ6AAI.js.map +0 -1
- package/dist/sends-B5ONB2KY.js +0 -309
- package/dist/sequences-EPTEYUDS.js +0 -146
- package/dist/set-prompt-6PDWQCT7.js +0 -185
- package/dist/setup-links-ZSGBSJG5.js +0 -140
- package/dist/setup-links-ZSGBSJG5.js.map +0 -1
- package/dist/shared-3FM2MOWA.js +0 -31
- package/dist/site-QXFPQYX6.js +0 -176
- package/dist/site-QXFPQYX6.js.map +0 -1
- package/dist/sitemaps-CKHZOGR6.js +0 -87
- package/dist/sites-OEHXRMWU.js +0 -101
- package/dist/skills-RD7IHMUO.js +0 -47
- package/dist/sources-3NPURARN.js +0 -30
- package/dist/sources-QD4NGNGY.js +0 -420
- package/dist/sources-QD4NGNGY.js.map +0 -1
- package/dist/stale-3RLO6UPG.js +0 -62
- package/dist/stale-3RLO6UPG.js.map +0 -1
- package/dist/stats-RWAXEWYD.js +0 -34
- package/dist/status-W64RG5TR.js +0 -61
- package/dist/status-W64RG5TR.js.map +0 -1
- package/dist/sticker-EVDFBJXE.js +0 -94
- package/dist/stock-WRTAR4PW.js +0 -179
- package/dist/studio-Y7OB5J6R.js +0 -49
- package/dist/sync-EKBT6R57.js +0 -54
- package/dist/sync-ITRZURD7.js +0 -53
- package/dist/sync-ITRZURD7.js.map +0 -1
- package/dist/sync-SPFI5726.js +0 -265
- package/dist/sync-definition-Z73K6BU2.js +0 -52
- package/dist/tag-manager-G4KPRTI2.js +0 -43
- package/dist/tags-22XRJTPJ.js +0 -26
- package/dist/tags-2BCS5MAY.js +0 -19
- package/dist/tags-2BCS5MAY.js.map +0 -1
- package/dist/tags-CFTVMRNR.js +0 -223
- package/dist/tags-CFTVMRNR.js.map +0 -1
- package/dist/tags-NZNVT5GK.js +0 -19
- package/dist/tags-NZNVT5GK.js.map +0 -1
- package/dist/tags-XHAFEXAM.js +0 -19
- package/dist/tags-XHAFEXAM.js.map +0 -1
- package/dist/targeting-constants-JTN45K7O.js +0 -118
- package/dist/targeting-criteria-A3PCU32M.js +0 -113
- package/dist/targets-BDSBX4FE.js +0 -101
- package/dist/targets-BDSBX4FE.js.map +0 -1
- package/dist/templates-64SHG73N.js +0 -177
- package/dist/templates-64SHG73N.js.map +0 -1
- package/dist/testimonials-QAEQK2QH.js +0 -32
- package/dist/themes-V27A4BN5.js +0 -94
- package/dist/top-companies-HYUHXCG4.js +0 -107
- package/dist/top-companies-HYUHXCG4.js.map +0 -1
- package/dist/translate-NRRZCXCE.js +0 -597
- package/dist/translate-NRRZCXCE.js.map +0 -1
- package/dist/triggers-XFY2NQ26.js +0 -140
- package/dist/triggers-XFY2NQ26.js.map +0 -1
- package/dist/tweets-FCHLCYSG.js +0 -123
- package/dist/unfollow-RRLQBX76.js +0 -46
- package/dist/unlink-IWTJMF7A.js +0 -66
- package/dist/unlink-IWTJMF7A.js.map +0 -1
- package/dist/unstage-743JO3CK.js +0 -83
- package/dist/unstage-743JO3CK.js.map +0 -1
- package/dist/unstage-GPI6FRJZ.js +0 -95
- package/dist/update-36HCI3GC.js +0 -97
- package/dist/update-36HCI3GC.js.map +0 -1
- package/dist/update-4H56EP7C.js +0 -154
- package/dist/update-4H56EP7C.js.map +0 -1
- package/dist/update-AN4IFT7R.js +0 -141
- package/dist/update-AN4IFT7R.js.map +0 -1
- package/dist/update-S3OWWI4P.js +0 -62
- package/dist/update-S3OWWI4P.js.map +0 -1
- package/dist/upload-NOKZB2WK.js +0 -150
- package/dist/upload-RXW2TNVG.js +0 -125
- package/dist/upload-RXW2TNVG.js.map +0 -1
- package/dist/upscale-HWT7BFR7.js +0 -109
- package/dist/url-options-6DISOYNT.js +0 -130
- package/dist/url-params-EGGK7XLL.js +0 -97
- package/dist/url-params-EGGK7XLL.js.map +0 -1
- package/dist/use-UNLVMWCI.js +0 -95
- package/dist/validate-4KUSCG5B.js +0 -88
- package/dist/variant-ZNLZOGOP.js +0 -338
- package/dist/videos-3GCK5R4D.js +0 -39
- package/dist/view-JBR45SOC.js +0 -121
- package/dist/viewer-check-LLQ3N4BI.js +0 -69
- package/dist/web-C7RX4AM7.js +0 -139
- package/dist/web-C7RX4AM7.js.map +0 -1
- package/dist/winners-G6UVDODV.js +0 -113
- package/dist/winning-ads-UKRM3SJO.js +0 -84
- package/dist/winning-ads-UKRM3SJO.js.map +0 -1
- package/dist/write-commands-DHMPOFSX.js +0 -1014
- package/dist/write-commands-DHMPOFSX.js.map +0 -1
- package/dist/write-commands-J2RGNLIP.js +0 -206
- package/dist/write-commands-SNGBG2FP.js +0 -713
- package/dist/write-commands-VPPBX4VX.js +0 -737
- package/dist/x-XEPTIJZ6.js +0 -47
- /package/dist/{account-W3YGN5RU.js.map → account-HZC6X2PH.js.map} +0 -0
- /package/dist/{account-NN54QFVE.js.map → account-MLX2MQTO.js.map} +0 -0
- /package/dist/{account-reads-3UBDY7R4.js.map → account-reads-FCETXYI7.js.map} +0 -0
- /package/dist/{account-writes-M35QGN3H.js.map → account-writes-UNVXSLMV.js.map} +0 -0
- /package/dist/{accounts-7X62JNDG.js.map → accounts-4P54UY6F.js.map} +0 -0
- /package/dist/{accounts-IUV2RDXE.js.map → accounts-6UNBLIUH.js.map} +0 -0
- /package/dist/{accounts-RKAIEZ3N.js.map → accounts-GVTZN4VE.js.map} +0 -0
- /package/dist/{actions-R64YNGQ6.js.map → actions-MEKXFKDN.js.map} +0 -0
- /package/dist/{active-entities-O2NQ6ME7.js.map → active-entities-UGHMVRWH.js.map} +0 -0
- /package/dist/{activities-LAPEEDLI.js.map → activities-2J7FTZMN.js.map} +0 -0
- /package/dist/{ad-group-writes-W757O2JA.js.map → ad-group-writes-2YEZNT5Q.js.map} +0 -0
- /package/dist/{ad-groups-VPUTJHQ6.js.map → ad-groups-YXVIPI7B.js.map} +0 -0
- /package/dist/{ad-writes-6O7ZPQB6.js.map → ad-writes-HBNG55VT.js.map} +0 -0
- /package/dist/{add-ZLVF72VE.js.map → add-2FHPLALV.js.map} +0 -0
- /package/dist/{add-B5PDUYPI.js.map → add-JP76KCCY.js.map} +0 -0
- /package/dist/{add-accounts-JJCODXBQ.js.map → add-accounts-M5Y4DQFM.js.map} +0 -0
- /package/dist/{ads-JUCDJ5ZC.js.map → ads-DB5NDHX5.js.map} +0 -0
- /package/dist/{ads-3HJPFZEV.js.map → ads-NDV3GOIW.js.map} +0 -0
- /package/dist/{ads-KCELHZAZ.js.map → ads-QBXR7IPO.js.map} +0 -0
- /package/dist/{ads-63MVBIHB.js.map → ads-W2IPUWHQ.js.map} +0 -0
- /package/dist/{adsets-Z43O26IR.js.map → adsets-PY5ZKGBO.js.map} +0 -0
- /package/dist/{advertisers-IANKSIDM.js.map → advertisers-BVAZ4XUX.js.map} +0 -0
- /package/dist/{animate-CUJNLMHT.js.map → animate-QEHFEQHZ.js.map} +0 -0
- /package/dist/{audiences-PLTZX3EZ.js.map → audiences-NTT3HZN7.js.map} +0 -0
- /package/dist/{audiences-YZKSBJKA.js.map → audiences-QWJ34WIW.js.map} +0 -0
- /package/dist/{audiences-QXQJWDVX.js.map → audiences-UUIYQFS6.js.map} +0 -0
- /package/dist/{audit-VBRVGMF2.js.map → audit-OWXTLQC4.js.map} +0 -0
- /package/dist/{avatars-IXEYEQZD.js.map → avatars-3PC7FTU3.js.map} +0 -0
- /package/dist/{brand-EUGPDVYQ.js.map → brand-XVXQ7VAU.js.map} +0 -0
- /package/dist/{brief-GGR3JRG3.js.map → brief-SZSPXGG4.js.map} +0 -0
- /package/dist/{businesses-3HJBLPMC.js.map → businesses-ZH67AXR6.js.map} +0 -0
- /package/dist/{campaign-writes-34CK5DDY.js.map → campaign-writes-4N3LQJL2.js.map} +0 -0
- /package/dist/{campaigns-M652OGDL.js.map → campaigns-5FH5THMS.js.map} +0 -0
- /package/dist/{campaigns-2SNG6SBB.js.map → campaigns-66OOGMDW.js.map} +0 -0
- /package/dist/{campaigns-W7IOUU6R.js.map → campaigns-QUQQYMIO.js.map} +0 -0
- /package/dist/{cards-RB4IQP3D.js.map → cards-RSMTBND3.js.map} +0 -0
- /package/dist/{catalogs-WKOWOYE6.js.map → catalogs-3IYC53GK.js.map} +0 -0
- /package/dist/{changes-UU3FWB63.js.map → changes-U263PWVD.js.map} +0 -0
- /package/dist/{chatgpt-AGS322BK.js.map → chatgpt-O64OJE6R.js.map} +0 -0
- /package/dist/{chunk-3JER367J.js.map → chunk-35ENAFJX.js.map} +0 -0
- /package/dist/{chunk-Q4BQ4OQK.js.map → chunk-3KIH22M7.js.map} +0 -0
- /package/dist/{chunk-UC4C6JUW.js.map → chunk-4FCLXJYW.js.map} +0 -0
- /package/dist/{chunk-NDVUUGKL.js.map → chunk-4OSBBGG5.js.map} +0 -0
- /package/dist/{chunk-AVMJDODA.js.map → chunk-57UECM77.js.map} +0 -0
- /package/dist/{chunk-MLBXDAHX.js.map → chunk-5Q3XCLMS.js.map} +0 -0
- /package/dist/{chunk-YOFHPTWU.js.map → chunk-65BQAJMH.js.map} +0 -0
- /package/dist/{chunk-UVVY55HY.js.map → chunk-6GFJFTG6.js.map} +0 -0
- /package/dist/{chunk-FXNJMN76.js.map → chunk-6GKC2PBR.js.map} +0 -0
- /package/dist/{chunk-KREO4YIC.js.map → chunk-6HPIWZHS.js.map} +0 -0
- /package/dist/{chunk-PGZ4EHAA.js.map → chunk-73B3RQJC.js.map} +0 -0
- /package/dist/{chunk-3QLACKNX.js.map → chunk-7MQVCSA7.js.map} +0 -0
- /package/dist/{chunk-O47IL4FE.js.map → chunk-7NTION5F.js.map} +0 -0
- /package/dist/{chunk-FPUVMFR6.js.map → chunk-AQ4HEXUH.js.map} +0 -0
- /package/dist/{chunk-PBHQPJZG.js.map → chunk-AUWN3C2K.js.map} +0 -0
- /package/dist/{chunk-GHIV4TYN.js.map → chunk-B3SPFCKC.js.map} +0 -0
- /package/dist/{chunk-7YRESXIS.js.map → chunk-CBCGVPHB.js.map} +0 -0
- /package/dist/{chunk-QI42BRSW.js.map → chunk-CECS3DHZ.js.map} +0 -0
- /package/dist/{chunk-NDEACMK4.js.map → chunk-CHFKTRB5.js.map} +0 -0
- /package/dist/{chunk-3QDGEASC.js.map → chunk-D24DJ7DB.js.map} +0 -0
- /package/dist/{chunk-PAE5XKKY.js.map → chunk-D5MF337I.js.map} +0 -0
- /package/dist/{chunk-YSSW437J.js.map → chunk-DLUWHZCE.js.map} +0 -0
- /package/dist/{chunk-XD7F3BSP.js.map → chunk-ECBHE5S6.js.map} +0 -0
- /package/dist/{chunk-ON4ITQ3U.js.map → chunk-EXZ2NIKX.js.map} +0 -0
- /package/dist/{chunk-WHA3DDV6.js.map → chunk-F3FSD6BO.js.map} +0 -0
- /package/dist/{chunk-4EGXTLKD.js.map → chunk-F5XU546T.js.map} +0 -0
- /package/dist/{chunk-L7OTZTWV.js.map → chunk-G3KO2HFZ.js.map} +0 -0
- /package/dist/{chunk-5LHDRP5F.js.map → chunk-GKXMIXEV.js.map} +0 -0
- /package/dist/{chunk-ANAJIYDY.js.map → chunk-GT4UFORX.js.map} +0 -0
- /package/dist/{chunk-YHXACQKB.js.map → chunk-GWM4DCAK.js.map} +0 -0
- /package/dist/{chunk-GEMBH2HB.js.map → chunk-GZ6YS7TG.js.map} +0 -0
- /package/dist/{chunk-YX74KMNK.js.map → chunk-H7JOVRHO.js.map} +0 -0
- /package/dist/{chunk-7FCNHAAZ.js.map → chunk-HF5V7TWU.js.map} +0 -0
- /package/dist/{chunk-HHLEPWHB.js.map → chunk-HM25R6XJ.js.map} +0 -0
- /package/dist/{chunk-5W3GSAPI.js.map → chunk-HWSUW5PX.js.map} +0 -0
- /package/dist/{chunk-7KSJUVNK.js.map → chunk-I7R3YSZF.js.map} +0 -0
- /package/dist/{chunk-NRWU674J.js.map → chunk-IJDF7D4U.js.map} +0 -0
- /package/dist/{chunk-QMJ22KGU.js.map → chunk-IK2S7QGF.js.map} +0 -0
- /package/dist/{chunk-4TOE7NXN.js.map → chunk-INI7U2SZ.js.map} +0 -0
- /package/dist/{chunk-U3CTJ2SE.js.map → chunk-INJHF7AF.js.map} +0 -0
- /package/dist/{chunk-G54P65K2.js.map → chunk-J2QOKD2F.js.map} +0 -0
- /package/dist/{chunk-OEWBWKDE.js.map → chunk-J57EXXFU.js.map} +0 -0
- /package/dist/{chunk-LW7OGQOG.js.map → chunk-JE5NMVRX.js.map} +0 -0
- /package/dist/{chunk-T4RQKMGO.js.map → chunk-JHLGXB6K.js.map} +0 -0
- /package/dist/{chunk-KW6VVXDJ.js.map → chunk-JSEPE5EP.js.map} +0 -0
- /package/dist/{chunk-QTYQPOGZ.js.map → chunk-KB5HBQEK.js.map} +0 -0
- /package/dist/{chunk-2XJDWQE6.js.map → chunk-KCCWCK6L.js.map} +0 -0
- /package/dist/{chunk-YDO5NMF3.js.map → chunk-KTL2D7NT.js.map} +0 -0
- /package/dist/{chunk-W2PXP333.js.map → chunk-KWTKAYCG.js.map} +0 -0
- /package/dist/{chunk-VAX5ITZ5.js.map → chunk-LHNL6JM2.js.map} +0 -0
- /package/dist/{chunk-C26QSQXP.js.map → chunk-MPXDQWYI.js.map} +0 -0
- /package/dist/{chunk-TC3SJU2O.js.map → chunk-NBYP5N4X.js.map} +0 -0
- /package/dist/{chunk-U7DPRTS4.js.map → chunk-NOSWSBLW.js.map} +0 -0
- /package/dist/{chunk-IKQE6HHT.js.map → chunk-O3LHCQ7Q.js.map} +0 -0
- /package/dist/{chunk-5ZYR2ZDH.js.map → chunk-P5H2BL4J.js.map} +0 -0
- /package/dist/{chunk-UQ6DXUOQ.js.map → chunk-P66JWKAL.js.map} +0 -0
- /package/dist/{chunk-SPJJVPPV.js.map → chunk-PA5MYVQY.js.map} +0 -0
- /package/dist/{chunk-UU67QDR7.js.map → chunk-Q676JHJA.js.map} +0 -0
- /package/dist/{chunk-4XVVTERH.js.map → chunk-QDOVBGKZ.js.map} +0 -0
- /package/dist/{chunk-IPQ533MQ.js.map → chunk-QN5VAYER.js.map} +0 -0
- /package/dist/{chunk-EXSVOUU4.js.map → chunk-QNEX7FEC.js.map} +0 -0
- /package/dist/{chunk-S7HMUFO3.js.map → chunk-QTL4NJ5I.js.map} +0 -0
- /package/dist/{chunk-ZBWUDJUC.js.map → chunk-R3GZRH43.js.map} +0 -0
- /package/dist/{chunk-S6JDX5NI.js.map → chunk-R7CQCE3E.js.map} +0 -0
- /package/dist/{chunk-WY6PPZO4.js.map → chunk-RFJ3S47F.js.map} +0 -0
- /package/dist/{chunk-ZQKJIWDS.js.map → chunk-TMQ5LHZ3.js.map} +0 -0
- /package/dist/{chunk-65VDFALQ.js.map → chunk-TRLVH7T3.js.map} +0 -0
- /package/dist/{chunk-JQH5YQOD.js.map → chunk-UUBFYAVE.js.map} +0 -0
- /package/dist/{chunk-7V2FDO3O.js.map → chunk-UXTZ5MBE.js.map} +0 -0
- /package/dist/{chunk-GF5SLKYH.js.map → chunk-V43RLLZE.js.map} +0 -0
- /package/dist/{chunk-DWUBZGYX.js.map → chunk-V4UFNEHE.js.map} +0 -0
- /package/dist/{chunk-3BNFG5IH.js.map → chunk-V5L5QD7R.js.map} +0 -0
- /package/dist/{chunk-QRQ3LNSX.js.map → chunk-VAYFVC5B.js.map} +0 -0
- /package/dist/{chunk-5PFKCXTT.js.map → chunk-VFSLIDXA.js.map} +0 -0
- /package/dist/{chunk-DZD3XEBO.js.map → chunk-VHMNSO2B.js.map} +0 -0
- /package/dist/{chunk-QL57CR4R.js.map → chunk-VOH2QWVG.js.map} +0 -0
- /package/dist/{chunk-LUQM6DFI.js.map → chunk-WESRVXFS.js.map} +0 -0
- /package/dist/{chunk-XPFQ3RSQ.js.map → chunk-WILN7TD6.js.map} +0 -0
- /package/dist/{chunk-ZJVHZHYP.js.map → chunk-WXC3I4CT.js.map} +0 -0
- /package/dist/{chunk-JAEVTZ6J.js.map → chunk-X4DLIDFW.js.map} +0 -0
- /package/dist/{chunk-XX5DXKEI.js.map → chunk-YT74ZEVP.js.map} +0 -0
- /package/dist/{chunk-BXDWSA2Q.js.map → chunk-Z5KBRTB2.js.map} +0 -0
- /package/dist/{chunk-MZ7AEXVL.js.map → chunk-ZBKBTTHD.js.map} +0 -0
- /package/dist/{chunk-22IO6KYA.js.map → chunk-ZFIYN7KP.js.map} +0 -0
- /package/dist/{chunk-6ZCYWVKZ.js.map → chunk-ZLU5QDLU.js.map} +0 -0
- /package/dist/{chunk-RIYI4BBQ.js.map → chunk-ZNNC6B75.js.map} +0 -0
- /package/dist/{chunk-PJFGOJGF.js.map → chunk-ZO2YLHRW.js.map} +0 -0
- /package/dist/{chunk-INMTAPMV.js.map → chunk-ZPJE6D7W.js.map} +0 -0
- /package/dist/{client-P7OREXNC.js.map → client-LY2JCQS2.js.map} +0 -0
- /package/dist/{code-PRV5LVMQ.js.map → code-7CBNYUPU.js.map} +0 -0
- /package/dist/{config-Y644DINP.js.map → config-7COTFJWK.js.map} +0 -0
- /package/dist/{connect-DGTD2N25.js.map → connect-VOCZSB3W.js.map} +0 -0
- /package/dist/{content-TALOFHDP.js.map → content-OXMONMHJ.js.map} +0 -0
- /package/dist/{conversion-report-QZU2PAQN.js.map → conversion-report-ZRNV7X7D.js.map} +0 -0
- /package/dist/{conversion-upload-command-A5X42QDR.js.map → conversion-upload-command-IMHHSGYU.js.map} +0 -0
- /package/dist/{conversion-writes-NSAEZNCR.js.map → conversion-writes-7N5UDQGH.js.map} +0 -0
- /package/dist/{conversions-QVNRC7CU.js.map → conversions-QOXRO26I.js.map} +0 -0
- /package/dist/{countries-2I6VNSVR.js.map → countries-UXAUGSBR.js.map} +0 -0
- /package/dist/{creatives-JBHNQEH4.js.map → creatives-F26GDJG2.js.map} +0 -0
- /package/dist/{creatives-KNQHWJFJ.js.map → creatives-ONKKGW5T.js.map} +0 -0
- /package/dist/{crop-4ANU2DAZ.js.map → crop-3ZV5BFCA.js.map} +0 -0
- /package/dist/{currency-Q7QTY444.js.map → currency-PGLGLRKU.js.map} +0 -0
- /package/dist/{custom-conversions-PAH42DOH.js.map → custom-conversions-TV23XQHW.js.map} +0 -0
- /package/dist/{customers-AWIDLQKG.js.map → customers-I2EHMEX3.js.map} +0 -0
- /package/dist/{delete-OMHFV5PL.js.map → delete-MUPTLWHI.js.map} +0 -0
- /package/dist/{delete-DEZGXUCQ.js.map → delete-R2SEUSLV.js.map} +0 -0
- /package/dist/{delete-XABKZH7Z.js.map → delete-ZGBBWFAW.js.map} +0 -0
- /package/dist/{describe-LK3XJEXX.js.map → describe-4O3VCV6L.js.map} +0 -0
- /package/dist/{describe-EKDSVBFK.js.map → describe-FCTM53MM.js.map} +0 -0
- /package/dist/{dimensions-NKLUJ4I7.js.map → dimensions-AD4VS5AH.js.map} +0 -0
- /package/dist/{discover-S24Q43VD.js.map → discover-6XSPNZYE.js.map} +0 -0
- /package/dist/{discover-NZ4L2FAB.js.map → discover-UQXQUPNO.js.map} +0 -0
- /package/dist/{download-27QM2APL.js.map → download-IE6XLFHM.js.map} +0 -0
- /package/dist/{draft-UYZXKTVR.js.map → draft-ENA7S4Y7.js.map} +0 -0
- /package/dist/{draft-LINEUQZE.js.map → draft-MGKJ5RYI.js.map} +0 -0
- /package/dist/{draft-JZ26MIHK.js.map → draft-PPRDQDGW.js.map} +0 -0
- /package/dist/{draft-3H5DWKCM.js.map → draft-S6VPKZYY.js.map} +0 -0
- /package/dist/{draft-KI2HEV22.js.map → draft-VVDI2OR3.js.map} +0 -0
- /package/dist/{env-5OVWQ4KR.js.map → env-YLOVBOAE.js.map} +0 -0
- /package/dist/{experiment-ZY6GKKFO.js.map → experiment-PHFP6IBM.js.map} +0 -0
- /package/dist/{export-EM7PJUWD.js.map → export-R2IMUCQO.js.map} +0 -0
- /package/dist/{extract-QFCDAP24.js.map → extract-OQP3TSQG.js.map} +0 -0
- /package/dist/{favorites-A5EKOJRD.js.map → favorites-NS73FDG5.js.map} +0 -0
- /package/dist/{feed-WPL7WCH7.js.map → feed-SQPOB7SP.js.map} +0 -0
- /package/dist/{feedback-FOZ6M7LL.js.map → feedback-XHSJBBEJ.js.map} +0 -0
- /package/dist/{fetch-CLHL6XXD.js.map → fetch-PQ3NOPIE.js.map} +0 -0
- /package/dist/{find-WP6D3QCM.js.map → find-Y22AANDE.js.map} +0 -0
- /package/dist/{fit-QOQ2KMBY.js.map → fit-XJPM6573.js.map} +0 -0
- /package/dist/{follow-LA35GI4S.js.map → follow-N3DQZV7M.js.map} +0 -0
- /package/dist/{follow-competitors-N6IUS5NO.js.map → follow-competitors-BZPCBGIB.js.map} +0 -0
- /package/dist/{following-XCHW4KIF.js.map → following-KESWTEBR.js.map} +0 -0
- /package/dist/{fonts-SKUCXIJM.js.map → fonts-3FX3OYEQ.js.map} +0 -0
- /package/dist/{forecast-6KWNTFIO.js.map → forecast-CYSEUIS4.js.map} +0 -0
- /package/dist/{funding-M2UCPM6X.js.map → funding-G6S4UVU5.js.map} +0 -0
- /package/dist/{ga4-QYCDH25I.js.map → ga4-2QHOA4RO.js.map} +0 -0
- /package/dist/{generate-OITIKU7P.js.map → generate-F4FDRDAW.js.map} +0 -0
- /package/dist/{get-YDIJZRT3.js.map → get-3P2EQLP3.js.map} +0 -0
- /package/dist/{get-SQESAJ4Z.js.map → get-FJB3X44Z.js.map} +0 -0
- /package/dist/{get-2FYPCEQK.js.map → get-MBGO4VJD.js.map} +0 -0
- /package/dist/{get-FNVMXQP3.js.map → get-NOKSZPIV.js.map} +0 -0
- /package/dist/{get-HS2ACWTQ.js.map → get-WHC4SRYK.js.map} +0 -0
- /package/dist/{gif-S5EOHDRF.js.map → gif-SFYVDLCU.js.map} +0 -0
- /package/dist/{google-KPER3UKQ.js.map → google-MY45TUC4.js.map} +0 -0
- /package/dist/{google-C6U5YMTM.js.map → google-XRAMIES5.js.map} +0 -0
- /package/dist/{group-V5VAZVOY.js.map → group-6RDJTWVN.js.map} +0 -0
- /package/dist/{group-22AAKFSB.js.map → group-TZJCKHKS.js.map} +0 -0
- /package/dist/{gsc-AC23WZU4.js.map → gsc-HD6UFRYM.js.map} +0 -0
- /package/dist/{history-CJCMB2KQ.js.map → history-2WBZRPPE.js.map} +0 -0
- /package/dist/{icon-U4RUUEP5.js.map → icon-BMCDFGMN.js.map} +0 -0
- /package/dist/{ideas-J6AJYFTI.js.map → ideas-VLHUTFHP.js.map} +0 -0
- /package/dist/{images-BFL4OXSL.js.map → images-C4TBUPXM.js.map} +0 -0
- /package/dist/{improve-A5UIOZOB.js.map → improve-P6F2HXYQ.js.map} +0 -0
- /package/dist/{ingest-RAWSXS4T.js.map → ingest-SXT33KE6.js.map} +0 -0
- /package/dist/{insights-GKGZJMAB.js.map → insights-DI4W3D2Y.js.map} +0 -0
- /package/dist/{insights-4DMLJZEE.js.map → insights-X75LRPS3.js.map} +0 -0
- /package/dist/{inspiration-XCBXTDB6.js.map → inspiration-MDCCU2CF.js.map} +0 -0
- /package/dist/{intent-TZD4G3JE.js.map → intent-A4SOIFKK.js.map} +0 -0
- /package/dist/{job-63B2WPM2.js.map → job-QDLPQFIT.js.map} +0 -0
- /package/dist/{job-create-5PZ256PD.js.map → job-create-6XKD5GEC.js.map} +0 -0
- /package/dist/{job-status-H5WXV55V.js.map → job-status-MH7CGLWC.js.map} +0 -0
- /package/dist/{keep-HGLSG6CJ.js.map → keep-42SLV4CR.js.map} +0 -0
- /package/dist/{keyword-gap-5H6LPS7Y.js.map → keyword-gap-D4P2CC2L.js.map} +0 -0
- /package/dist/{landing-YYBDXADL.js.map → landing-JWD3U2K5.js.map} +0 -0
- /package/dist/{landings-LUW24CTP.js.map → landings-5IYXHA5Z.js.map} +0 -0
- /package/dist/{languages-Q7NLDV5C.js.map → languages-HX4FD3GX.js.map} +0 -0
- /package/dist/{languages-7X5PROWY.js.map → languages-SRFGW6Z3.js.map} +0 -0
- /package/dist/{launches-HXMKMYJX.js.map → launches-7U4TPNO3.js.map} +0 -0
- /package/dist/{layerize-SYLRTQ3A.js.map → layerize-U672AXED.js.map} +0 -0
- /package/dist/{leads-RQG6LB7K.js.map → leads-MXUQISOC.js.map} +0 -0
- /package/dist/{library-PIIT56GK.js.map → library-RPFXNER4.js.map} +0 -0
- /package/dist/{lighthouse-ASYAZ4YL.js.map → lighthouse-SJ4QNLUS.js.map} +0 -0
- /package/dist/{line-items-IKBF3UU2.js.map → line-items-QIBNOEOH.js.map} +0 -0
- /package/dist/{list-TSTTP5AF.js.map → list-GQ65MC2N.js.map} +0 -0
- /package/dist/{list-AHBRL6CF.js.map → list-K56J7FZW.js.map} +0 -0
- /package/dist/{list-U46RRB5O.js.map → list-M4Z3WYPM.js.map} +0 -0
- /package/dist/{list-GW3LWBP2.js.map → list-SXYVDDMU.js.map} +0 -0
- /package/dist/{list-LQZDHNG3.js.map → list-XFIOXFB2.js.map} +0 -0
- /package/dist/{locations-PQLM4426.js.map → locations-PQWB7EGC.js.map} +0 -0
- /package/dist/{locations-VBHVPYER.js.map → locations-WNSET6RM.js.map} +0 -0
- /package/dist/{logo-YF46CHZO.js.map → logo-4JOWGJ5A.js.map} +0 -0
- /package/dist/{lookup-SOGUDT5P.js.map → lookup-QGGSAHOO.js.map} +0 -0
- /package/dist/{make-UOAOMFT3.js.map → make-6OQBIYWC.js.map} +0 -0
- /package/dist/{media-VGJYSC4H.js.map → media-2SWDJDA6.js.map} +0 -0
- /package/dist/{media-HX3X5ZW7.js.map → media-O5L7GO72.js.map} +0 -0
- /package/dist/{media-sources-ESNG2EUR.js.map → media-sources-LF6I6AYP.js.map} +0 -0
- /package/dist/{meta-BMUEM3KS.js.map → meta-37L6QBOZ.js.map} +0 -0
- /package/dist/{metrics-N7SG5ME6.js.map → metrics-WVG3IUMH.js.map} +0 -0
- /package/dist/{models-DKTFCIPI.js.map → models-5QWYGJ7Y.js.map} +0 -0
- /package/dist/{normalize-E75DZCVO.js.map → normalize-P5Q3F7FU.js.map} +0 -0
- /package/dist/{output-VNUB3ZDU.js.map → output-ZL62UZHQ.js.map} +0 -0
- /package/dist/{page-T5GQ74JQ.js.map → page-FZ7IZ5CV.js.map} +0 -0
- /package/dist/{pages-Y6GD5TNO.js.map → pages-SS7TZTHV.js.map} +0 -0
- /package/dist/{performance-VP7LFTOX.js.map → performance-2K425XAN.js.map} +0 -0
- /package/dist/{pinterest-IO4HREWY.js.map → pinterest-UETS7U7U.js.map} +0 -0
- /package/dist/{pixels-WWIVBVBD.js.map → pixels-D73GQFGM.js.map} +0 -0
- /package/dist/{pixels-QM3COIKE.js.map → pixels-LCTMLKGP.js.map} +0 -0
- /package/dist/{plan-M2L7MJEQ.js.map → plan-4HLITU3A.js.map} +0 -0
- /package/dist/{preview-VFM2WX4B.js.map → preview-RU54Z4EM.js.map} +0 -0
- /package/dist/{profile-35CJMR2D.js.map → profile-NQOIBLJL.js.map} +0 -0
- /package/dist/{promoted-tweets-AX3RBOMH.js.map → promoted-tweets-D5NKZ3FS.js.map} +0 -0
- /package/dist/{properties-YPRTWLT3.js.map → properties-ZUDQH3LE.js.map} +0 -0
- /package/dist/{query-APOXSSD6.js.map → query-26T7XATH.js.map} +0 -0
- /package/dist/{query-SDOGFOUT.js.map → query-IJVVSB54.js.map} +0 -0
- /package/dist/{query-IBHH6WZX.js.map → query-SHUOHXTO.js.map} +0 -0
- /package/dist/{questionnaire-DKZNPZMI.js.map → questionnaire-7AEVHZDR.js.map} +0 -0
- /package/dist/{read-LVAHQREC.js.map → read-UYSQAXRV.js.map} +0 -0
- /package/dist/{reddit-7KE75WNK.js.map → reddit-YBEYPDZP.js.map} +0 -0
- /package/dist/{relevant-pages-I3JY3IJV.js.map → relevant-pages-OI7GTPOK.js.map} +0 -0
- /package/dist/{remove-QPYAI6UW.js.map → remove-2KACTXKP.js.map} +0 -0
- /package/dist/{rerun-SBUXP6SE.js.map → rerun-LM52CBPS.js.map} +0 -0
- /package/dist/{research-GJW3K4PY.js.map → research-547KDC54.js.map} +0 -0
- /package/dist/{retry-failed-XR6YAXQP.js.map → retry-failed-NWLH6WHK.js.map} +0 -0
- /package/dist/{run-2BZ43ROF.js.map → run-PLUL33QX.js.map} +0 -0
- /package/dist/{scaffold-ad-UVCBYEXD.js.map → scaffold-ad-W4RZXLDX.js.map} +0 -0
- /package/dist/{scaffold-static-ad-6MAOUZ7U.js.map → scaffold-static-ad-IPJYRAOT.js.map} +0 -0
- /package/dist/{scaffold-video-L2HMY2DR.js.map → scaffold-video-XBII4YLS.js.map} +0 -0
- /package/dist/{schedule-TLRN22JZ.js.map → schedule-S547HPUT.js.map} +0 -0
- /package/dist/{scheduled-agents-MDGPI2M4.js.map → scheduled-agents-DWSVPMZP.js.map} +0 -0
- /package/dist/{schema-PMUG7S5V.js.map → schema-SQIP75WG.js.map} +0 -0
- /package/dist/{scrape-ROILJTKL.js.map → scrape-TI6S2W7I.js.map} +0 -0
- /package/dist/{screenshot-VWSXFIAR.js.map → screenshot-XFAYY4WW.js.map} +0 -0
- /package/dist/{search-5VQOH7OZ.js.map → search-4HIOKYFR.js.map} +0 -0
- /package/dist/{search-5X42EKRW.js.map → search-D2IV7KFJ.js.map} +0 -0
- /package/dist/{search-5FWLOOSS.js.map → search-IZPDHRJ4.js.map} +0 -0
- /package/dist/{search-Y4YQGHK5.js.map → search-KFDL2IGG.js.map} +0 -0
- /package/dist/{search-copy-67XYV63G.js.map → search-copy-QZXCAGK4.js.map} +0 -0
- /package/dist/{seeds-LE2CJPFA.js.map → seeds-VUNZMHZH.js.map} +0 -0
- /package/dist/{sends-B5ONB2KY.js.map → sends-UT4WXVOS.js.map} +0 -0
- /package/dist/{sequences-EPTEYUDS.js.map → sequences-5RAGZE7L.js.map} +0 -0
- /package/dist/{set-prompt-6PDWQCT7.js.map → set-prompt-WVQ4AI66.js.map} +0 -0
- /package/dist/{shared-3FM2MOWA.js.map → shared-3CGGKICB.js.map} +0 -0
- /package/dist/{sitemaps-CKHZOGR6.js.map → sitemaps-3WDYQHYR.js.map} +0 -0
- /package/dist/{sites-OEHXRMWU.js.map → sites-G4DQ2Z2X.js.map} +0 -0
- /package/dist/{skills-RD7IHMUO.js.map → skills-PA26HXEP.js.map} +0 -0
- /package/dist/{sources-3NPURARN.js.map → sources-PZXOSE4S.js.map} +0 -0
- /package/dist/{stats-RWAXEWYD.js.map → stats-6DPPYSP3.js.map} +0 -0
- /package/dist/{sticker-EVDFBJXE.js.map → sticker-MC2IAIQB.js.map} +0 -0
- /package/dist/{stock-WRTAR4PW.js.map → stock-B7LKMKUK.js.map} +0 -0
- /package/dist/{studio-Y7OB5J6R.js.map → studio-EQ2L6OBJ.js.map} +0 -0
- /package/dist/{sync-EKBT6R57.js.map → sync-CLZDZL5F.js.map} +0 -0
- /package/dist/{sync-SPFI5726.js.map → sync-V26UBMAN.js.map} +0 -0
- /package/dist/{sync-definition-Z73K6BU2.js.map → sync-definition-2SGGHSKR.js.map} +0 -0
- /package/dist/{tag-manager-G4KPRTI2.js.map → tag-manager-KIHXVFMF.js.map} +0 -0
- /package/dist/{tags-22XRJTPJ.js.map → tags-JN475JPP.js.map} +0 -0
- /package/dist/{targeting-constants-JTN45K7O.js.map → targeting-constants-6Y5J2PPZ.js.map} +0 -0
- /package/dist/{targeting-criteria-A3PCU32M.js.map → targeting-criteria-NMZD3CK6.js.map} +0 -0
- /package/dist/{testimonials-QAEQK2QH.js.map → testimonials-YN2AB7U7.js.map} +0 -0
- /package/dist/{themes-V27A4BN5.js.map → themes-BYRMCXYR.js.map} +0 -0
- /package/dist/{tweets-FCHLCYSG.js.map → tweets-KTM7HX5R.js.map} +0 -0
- /package/dist/{unfollow-RRLQBX76.js.map → unfollow-WBBTVEHE.js.map} +0 -0
- /package/dist/{unstage-GPI6FRJZ.js.map → unstage-GYBJZWCZ.js.map} +0 -0
- /package/dist/{upload-NOKZB2WK.js.map → upload-NA62W5RS.js.map} +0 -0
- /package/dist/{upscale-HWT7BFR7.js.map → upscale-RXJUBHXN.js.map} +0 -0
- /package/dist/{url-options-6DISOYNT.js.map → url-options-LZIHCPP4.js.map} +0 -0
- /package/dist/{use-UNLVMWCI.js.map → use-MHPNS4V4.js.map} +0 -0
- /package/dist/{validate-4KUSCG5B.js.map → validate-IIOV3YJK.js.map} +0 -0
- /package/dist/{variant-ZNLZOGOP.js.map → variant-ZFCWILPG.js.map} +0 -0
- /package/dist/{videos-3GCK5R4D.js.map → videos-MIHTMO3G.js.map} +0 -0
- /package/dist/{view-JBR45SOC.js.map → view-PYCGDGT2.js.map} +0 -0
- /package/dist/{viewer-check-LLQ3N4BI.js.map → viewer-check-65TIGVAJ.js.map} +0 -0
- /package/dist/{winners-G6UVDODV.js.map → winners-AI4PVSOI.js.map} +0 -0
- /package/dist/{write-commands-SNGBG2FP.js.map → write-commands-34L5LJIB.js.map} +0 -0
- /package/dist/{write-commands-VPPBX4VX.js.map → write-commands-5TJ3LQ5F.js.map} +0 -0
- /package/dist/{write-commands-J2RGNLIP.js.map → write-commands-R3UCCBUI.js.map} +0 -0
- /package/dist/{x-XEPTIJZ6.js.map → x-V7V47E4N.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/engine/engine/errors.ts","../src/engine/storage/sha256.ts","../src/engine/storage/asset-store.ts","../src/engine/lib/json-walk.ts","../src/engine/schema/refs.ts","../src/engine/schema/primitives.ts","../src/engine/storage/remote-cache-store.ts","../src/engine/client/env.ts","../src/engine/client/http.ts","../src/engine/nodes/ingest.ts","../src/engine/engine/define.ts","../src/engine/lib/url.ts","../src/engine/nodes/remote/upload.ts","../src/engine/nodes/remote/delegate.ts"],"sourcesContent":["export type ValidationIssue = {\n path: string;\n code: string;\n message: string;\n // \"error\" (default) blocks validate/run; \"warning\" is advisory — surfaced but\n // never fatal, so a still-runnable canvas can flag a likely-wrong-but-legal\n // configuration (a missing element reference, a scene span past a model's cap).\n severity?: \"error\" | \"warning\";\n received?: unknown;\n expected?: string;\n did_you_mean?: string[];\n node_id?: string;\n node_type?: string;\n};\n\n/** An issue is blocking unless it is explicitly a warning. */\nexport function isBlocking(issue: ValidationIssue): boolean {\n return issue.severity !== \"warning\";\n}\n\nclass CanvasError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CanvasError\";\n }\n}\n\nexport class ValidationError extends CanvasError {\n issues: ValidationIssue[];\n constructor(issues: ValidationIssue[]) {\n const head = issues[0];\n const summary = head ? `${head.code}: ${head.message}` : \"canvas validation failed\";\n super(`${issues.length} validation issue(s): ${summary}`);\n this.name = \"ValidationError\";\n this.issues = issues;\n }\n}\n\ntype NodeExecutionErrorCause =\n | { kind: \"local\"; cause: unknown }\n // `retryable` is the backend's authoritative classification: `providerErr`\n // pins every provider failure to HTTP 502 and carries real retryability in a\n // separate body field, so `status` alone can't be trusted for it.\n | { kind: \"remote\"; status: number; code: string; message: string; provider?: string; retryable?: boolean }\n | { kind: \"timeout\"; provider?: string }\n | { kind: \"network\"; cause: unknown }\n // A deterministic provider content-policy block (e.g. fal/Seedance rejecting a\n // photoreal face as a real-person likeness). NEVER retryable — it fails identically\n // on every attempt — so it surfaces as its own actionable kind, not a generic error.\n | { kind: \"content_policy\"; provider?: string; message: string };\n\nexport class NodeExecutionError extends CanvasError {\n nodeId: string;\n nodeType: string;\n cause: NodeExecutionErrorCause;\n constructor(nodeId: string, nodeType: string, cause: NodeExecutionErrorCause) {\n super(`node ${nodeId} (${nodeType}) failed: ${describeCause(cause)}`);\n this.name = \"NodeExecutionError\";\n this.nodeId = nodeId;\n this.nodeType = nodeType;\n this.cause = cause;\n }\n}\n\n/**\n * The run was deliberately aborted rather than failing on its own.\n * - \"signal\" (SIGINT/SIGTERM): terminal for this process but RESUMABLE — the\n * caller must preserve the in-flight marker so the next run re-attaches\n * in-flight billed jobs instead of re-billing them.\n */\nexport type RunAbortReason = \"signal\" | \"checkpoint\";\n\nexport class RunAbortedError extends CanvasError {\n reason: RunAbortReason;\n constructor(reason: RunAbortReason, message: string) {\n super(message);\n this.name = \"RunAbortedError\";\n this.reason = reason;\n }\n}\n\nexport type LayerFailure = { nodeId: string; reason: unknown };\n\n/** Two or more nodes of the same topological layer failed; every failure is kept. */\nexport class LayerExecutionError extends CanvasError {\n failures: LayerFailure[];\n constructor(failures: LayerFailure[]) {\n const ids = failures.map((f) => f.nodeId).join(\", \");\n super(`${failures.length} nodes failed in one layer: ${ids}`);\n this.name = \"LayerExecutionError\";\n this.failures = failures;\n }\n}\n\nexport function describeFailureReason(reason: unknown): string {\n return reason instanceof Error ? reason.message : String(reason);\n}\n\n/** A 400/422 naming no provider: the backend refused the request before any model saw it. */\nfunction isInputRejection(reason: unknown): boolean {\n if (!(reason instanceof NodeExecutionError) || reason.cause.kind !== \"remote\") return false;\n const { status, provider } = reason.cause;\n return (status === 400 || status === 422) && provider === undefined;\n}\n\n/**\n * The run envelope's error code. `input_invalid` when every failed node was refused\n * for its own input (a prompt over the model's cap) — it fails identically on every\n * run until the input changes; `runtime` for everything else.\n */\nexport function runFailureCode(e: unknown): \"input_invalid\" | \"runtime\" {\n const reasons = e instanceof LayerExecutionError ? e.failures.map((f) => f.reason) : [e];\n return reasons.length > 0 && reasons.every(isInputRejection) ? \"input_invalid\" : \"runtime\";\n}\n\n/**\n * Structured per-node failure detail persisted onto the run record so the\n * dashboard can show *why* a node died — the real upstream status/provider —\n * instead of only a red node and the layer's summary banner. Mirrors the\n * `NodeExecutionErrorCause` variants into a compact, display-ready shape.\n */\nexport type NodeFailureDetail = {\n message: string;\n /** Engine/provider error code (`server_error`, `unauthorized`, `content_policy`, `timeout`, …). */\n code?: string;\n provider?: string;\n retryable?: boolean;\n};\n\nexport function failureDetail(reason: unknown): NodeFailureDetail {\n if (reason instanceof NodeExecutionError) {\n const c = reason.cause;\n switch (c.kind) {\n case \"remote\":\n // `c.message` carries the true upstream text (e.g. `elevenlabs 502: …`).\n // Prefer the backend's authoritative `retryable` flag; only fall back to\n // status (5xx/429 transient) when it's absent, since `providerErr` masks\n // every provider failure as HTTP 502 and a bare status would then read\n // as \"retryable\" even for a non-retryable 4xx (e.g. an ElevenLabs 401).\n return {\n message: c.message,\n code: c.code,\n provider: c.provider,\n retryable: c.retryable ?? (c.status >= 500 || c.status === 429),\n };\n case \"timeout\":\n return {\n message: `timed out${c.provider ? ` (${c.provider})` : \"\"}`,\n code: \"timeout\",\n provider: c.provider,\n retryable: true,\n };\n case \"content_policy\":\n return { message: c.message, code: \"content_policy\", provider: c.provider, retryable: false };\n case \"network\":\n return {\n message: c.cause instanceof Error ? c.cause.message : \"network error\",\n code: \"network\",\n retryable: true,\n };\n case \"local\":\n return { message: c.cause instanceof Error ? c.cause.message : String(c.cause), code: \"local\" };\n default: {\n const _exhaustive: never = c;\n return { message: String(_exhaustive) };\n }\n }\n }\n return { message: describeFailureReason(reason) };\n}\n\n/**\n * What to do next, which is the only thing the status could never say.\n *\n * `providerErr` pins 502 on EVERY provider failure, so the number diagnoses\n * nothing — and an agent read it as \"the service is down\", offered to wait two\n * minutes and stopped, on a run whose provider was up the whole time.\n */\nfunction retryVerdict(retryable: boolean | undefined): string {\n if (retryable === true) return \"transient — retry the run\";\n if (retryable === false) return \"not retryable — retrying will not help, fix the input\";\n return \"retryability unknown\";\n}\n\nfunction describeCause(c: NodeExecutionErrorCause): string {\n switch (c.kind) {\n case \"local\":\n return c.cause instanceof Error ? c.cause.message : String(c.cause);\n case \"remote\":\n return `[${c.code}] ${c.message}${c.provider ? ` (${c.provider})` : \"\"} — ${retryVerdict(c.retryable)}`;\n case \"timeout\":\n return `timeout${c.provider ? ` (${c.provider})` : \"\"}`;\n case \"network\":\n return c.cause instanceof Error ? `network: ${c.cause.message}` : \"network error\";\n case \"content_policy\":\n return `CONTENT_POLICY_BLOCKED${c.provider ? ` (${c.provider})` : \"\"}: ${c.message}`;\n default: {\n const _exhaustive: never = c;\n return String(_exhaustive);\n }\n }\n}\n","import { createHash } from \"node:crypto\";\n\nexport function sha256Hex(input: Buffer | string): string {\n const h = createHash(\"sha256\");\n h.update(input);\n return h.digest(\"hex\");\n}\n","import { randomUUID } from \"node:crypto\";\nimport { createWriteStream } from \"node:fs\";\nimport { mkdir, readFile, rename, stat, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Readable, Transform } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport type { AssetKind, AssetRef } from \"../schema/refs.ts\";\nimport { sha256Hex } from \"./sha256.ts\";\n\n/**\n * Hard ceiling on any single asset the engine downloads or reads from disk.\n * Generated ad creatives are tens of MB; 2 GiB leaves generous headroom while\n * keeping a hostile or mistaken URL from exhausting the disk.\n */\nexport const MAX_ASSET_BYTES = 2 * 1024 * 1024 * 1024;\n\nconst MIME_TO_EXT: Record<string, string> = {\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/webp\": \"webp\",\n \"image/gif\": \"gif\",\n \"image/avif\": \"avif\",\n \"video/mp4\": \"mp4\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"audio/mpeg\": \"mp3\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/mp4\": \"m4a\",\n \"application/json\": \"json\",\n \"text/plain\": \"txt\",\n \"text/markdown\": \"md\",\n \"text/html\": \"html\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n};\n\nexport function extForMime(mime: string): string {\n return MIME_TO_EXT[mime] ?? \"bin\";\n}\n\nexport type IngestRemoteArgs = {\n kind: AssetKind;\n url: string;\n sha256: string;\n mime: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface AssetStore {\n rootDir: string;\n ingestBytes(args: {\n bytes: Buffer;\n kind: AssetKind;\n mime: string;\n metadata?: Record<string, unknown>;\n }): Promise<AssetRef>;\n ingestRemote(args: IngestRemoteArgs): Promise<AssetRef>;\n /** Local FS path for an asset by sha. Returns undefined if absent. */\n pathFor(sha: string, mime: string): string;\n exists(sha: string, mime: string): Promise<boolean>;\n readBytes(sha: string, mime: string): Promise<Buffer>;\n}\n\nexport class LocalAssetStore implements AssetStore {\n rootDir: string;\n private readonly fetchFn: typeof fetch;\n private readonly maxRemoteAssetBytes: number;\n constructor(rootDir: string, fetchFn: typeof fetch = fetch, opts?: { maxRemoteAssetBytes?: number }) {\n this.rootDir = rootDir;\n this.fetchFn = fetchFn;\n this.maxRemoteAssetBytes = opts?.maxRemoteAssetBytes ?? MAX_ASSET_BYTES;\n }\n\n pathFor(sha: string, mime: string): string {\n const ext = extForMime(mime);\n const shard = sha.slice(0, 2);\n return path.join(this.rootDir, shard, `${sha}.${ext}`);\n }\n\n async exists(sha: string, mime: string): Promise<boolean> {\n try {\n await stat(this.pathFor(sha, mime));\n return true;\n } catch {\n return false;\n }\n }\n\n readBytes(sha: string, mime: string): Promise<Buffer> {\n return readFile(this.pathFor(sha, mime));\n }\n\n async ingestBytes(args: {\n bytes: Buffer;\n kind: AssetKind;\n mime: string;\n metadata?: Record<string, unknown>;\n }): Promise<AssetRef> {\n const sha = sha256Hex(args.bytes);\n const dest = this.pathFor(sha, args.mime);\n await mkdir(path.dirname(dest), { recursive: true });\n if (!(await this.exists(sha, args.mime))) {\n const tmp = `${dest}.tmp-${process.pid}-${randomUUID()}`;\n await writeFile(tmp, args.bytes);\n await rename(tmp, dest);\n }\n return buildRef({ kind: args.kind, sha, mime: args.mime, path: dest, metadata: args.metadata });\n }\n\n async ingestRemote(args: IngestRemoteArgs): Promise<AssetRef> {\n const dest = this.pathFor(args.sha256, args.mime);\n let bytes: Buffer;\n if (await this.exists(args.sha256, args.mime)) {\n bytes = await readFile(dest);\n } else {\n await mkdir(path.dirname(dest), { recursive: true });\n const res = await this.fetchFn(args.url);\n if (!res.ok || !res.body) {\n throw new Error(`asset-store: fetch ${args.url} → ${res.status}`);\n }\n const declared = Number(res.headers.get(\"content-length\"));\n if (Number.isFinite(declared) && declared > this.maxRemoteAssetBytes) {\n throw new Error(\n `asset-store: ${args.url} is ${declared} bytes, exceeds the ${this.maxRemoteAssetBytes} byte limit`,\n );\n }\n const tmp = `${dest}.tmp-${process.pid}-${randomUUID()}`;\n try {\n await pipeline(\n Readable.fromWeb(res.body as never),\n byteLimit(args.url, this.maxRemoteAssetBytes),\n createWriteStream(tmp),\n );\n const written = await readFile(tmp);\n const computed = sha256Hex(written);\n if (computed !== args.sha256 && !cdnReencodedImage(res, args.kind)) {\n throw new Error(`asset-store: sha mismatch for ${args.url} (got ${computed}, expected ${args.sha256})`);\n }\n await rename(tmp, dest);\n bytes = written;\n } catch (e) {\n await unlink(tmp).catch(() => undefined);\n throw e;\n }\n }\n return buildRef({\n kind: args.kind,\n sha: args.sha256,\n mime: args.mime,\n url: args.url,\n path: dest,\n metadata: args.metadata,\n bytes,\n });\n }\n}\n\n/**\n * Whether the CDN in front of our asset bucket re-encoded this image on the way out.\n *\n * `media.withbaker.com` runs Cloudflare Polish, which recompresses images at the edge and\n * marks the response `cf-polished`. The bytes are the same picture in a different file, so\n * a content-addressed download of a render could never match its own sha: 52 static runs\n * failed their resize step on exactly that, after every billed node had finished. Such a\n * response is accepted as the asset it was asked for; any other mismatch still fails,\n * because it is a truncated or wrong file.\n */\nfunction cdnReencodedImage(res: Response, kind: AssetKind): boolean {\n return kind === \"image\" && res.headers.get(\"cf-polished\") !== null;\n}\n\nfunction byteLimit(url: string, maxBytes: number): Transform {\n let total = 0;\n return new Transform({\n transform(chunk: Buffer, _enc, cb) {\n total += chunk.length;\n if (total > maxBytes) {\n cb(new Error(`asset-store: ${url} exceeds the ${maxBytes} byte limit (aborted at ${total} bytes)`));\n return;\n }\n cb(null, chunk);\n },\n });\n}\n\nexport function buildRef(args: {\n kind: AssetKind;\n sha: string;\n mime: string;\n url?: string;\n path?: string;\n metadata?: Record<string, unknown>;\n bytes?: Buffer;\n}): AssetRef {\n const base = {\n sha256: args.sha,\n mime: args.mime,\n url: args.url,\n path: args.path,\n metadata: args.metadata,\n };\n switch (args.kind) {\n case \"image\": {\n const { width, height } = (args.metadata ?? {}) as { width?: number; height?: number };\n return { kind: \"image\", ...base, width, height };\n }\n case \"video\": {\n const { width, height, duration_ms } = (args.metadata ?? {}) as {\n width?: number;\n height?: number;\n duration_ms?: number;\n };\n return { kind: \"video\", ...base, width, height, duration_ms };\n }\n case \"audio\": {\n const { duration_ms } = (args.metadata ?? {}) as { duration_ms?: number };\n return { kind: \"audio\", ...base, duration_ms };\n }\n case \"json\":\n return { kind: \"json\", ...base };\n case \"text\":\n return { kind: \"text\", ...base };\n case \"font\":\n return { kind: \"font\", ...base };\n default: {\n const _exhaustive: never = args.kind;\n throw new Error(`asset-store: unknown kind ${String(_exhaustive)}`);\n }\n }\n}\n","/**\n * The one recursive walk over a canvas's JSON values: node inputs, params and\n * outputs. Arrays and objects are containers; every other value is a leaf. Each\n * engine pass that used to hand-roll this recursion (ref resolution, slot\n * rendering, cache-key normalization, sha collection, ref discovery) is one of\n * the four shapes below.\n */\n\ntype Json = Record<string, unknown>;\n\nfunction isContainerObject(value: unknown): value is Json {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Visit every string leaf with its path, in the `a.b[0]` form validation issues\n * report (`[0]` at the root, `k` for a top-level key).\n */\nexport function forEachString(value: unknown, visit: (s: string, path: string) => void, path = \"\"): void {\n if (typeof value === \"string\") {\n visit(value, path);\n return;\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) forEachString(value[i], visit, path ? `${path}[${i}]` : `[${i}]`);\n return;\n }\n if (isContainerObject(value)) {\n for (const [k, v] of Object.entries(value)) forEachString(v, visit, path ? `${path}.${k}` : k);\n }\n}\n\n/**\n * Visit every object, outermost first. An object is never a leaf: the objects\n * nested inside a visited one are visited too (a ref nested in a ref's metadata).\n */\nexport function forEachObject(value: unknown, visit: (o: Json) => void): void {\n if (Array.isArray(value)) {\n for (const v of value) forEachObject(v, visit);\n return;\n }\n if (!isContainerObject(value)) return;\n visit(value);\n for (const v of Object.values(value)) forEachObject(v, visit);\n}\n\n/** A copy with every string leaf replaced by `fn`'s result. */\nexport function mapStrings(value: unknown, fn: (s: string) => unknown): unknown {\n if (typeof value === \"string\") return fn(value);\n if (Array.isArray(value)) return value.map((v) => mapStrings(v, fn));\n if (isContainerObject(value)) {\n const out: Json = {};\n for (const [k, v] of Object.entries(value)) out[k] = mapStrings(v, fn);\n return out;\n }\n return value;\n}\n\n/**\n * A copy in which `replace` may substitute any object whole. Returning undefined\n * keeps walking into that object instead; leaves are returned as they are.\n */\nexport function mapObjects(value: unknown, replace: (o: Json) => unknown): unknown {\n if (Array.isArray(value)) return value.map((v) => mapObjects(v, replace));\n if (!isContainerObject(value)) return value;\n const replaced = replace(value);\n if (replaced !== undefined) return replaced;\n const out: Json = {};\n for (const [k, v] of Object.entries(value)) out[k] = mapObjects(v, replace);\n return out;\n}\n\n/** `mapObjects` for an async replacement. Array elements run concurrently, object keys in order. */\nexport async function mapObjectsAsync(\n value: unknown,\n replace: (o: Json) => Promise<unknown> | undefined,\n): Promise<unknown> {\n if (Array.isArray(value)) return Promise.all(value.map((v) => mapObjectsAsync(v, replace)));\n if (!isContainerObject(value)) return value;\n const replaced = replace(value);\n if (replaced !== undefined) return replaced;\n const out: Json = {};\n for (const [k, v] of Object.entries(value)) out[k] = await mapObjectsAsync(v, replace);\n return out;\n}\n","import { z } from \"zod\";\nimport { MimeType, Sha256Hex } from \"./primitives.ts\";\n\nconst BaseAssetRef = z.object({\n url: z.string().url().optional(),\n path: z.string().optional(),\n sha256: Sha256Hex,\n mime: MimeType,\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const ImageRef = BaseAssetRef.extend({\n kind: z.literal(\"image\"),\n width: z.number().int().positive().optional(),\n height: z.number().int().positive().optional(),\n});\nexport type ImageRef = z.infer<typeof ImageRef>;\n\nexport const VideoRef = BaseAssetRef.extend({\n kind: z.literal(\"video\"),\n width: z.number().int().positive().optional(),\n height: z.number().int().positive().optional(),\n duration_ms: z.number().nonnegative().optional(),\n});\nexport type VideoRef = z.infer<typeof VideoRef>;\n\nexport const AudioRef = BaseAssetRef.extend({\n kind: z.literal(\"audio\"),\n duration_ms: z.number().nonnegative().optional(),\n});\nexport type AudioRef = z.infer<typeof AudioRef>;\n\nexport const JsonRef = BaseAssetRef.extend({\n kind: z.literal(\"json\"),\n});\nexport type JsonRef = z.infer<typeof JsonRef>;\n\nexport const TextRef = BaseAssetRef.extend({\n kind: z.literal(\"text\"),\n});\nexport type TextRef = z.infer<typeof TextRef>;\n\nexport const FontRef = BaseAssetRef.extend({\n kind: z.literal(\"font\"),\n});\nexport type FontRef = z.infer<typeof FontRef>;\n\nexport const AssetRef = z.discriminatedUnion(\"kind\", [ImageRef, VideoRef, AudioRef, JsonRef, TextRef, FontRef]);\nexport type AssetRef = z.infer<typeof AssetRef>;\n\nexport type AssetKind = AssetRef[\"kind\"];\n\n// ---------------------------------------------------------------------------\n// Ref guards. Each asks a different question on purpose, and all of them live\n// here so the difference is a name rather than a hand-rolled check per module.\n// ---------------------------------------------------------------------------\n\ntype Loose = Record<string, unknown>;\n\nfunction isObject(v: unknown): v is Loose {\n return Boolean(v) && typeof v === \"object\";\n}\n\nexport const ASSET_KINDS: ReadonlySet<string> = new Set([\"image\", \"video\", \"audio\", \"json\", \"text\", \"font\"]);\n\n/**\n * The content identity of a value that carries one: an object's string `sha256`.\n * Cache keys reduce such a value to this, so volatile fields (`url`, `path`,\n * `metadata.ingested_at`) never reach a key.\n */\nexport function contentShaOf(v: unknown): string | null {\n if (isObject(v) && \"sha256\" in v && typeof v.sha256 === \"string\") return v.sha256;\n return null;\n}\n\n/** An asset ref as nodes hand it to each other: a string `kind` and a `sha256`. */\nexport function isAssetRef(v: unknown): v is AssetRef {\n return isObject(v) && typeof v.kind === \"string\" && \"sha256\" in v;\n}\n\nexport function isAssetRefArray(v: unknown): v is AssetRef[] {\n return Array.isArray(v) && v.length > 0 && v.every(isAssetRef);\n}\n\n/** A ref whose bytes sit only at a URL: a local tool needs them downloaded first. */\nexport function isUrlOnlyRef(v: unknown): v is AssetRef & { url: string } {\n return (\n isObject(v) &&\n typeof v.kind === \"string\" &&\n typeof v.url === \"string\" &&\n typeof v.sha256 === \"string\" &&\n typeof v.mime === \"string\" &&\n typeof v.path !== \"string\"\n );\n}\n\n/** A ref a local tool can stage or hand to a browser: a known kind and a url or a local path. */\nexport function isStageableRef(v: unknown): v is AssetRef {\n return (\n isObject(v) &&\n typeof v.kind === \"string\" &&\n ASSET_KINDS.has(v.kind) &&\n typeof v.mime === \"string\" &&\n typeof v.sha256 === \"string\" &&\n (typeof v.url === \"string\" || typeof v.path === \"string\")\n );\n}\n\n/** A stored ref record (cache entries, run records): string `sha256` and `mime`, any other fields. */\nexport type AssetRefLike = Loose & { sha256: string; mime: string };\n\nexport function isAssetRefLike(v: unknown): v is AssetRefLike {\n return isObject(v) && !Array.isArray(v) && typeof v.sha256 === \"string\" && typeof v.mime === \"string\";\n}\n","import { z } from \"zod\";\n\nexport const Sha256Hex = z.string().regex(/^[0-9a-f]{64}$/, \"expected 64-char lower-case hex sha-256\");\nexport type Sha256Hex = z.infer<typeof Sha256Hex>;\n\nexport const MimeType = z.string().regex(/^[a-zA-Z0-9!#$&^_.+-]+\\/[a-zA-Z0-9!#$&^_.+-]+$/, \"expected RFC 6838 mime\");\nexport type MimeType = z.infer<typeof MimeType>;\n","import { canvasAssetOriginsSetting } from \"../../env.ts\";\nimport type { BackendClient } from \"../client/backend-client.ts\";\nimport { forEachObject } from \"../lib/json-walk.ts\";\nimport { type AssetKind, type AssetRefLike, isAssetRefLike } from \"../schema/refs.ts\";\nimport type { AssetStore } from \"./asset-store.ts\";\nimport type { CacheEntry, CacheStore } from \"./cache-store.ts\";\n\n/**\n * Remote canvas cache, backend-mediated. Entries are small JSON pointer\n * records; their AssetRefs must carry content-addressed `canvas-assets/` URLs\n * so any sandbox can rehydrate the bytes from R2 (sha-verified by\n * `ingestRemote`). The layered store makes a fresh sandbox re-run an\n * already-computed canvas at zero credits: local hit → use it; local miss →\n * remote fetch + rehydrate + write back locally.\n *\n * Cache traffic is strictly best-effort: a remote failure NEVER fails the run\n * (a paid render must not die on a cache write), it only costs a warning.\n */\n\nexport const CANVAS_ASSETS_URL_SEGMENT = \"/canvas-assets/\";\n\n/**\n * The origins our asset store serves `canvas-assets/` from: production and dev. Only these are\n * fetched directly by content address; a look-alike path on any other host is just a URL.\n * `BAKER_CANVAS_ASSET_ORIGINS` (comma-separated) overrides, as it does for `validate-creatives`.\n */\nexport function canvasAssetOrigins(setting: string | undefined = canvasAssetOriginsSetting()): string[] {\n return (setting ?? \"https://media.withbaker.com,https://media.dev-baker.com\")\n .split(\",\")\n .map((origin) => origin.trim().replace(/\\/+$/, \"\"))\n .filter(Boolean);\n}\n\n/** True when `url` is served from one of the store's own origins. */\nexport function isCanvasAssetOrigin(url: string): boolean {\n try {\n const { origin } = new URL(url);\n return canvasAssetOrigins().some((allowed) => {\n try {\n return new URL(allowed).origin === origin;\n } catch {\n return false;\n }\n });\n } catch {\n return false;\n }\n}\n\n/**\n * The content address a canvas-assets URL names: `…/canvas-assets/<sha0:2>/<sha>.<ext>`.\n * Null for anything else, including an unsharded or mis-sharded key — the sha has to sit\n * where our store writes it, or the URL is not ours to vouch for.\n */\nexport function parseCanvasAssetUrl(url: string): { sha256: string; ext: string } | null {\n let pathname: string;\n try {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") return null;\n pathname = parsed.pathname;\n } catch {\n return null;\n }\n const match = /\\/canvas-assets\\/([0-9a-f]{2})\\/([0-9a-f]{64})\\.([a-z0-9]+)$/.exec(pathname);\n if (!match) return null;\n const [, shard, sha256, ext] = match;\n if (shard === undefined || sha256 === undefined || ext === undefined || !sha256.startsWith(shard)) return null;\n return { sha256, ext };\n}\n\n/**\n * A ref counts as persisted only when its url points at OUR content-addressed\n * store entry for THESE bytes. R2 shards keys by the first sha byte, so the\n * canonical key is `canvas-assets/<sha0:2>/<sha>.<ext>` — the sha appears after\n * a 2-hex shard segment, NOT right after \"/canvas-assets/\". (An unsharded\n * layout is tolerated for legacy/seed pointers.) A foreign/ingested URL that\n * merely contains \"/canvas-assets/\" must NOT pass, or persistOutputAssetUrls\n * would skip uploading its bytes and the poisoned pointer would fail every\n * cache PUT and run record downstream.\n *\n * Historically this required the sha right after the segment, which matched no\n * real R2 url — so every render output and cache entry was silently dropped.\n */\nexport function isPersistedAssetRef(ref: AssetRefLike): ref is AssetRefLike & { url: string } {\n const { url, sha256 } = ref;\n if (typeof url !== \"string\" || typeof sha256 !== \"string\") return false;\n return (\n url.includes(`${CANVAS_ASSETS_URL_SEGMENT}${sha256.slice(0, 2)}/${sha256}`) ||\n url.includes(`${CANVAS_ASSETS_URL_SEGMENT}${sha256}`)\n );\n}\n\n/**\n * Every AssetRef-shaped object inside a value. A ref is not a leaf — refs nested\n * inside other refs are collected too, mirroring the backend's persisted-ref\n * validation walk so an entry we upload never carries a ref the server would\n * treat differently.\n */\nexport function collectAssetRefLikes(value: unknown): AssetRefLike[] {\n const out: AssetRefLike[] = [];\n forEachObject(value, (o) => {\n if (isAssetRefLike(o)) out.push(o);\n });\n return out;\n}\n\n/** True when every ref in the entry is rehydratable from the persisted store. */\nexport function entryFullyPersisted(entry: CacheEntry): boolean {\n return collectAssetRefLikes(entry.outputs).every((ref) => isPersistedAssetRef(ref));\n}\n\n/** Deep-clone the entry and drop sandbox-local fields from every ref. */\nexport function stripLocalFields(entry: CacheEntry): CacheEntry {\n const clone = JSON.parse(JSON.stringify(entry)) as CacheEntry;\n for (const ref of collectAssetRefLikes(clone.outputs)) {\n delete ref.path;\n delete ref.bytes;\n }\n return clone;\n}\n\nexport class RemoteCacheStore {\n private readonly client: BackendClient;\n private readonly log: (line: string) => void;\n\n constructor(client: BackendClient, log?: (line: string) => void) {\n this.client = client;\n this.log = log ?? (() => undefined);\n }\n\n async get(cacheKey: string): Promise<CacheEntry | null> {\n return await this.client.getCacheEntry<CacheEntry>(cacheKey);\n }\n\n async put(entry: CacheEntry): Promise<void> {\n // An entry with a local-only ref can't rehydrate elsewhere — keeping it\n // local-only is correct, not an error (the persist hook normally prevents\n // this; it can happen when an asset upload failed mid-run).\n if (!entryFullyPersisted(entry)) {\n this.log(`[cache ] ${entry.cacheKey.slice(0, 12)}… has local-only assets, kept local`);\n return;\n }\n const stripped = stripLocalFields(entry);\n // Mirror the backend intake cap. refs only feed a future GC sweep, so a\n // truncated list degrades GC accounting — never correctness — while an\n // over-cap array would 400 and keep the whole entry out of the shared cache.\n if (stripped.refs.length > MAX_REMOTE_REFS) {\n stripped.refs = stripped.refs.slice(0, MAX_REMOTE_REFS);\n }\n await this.client.putCacheEntry(stripped);\n }\n}\n\nconst MAX_REMOTE_REFS = 512;\n\nexport class LayeredCacheStore implements CacheStore {\n readonly rootDir: string;\n private readonly local: CacheStore;\n private readonly remote: RemoteCacheStore;\n private readonly assets: AssetStore;\n private readonly log: (line: string) => void;\n\n constructor(opts: { local: CacheStore; remote: RemoteCacheStore; assets: AssetStore; log?: (line: string) => void }) {\n this.local = opts.local;\n this.remote = opts.remote;\n this.assets = opts.assets;\n this.rootDir = opts.local.rootDir;\n this.log = opts.log ?? (() => undefined);\n }\n\n async get(cacheKey: string): Promise<CacheEntry | null> {\n const localHit = await this.local.get(cacheKey);\n if (localHit) return localHit;\n\n let remoteEntry: CacheEntry | null;\n try {\n remoteEntry = await this.remote.get(cacheKey);\n } catch (e) {\n this.log(`[cache ] remote lookup failed (${message(e)}) — treating as miss`);\n return null;\n }\n if (!remoteEntry) return null;\n\n let rehydrated: CacheEntry;\n try {\n rehydrated = await this.rehydrate(remoteEntry);\n } catch (e) {\n this.log(`[cache ] ${cacheKey.slice(0, 12)}… rehydration failed (${message(e)}) — treating as miss`);\n return null;\n }\n // Write back locally so subsequent hits in this sandbox skip the network.\n await this.local.put(rehydrated);\n return rehydrated;\n }\n\n async put(entry: CacheEntry): Promise<void> {\n await this.local.put(entry);\n try {\n await this.remote.put(entry);\n } catch (e) {\n this.log(`[cache ] remote write failed (${message(e)}) — entry kept local`);\n }\n }\n\n /**\n * Download every referenced asset into the local content-addressed store\n * (sha-verified) and stamp fresh local paths. Any ref that cannot be\n * rehydrated fails the WHOLE entry — a partially-hydrated cache hit would\n * crash materialization later with a far less actionable error.\n */\n private async rehydrate(entry: CacheEntry): Promise<CacheEntry> {\n const clone = JSON.parse(JSON.stringify(entry)) as CacheEntry;\n for (const ref of collectAssetRefLikes(clone.outputs)) {\n if (!isPersistedAssetRef(ref)) {\n throw new Error(`ref ${ref.sha256.slice(0, 12)}… has no persisted url`);\n }\n const ingested = await this.assets.ingestRemote({\n kind: (typeof ref.kind === \"string\" ? ref.kind : \"json\") as AssetKind,\n url: ref.url,\n sha256: ref.sha256,\n mime: ref.mime,\n metadata: (ref.metadata ?? undefined) as Record<string, unknown> | undefined,\n });\n ref.path = ingested.path;\n }\n return clone;\n }\n}\n\nfunction message(e: unknown): string {\n return e instanceof Error ? e.message : String(e);\n}\n","import { API_KEY_FORMAT_MESSAGE, isBakerApiKey } from \"../../apiKeyFormat.ts\";\n\ntype BackendCredentials = {\n url: string;\n apiKey: string;\n};\n\nfunction credentialsFromEnv(env: NodeJS.ProcessEnv = process.env): BackendCredentials | null {\n const url = env.BAKER_API_URL;\n const apiKey = env.BAKER_API_KEY;\n if (!url || !apiKey) return null;\n return { url, apiKey };\n}\n\nexport function requireCredentialsFromEnv(env: NodeJS.ProcessEnv = process.env): BackendCredentials {\n const c = credentialsFromEnv(env);\n if (!c) {\n throw new Error(\"missing BAKER_API_URL and/or BAKER_API_KEY environment variables\");\n }\n if (!isBakerApiKey(c.apiKey)) {\n throw new Error(`BAKER_API_KEY invalid: ${API_KEY_FORMAT_MESSAGE}`);\n }\n return c;\n}\n\n/** Remote canvas cache + durable asset persistence — on unless explicitly opted out. */\nexport function remoteCacheEnabledFromEnv(env: NodeJS.ProcessEnv = process.env): boolean {\n return env.BAKER_CANVAS_REMOTE_CACHE !== \"off\";\n}\n\n/**\n * The narrower scope the key runs under, when the environment names one: a\n * report's endpoint runs as a published report would, read-only. Sent as\n * `x-baker-key-scope`, which only ever narrows the key.\n */\nexport function keyScopeFromEnv(env: NodeJS.ProcessEnv = process.env): \"report\" | undefined {\n return env.BAKER_KEY_SCOPE === \"report\" ? \"report\" : undefined;\n}\n","import { debugLogHttp, readBodyForLog } from \"../../debugLog.ts\";\nimport { keyScopeFromEnv } from \"./env.ts\";\n\n// A deterministic provider content-policy block (fal/Seedance rejecting a photoreal\n// face). Backends signal it with `code: \"content_policy_blocked\"`; we key off the code,\n// not the HTTP status, because fal's proxy chain surfaces the same block as a clean 422\n// OR a masked 502 — treating it as a 5xx would retry a call that can never succeed.\nexport const CONTENT_POLICY_CODE = \"content_policy_blocked\";\n\n// A duplicate of a request the backend is still running (the same idempotency\n// key, claimed by the first attempt). Retrying is exactly right: the backend\n// replays the first attempt's stored response and never dispatches twice.\nconst REQUEST_IN_PROGRESS_CODE = \"request_in_progress\";\n\ntype HttpError =\n | { kind: \"unauthorized\"; status: number; message: string }\n | { kind: \"validation\"; status: number; message: string; code?: string; details?: unknown }\n | { kind: \"provider\"; status: number; provider?: string; code: string; message: string; retryable: boolean }\n | { kind: \"content_policy\"; status: number; provider?: string; message: string }\n | { kind: \"timeout\"; provider?: string; message: string }\n | { kind: \"server\"; status: number; message: string }\n | { kind: \"network\"; cause: unknown };\n\nexport class BackendHttpError extends Error {\n detail: HttpError;\n constructor(detail: HttpError) {\n super(describe(detail));\n this.name = \"BackendHttpError\";\n this.detail = detail;\n }\n}\n\nfunction describe(d: HttpError): string {\n switch (d.kind) {\n case \"unauthorized\":\n return `unauthorized: ${d.message}`;\n case \"validation\":\n return `invalid request: ${d.message}`;\n case \"provider\":\n return `provider error${d.provider ? ` (${d.provider})` : \"\"}: ${d.message}`;\n case \"content_policy\":\n return `content policy blocked${d.provider ? ` (${d.provider})` : \"\"}: ${d.message}`;\n case \"timeout\":\n return `provider timeout${d.provider ? ` (${d.provider})` : \"\"}: ${d.message}`;\n case \"server\":\n return `server error ${d.status}: ${d.message}`;\n case \"network\":\n return d.cause instanceof Error ? `network: ${d.cause.message}` : \"network error\";\n default: {\n const _ex: never = d;\n return String(_ex);\n }\n }\n}\n\ntype HttpClientOpts = {\n baseUrl: string;\n apiKey: string;\n timeoutMs?: number;\n maxRetries?: number;\n fetchFn?: typeof fetch;\n sleepFn?: (ms: number) => Promise<void>;\n keyScope?: \"report\";\n};\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly timeoutMs: number;\n private readonly maxRetries: number;\n private readonly fetchFn: typeof fetch;\n private readonly sleepFn: (ms: number) => Promise<void>;\n private readonly authHeaders: Record<string, string>;\n\n constructor(opts: HttpClientOpts) {\n this.baseUrl = opts.baseUrl.replace(/\\/+$/, \"\");\n this.timeoutMs = opts.timeoutMs ?? 10 * 60 * 1000;\n this.maxRetries = opts.maxRetries ?? 3;\n this.fetchFn = opts.fetchFn ?? fetch;\n this.sleepFn = opts.sleepFn ?? ((ms) => new Promise((r) => setTimeout(r, ms)));\n const keyScope = opts.keyScope ?? keyScopeFromEnv();\n this.authHeaders = {\n Authorization: `Bearer ${opts.apiKey}`,\n ...(keyScope && { \"x-baker-key-scope\": keyScope }),\n };\n }\n\n async postJson<T>(path: string, body: unknown, signal?: AbortSignal): Promise<T> {\n return await this.requestJson<T>(\"POST\", path, body, signal);\n }\n\n async putJson<T>(path: string, body: unknown, signal?: AbortSignal): Promise<T> {\n return await this.requestJson<T>(\"PUT\", path, body, signal);\n }\n\n async getJson<T>(path: string, signal?: AbortSignal): Promise<T> {\n return await this.requestJson<T>(\"GET\", path, undefined, signal);\n }\n\n private async requestJson<T>(\n method: \"GET\" | \"POST\" | \"PUT\",\n path: string,\n body: unknown,\n signal?: AbortSignal,\n ): Promise<T> {\n const url = `${this.baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const outcome = await this.attempt<T>(method, url, body, attempt, signal);\n if (outcome.kind === \"value\") return outcome.value;\n if (outcome.kind === \"retry\") {\n await this.sleepFn(backoffMs(attempt));\n continue;\n }\n throw outcome.error;\n }\n throw new BackendHttpError({ kind: \"server\", status: 0, message: \"retries exhausted\" });\n }\n\n private async attempt<T>(\n method: \"GET\" | \"POST\" | \"PUT\",\n url: string,\n body: unknown,\n attempt: number,\n signal: AbortSignal | undefined,\n ): Promise<{ kind: \"value\"; value: T } | { kind: \"retry\" } | { kind: \"throw\"; error: BackendHttpError }> {\n const controller = new AbortController();\n const onAbort = () => controller.abort(signal?.reason);\n if (signal) {\n if (signal.aborted) controller.abort(signal.reason);\n else signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n const timer = setTimeout(() => controller.abort(new Error(\"timeout\")), this.timeoutMs);\n const startedAt = Date.now();\n try {\n const res = await this.fetchFn(url, {\n method,\n headers: method === \"GET\" ? this.authHeaders : { \"Content-Type\": \"application/json\", ...this.authHeaders },\n body: method === \"GET\" ? undefined : JSON.stringify(body),\n signal: controller.signal,\n });\n debugLogHttp({\n source: \"canvas\",\n method,\n url,\n requestBody: method === \"GET\" ? undefined : body,\n status: res.status,\n ok: res.ok,\n responseBody: await readBodyForLog(res),\n durationMs: Date.now() - startedAt,\n });\n if (res.ok) return { kind: \"value\", value: (await res.json()) as T };\n const err = await parseErrorBody(res);\n if (attempt < this.maxRetries && shouldRetry(err)) return { kind: \"retry\" };\n return { kind: \"throw\", error: new BackendHttpError(err) };\n } catch (e) {\n debugLogHttp({\n source: \"canvas\",\n method,\n url,\n requestBody: method === \"GET\" ? undefined : body,\n durationMs: Date.now() - startedAt,\n error: e,\n });\n return this.handleAttemptException(e, attempt, signal, method);\n } finally {\n clearTimeout(timer);\n if (signal) signal.removeEventListener(\"abort\", onAbort);\n }\n }\n\n private handleAttemptException(\n e: unknown,\n attempt: number,\n signal: AbortSignal | undefined,\n method: \"GET\" | \"POST\" | \"PUT\",\n ): { kind: \"retry\" } | { kind: \"throw\"; error: BackendHttpError } {\n if (e instanceof BackendHttpError) return { kind: \"throw\", error: e };\n const aborted = (e as { name?: string }).name === \"AbortError\";\n if (aborted && signal?.aborted) {\n return { kind: \"throw\", error: new BackendHttpError({ kind: \"network\", cause: signal.reason ?? e }) };\n }\n // Internal timeout: retrying a POST re-dispatches a non-idempotent provider\n // call (the backend only replays *completed* responses, and a timeout means\n // nothing was stored), so only GETs auto-retry — a POST fails terminally\n // rather than risk a double charge.\n if (aborted) {\n if (method === \"GET\" && attempt < this.maxRetries) return { kind: \"retry\" };\n return { kind: \"throw\", error: new BackendHttpError({ kind: \"timeout\", message: \"request timed out\" }) };\n }\n if (attempt < this.maxRetries) return { kind: \"retry\" };\n return { kind: \"throw\", error: new BackendHttpError({ kind: \"network\", cause: e }) };\n }\n}\n\nexport type ErrorBody = { code?: string; message?: string; provider?: string; retryable?: boolean; details?: unknown };\n\nasync function parseErrorBody(res: Response): Promise<HttpError> {\n let body: { error?: ErrorBody } = {};\n try {\n body = (await res.json()) as typeof body;\n } catch {\n // ignore parse errors\n }\n const errObj = body.error ?? {};\n // No `{ error: … }` envelope means this never reached the node dispatcher —\n // every failure it handles carries a code, a provider and real text. A\n // bodyless 5xx is the edge: it dropped a held-open request, or the backend\n // restarted mid-flight. Say that, instead of `HTTP 502` with a provider\n // attached that never touched the request.\n const bodyless = body.error === undefined && res.status >= 500;\n const message = bodyless\n ? `HTTP ${res.status} with no response body — the request was dropped before the server answered`\n : (errObj.message ?? `HTTP ${res.status}`);\n // 502 is the ONLY status whose classification is wrong for a bodyless body:\n // it would read as a retryable `provider` error blaming nobody. Everything\n // else already classifies correctly and must keep doing so — notably 504,\n // which an edge gateway timeout also returns bodyless (an HTML page) and\n // which must stay a terminal `timeout`: retrying that POST re-dispatches a\n // billed provider call for every node still on the synchronous exec path.\n if (bodyless && res.status === 502) {\n return { kind: \"server\", status: res.status, message };\n }\n return classifyBackendError(res.status, errObj, message);\n}\n\n/**\n * A 4xx that names a provider is that provider's verdict on the request, not a\n * malformed call. An unreadable page comes back this way so its reason and its\n * `retryable: false` survive the edge, which strips a 502's body; read as a\n * plain validation error it reached the agent as `invalid_params` and sent it\n * to rewrite params that were never wrong. Null when the body names nobody.\n */\nfunction providerVerdict(status: number, errObj: ErrorBody, message: string): HttpError | null {\n if (errObj.provider === undefined && errObj.code !== \"provider_error\") return null;\n return {\n kind: \"provider\",\n status,\n provider: errObj.provider,\n code: errObj.code ?? \"provider_error\",\n message,\n // A 4xx is terminal unless the backend says otherwise — the opposite\n // default from the 502 branch, where the status itself means \"try again\".\n retryable: errObj.retryable ?? false,\n };\n}\n\n/**\n * THE classifier for a backend failure, whichever way it arrived: an HTTP error\n * response on the synchronous exec path, or the stored error of an async job\n * (`backend-client.ts` feeds a job's `{ code, message, status, retryable }`\n * through here too). One function, so the same failure maps to the same kind on\n * both paths. It used to read as `validation` synchronously and as a provider\n * content-policy error from a job.\n */\nexport function classifyBackendError(status: number, errObj: ErrorBody, message: string): HttpError {\n return (\n codeVerdict(status, errObj, message) ??\n clientVerdict(status, errObj, message) ??\n serverVerdict(status, errObj, message) ?? {\n // Remaining 4xx (404, 405, 409, …): the request itself is wrong, so a retry\n // can't help — and re-dispatching a POST risks a double provider charge.\n kind: \"validation\",\n status,\n message,\n code: errObj.code,\n details: errObj.details,\n }\n );\n}\n\n/** Codes that decide the kind whatever status they arrive on. */\nfunction codeVerdict(status: number, errObj: ErrorBody, message: string): HttpError | null {\n // A content-policy block is non-retryable regardless of the HTTP status it\n // arrives on (fal masks the same 422 as a 502 in its proxy chain).\n if (errObj.code === CONTENT_POLICY_CODE) {\n return { kind: \"content_policy\", status, provider: errObj.provider, message };\n }\n if (errObj.code === REQUEST_IN_PROGRESS_CODE) return { kind: \"server\", status, message };\n return null;\n}\n\n/** Auth failures and refused requests. */\nfunction clientVerdict(status: number, errObj: ErrorBody, message: string): HttpError | null {\n if (status === 401 || status === 403) return { kind: \"unauthorized\", status, message };\n if (status !== 400 && status !== 422) return null;\n return (\n providerVerdict(status, errObj, message) ?? {\n kind: \"validation\",\n status,\n message,\n code: errObj.code,\n details: errObj.details,\n }\n );\n}\n\n/** 5xx and 429: transient unless the body says retrying cannot help. */\nfunction serverVerdict(status: number, errObj: ErrorBody, message: string): HttpError | null {\n // A 5xx whose body says retrying cannot help (a node not implemented, a job\n // that crashed or was canceled) is terminal: the status alone would retry it.\n if (status >= 500 && errObj.retryable === false) {\n return {\n kind: \"provider\",\n status,\n provider: errObj.provider,\n code: errObj.code ?? \"server_error\",\n message,\n retryable: false,\n };\n }\n if (status === 504 || (status === 502 && errObj.code === \"provider_timeout\")) {\n return { kind: \"timeout\", provider: errObj.provider, message };\n }\n if (status === 502) {\n return {\n kind: \"provider\",\n status,\n provider: errObj.provider,\n code: errObj.code ?? \"provider_error\",\n message,\n retryable: errObj.retryable ?? true,\n };\n }\n if (status >= 500 || status === 429) return { kind: \"server\", status, message };\n return null;\n}\n\nfunction backoffMs(attempt: number): number {\n return 1000 * 2 ** attempt;\n}\n\nfunction shouldRetry(err: HttpError): boolean {\n if (err.kind === \"server\") return true;\n if (err.kind === \"provider\" && err.retryable) return true;\n return false;\n}\n","import { execFile as execFileCb } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { createReadStream, type Stats } from \"node:fs\";\nimport { mkdtemp, readFile, rm, stat } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { z } from \"zod\";\nimport { fetchExternalBytes } from \"../../lib/externalFetch.ts\";\nimport { runYtDlp, YT_DLP_BIN, YtDlpError, type YtDlpInfo } from \"../../lib/ytDlp.ts\";\nimport type { ExecCtx } from \"../engine/context.ts\";\nimport { defineNode } from \"../engine/define.ts\";\nimport { NodeExecutionError } from \"../engine/errors.ts\";\nimport { looksLikeHttpUrl } from \"../lib/url.ts\";\nimport type { AssetKind, AssetRef } from \"../schema/refs.ts\";\nimport { AssetRef as AssetRefSchema } from \"../schema/refs.ts\";\nimport { MAX_ASSET_BYTES } from \"../storage/asset-store.ts\";\nimport { isCanvasAssetOrigin, parseCanvasAssetUrl } from \"../storage/remote-cache-store.ts\";\nimport { sha256Hex } from \"../storage/sha256.ts\";\nimport { callBackendExec } from \"./remote/delegate.ts\";\nimport { presignAndPut } from \"./remote/upload.ts\";\n\nconst execFile = promisify(execFileCb);\n\n// ---------------------------------------------------------------------------\n// Schema — discriminated union on `source`\n// ---------------------------------------------------------------------------\n\nconst ExpectEnum = z.enum([\"image\", \"video\", \"audio\", \"text\", \"json\", \"font\"]);\n\n/**\n * Heal a `source:\"path\"` ingest whose `path` is actually an http(s) URL into a `source:\"url\"` ingest.\n *\n * The scaffold emits `source:\"path\"` asset slots (it expects a locally-dropped file); an operator\n * routinely fills one with a durable asset URL (`media.withbaker.com/…`) but forgets to flip `source`.\n * Left alone, `path` resolves as a relative filename and the run dies deep at execute with\n * `file_not_found` — AFTER billing has started, and after `validate` reported `ok` (the `path` branch\n * accepts any non-empty string, and validate never stats the disk). The distinction is decidable from\n * the value, so we coerce it here. Runs as a `z.preprocess` in front of the discriminated union, so\n * every caller — `validate`, the deep validator, and `execute` — sees the corrected shape.\n * `baker canvas validate`/`run` also write this same heal back to the canvas file (normalize-paths.ts),\n * so what is committed is what ran — the commit hook reads the file, not this schema.\n */\nexport function coercePathUrlToUrl(input: unknown): unknown {\n if (!input || typeof input !== \"object\") return input;\n const obj = input as Record<string, unknown>;\n if (obj.source === \"path\" && looksLikeHttpUrl(obj.path)) {\n const { path: _path, ...rest } = obj;\n return { ...rest, source: \"url\", url: (obj.path as string).trim() };\n }\n return input;\n}\n\nconst IngestParams = z.preprocess(\n coercePathUrlToUrl,\n z.discriminatedUnion(\"source\", [\n z\n .object({\n source: z.literal(\"url\"),\n url: z.string().url(),\n expect: ExpectEnum,\n })\n .strict(),\n z\n .object({\n source: z.literal(\"path\"),\n path: z.string().min(1),\n expect: ExpectEnum,\n })\n .strict(),\n ]),\n);\n\nconst IngestInputs = z.object({}).strict();\nconst IngestOutputs = z.object({ asset: AssetRefSchema }).strict();\n\ntype IngestParamsT = z.infer<typeof IngestParams>;\ntype UrlParams = Extract<IngestParamsT, { source: \"url\" }>;\ntype PathParams = Extract<IngestParamsT, { source: \"path\" }>;\n\n// ---------------------------------------------------------------------------\n// Strategy resolution — one branch on source, one switch on expect for URLs\n// ---------------------------------------------------------------------------\n\ntype Strategy = \"canvas_asset\" | \"direct_fetch\" | \"firecrawl\" | \"yt_dlp\" | \"local_file\";\n\nconst RAW_TEXT_EXTENSIONS = [\".txt\", \".md\"] as const;\n\nfunction resolveStrategy(params: IngestParamsT): Strategy {\n if (params.source === \"path\") return \"local_file\";\n if (takesCanvasAssetVerbatim(params.url, params.expect)) return \"canvas_asset\";\n switch (params.expect) {\n case \"video\":\n case \"audio\":\n return \"yt_dlp\";\n case \"image\":\n case \"json\":\n case \"font\":\n return \"direct_fetch\";\n case \"text\": {\n const p = safePathname(params.url);\n const isRawText = RAW_TEXT_EXTENSIONS.some((ext) => p.endsWith(ext));\n return isRawText ? \"direct_fetch\" : \"firecrawl\";\n }\n default: {\n params.expect satisfies never;\n throw new Error(`ingest: unhandled expect=${String(params.expect)}`);\n }\n }\n}\n\nfunction safePathname(rawUrl: string): string {\n try {\n return new URL(rawUrl).pathname.toLowerCase();\n } catch {\n return \"\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Node definition\n// ---------------------------------------------------------------------------\n\nexport const ingestNode = defineNode({\n id: \"ingest\",\n version: \"1.3.0\",\n category: \"io\",\n location: \"local\",\n summary:\n \"Ingest an external URL or a local file into the asset store. Declare the kind you expect (image/video/audio/text/json/font); the node picks the strategy. For source=url: a canvas-assets URL (`…/canvas-assets/<xx>/<sha>.<ext>`, the durable copy of an earlier output) is taken back byte-for-byte with its sha unchanged; yt-dlp for other video/audio (YouTube/TikTok/Vimeo/etc. and direct file URLs), Firecrawl for HTML/PDF pages → markdown, direct HTTP fetch for binary URLs (images, fonts) and raw .txt/.md. For source=path: read a committed file from the workspace and upload to R2.\",\n when_to_use:\n 'Use as the on-ramp for any external asset a canvas needs. `expect` makes the output port statically typed so downstream wiring is checked before any byte is fetched. Pick `source: \"url\"` for portable canvas; pick `source: \"path\"` only for a file committed to the workspace (`src/brand/…`, `src/creatives/<slug>/assets/…`) — the canvas is rendered again in other Sessions, which have only what is committed. To reuse an earlier output (a voice take, a clip, a frame), ingest its canvas-assets URL from the run outputs: it comes back with the same sha, so nothing downstream re-renders. Never point `path` into `canvas/` (`canvas/.cache/`, `canvas/r_*`): that folder is not committed, and validate rewrites a cache path to its canvas-assets URL. Compose with other nodes for richer pipelines (e.g. `ingest expect=video` → `video_transcribe`).',\n inputs: IngestInputs,\n params: IngestParams,\n outputs: IngestOutputs,\n cost: () => ({ credits: 0, seconds_estimate: 5 }),\n\n // Output kind is declared in params, so validators/UI can type the port\n // statically without running the node.\n outputKinds: (params: IngestParamsT) => ({ asset: params.expect }),\n\n async execute({ params, ctx }) {\n const strategy = resolveStrategy(params);\n const source = params.source === \"url\" ? params.url : params.path;\n ctx.log(`ingest: ${strategy} (${params.expect}) ${source}`);\n const asset = await runStrategy(strategy, params, ctx);\n return { asset };\n },\n});\n\nfunction runStrategy(strategy: Strategy, params: IngestParamsT, ctx: ExecCtx): Promise<AssetRef> {\n if (params.source === \"path\") {\n if (strategy !== \"local_file\") {\n throw new Error(`ingest: invariant — source=path but strategy=${strategy}`);\n }\n return execLocalFile(params, ctx);\n }\n // params.source === \"url\" — narrowed\n switch (strategy) {\n case \"canvas_asset\":\n return execCanvasAsset(params, ctx);\n case \"direct_fetch\":\n return execDirectFetch(params, ctx);\n case \"firecrawl\":\n return execFirecrawl(params, ctx);\n case \"yt_dlp\":\n return execYtDlp(params, ctx);\n case \"local_file\":\n throw new Error(`ingest: invariant — source=url but strategy=local_file`);\n default: {\n strategy satisfies never;\n throw new Error(`ingest: unhandled strategy=${String(strategy)}`);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// canvas_asset — an output our own store already holds, taken back verbatim\n// ---------------------------------------------------------------------------\n\n/**\n * Re-use an earlier output by its durable URL: the same bytes, the same sha.\n *\n * Any other route changes the asset. yt-dlp re-encodes audio to m4a (a new sha, and a\n * voice cut word by word drifts), and the image route re-rasterizes. An agent that\n * needed a take byte-identical had no route that gave it one, and reached for the\n * local cache instead — a gitignored path that broke the next Session's publish. The\n * download is checked against the sha the URL names, so a truncated or substituted\n * file is refused rather than quietly re-addressed.\n */\n/**\n * The mime a canvas-assets URL reads back as, when it reads back as `expect` — else null. The kind\n * comes from the URL's extension, and the backend names a few mimes it has no extension for `.bin`\n * (`text/markdown`), which reads back as octet-stream: such a URL is not one to rewrite a path to.\n */\nexport function canvasAssetMime(url: string, expect: AssetKind): string | null {\n const address = parseCanvasAssetUrl(url);\n const mime = address ? EXT_TO_MIME[address.ext] : undefined;\n return mime !== undefined && inferKindFromMime(mime) === expect ? mime : null;\n}\n\n/** Our own store's URL for an asset of this kind: fetched directly by content address, nothing else is. */\nfunction takesCanvasAssetVerbatim(url: string, expect: AssetKind): boolean {\n return isCanvasAssetOrigin(url) && canvasAssetMime(url, expect) !== null;\n}\n\nasync function execCanvasAsset(params: UrlParams, ctx: ExecCtx): Promise<AssetRef> {\n const address = parseCanvasAssetUrl(params.url);\n const mime = canvasAssetMime(params.url, params.expect);\n if (!address || mime === null) throw new Error(`ingest: invariant — canvas_asset strategy for ${params.url}`);\n try {\n return await ctx.assets.ingestRemote({\n kind: params.expect,\n url: params.url,\n sha256: address.sha256,\n mime,\n metadata: { strategy: \"canvas_asset\", source_url: params.url, ingested_at: new Date().toISOString() },\n });\n } catch (e) {\n throw localExecError(ctx, (e as Error).message);\n }\n}\n\n// ---------------------------------------------------------------------------\n// direct_fetch / firecrawl — both go through the backend\n// ---------------------------------------------------------------------------\n\nasync function execDirectFetch(params: UrlParams, ctx: ExecCtx): Promise<AssetRef> {\n // Image URLs are fetched and normalized locally rather than delegated to the backend: image-\n // generation models only read jpeg/png/gif/webp and 400 the WHOLE generation on anything else\n // (SVG, AVIF, HEIC, TIFF, BMP). Normalization needs sharp, which can't load in the Convex runtime,\n // so it has to happen here — the same treatment execLocalFile gives a `source: \"path\"` image. Text/\n // json/font URLs still go through the backend (firecrawl for HTML/PDF, direct fetch otherwise).\n if (params.expect === \"image\") {\n return ingestImageUrl(params.url, ctx);\n }\n const result = await callBackendExec({\n nodeType: \"ingest\",\n nodeVersion: ingestNode.version,\n params: { strategy: \"direct_fetch\", url: params.url, expect: params.expect },\n inputs: {},\n outputKinds: { asset: params.expect },\n ctx,\n });\n return assertAssetOutput(result, params.expect);\n}\n\n/**\n * Fetch an image URL, normalize it to a model-safe raster, and upload. Mirrors execLocalFile so an\n * asset behaves identically whether it's sourced by URL or by path. A non-decodable body (e.g. an\n * HTML error page returned with a 200) surfaces as a clear NodeExecutionError instead of poisoning a\n * downstream generation.\n */\nasync function ingestImageUrl(url: string, ctx: ExecCtx): Promise<AssetRef> {\n let bytes: Buffer;\n try {\n // `maxBytes` covers both halves — the body that declares itself oversize\n // and the one that says nothing and then arrives too big. There used to be\n // a second check here for the latter, on the belief that `fetchExternalBytes`\n // only handled the former. It did not handle either: an oversize declared\n // body came back as a 200 with an *empty* buffer, which sailed through a\n // `byteLength > MAX_ASSET_BYTES` test and reached the image decoder, so a\n // file that was merely too large was reported as a corrupt one.\n ({ buffer: bytes } = await fetchExternalBytes(url, { maxBytes: MAX_ASSET_BYTES }));\n } catch (e) {\n throw localExecError(ctx, `fetch ${url} → ${(e as Error).message}`);\n }\n let normalized: ModelSafeImage;\n try {\n normalized = await toModelSafeImage(bytes);\n } catch (e) {\n throw localExecError(ctx, `${url}: ${(e as Error).message}`);\n }\n const note = normalizationNote(normalized);\n if (note) ctx.log(`ingest: ${url} ${note}`);\n return uploadAndIngest({\n bytes: normalized.bytes,\n kind: \"image\",\n mime: normalized.mime,\n metadata: {\n source_url: url,\n strategy: \"direct_fetch\",\n ingested_at: new Date().toISOString(),\n ...(normalized.rasterizedFrom ? { rasterized_from: normalized.rasterizedFrom } : {}),\n },\n ctx,\n });\n}\n\nasync function execFirecrawl(params: UrlParams, ctx: ExecCtx): Promise<AssetRef> {\n const result = await callBackendExec({\n nodeType: \"ingest\",\n nodeVersion: ingestNode.version,\n params: { strategy: \"firecrawl\", url: params.url },\n inputs: {},\n outputKinds: { asset: \"text\" },\n ctx,\n });\n return assertAssetOutput(result, \"text\");\n}\n\nfunction assertAssetOutput(result: Record<string, unknown>, expected: AssetKind): AssetRef {\n const asset = result.asset as AssetRef | undefined;\n if (!asset || typeof asset !== \"object\" || !(\"kind\" in asset)) {\n throw new Error(`ingest: backend returned no asset (got ${JSON.stringify(result)})`);\n }\n if (asset.kind !== expected) {\n throw new Error(`ingest: backend returned kind=${asset.kind} but expected ${expected}`);\n }\n return asset;\n}\n\n// ---------------------------------------------------------------------------\n// local_file — read from disk, sniff mime, upload to R2 via presign\n// ---------------------------------------------------------------------------\n\nfunction resolveLocalPath(input: string): string {\n if (input.startsWith(\"~\")) {\n throw new Error(\n `ingest: ~ path expansion is not supported (got \"${input}\"). Use an absolute path or a cwd-relative path.`,\n );\n }\n if (path.isAbsolute(input)) return input;\n return path.resolve(process.cwd(), input);\n}\n\nconst EXT_TO_MIME: Record<string, string> = {\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n webp: \"image/webp\",\n gif: \"image/gif\",\n // Non-model-safe rasters `toModelSafeImage` transcodes to PNG at ingest — they\n // must resolve to an image mime here or the kind-check rejects the local file\n // before normalization ever runs.\n avif: \"image/avif\",\n heic: \"image/heic\",\n heif: \"image/heif\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n bmp: \"image/bmp\",\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n mov: \"video/quicktime\",\n m4v: \"video/mp4\",\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n m4a: \"audio/mp4\",\n ogg: \"audio/ogg\",\n flac: \"audio/flac\",\n json: \"application/json\",\n txt: \"text/plain\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n html: \"text/html\",\n htm: \"text/html\",\n csv: \"text/csv\",\n ttf: \"font/ttf\",\n otf: \"font/otf\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n svg: \"image/svg+xml\",\n};\n\nconst SVG_MIME = \"image/svg+xml\";\n\n// Crispness target for rasterized SVGs. SVGs (brand logos especially) are often authored at small\n// intrinsic sizes — sharp rasterizes at the intrinsic size unless we raise the render density, which\n// would leave a tiny, blurry logo. We measure the intrinsic size and scale the density so the longest\n// edge lands near SVG_TARGET_LONGEST_PX, clamped so a pathological viewBox can't blow up memory.\nconst SVG_TARGET_LONGEST_PX = 2048;\nconst SVG_BASE_DENSITY = 72;\nconst SVG_MAX_DENSITY = 2400;\n\nfunction sniffSvg(buf: Buffer): boolean {\n const head = buf.subarray(0, Math.min(buf.length, 512)).toString(\"utf8\").trimStart();\n return head.startsWith(\"<?xml\") ? head.includes(\"<svg\") : head.startsWith(\"<svg\");\n}\n\nexport function inferMimeFromPath(absPath: string, sniffBytes: Buffer): string {\n const ext = path.extname(absPath).slice(1).toLowerCase();\n const fromExt = EXT_TO_MIME[ext];\n if (fromExt) return fromExt;\n const fromBytes = sniffImageMime(sniffBytes);\n if (fromBytes) return fromBytes;\n if (sniffSvg(sniffBytes)) return SVG_MIME;\n return \"application/octet-stream\";\n}\n\n// Image-generation models can't consume raw SVG markup, so an ingested SVG (e.g. a brand logo) is\n// rasterized to a transparent PNG here. Transparency is kept so the wordmark composites cleanly onto\n// any background downstream.\nexport async function rasterizeSvgToPng(bytes: Buffer): Promise<Buffer> {\n // `sharp` is a native module that can't load in the Convex runtime. This function only runs in the\n // local execLocalFile path (the ingest node is location: \"local\"), so import it lazily — a top-level\n // import would drag the native binary into the Convex bundle and break `convex deploy`.\n const { default: sharp } = await import(\"sharp\");\n const base = await sharp(bytes).metadata();\n const longest = Math.max(base.width ?? 0, base.height ?? 0);\n let density = SVG_BASE_DENSITY;\n if (longest > 0) {\n const scaled = Math.round((SVG_BASE_DENSITY * SVG_TARGET_LONGEST_PX) / longest);\n density = Math.min(SVG_MAX_DENSITY, Math.max(SVG_BASE_DENSITY, scaled));\n }\n return await sharp(bytes, { density }).png({ force: true, palette: false }).toBuffer();\n}\n\n// Image-generation providers (OpenAI, Google, Recraft via OpenRouter) only accept these input\n// formats; a reference in any other format 400s the entire generation with a non-retryable\n// \"not a valid image format\" error.\nconst MODEL_SAFE_IMAGE_MIMES = new Set([\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"]);\n\nexport type ModelSafeImage = {\n bytes: Buffer;\n mime: string;\n rasterizedFrom?: string;\n /** Set when the reference had to be re-encoded or scaled down to stay downloadable. */\n shrunkFromBytes?: number;\n};\n\n/**\n * The largest reference a generation provider will fetch. OpenRouter refuses anything above this\n * with `413 Downloaded image content cannot exceed 30MB` — and it refuses it at *generation* time,\n * so the cost of exceeding it is a dead node in the middle of a render, not a failed upload.\n *\n * The ceiling is easy to cross by accident because the transcode below is lossless: a 2.7MB AVIF\n * photo out of a media library is a 4480x6720 frame, and as PNG that is 57MB. Two clients lost\n * `image_reference_sheet` nodes to exactly that on consecutive days.\n */\nexport const MAX_MODEL_REFERENCE_BYTES = 30 * 1024 * 1024;\n\n/**\n * Bring an already-model-safe raster under `maxBytes`, re-encoding as little as possible.\n *\n * Order matters. The first pass re-encodes at full resolution into a lossy format, because lossless\n * PNG is what made the image oversized and q90 is visually indistinguishable to a model that\n * downsamples the reference anyway — a 57MB PNG lands around 5MB with every pixel of detail still\n * there. Opaque frames go to JPEG; anything with alpha or more than one frame goes to WebP, which is\n * already model-safe and keeps both. Only when that is still not enough does it scale the frame\n * down, which is the step that actually loses information.\n */\nasync function fitWithinReferenceLimit(\n bytes: Buffer,\n mime: string,\n maxBytes: number,\n): Promise<{ bytes: Buffer; mime: string }> {\n if (bytes.byteLength <= maxBytes) return { bytes, mime };\n\n const { default: sharp } = await import(\"sharp\");\n // Always decode every page: an oversized GIF or WebP is almost certainly animated, and reading it\n // frame-at-a-time would silently turn the sequence into a still. A single-page image reads the\n // same either way.\n const read = () => sharp(bytes, { animated: true });\n const meta = await read().metadata();\n const animated = (meta.pages ?? 1) > 1;\n const keepAlpha = meta.hasAlpha === true;\n const width = meta.width ?? 0;\n\n const encode = async (scale: number): Promise<{ bytes: Buffer; mime: string }> => {\n let pipeline = read();\n if (scale < 1 && width > 0) pipeline = pipeline.resize({ width: Math.max(256, Math.round(width * scale)) });\n if (animated && mime === \"image/gif\") return { bytes: await pipeline.gif().toBuffer(), mime: \"image/gif\" };\n if (animated || keepAlpha) return { bytes: await pipeline.webp({ quality: 90 }).toBuffer(), mime: \"image/webp\" };\n return { bytes: await pipeline.jpeg({ quality: 90, mozjpeg: true }).toBuffer(), mime: \"image/jpeg\" };\n };\n\n let out = await encode(1);\n let scale = 1;\n // Each pass aims straight at the limit (bytes scale with area, so the side scales with its square\n // root) but is capped at 0.9 so a badly-predicted pass still makes progress. Four passes take any\n // real photograph under 30MB; the bound is there so a pathological frame can't loop.\n for (let pass = 0; pass < 4 && out.bytes.byteLength > maxBytes; pass++) {\n scale *= Math.min(0.9, Math.sqrt(maxBytes / out.bytes.byteLength));\n out = await encode(scale);\n }\n return out;\n}\n\n/**\n * Normalize image bytes into something every image-generation model accepts AND every provider can\n * actually download. Model-safe rasters (jpeg/png/gif/webp) pass through untouched — no re-encode,\n * so quality and animation are preserved. Everything else (SVG, AVIF, HEIC, TIFF, BMP, …) is\n * transcoded to PNG so a downstream reference can never poison a generation. SVG gets the\n * density-aware rasterization (small logos upscaled, alpha kept); other formats go straight through\n * sharp. Whatever comes out of that, oversized bytes are then fitted under `maxBytes`. Throws when\n * the bytes aren't a decodable image at all, so a mis-`expect`ed ingest fails clearly rather than\n * uploading garbage.\n *\n * This lives in the CLI, not the backend, because sharp can't load in the Convex runtime — so the\n * `source: \"url\"` path (backend `direct_fetch`) can't normalize and must route images through here.\n */\nexport async function toModelSafeImage(bytes: Buffer, opts?: { maxBytes?: number }): Promise<ModelSafeImage> {\n const maxBytes = opts?.maxBytes ?? MAX_MODEL_REFERENCE_BYTES;\n const fitToModel = async (candidate: Buffer, mime: string, rasterizedFrom?: string): Promise<ModelSafeImage> => {\n const fitted = await fitWithinReferenceLimit(candidate, mime, maxBytes);\n return {\n bytes: fitted.bytes,\n mime: fitted.mime,\n ...(rasterizedFrom ? { rasterizedFrom } : {}),\n ...(fitted.bytes === candidate ? {} : { shrunkFromBytes: candidate.byteLength }),\n };\n };\n\n const safe = sniffImageMime(bytes);\n if (safe && MODEL_SAFE_IMAGE_MIMES.has(safe)) {\n return await fitToModel(bytes, safe);\n }\n if (sniffSvg(bytes)) {\n return await fitToModel(await rasterizeSvgToPng(bytes), \"image/png\", \"svg\");\n }\n const { default: sharp } = await import(\"sharp\");\n let png: Buffer;\n let format: string;\n try {\n const img = sharp(bytes);\n format = (await img.metadata()).format ?? \"unknown\";\n png = await img.png({ force: true }).toBuffer();\n } catch (e) {\n throw new Error(`bytes are not a decodable image (${(e as Error).message})`);\n }\n return await fitToModel(png, \"image/png\", format);\n}\n\n/**\n * One run-log line when normalization changed the bytes — format, size, or both. A silent re-encode\n * is the kind of thing someone later has to explain, so both halves say what they did and why.\n */\nfunction normalizationNote(image: ModelSafeImage): string | null {\n const parts: string[] = [];\n if (image.rasterizedFrom) parts.push(`normalized ${image.rasterizedFrom} -> ${image.mime}`);\n if (image.shrunkFromBytes !== undefined) {\n parts.push(\n `fitted ${image.shrunkFromBytes}B -> ${image.bytes.length}B as ${image.mime} (providers refuse a reference over ${MAX_MODEL_REFERENCE_BYTES}B)`,\n );\n }\n return parts.length > 0 ? parts.join(\"; \") : null;\n}\n\n/** Whether `buf` carries the exact ASCII string `sig` starting at `offset`. */\nfunction hasAscii(buf: Buffer, offset: number, sig: string): boolean {\n return buf.length >= offset + sig.length && buf.toString(\"ascii\", offset, offset + sig.length) === sig;\n}\n\nconst HEIC_BRANDS = new Set([\"heic\", \"heix\", \"heim\", \"heis\", \"hevc\", \"hevx\", \"mif1\", \"msf1\", \"heif\"]);\n\n/** ISO-BMFF `ftyp` box (bytes 4..8) — the brand at 8..12 splits AVIF from HEIC/HEIF. */\nfunction sniffIsoBmff(buf: Buffer): string | null {\n if (!hasAscii(buf, 4, \"ftyp\")) return null;\n const brand = buf.subarray(8, 12).toString(\"ascii\");\n if (brand === \"avif\" || brand === \"avis\") return \"image/avif\";\n if (HEIC_BRANDS.has(brand)) return \"image/heic\";\n return null;\n}\n\nfunction sniffImageMime(buf: Buffer): string | null {\n if (buf.length < 4) return null;\n if (buf[0] === 0x89 && hasAscii(buf, 1, \"PNG\")) return \"image/png\";\n if (buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff) return \"image/jpeg\";\n if (hasAscii(buf, 0, \"GIF\")) return \"image/gif\";\n if (hasAscii(buf, 0, \"RIFF\") && hasAscii(buf, 8, \"WEBP\")) return \"image/webp\";\n // TIFF: \"II*\\0\" (little-endian) or \"MM\\0*\" (big-endian).\n if (hasAscii(buf, 0, \"II*\\0\") || hasAscii(buf, 0, \"MM\\0*\")) return \"image/tiff\";\n if (hasAscii(buf, 0, \"BM\")) return \"image/bmp\";\n // Covers HEIC/HEIF/AVIF whose extension is wrong or missing.\n return sniffIsoBmff(buf);\n}\n\n// ISO-BMFF (mp4 / mov / m4v) duration probe. Pure, dependency-free, and runs on\n// the bytes already in memory — so a video ingest can stamp the canonical\n// `VideoRef.duration_ms` without ffprobe (which the engine does not require on\n// PATH). Walks top-level boxes for `moov`, then `mvhd` inside it, and reads the\n// timescale + duration. Returns undefined for anything it can't read (webm, a\n// fragmented/duration-less moov, a truncated header) so the caller degrades to\n// \"duration unknown\" rather than failing the ingest.\n//\n// Box layout: [size:u32 BE][type:ascii4][payload]. size===1 → a u64 `largesize`\n// follows the type; size===0 → the box runs to the end of its parent.\nfunction findBoxPayload(buf: Buffer, start: number, end: number, type: string): { start: number; end: number } | null {\n let offset = start;\n while (offset + 8 <= end) {\n let size = buf.readUInt32BE(offset);\n const boxType = buf.toString(\"ascii\", offset + 4, offset + 8);\n let headerLen = 8;\n if (size === 1) {\n if (offset + 16 > end) return null;\n // largesize is u64; durations here never need >2^53, so Number is safe.\n size = Number(buf.readBigUInt64BE(offset + 8));\n headerLen = 16;\n } else if (size === 0) {\n size = end - offset;\n }\n if (size < headerLen || offset + size > end) return null;\n if (boxType === type) return { start: offset + headerLen, end: offset + size };\n offset += size;\n }\n return null;\n}\n\nconst MVHD_DURATION_UNKNOWN = 0xffffffff;\n\nfunction mp4DurationMs(bytes: Buffer | Uint8Array): number | undefined {\n const buf = Buffer.isBuffer(bytes) ? bytes : Buffer.from(bytes);\n const moov = findBoxPayload(buf, 0, buf.length, \"moov\");\n if (!moov) return undefined;\n const mvhd = findBoxPayload(buf, moov.start, moov.end, \"mvhd\");\n if (!mvhd) return undefined;\n const version = buf[mvhd.start];\n // version byte (1) + flags (3), then v0: creation(4)+modification(4); v1: (8)+(8).\n const tsOffset = mvhd.start + 4 + (version === 1 ? 16 : 8);\n if (version === 1) {\n if (tsOffset + 12 > mvhd.end) return undefined;\n const timescale = buf.readUInt32BE(tsOffset);\n const duration = buf.readBigUInt64BE(tsOffset + 4);\n if (timescale === 0 || duration === 0n) return undefined;\n return Math.round((Number(duration) / timescale) * 1000);\n }\n if (version !== 0) return undefined;\n if (tsOffset + 8 > mvhd.end) return undefined;\n const timescale = buf.readUInt32BE(tsOffset);\n const duration = buf.readUInt32BE(tsOffset + 4);\n if (timescale === 0 || duration === 0 || duration === MVHD_DURATION_UNKNOWN) return undefined;\n return Math.round((duration / timescale) * 1000);\n}\n\nfunction inferKindFromMime(mime: string): AssetKind | null {\n if (mime.startsWith(\"image/\")) return \"image\";\n if (mime.startsWith(\"video/\")) return \"video\";\n if (mime.startsWith(\"audio/\")) return \"audio\";\n if (mime === \"application/json\") return \"json\";\n if (mime.startsWith(\"text/\")) return \"text\";\n if (mime.startsWith(\"font/\")) return \"font\";\n return null;\n}\n\nfunction localExecError(ctx: ExecCtx, message: string): NodeExecutionError {\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, {\n kind: \"local\",\n cause: new Error(`ingest: ${message}`),\n });\n}\n\nasync function execLocalFile(params: PathParams, ctx: ExecCtx): Promise<AssetRef> {\n const absPath = resolveLocalPath(params.path);\n\n let stats: Stats;\n try {\n stats = await stat(absPath);\n } catch (e) {\n const code = (e as NodeJS.ErrnoException).code;\n if (code === \"ENOENT\") {\n throw localExecError(ctx, `file_not_found: ${absPath}`);\n }\n if (code === \"EACCES\") {\n throw localExecError(ctx, `permission_denied: ${absPath}`);\n }\n throw localExecError(ctx, `stat failed for ${absPath}: ${(e as Error).message}`);\n }\n\n if (!stats.isFile()) {\n throw localExecError(ctx, `not_a_file: ${absPath} (isDirectory=${stats.isDirectory()})`);\n }\n if (stats.size > MAX_ASSET_BYTES) {\n throw localExecError(ctx, `file_too_large: ${absPath} is ${stats.size} bytes (limit ${MAX_ASSET_BYTES})`);\n }\n\n let bytes: Buffer;\n try {\n bytes = await readFile(absPath);\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === \"EACCES\") {\n throw localExecError(ctx, `permission_denied: ${absPath}`);\n }\n throw localExecError(ctx, `read failed for ${absPath}: ${(e as Error).message}`);\n }\n\n const mime = inferMimeFromPath(absPath, bytes);\n const kind = inferKindFromMime(mime);\n\n if (kind === null) {\n throw localExecError(\n ctx,\n `kind_mismatch: ${absPath} has mime=${mime} which doesn't map to any ingest kind (image/video/audio/text/json/font). If this is a PDF and you want text extraction, host it via URL and use source=\"url\".`,\n );\n }\n if (kind !== params.expect) {\n throw localExecError(ctx, `kind_mismatch: expect=${params.expect} but ${absPath} has mime=${mime} (kind=${kind})`);\n }\n\n ctx.log(`ingest: local file ${stats.size}B mime=${mime}`);\n\n // Normalize any image to a model-safe raster before upload — image-generation models reject SVG,\n // AVIF, HEIC, TIFF, BMP (they read only jpeg/png/gif/webp). The kind check above guarantees\n // expect === \"image\" here; non-image kinds upload verbatim.\n let outBytes = bytes;\n let outMime = mime;\n let rasterizedFrom: string | undefined;\n if (kind === \"image\") {\n const normalized = await toModelSafeImage(bytes);\n outBytes = normalized.bytes;\n outMime = normalized.mime;\n rasterizedFrom = normalized.rasterizedFrom;\n const note = normalizationNote(normalized);\n if (note) ctx.log(`ingest: ${note}`);\n }\n\n const durationMs = probeVideoDurationMs(params.expect, outBytes, ctx);\n const ref = await uploadAndIngest({\n bytes: outBytes,\n kind: params.expect,\n mime: outMime,\n metadata: localFileMetadata({ absPath, fileSize: stats.size, mime, durationMs, rasterizedFrom }),\n ctx,\n });\n return withProbedDuration(ref, durationMs);\n}\n\n/**\n * Probe a video's duration from its ISO-BMFF header so downstream nodes (notably\n * video_deconstruct, which sizes its Mux ingest-poll timeout and preflight off\n * the declared duration) don't fall back to their worst-case budgets. Best-effort:\n * undefined for non-video kinds and non-mp4 containers (e.g. webm).\n */\nfunction probeVideoDurationMs(expect: AssetKind, bytes: Buffer, ctx: ExecCtx): number | undefined {\n if (expect !== \"video\") return undefined;\n const durationMs = mp4DurationMs(bytes);\n if (durationMs !== undefined) ctx.log(`ingest: probed video duration ${durationMs}ms`);\n return durationMs;\n}\n\nfunction localFileMetadata(args: {\n absPath: string;\n fileSize: number;\n mime: string;\n durationMs: number | undefined;\n rasterizedFrom: string | undefined;\n}): Record<string, unknown> {\n return {\n source_path: args.absPath,\n strategy: \"local_file\",\n ingested_at: new Date().toISOString(),\n file_size: args.fileSize,\n original_filename: path.basename(args.absPath),\n ...(args.rasterizedFrom ? { rasterized_from: args.rasterizedFrom } : {}),\n ...(args.durationMs !== undefined ? { duration_ms: args.durationMs } : {}),\n };\n}\n\n/**\n * Stamp the canonical top-level VideoRef.duration_ms when known. Consumers read\n * either the field or metadata.duration_ms, so populating both leaves neither\n * convention missing it.\n */\nfunction withProbedDuration(ref: AssetRef, durationMs: number | undefined): AssetRef {\n if (durationMs === undefined || ref.kind !== \"video\") return ref;\n return { ...ref, duration_ms: durationMs };\n}\n\n// ---------------------------------------------------------------------------\n// yt_dlp — runs locally, then uploads to R2 via presign so remote downstream\n// nodes can fetch the asset by URL.\n// ---------------------------------------------------------------------------\n\nconst YT_DLP_MIME: Record<AssetKind, string> = {\n image: \"image/png\",\n video: \"video/mp4\",\n audio: \"audio/mp4\",\n text: \"text/plain\",\n json: \"application/json\",\n font: \"font/ttf\", // unreachable — resolveStrategy never routes font to yt_dlp\n};\n\nconst YT_DLP_EXT: Record<AssetKind, string> = {\n image: \"png\",\n video: \"mp4\",\n audio: \"m4a\",\n text: \"txt\",\n json: \"json\",\n font: \"ttf\", // unreachable — resolveStrategy never routes font to yt_dlp\n};\n\nasync function execYtDlp(params: UrlParams, ctx: ExecCtx): Promise<AssetRef> {\n if (params.expect !== \"video\" && params.expect !== \"audio\") {\n // resolveStrategy guarantees this, but the runtime branch makes it explicit.\n throw new Error(`ingest: yt_dlp only handles video/audio, got expect=${params.expect}`);\n }\n\n const workDir = await mkdtemp(path.join(tmpdir(), \"ingest-yt-\"));\n try {\n const { filePath, info, reducedQuality } = await runYtDlpForNode({\n url: params.url,\n audioOnly: params.expect === \"audio\",\n workDir,\n ctx,\n });\n\n const downloadedStats = await stat(filePath);\n if (downloadedStats.size > MAX_ASSET_BYTES) {\n throw localExecError(\n ctx,\n `file_too_large: yt-dlp output for ${params.url} is ${downloadedStats.size} bytes (limit ${MAX_ASSET_BYTES})`,\n );\n }\n const bytes = await readFile(filePath);\n const kind = params.expect;\n const mime = YT_DLP_MIME[kind];\n const metadata = buildYtDlpMetadata(params.url, info);\n\n // The shared runner can only get some sources by asking a fallback player\n // for a lower-resolution stream. That is worth having and must not be\n // silent: a canvas built on a 360p asset looks like a canvas built on a\n // master until it is rendered, so the fact travels on the asset itself and\n // through the run log, as it does for `baker videos ingest`.\n if (reducedQuality) {\n metadata.reduced_quality = true;\n ctx.log(`ingest: ${params.url} was only available at reduced resolution`);\n }\n\n return await uploadAndIngest({ bytes, kind, mime, metadata, ctx });\n } finally {\n await rm(workDir, { recursive: true, force: true }).catch((e) => {\n ctx.log(`ingest: tmp cleanup failed (${(e as Error).message})`);\n });\n }\n}\n\n/**\n * The shared runner, with failures re-expressed as this node's error type.\n *\n * Everything about *how* yt-dlp is invoked — the ladder, the proxy environment,\n * the block signal — lives in `lib/ytDlp.ts` and is shared with\n * `baker videos ingest`, so the two cannot drift on what \"blocked\" means or on\n * how a credential is written into a proxy URL.\n */\nasync function runYtDlpForNode(args: {\n url: string;\n audioOnly: boolean;\n workDir: string;\n ctx: ExecCtx;\n}): Promise<{ filePath: string; info: YtDlpInfo; reducedQuality: boolean }> {\n try {\n return await runYtDlp({\n url: args.url,\n audioOnly: args.audioOnly,\n workDir: args.workDir,\n onLog: (message) => args.ctx.log(`ingest: ${message}`),\n });\n } catch (error) {\n if (error instanceof YtDlpError) {\n throw new NodeExecutionError(args.ctx.nodeId, args.ctx.nodeType, {\n kind: \"local\",\n cause: new Error(describeYtDlpFailure(error.message, error.stderrTail)),\n });\n }\n throw error;\n }\n}\n\n/**\n * yt-dlp's failure, plus what to do when it is TLS. A trust failure is this machine's, not the\n * file's, and the one copy within reach — the engine's cache under `canvas/` — is the wrong one: a\n * canvas wired to it renders here and fails every later Session's publish.\n */\nexport function describeYtDlpFailure(message: string, stderrTail: string): string {\n const base = stderrTail ? `${message}\\n${stderrTail}` : message;\n if (!/CERTIFICATE_VERIFY_FAILED|SSL certificate problem/i.test(stderrTail)) return base;\n return `${base}\\nThis machine could not verify the download's TLS certificate; the file itself is fine. Report it and leave this ingest as it is. Never copy the file out of canvas/ (the render cache or a run folder) to work around it: canvas/ is not committed, so the creative would fail every later publish. To reuse one of our own outputs, ingest its canvas-assets URL, which does not go through this downloader.`;\n}\n\nfunction buildYtDlpMetadata(sourceUrl: string, info: YtDlpInfo): Record<string, unknown> {\n const out: Record<string, unknown> = {\n source_url: sourceUrl,\n strategy: \"yt_dlp\",\n ingested_at: new Date().toISOString(),\n };\n if (typeof info.title === \"string\") out.original_title = info.title;\n if (typeof info.uploader === \"string\") out.original_uploader = info.uploader;\n if (typeof info.duration === \"number\") out.original_duration_s = info.duration;\n if (typeof info.webpage_url === \"string\") out.webpage_url = info.webpage_url;\n if (typeof info.width === \"number\") out.width = info.width;\n if (typeof info.height === \"number\") out.height = info.height;\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// R2 upload + local ingest\n// ---------------------------------------------------------------------------\n\nexport async function uploadAndIngest(args: {\n bytes: Buffer;\n kind: AssetKind;\n mime: string;\n metadata: Record<string, unknown>;\n ctx: ExecCtx;\n}): Promise<AssetRef> {\n const sha = sha256Hex(args.bytes);\n const publicUrl = await presignAndPut({ bytes: args.bytes, sha256: sha, mime: args.mime, ctx: args.ctx });\n\n const localRef = await args.ctx.assets.ingestBytes({\n bytes: args.bytes,\n kind: args.kind,\n mime: args.mime,\n metadata: args.metadata,\n });\n // ingestBytes leaves url undefined (LocalAssetStore is local-only). Overlay\n // the public R2 URL so remote downstream nodes can pull this asset.\n return { ...localRef, url: publicUrl } as AssetRef;\n}\n\n// ---------------------------------------------------------------------------\n// Spawn helper (local copy — cli-runner.ts rejects URL args by policy, which\n// directly conflicts with yt-dlp's job)\n// ---------------------------------------------------------------------------\n\n// Fold yt-dlp version into the cache key so upgrades bust cache automatically.\nasync function ytDlpVersion(): Promise<string> {\n try {\n const { stdout } = await execFile(YT_DLP_BIN, [\"--version\"], { encoding: \"utf-8\", maxBuffer: 64 * 1024 });\n return stdout.trim();\n } catch {\n return \"yt-dlp:unknown\";\n }\n}\n\n/** The sha256 of a file, read as a stream: a source video can be far larger than memory should hold. */\nasync function fileSha256(abs: string): Promise<string> {\n const hash = createHash(\"sha256\");\n for await (const chunk of createReadStream(abs)) hash.update(chunk as Buffer);\n return hash.digest(\"hex\");\n}\n\n// Attach cacheKeyExtras after definition so the helper can be referenced.\ningestNode.cacheKeyExtras = async ({ params }): Promise<Record<string, string>> => {\n const p = params as { source?: unknown; url?: unknown; path?: unknown; expect?: unknown };\n const extras: Record<string, string> = {};\n\n // For source=path: fold the file's bytes into the cache key, so editing the file invalidates\n // the cache and the same file in another Runtime finds it. Its mtime would not: every new\n // chat's checkout writes the file anew, so no Runtime ever reused another's ingest. Failures\n // (missing file, perms) are silently swallowed — execute will surface them with full context.\n if (p.source === \"path\" && typeof p.path === \"string\") {\n try {\n extras.local_file_sha256 = await fileSha256(resolveLocalPath(p.path));\n } catch {\n // ignore — execute will fail clearly\n }\n }\n\n // For source=url with yt_dlp strategy: fold tool version so upgrades bust cache.\n if (\n p.source === \"url\" &&\n (p.expect === \"video\" || p.expect === \"audio\") &&\n !(typeof p.url === \"string\" && takesCanvasAssetVerbatim(p.url, p.expect))\n ) {\n extras.yt_dlp_version = await ytDlpVersion();\n }\n\n return extras;\n};\n\n// Exported for unit tests.\nexport const _internal = {\n resolveStrategy,\n resolveLocalPath,\n inferMimeFromPath,\n inferKindFromMime,\n mp4DurationMs,\n buildYtDlpMetadata,\n YT_DLP_EXT,\n YT_DLP_MIME,\n EXT_TO_MIME,\n};\n","import type { z } from \"zod\";\nimport type { AssetRef } from \"../schema/refs.ts\";\nimport type { ExecCtx } from \"./context.ts\";\n\ntype CostEstimate = { credits: number; seconds_estimate: number };\n\n/**\n * A function of a node's params, declared as a METHOD so it is checked\n * bivariantly: that is what lets a concrete `NodeDefinition<I, P, O>` stand in\n * for the type-erased `AnyNodeDefinition` a registry holds, with no cast at every\n * registration. The registry only ever calls it with params its own schema parsed.\n */\ntype ParamsFn<P, R> = { fn(params: P): R }[\"fn\"];\n\nexport type CostFn<P> = ParamsFn<{ params: P }, CostEstimate>;\n\nexport type ExecuteArgs<I, P> = {\n inputs: I;\n params: P;\n ctx: ExecCtx;\n};\n\n/**\n * Node-supplied extra validation hook. Runs after the node's static Zod\n * schema passes — used by nodes whose param shape depends on external state\n * (e.g. `hyperframe_render` consults the composition's meta.json).\n * Returns issue messages keyed by the dotted param path to surface in\n * `canvas validate` output. Empty array means OK.\n */\ntype ValidateExtraIssue = { path: string; message: string };\n\n/**\n * What a raw input will hold at run time, as far as the graph says before the\n * run: an asset kind, `list` (a whole list output rather than one element of it),\n * `value` (not an asset at all), or `unknown` (only running it would tell).\n */\nexport type StaticInputKind = AssetRef[\"kind\"] | \"list\" | \"value\" | \"unknown\";\n\n/** Where an input's file comes from before the run: a workspace file or a URL an `ingest` reads. */\nexport type InputSource = { path: string } | { url: string };\n\nexport type ValidateExtraFn = (args: {\n rawParams: unknown;\n rawInputs: unknown;\n /** The canvas node id, when validating a whole canvas. */\n nodeId?: string;\n /** Reads a raw input value's kind off the node it references. */\n inputKindOf?: (value: unknown) => StaticInputKind;\n /** Where a raw input's file comes from before the run; undefined for one a node generates. */\n inputSourceOf?: (value: unknown) => InputSource | undefined;\n}) => Promise<ValidateExtraIssue[]> | ValidateExtraIssue[];\n\n/**\n * Node-supplied cache-key extras hook. Returns extra fields the executor\n * folds into the cache key alongside `params` — used by nodes whose output\n * depends on external content (e.g. composition directory contents).\n */\nexport type CacheKeyExtrasFn = (args: { params: unknown }) => Promise<Record<string, string>>;\n\n/**\n * Per-output asset-kind declaration. Either a static map (most nodes — each\n * named output produces a fixed kind) or a function of params (e.g. the\n * `ingest` node, whose output kind is decided by `params.expect`).\n *\n * Validators and the dashboard read this to type the output port statically\n * without running the node. Remote nodes also use it at runtime so the\n * delegate ingestor knows how to wrap returned bytes.\n */\nexport type OutputKindsSpec<P> = Record<string, AssetRef[\"kind\"]> | ParamsFn<P, Record<string, AssetRef[\"kind\"]>>;\n\nexport function resolveOutputKinds<P>(\n spec: OutputKindsSpec<P> | undefined,\n params: P,\n): Record<string, AssetRef[\"kind\"]> {\n if (!spec) return {};\n return typeof spec === \"function\" ? spec(params) : spec;\n}\n\n/**\n * What a node's output will measure, known before anything runs: its length and\n * raster. Each field is present only when the params (and the timing of what is\n * wired in) settle it; an absent field means \"only running it would tell\".\n */\nexport type StaticTiming = { duration_s?: number; width?: number; height?: number };\n\n/**\n * Node-supplied static timing hook: the output's length and size from its parsed\n * params plus the static timing of each wired input (keyed by input slot, absent\n * when upstream cannot say). Pure; `canvas validate` calls it to prove the\n * timeline without running anything.\n */\nexport type StaticTimingFn<P> = ParamsFn<\n { params: P; inputs: Readonly<Record<string, StaticTiming | undefined>> },\n StaticTiming\n>;\n\nexport type NodeDefinition<I = unknown, P = unknown, O = unknown> = {\n id: string;\n version: string;\n category: string;\n summary: string;\n when_to_use?: string;\n inputs: z.ZodType<I>;\n params: z.ZodType<P>;\n outputs: z.ZodType<O>;\n /** \"local\" runs in-process; \"remote\" delegates to Convex via ctx.client */\n location: \"local\" | \"remote\";\n /**\n * Local node that only forwards asset refs and never reads their bytes\n * (e.g. `collect`). Exempts its upstream producers from the forced R2→disk\n * download local consumers otherwise trigger.\n */\n passthroughRefs?: true;\n cost?: CostFn<P>;\n validateExtra?: ValidateExtraFn;\n cacheKeyExtras?: CacheKeyExtrasFn;\n outputKinds?: OutputKindsSpec<P>;\n staticTiming?: StaticTimingFn<P>;\n execute: ParamsFn<ExecuteArgs<I, P>, Promise<O>>;\n};\n\n/**\n * Any node definition, its input/param/output types erased: what a registry\n * holds and the executor runs. Every `defineNode(...)` result is assignable to it.\n */\nexport type AnyNodeDefinition = NodeDefinition<unknown, unknown, unknown>;\n\nexport function defineNode<I, P, O>(def: NodeDefinition<I, P, O>): NodeDefinition<I, P, O> {\n return def;\n}\n","/**\n * True when `value` is an http(s) URL — the machine-decidable signal that separates a `source:\"url\"`\n * ingest from a `source:\"path\"` one. Shared so the ingest schema's auto-heal, the load-time path\n * resolver, and the validator's advisory all agree on exactly what counts as a URL.\n */\nexport function looksLikeHttpUrl(value: unknown): value is string {\n return typeof value === \"string\" && /^https?:\\/\\//i.test(value.trim());\n}\n","import type { ExecCtx } from \"../../engine/context.ts\";\nimport type { AssetRef } from \"../../schema/refs.ts\";\nimport { collectAssetRefLikes, isPersistedAssetRef } from \"../../storage/remote-cache-store.ts\";\n\nconst PUT_MAX_ATTEMPTS = 4;\n\nconst sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Presign an R2 upload slot for `sha256`/`mime` and PUT the bytes. Returns the\n * public URL a remote node can fetch. Shared by the `ingest` node (which uploads\n * freshly-fetched bytes) and `ensureUploaded` (which uploads an existing\n * local-only asset before it is handed to a remote node).\n *\n * Retried with backoff: one TCP reset on a large body must not cost a paid\n * render its durable copy. Replays are safe — the key is content-addressed, so\n * a repeated PUT writes identical bytes. Each attempt presigns FRESH: a retry\n * after a long stall can straddle the 1-hour signature window, and\n * re-presigning the same sha is idempotent (same key).\n */\nexport async function presignAndPut(args: {\n bytes: Buffer;\n sha256: string;\n mime: string;\n ctx: ExecCtx;\n}): Promise<string> {\n let lastFailure: Error | null = null;\n for (let attempt = 0; attempt < PUT_MAX_ATTEMPTS; attempt++) {\n if (args.ctx.signal?.aborted) break;\n if (attempt > 0) await sleep(500 * 2 ** (attempt - 1) * (1 + Math.random() * 0.25));\n const result = await attemptPresignedPut(args);\n if (result.ok) return result.url;\n lastFailure = result.failure;\n if (!result.retryable) break;\n }\n throw lastFailure ?? new Error(\"upload: aborted before the PUT could start\");\n}\n\ntype PutAttempt = { ok: true; url: string } | { ok: false; failure: Error; retryable: boolean };\n\nasync function attemptPresignedPut(args: {\n bytes: Buffer;\n sha256: string;\n mime: string;\n ctx: ExecCtx;\n}): Promise<PutAttempt> {\n try {\n const { putUrl, publicUrl, conditional } = await args.ctx.client.presignAssetUpload(\n args.sha256,\n args.mime,\n args.ctx.signal,\n undefined,\n true,\n );\n const putRes = await fetch(putUrl, {\n method: \"PUT\",\n body: new Uint8Array(args.bytes),\n // A conditional URL was signed WITH this header, so it must be sent exactly.\n headers: conditional ? { \"Content-Type\": args.mime, \"If-None-Match\": \"*\" } : { \"Content-Type\": args.mime },\n signal: args.ctx.signal,\n });\n if (putRes.ok) return { ok: true, url: publicUrl };\n // 412 on a conditional write: an object already lives at this content\n // address. The key is the sha of these bytes, so the upload's job is done.\n if (conditional && putRes.status === 412) return { ok: true, url: publicUrl };\n return {\n ok: false,\n failure: new Error(`upload: presigned PUT failed ${putRes.status} ${putRes.statusText}`),\n // Only transient statuses warrant a replay — a 400/403 fails identically every attempt.\n retryable: putRes.status >= 500 || putRes.status === 429 || putRes.status === 408,\n };\n } catch (e) {\n // Network reset mid-body (or a presign that couldn't reach the backend) —\n // retryable unless the run itself was aborted.\n return {\n ok: false,\n failure: e instanceof Error ? e : new Error(String(e)),\n retryable: args.ctx.signal?.aborted !== true,\n };\n }\n}\n\n/**\n * Guarantee a remote-fetchable `url` for an asset before it crosses to a remote\n * node. Local-node outputs (ffmpeg/magick via `runCli`, any `runCli` consumer)\n * are ingested into the content-addressed store with a `path` but NO `url`\n * (`LocalAssetStore` is local-only). A remote node receiving such a ref would be\n * told `url: undefined`, which the backend rejects (e.g. `audio_voice_convert\n * requires inputs.audio`). This uploads the local bytes to R2 and stamps `url`.\n * Idempotent: refs that already carry a `url` (ingest/remote outputs) pass through.\n */\nexport async function ensureUploaded(ref: AssetRef, ctx: ExecCtx): Promise<AssetRef> {\n if (ref.url) return ref;\n const bytes = await ctx.assets.readBytes(ref.sha256, ref.mime);\n const url = await presignAndPut({ bytes, sha256: ref.sha256, mime: ref.mime, ctx });\n return { ...ref, url } as AssetRef;\n}\n\n/**\n * Stamp a durable `canvas-assets/` URL onto every AssetRef in a node's fresh\n * outputs, uploading local-only bytes (and re-uploading refs whose url points\n * at an external origin — an ingested source URL can die tomorrow; the cache\n * entry and run record that reference it must not). Mutates refs in place —\n * the outputs object was just produced by the node and is not shared yet.\n * URL-only stamping never changes cache keys: inputs hash by sha256 and\n * params are normalized to content identity (see normalizeParamsForCacheKey).\n */\nexport async function persistOutputAssetUrls(outputs: Record<string, unknown>, ctx: ExecCtx): Promise<void> {\n for (const ref of collectAssetRefLikes(outputs)) {\n if (isPersistedAssetRef(ref)) continue;\n const bytes = await ctx.assets.readBytes(ref.sha256, ref.mime);\n ref.url = await presignAndPut({ bytes, sha256: ref.sha256, mime: ref.mime, ctx });\n }\n}\n","import type { RawAssetOutput } from \"../../client/backend-client.ts\";\nimport { BackendHttpError } from \"../../client/http.ts\";\nimport type { ExecCtx } from \"../../engine/context.ts\";\nimport type { NodeDefinition } from \"../../engine/define.ts\";\nimport { resolveOutputKinds } from \"../../engine/define.ts\";\nimport { NodeExecutionError } from \"../../engine/errors.ts\";\nimport type { AssetRef } from \"../../schema/refs.ts\";\nimport { buildRef } from \"../../storage/asset-store.ts\";\nimport { ensureUploaded } from \"./upload.ts\";\n\ntype RemoteSpec<I, P, O> = Omit<NodeDefinition<I, P, O>, \"execute\" | \"location\">;\n\n/**\n * Build a `defineNode`-shaped remote node that POSTs to /api/canvas/nodes/exec\n * and ingests any returned asset bytes locally via ctx.assets.ingestRemote.\n */\nexport function delegated<I, P, O>(spec: RemoteSpec<I, P, O>): NodeDefinition<I, P, O> {\n return {\n ...spec,\n location: \"remote\",\n execute: async ({ inputs, params, ctx }) => {\n return (await callBackendExec({\n nodeType: spec.id,\n nodeVersion: spec.version,\n params,\n inputs,\n outputKinds: resolveOutputKinds(spec.outputKinds, params),\n ctx,\n })) as O;\n },\n };\n}\n\n/**\n * Shared \"POST to /api/canvas/nodes/exec and ingest the returned assets\"\n * pipeline. Used by `delegated()` for remote nodes, and by the `ingest` node\n * which dispatches its `direct_fetch` and `firecrawl` strategies through the\n * same backend channel even though the node itself is registered as local.\n */\nexport async function callBackendExec(args: {\n nodeType: string;\n nodeVersion: string;\n params: unknown;\n inputs: unknown;\n outputKinds: Record<string, AssetRef[\"kind\"]>;\n ctx: ExecCtx;\n}): Promise<Record<string, unknown>> {\n try {\n const serialized = await serializeInputs(args.inputs, args.ctx);\n // Scoped to the run so a deliberate re-run (e.g. cache bypass) generates\n // fresh, while HTTP-level retries within one execution replay the stored\n // backend response instead of dispatching (and charging) twice.\n const idempotencyKey = args.ctx.cacheKey ? `${args.ctx.canvasRunId}:${args.ctx.cacheKey}` : undefined;\n const res = await args.ctx.client.exec(\n {\n nodeType: args.nodeType,\n nodeVersion: args.nodeVersion,\n params: args.params,\n inputs: serialized,\n idempotency_key: idempotencyKey,\n canvas_run_id: args.ctx.canvasRunId,\n node_id: args.ctx.nodeId,\n },\n args.ctx.signal,\n );\n if (typeof res.credits_charged === \"number\") args.ctx.reportCharge?.(res.credits_charged);\n return await ingestOutputs(res.outputs, args.ctx, args.outputKinds);\n } catch (e) {\n throw mapClientError(args.ctx, e);\n }\n}\n\nasync function serializeInputs(inputs: unknown, ctx: ExecCtx): Promise<Record<string, unknown>> {\n if (!inputs || typeof inputs !== \"object\") return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(inputs as Record<string, unknown>)) {\n out[k] = await stripLocalRefs(v, ctx);\n }\n return out;\n}\n\nasync function stripLocalRefs(value: unknown, ctx: ExecCtx): Promise<unknown> {\n if (Array.isArray(value)) return Promise.all(value.map((v) => stripLocalRefs(v, ctx)));\n if (value && typeof value === \"object\") {\n if (\"kind\" in value && \"sha256\" in value && \"mime\" in value) {\n // A local-node output (ffmpeg/magick via runCli) has `path` but no `url`.\n // Upload it to R2 first so the remote backend can fetch it — otherwise it\n // receives `url: undefined` and rejects the input. Idempotent for refs\n // that already carry a `url` (ingest/remote outputs).\n const ref = await ensureUploaded(value as AssetRef, ctx);\n // Strip local-only `path` and pass through what the backend can consume.\n return {\n kind: ref.kind,\n url: ref.url,\n sha256: ref.sha256,\n mime: ref.mime,\n metadata: ref.metadata,\n };\n }\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) out[k] = await stripLocalRefs(v, ctx);\n return out;\n }\n return value;\n}\n\nasync function ingestOutputs(\n outputs: Record<string, unknown>,\n ctx: ExecCtx,\n kinds: Record<string, AssetRef[\"kind\"]>,\n): Promise<Record<string, unknown>> {\n const result: Record<string, unknown> = {};\n for (const [name, value] of Object.entries(outputs)) {\n const declaredKind = kinds[name];\n result[name] = await ingestValue(value, ctx, declaredKind);\n }\n return result;\n}\n\nasync function ingestValue(value: unknown, ctx: ExecCtx, declaredKind?: AssetRef[\"kind\"]): Promise<unknown> {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (const v of value) out.push(await ingestValue(v, ctx, declaredKind));\n return out;\n }\n if (isRawAsset(value)) {\n const kind = value.kind ?? declaredKind ?? \"json\";\n // No local consumer needs the bytes on disk: the backend already computed\n // the sha256 and persisted a durable R2 URL, so skip the redundant\n // R2→sandbox download and keep the ref URL-only (no local `path`). The run\n // record still works — `isPersistedAssetRef` is true for a canvas-assets URL.\n if (ctx.downloadOutputs === false) {\n // Match the shape `ingestRemote` would have produced (top-level\n // width/height/duration_ms hoisted from metadata) so downstream consumers\n // that read those fields are unaffected — just without the local `path`.\n return buildRef({ kind, sha: value.sha256, mime: value.mime, url: value.url, metadata: value.metadata });\n }\n return ctx.assets.ingestRemote({\n kind,\n url: value.url,\n sha256: value.sha256,\n mime: value.mime,\n metadata: value.metadata,\n });\n }\n return value;\n}\n\nfunction isRawAsset(v: unknown): v is RawAssetOutput {\n return Boolean(\n v &&\n typeof v === \"object\" &&\n \"url\" in v &&\n \"sha256\" in v &&\n \"mime\" in v &&\n typeof (v as { url: unknown }).url === \"string\" &&\n typeof (v as { sha256: unknown }).sha256 === \"string\",\n );\n}\n\nfunction mapClientError(ctx: ExecCtx, e: unknown): Error {\n if (e instanceof BackendHttpError) {\n const d = e.detail;\n if (d.kind === \"provider\") {\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, {\n kind: \"remote\",\n status: d.status,\n code: d.code,\n message: d.message,\n provider: d.provider,\n // The backend's real classification — providerErr pins the status to 502,\n // so this flag (not the status) is the source of truth for retryability.\n retryable: d.retryable,\n });\n }\n if (d.kind === \"content_policy\") {\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, {\n kind: \"content_policy\",\n provider: d.provider,\n message: d.message,\n });\n }\n if (d.kind === \"timeout\") {\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, { kind: \"timeout\", provider: d.provider });\n }\n if (d.kind === \"validation\") {\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, {\n kind: \"remote\",\n status: d.status,\n // The backend's own code (`model_invalid_params`, `cost_limit_exceeded`,\n // `invalid_inputs`, …) says WHICH refusal; `invalid_params` only when it gave none.\n code: d.code ?? \"invalid_params\",\n message: d.message,\n // The request itself was refused; it fails the same way until the input changes.\n retryable: false,\n });\n }\n if (d.kind === \"unauthorized\") {\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, {\n kind: \"remote\",\n status: d.status,\n code: \"unauthorized\",\n message: d.message,\n });\n }\n if (d.kind === \"network\") {\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, { kind: \"network\", cause: d.cause });\n }\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, {\n kind: \"remote\",\n status: d.status,\n code: \"server_error\",\n message: d.message,\n });\n }\n return new NodeExecutionError(ctx.nodeId, ctx.nodeType, { kind: \"local\", cause: e });\n}\n"],"mappings":"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","names":["message","path","z","z","path","message","createHash","readFile","stat","path","z","z","path","scale","pipeline","timescale","duration","message","stat","readFile","path","stat","readFile","message","createHash"]}
|