@koda-sl/baker-cli 0.565.0 → 0.566.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 +3 -2
- package/dist/{account-R3GWLAQD.js → account-EFZSU23W.js} +4 -4
- package/dist/{account-users-AQSRZXEM.js → account-users-ZS7S3XST.js} +4 -4
- package/dist/{accounts-RIYQZZQD.js → accounts-HHNJP2HK.js} +5 -5
- package/dist/{accounts-FS6YGLOR.js → accounts-R7FX5RTQ.js} +3 -3
- package/dist/{actions-RUCWCCWN.js → actions-AS77IUIW.js} +18 -18
- package/dist/{activecampaign-HP4WKQOG.js → activecampaign-LVVAEAZ7.js} +3 -3
- package/dist/{add-LYIMFKFR.js → add-NNTB7UC7.js} +3 -3
- package/dist/{add-BBKIUDIO.js → add-YT75GMYQ.js} +2 -2
- package/dist/{ads-MNHPQA4T.js → ads-RTUNE3XQ.js} +4 -4
- package/dist/{advertisers-KKZRGHZL.js → advertisers-UKHV7DMF.js} +3 -3
- package/dist/{analytics-WLPHLFT7.js → analytics-3HPYB3LJ.js} +6 -6
- package/dist/{analytics-MVVSPVAB.js → analytics-ZNHNNEZO.js} +3 -3
- package/dist/{assign-3HOA5LOV.js → assign-3LP47K4A.js} +3 -3
- package/dist/{audience-size-ZPRWRWTV.js → audience-size-GZQBVP4G.js} +3 -3
- package/dist/{audit-XIEU7MDY.js → audit-JOS4VENF.js} +3 -3
- package/dist/{autocomplete-6FHHTJLF.js → autocomplete-QTV3USWN.js} +3 -3
- package/dist/{avatars-GZI5KOQN.js → avatars-QH6FKWOF.js} +4 -4
- package/dist/{bid-pricing-Y2DRXIBQ.js → bid-pricing-KK25LRZG.js} +4 -4
- package/dist/{brand-KC5LQUK6.js → brand-XQ6EXK6B.js} +2 -2
- package/dist/{brief-T7YTJI3B.js → brief-OAXDT6M2.js} +12 -12
- package/dist/{campaign-groups-Z3G6REGC.js → campaign-groups-SKTIXZFH.js} +9 -9
- package/dist/{campaign-writes-B4WOMLIE.js → campaign-writes-QI3MPKZE.js} +3 -3
- package/dist/{campaigns-LLJTH6WP.js → campaigns-J6TJ5I6U.js} +12 -12
- package/dist/{campaigns-KMHUJNZX.js → campaigns-KJ6TFKHO.js} +5 -5
- package/dist/{canvas-Y4QY5XGG.js → canvas-NY43T57N.js} +13 -13
- package/dist/{capabilities-GK7SIQF4.js → capabilities-H4CMKTJ5.js} +3 -3
- package/dist/{chats-RGYP5GIA.js → chats-XQLS3UJZ.js} +3 -3
- package/dist/{check-3HWKXL4O.js → check-24FR7WPA.js} +5 -5
- package/dist/{chunk-SKW7CDXE.js → chunk-2A24YMHV.js} +3 -3
- package/dist/{chunk-7BV5QN2P.js → chunk-2J5OCFOW.js} +29 -4
- package/dist/chunk-2J5OCFOW.js.map +1 -0
- package/dist/{chunk-RNS5MVHS.js → chunk-2KT7DG5E.js} +2 -2
- package/dist/{chunk-ULKMNQ4I.js → chunk-4E6EZ4RL.js} +3 -3
- package/dist/{chunk-GFMSRP5Q.js → chunk-4JONZ6LA.js} +56 -19
- package/dist/chunk-4JONZ6LA.js.map +1 -0
- package/dist/{chunk-S456S5VM.js → chunk-4NCQIO37.js} +2 -2
- package/dist/{chunk-I4VURNFW.js → chunk-5O57QLEV.js} +2 -2
- package/dist/{chunk-N3P5BGPD.js → chunk-5VBGY6CB.js} +2 -2
- package/dist/{chunk-T6RZ7ZOM.js → chunk-6AK74BNG.js} +3 -3
- package/dist/{chunk-2NWVSWGS.js → chunk-7QWLIZFI.js} +3 -3
- package/dist/{chunk-LVDYB7RO.js → chunk-BW3E6EDJ.js} +8 -8
- package/dist/{chunk-D67TRX67.js → chunk-CE25X6HT.js} +2 -2
- package/dist/{chunk-XOC5F52C.js → chunk-CVVWIXOP.js} +2 -2
- package/dist/{chunk-RM6ZIQHH.js → chunk-CXRFK47Z.js} +2 -2
- package/dist/{chunk-ERQZNOKZ.js → chunk-FZ4OKE7N.js} +6 -6
- package/dist/{chunk-RQSZDYEH.js → chunk-IWNINMRI.js} +2 -2
- package/dist/{chunk-KGAYDZM2.js → chunk-J47JWEHU.js} +2 -2
- package/dist/{chunk-Y4B7RLIE.js → chunk-JAZZ3HFR.js} +2 -2
- package/dist/{chunk-QML3FCJC.js → chunk-JPICIFPM.js} +2 -2
- package/dist/{chunk-PNA7GXBR.js → chunk-KBFYB6YK.js} +2 -2
- package/dist/{chunk-ORFYWLJP.js → chunk-LCDWDG4U.js} +54 -2
- package/dist/chunk-LCDWDG4U.js.map +1 -0
- package/dist/{chunk-KPXURSDF.js → chunk-NQVUPVI5.js} +3 -3
- package/dist/{chunk-SGEI7HNU.js → chunk-OBVSGXTA.js} +5 -5
- package/dist/{chunk-UIEVJ2HR.js → chunk-OJGNQYYS.js} +2 -2
- package/dist/{chunk-TSFHW2W4.js → chunk-OZTNA2O7.js} +2 -2
- package/dist/{chunk-MXGXVYF3.js → chunk-PX2VBLV7.js} +2 -2
- package/dist/{chunk-LWYTFXJG.js → chunk-RNVDTUWO.js} +4 -4
- package/dist/{chunk-UHWGXVYT.js → chunk-SICI27M7.js} +2 -2
- package/dist/{chunk-J35R2D6B.js → chunk-SSEJKI43.js} +3 -3
- package/dist/{chunk-SIQMOZNP.js → chunk-T2MBCTLY.js} +2 -2
- package/dist/{chunk-HDL6MTZG.js → chunk-TH4LKHWT.js} +2 -2
- package/dist/{chunk-7JBDVH7L.js → chunk-TMFC2LYC.js} +2 -2
- package/dist/{chunk-5W2FXAMY.js → chunk-UGIF23QY.js} +2 -2
- package/dist/{chunk-2YGUNIQJ.js → chunk-UMTGHV5C.js} +3 -3
- package/dist/{chunk-DJCG3C2K.js → chunk-UXY7V3PK.js} +2 -2
- package/dist/{chunk-6RDVZRK2.js → chunk-VNRL3EF7.js} +3 -3
- package/dist/{chunk-7DKJF3Y5.js → chunk-WGD6LMRW.js} +2 -2
- package/dist/{chunk-QDCU26CB.js → chunk-XWN2BUAD.js} +3 -3
- package/dist/{chunk-YXEUUGUJ.js → chunk-YFXF5XAT.js} +2 -2
- package/dist/{chunk-TJHEMCST.js → chunk-ZF5G7QTP.js} +5 -5
- package/dist/{chunk-FZJALNM6.js → chunk-ZIKSJBWD.js} +2 -2
- package/dist/{chunk-5W3PAQTH.js → chunk-ZNZHEDVB.js} +2 -2
- package/dist/{chunk-E5V5HPYO.js → chunk-ZV2GM3LW.js} +2 -2
- package/dist/{claim-23PPIKS4.js → claim-44U3RIL6.js} +3 -3
- package/dist/cli.js +32 -32
- package/dist/{companies-F5WNG6SA.js → companies-CBWSZMLE.js} +3 -3
- package/dist/{company-LXEKV5YA.js → company-XZAQYAAE.js} +3 -3
- package/dist/{complete-G3GRNRMY.js → complete-FQH646EJ.js} +3 -3
- package/dist/{connect-NEUYLAWT.js → connect-JCN3JCGD.js} +6 -6
- package/dist/{conversation-CRNAMONB.js → conversation-VW7VBIOQ.js} +3 -3
- package/dist/{conversions-G5ISEE5Z.js → conversions-Q3TYENCG.js} +8 -8
- package/dist/{create-P72PSLV7.js → create-5X2MFN6V.js} +3 -3
- package/dist/{create-63IX52HC.js → create-CG34L6OG.js} +2 -2
- package/dist/{create-MZHQ422P.js → create-FYJFH6A7.js} +3 -3
- package/dist/{create-46WB2E3A.js → create-LQCOOKWJ.js} +3 -3
- package/dist/{creatives-OUAFL46L.js → creatives-PU3V4EDT.js} +9 -9
- package/dist/{creatives-URDL6XUQ.js → creatives-PWIEGVPE.js} +12 -12
- package/dist/{credentials-PN4YOTED.js → credentials-RHSPLXSE.js} +3 -3
- package/dist/{critique-IDUJYXRT.js → critique-B5FSBCL6.js} +3 -3
- package/dist/{critique-6PZWQ6GE.js → critique-WEIGEHNU.js} +8 -8
- package/dist/{crm-UA5QNDY4.js → crm-EBK4Z6EO.js} +4 -4
- package/dist/{crm-DC7BXQBS.js → crm-QB4AUGEW.js} +4 -4
- package/dist/{customers-F6FZ4BYS.js → customers-U3SNJUZB.js} +5 -5
- package/dist/{delete-TAGNP5FJ.js → delete-B4WV52YL.js} +3 -3
- package/dist/{delete-ZHGITRWJ.js → delete-CKCG56WV.js} +2 -2
- package/dist/{delete-PUX6AGGG.js → delete-Q2WPGQQQ.js} +3 -3
- package/dist/{demographics-265MC2Y5.js → demographics-HRH4TJ76.js} +3 -3
- package/dist/{discard-RAYUL25N.js → discard-R2SJQDCW.js} +3 -3
- package/dist/{domain-GSQX4Z2V.js → domain-LV6YI57G.js} +3 -3
- package/dist/{download-CP3Y2K54.js → download-5NLYEXK3.js} +2 -2
- package/dist/{draft-3HRGCNWA.js → draft-33DTE674.js} +3 -3
- package/dist/{draft-LJJ7K45J.js → draft-KA5F4QIQ.js} +4 -4
- package/dist/{draft-NNLOJEEV.js → draft-MRRCPIKF.js} +3 -3
- package/dist/{experiment-EFLKDQ3C.js → experiment-AZUKJ7ZO.js} +4 -4
- package/dist/{experiments-SSXYFZRC.js → experiments-AKQDYU5Z.js} +4 -4
- package/dist/{extract-JNKU6ANI.js → extract-FZ7YZFYN.js} +2 -2
- package/dist/{facets-67DUHP7G.js → facets-IRDQ2TNF.js} +3 -3
- package/dist/{feedback-3W3F3YUN.js → feedback-CGOFO6UH.js} +12 -12
- package/dist/{feedback-FGOUIPFM.js → feedback-V6TCMABL.js} +3 -3
- package/dist/{feedback-record-I3XMUJOX.js → feedback-record-SKMSWYAI.js} +13 -13
- package/dist/{fetch-I74KDC2I.js → fetch-2ZOPSTXX.js} +3 -3
- package/dist/{fit-DEY4SJ3Z.js → fit-JQ7MR5FU.js} +5 -5
- package/dist/{flows-3OVUMHEN.js → flows-77X3R6XX.js} +108 -18
- package/dist/flows-77X3R6XX.js.map +1 -0
- package/dist/{fonts-WPI3P562.js → fonts-VOHGLU5R.js} +5 -5
- package/dist/{forecast-B4PXDUUF.js → forecast-PAGM5TBI.js} +4 -4
- package/dist/{funnel-QGMJBM23.js → funnel-7FWBX2MH.js} +4 -4
- package/dist/{get-4QQDVHFA.js → get-DISZAEWO.js} +3 -3
- package/dist/{get-FS5JCUJ6.js → get-TPFELCGO.js} +3 -3
- package/dist/{google-UVRF4POY.js → google-OYCSQ6Z3.js} +2 -2
- package/dist/{google-ads-HLE2JZKC.js → google-ads-6KW323PN.js} +3 -3
- package/dist/{history-TTTAC775.js → history-BFWII3NI.js} +3 -3
- package/dist/{history-NULATRWC.js → history-GXFXEPSQ.js} +3 -3
- package/dist/{hubspot-J7ZLBL6R.js → hubspot-BU3UJNZY.js} +7 -7
- package/dist/{ideas-PDIJ3I2H.js → ideas-WSUZEFLG.js} +4 -4
- package/dist/{images-7WZM4I6K.js → images-CFZL3N4Z.js} +7 -7
- package/dist/{ingest-4FLTGD2G.js → ingest-ML2BFCNR.js} +2 -2
- package/dist/{ingest-M47H5CT7.js → ingest-NGNELRYE.js} +3 -3
- package/dist/{inspect-HDC263MS.js → inspect-VF3DJBRX.js} +3 -3
- package/dist/{keyword-metrics-QZKWO3BX.js → keyword-metrics-VDLZYA76.js} +3 -3
- package/dist/{keywords-for-site-EEIRZ77L.js → keywords-for-site-6IAS7QK3.js} +3 -3
- package/dist/{landing-TTKIW7CQ.js → landing-HBBNHU4W.js} +2 -2
- package/dist/{leads-DGOFIQMH.js → leads-6RFLDXIP.js} +3 -3
- package/dist/{learn-56DN2S6B.js → learn-QL2ZO7OP.js} +4 -4
- package/dist/{line-item-writes-BHYFH4AZ.js → line-item-writes-FZVYSBWK.js} +3 -3
- package/dist/{line-items-PUWPYZOV.js → line-items-44QSYZTE.js} +5 -5
- package/dist/{link-AED2A2ML.js → link-N7VUZE5R.js} +3 -3
- package/dist/{linkedin-WB73GQ7E.js → linkedin-BP6LWQIS.js} +30 -30
- package/dist/{linkedin-person-EPSR7OIR.js → linkedin-person-KPFROM7O.js} +3 -3
- package/dist/{list-2YE5JWYG.js → list-IZ2MUUQ5.js} +3 -3
- package/dist/{list-LLLEF6YM.js → list-OW5UIFI3.js} +2 -2
- package/dist/{list-O5RQLGQO.js → list-VSDOV3QX.js} +3 -3
- package/dist/{log-FRQ2XD7O.js → log-U5P25U6W.js} +3 -3
- package/dist/{make-ALUBF2U7.js → make-55LQECUE.js} +15 -15
- package/dist/{map-6FIEOF2C.js → map-QSBCVWNW.js} +16 -7
- package/dist/map-QSBCVWNW.js.map +1 -0
- package/dist/{mcp-AGZL4CA3.js → mcp-4VUUHCWJ.js} +2 -2
- package/dist/{media-sources-5ECRCDXJ.js → media-sources-B36AGK4K.js} +2 -2
- package/dist/{members-CH5TDNEZ.js → members-O5MYSZ6W.js} +3 -3
- package/dist/{normalize-AEJP2AEI.js → normalize-6YBZQ6MJ.js} +3 -3
- package/dist/{options-VENBF5ES.js → options-WCJ4SZ4Q.js} +6 -6
- package/dist/{organization-USVPE43J.js → organization-RKV7KDMQ.js} +3 -3
- package/dist/{performance-2V2O5QIB.js → performance-ASGNJQTT.js} +3 -3
- package/dist/{performance-GEALWLJF.js → performance-JZ2IUWJX.js} +4 -4
- package/dist/{preview-Q3N6NMQ5.js → preview-SMFKMMZU.js} +3 -3
- package/dist/{promoted-tweet-writes-DB6U5OIJ.js → promoted-tweet-writes-5VBLE23Q.js} +3 -3
- package/dist/{promoted-tweets-ATKIVR2F.js → promoted-tweets-N7XPG3XB.js} +3 -3
- package/dist/{publish-R7RFAVGE.js → publish-ZCVVBT2E.js} +3 -3
- package/dist/{reddit-2FEGFGU7.js → reddit-ZWA4GSD3.js} +4 -4
- package/dist/{refresh-BDEAUQEB.js → refresh-GZSPTRQO.js} +2 -2
- package/dist/{release-CA7H6KLD.js → release-YQSDFSAD.js} +3 -3
- package/dist/{remove-GVLJDVSB.js → remove-IC6XZSLZ.js} +2 -2
- package/dist/{reopen-5UVQ5EXY.js → reopen-4D4S5TFN.js} +3 -3
- package/dist/{rerun-4SVR7QGC.js → rerun-QCV3QX2U.js} +14 -14
- package/dist/{research-63R4XYM6.js → research-SPWJYSF3.js} +2 -2
- package/dist/{research-VPONEQYW.js → research-XRKLDLK3.js} +13 -13
- package/dist/{reset-RKW5GJAX.js → reset-MTSRIAXC.js} +2 -2
- package/dist/{reset-75QSSW7G.js → reset-RPHQ6R4T.js} +2 -2
- package/dist/{resolve-GZPY2HSF.js → resolve-F4Q7TPBU.js} +3 -3
- package/dist/{retry-QXKDF4VY.js → retry-EY4VUCWE.js} +2 -2
- package/dist/{retry-ZZM63KIG.js → retry-ZJYQRVXA.js} +2 -2
- package/dist/{revenue-QJIUOCIR.js → revenue-MWDAUG2M.js} +4 -4
- package/dist/{rules-MTOM5TXU.js → rules-LIHB6YIY.js} +5 -5
- package/dist/{rules-add-P7QMIJ47.js → rules-add-6NIC4BSS.js} +5 -5
- package/dist/{run-UXLXTYI4.js → run-K3ZTVHXF.js} +3 -3
- package/dist/{run-5XN3VZTK.js → run-TSLHGOVM.js} +14 -14
- package/dist/{scaffold-ad-WGNIHTWJ.js → scaffold-ad-G4GPAJNA.js} +10 -10
- package/dist/{scaffold-static-ad-5AWGI5QC.js → scaffold-static-ad-5G4T4QOV.js} +18 -18
- package/dist/{scaffold-video-UUHRYZFC.js → scaffold-video-BCQTXK3B.js} +9 -9
- package/dist/{schedule-HVLI4YDP.js → schedule-6AEZXHSM.js} +2 -2
- package/dist/{scheduled-agents-DHKDQSOS.js → scheduled-agents-4ALAF7S2.js} +11 -11
- package/dist/{schema-CCM76NWZ.js → schema-G2RFAHMC.js} +4 -4
- package/dist/{search-563LZ4JQ.js → search-QXTEVPDB.js} +2 -2
- package/dist/{select-EBBZB4I7.js → select-BDE4444H.js} +11 -11
- package/dist/{set-prompt-DIWUIE6L.js → set-prompt-BJGXSGF7.js} +8 -8
- package/dist/{setup-links-BTG7AOMH.js → setup-links-PI6HRHB3.js} +3 -3
- package/dist/{shopify-XOZ6H5WN.js → shopify-RTWQDLMB.js} +3 -3
- package/dist/{site-BUJSVT4Y.js → site-F5YCQRXX.js} +4 -4
- package/dist/{sources-6IU6U3CQ.js → sources-AIY3SEIE.js} +6 -6
- package/dist/{sources-FZZRJTQV.js → sources-JBOEVF5L.js} +6 -6
- package/dist/{stale-MZCPHFMS.js → stale-R63TSO5I.js} +10 -10
- package/dist/{status-OHMKGRZ6.js → status-NXZSC3WG.js} +3 -3
- package/dist/{stock-WEY6RYKP.js → stock-WUOFRG3K.js} +2 -2
- package/dist/{sync-EVJR4GY6.js → sync-4T577GH4.js} +2 -2
- package/dist/{sync-definition-PESPTSAQ.js → sync-definition-IRW4MSRQ.js} +9 -9
- package/dist/{tags-OZUQMA2G.js → tags-24RR4Q2Y.js} +3 -3
- package/dist/{tags-PF4TBBEX.js → tags-DVWORXQR.js} +4 -4
- package/dist/{tags-T4QZEQIR.js → tags-R66INE52.js} +3 -3
- package/dist/{tags-YTZ6ZPQQ.js → tags-VAPD3LWN.js} +2 -2
- package/dist/{tags-HN67SXIG.js → tags-VS37KZCM.js} +3 -3
- package/dist/{targeting-criteria-JTY4OUQV.js → targeting-criteria-CR5VHR35.js} +3 -3
- package/dist/{targets-RG3NONXL.js → targets-MF2K7JRS.js} +3 -3
- package/dist/{testimonials-M4GVNUI7.js → testimonials-J6FUERA2.js} +6 -6
- package/dist/{top-companies-VNFPTJBI.js → top-companies-ZEFG2CVI.js} +3 -3
- package/dist/{transcript-F5XLS33R.js → transcript-O2UOSI54.js} +3 -3
- package/dist/{translate-ETC6UFI6.js → translate-DZAZAUI2.js} +13 -13
- package/dist/{triggers-3GJOP4QN.js → triggers-NQMVL755.js} +3 -3
- package/dist/{unlink-636FAP6D.js → unlink-2RGEODVO.js} +3 -3
- package/dist/{unstage-445BCA7J.js → unstage-KLYI3EMB.js} +3 -3
- package/dist/{update-V5WN6HAR.js → update-CVUA6TTH.js} +2 -2
- package/dist/{update-J357GPUA.js → update-HDI54TX2.js} +3 -3
- package/dist/{update-U4UVU7LC.js → update-YUMXVVIV.js} +3 -3
- package/dist/{update-64M3KSXE.js → update-ZUB7IM4K.js} +3 -3
- package/dist/{upload-PCXMVTGL.js → upload-RARJSXYY.js} +3 -3
- package/dist/{url-params-NEVV6NED.js → url-params-YRMDSBOO.js} +3 -3
- package/dist/{validate-73GLPP7O.js → validate-NG3O63DD.js} +11 -11
- package/dist/{videos-HBQGC3G6.js → videos-IWTKAIJL.js} +6 -6
- package/dist/{viewer-check-7YL3WXQK.js → viewer-check-JNFFC5IK.js} +6 -6
- package/dist/{web-JUSF75RR.js → web-VR6XXNL6.js} +3 -3
- package/dist/{winning-ads-RIZANJER.js → winning-ads-M6UG74BB.js} +3 -3
- package/dist/{write-commands-2TODH3QX.js → write-commands-6OHNL3UR.js} +4 -4
- package/dist/{x-WNZNCXG3.js → x-TSLM5O2T.js} +6 -6
- package/package.json +1 -1
- package/dist/chunk-7BV5QN2P.js.map +0 -1
- package/dist/chunk-GFMSRP5Q.js.map +0 -1
- package/dist/chunk-ORFYWLJP.js.map +0 -1
- package/dist/flows-3OVUMHEN.js.map +0 -1
- package/dist/map-6FIEOF2C.js.map +0 -1
- /package/dist/{account-R3GWLAQD.js.map → account-EFZSU23W.js.map} +0 -0
- /package/dist/{account-users-AQSRZXEM.js.map → account-users-ZS7S3XST.js.map} +0 -0
- /package/dist/{accounts-RIYQZZQD.js.map → accounts-HHNJP2HK.js.map} +0 -0
- /package/dist/{accounts-FS6YGLOR.js.map → accounts-R7FX5RTQ.js.map} +0 -0
- /package/dist/{actions-RUCWCCWN.js.map → actions-AS77IUIW.js.map} +0 -0
- /package/dist/{activecampaign-HP4WKQOG.js.map → activecampaign-LVVAEAZ7.js.map} +0 -0
- /package/dist/{add-LYIMFKFR.js.map → add-NNTB7UC7.js.map} +0 -0
- /package/dist/{add-BBKIUDIO.js.map → add-YT75GMYQ.js.map} +0 -0
- /package/dist/{ads-MNHPQA4T.js.map → ads-RTUNE3XQ.js.map} +0 -0
- /package/dist/{advertisers-KKZRGHZL.js.map → advertisers-UKHV7DMF.js.map} +0 -0
- /package/dist/{analytics-WLPHLFT7.js.map → analytics-3HPYB3LJ.js.map} +0 -0
- /package/dist/{analytics-MVVSPVAB.js.map → analytics-ZNHNNEZO.js.map} +0 -0
- /package/dist/{assign-3HOA5LOV.js.map → assign-3LP47K4A.js.map} +0 -0
- /package/dist/{audience-size-ZPRWRWTV.js.map → audience-size-GZQBVP4G.js.map} +0 -0
- /package/dist/{audit-XIEU7MDY.js.map → audit-JOS4VENF.js.map} +0 -0
- /package/dist/{autocomplete-6FHHTJLF.js.map → autocomplete-QTV3USWN.js.map} +0 -0
- /package/dist/{avatars-GZI5KOQN.js.map → avatars-QH6FKWOF.js.map} +0 -0
- /package/dist/{bid-pricing-Y2DRXIBQ.js.map → bid-pricing-KK25LRZG.js.map} +0 -0
- /package/dist/{brand-KC5LQUK6.js.map → brand-XQ6EXK6B.js.map} +0 -0
- /package/dist/{brief-T7YTJI3B.js.map → brief-OAXDT6M2.js.map} +0 -0
- /package/dist/{campaign-groups-Z3G6REGC.js.map → campaign-groups-SKTIXZFH.js.map} +0 -0
- /package/dist/{campaign-writes-B4WOMLIE.js.map → campaign-writes-QI3MPKZE.js.map} +0 -0
- /package/dist/{campaigns-LLJTH6WP.js.map → campaigns-J6TJ5I6U.js.map} +0 -0
- /package/dist/{campaigns-KMHUJNZX.js.map → campaigns-KJ6TFKHO.js.map} +0 -0
- /package/dist/{canvas-Y4QY5XGG.js.map → canvas-NY43T57N.js.map} +0 -0
- /package/dist/{capabilities-GK7SIQF4.js.map → capabilities-H4CMKTJ5.js.map} +0 -0
- /package/dist/{chats-RGYP5GIA.js.map → chats-XQLS3UJZ.js.map} +0 -0
- /package/dist/{check-3HWKXL4O.js.map → check-24FR7WPA.js.map} +0 -0
- /package/dist/{chunk-SKW7CDXE.js.map → chunk-2A24YMHV.js.map} +0 -0
- /package/dist/{chunk-RNS5MVHS.js.map → chunk-2KT7DG5E.js.map} +0 -0
- /package/dist/{chunk-ULKMNQ4I.js.map → chunk-4E6EZ4RL.js.map} +0 -0
- /package/dist/{chunk-S456S5VM.js.map → chunk-4NCQIO37.js.map} +0 -0
- /package/dist/{chunk-I4VURNFW.js.map → chunk-5O57QLEV.js.map} +0 -0
- /package/dist/{chunk-N3P5BGPD.js.map → chunk-5VBGY6CB.js.map} +0 -0
- /package/dist/{chunk-T6RZ7ZOM.js.map → chunk-6AK74BNG.js.map} +0 -0
- /package/dist/{chunk-2NWVSWGS.js.map → chunk-7QWLIZFI.js.map} +0 -0
- /package/dist/{chunk-LVDYB7RO.js.map → chunk-BW3E6EDJ.js.map} +0 -0
- /package/dist/{chunk-D67TRX67.js.map → chunk-CE25X6HT.js.map} +0 -0
- /package/dist/{chunk-XOC5F52C.js.map → chunk-CVVWIXOP.js.map} +0 -0
- /package/dist/{chunk-RM6ZIQHH.js.map → chunk-CXRFK47Z.js.map} +0 -0
- /package/dist/{chunk-ERQZNOKZ.js.map → chunk-FZ4OKE7N.js.map} +0 -0
- /package/dist/{chunk-RQSZDYEH.js.map → chunk-IWNINMRI.js.map} +0 -0
- /package/dist/{chunk-KGAYDZM2.js.map → chunk-J47JWEHU.js.map} +0 -0
- /package/dist/{chunk-Y4B7RLIE.js.map → chunk-JAZZ3HFR.js.map} +0 -0
- /package/dist/{chunk-QML3FCJC.js.map → chunk-JPICIFPM.js.map} +0 -0
- /package/dist/{chunk-PNA7GXBR.js.map → chunk-KBFYB6YK.js.map} +0 -0
- /package/dist/{chunk-KPXURSDF.js.map → chunk-NQVUPVI5.js.map} +0 -0
- /package/dist/{chunk-SGEI7HNU.js.map → chunk-OBVSGXTA.js.map} +0 -0
- /package/dist/{chunk-UIEVJ2HR.js.map → chunk-OJGNQYYS.js.map} +0 -0
- /package/dist/{chunk-TSFHW2W4.js.map → chunk-OZTNA2O7.js.map} +0 -0
- /package/dist/{chunk-MXGXVYF3.js.map → chunk-PX2VBLV7.js.map} +0 -0
- /package/dist/{chunk-LWYTFXJG.js.map → chunk-RNVDTUWO.js.map} +0 -0
- /package/dist/{chunk-UHWGXVYT.js.map → chunk-SICI27M7.js.map} +0 -0
- /package/dist/{chunk-J35R2D6B.js.map → chunk-SSEJKI43.js.map} +0 -0
- /package/dist/{chunk-SIQMOZNP.js.map → chunk-T2MBCTLY.js.map} +0 -0
- /package/dist/{chunk-HDL6MTZG.js.map → chunk-TH4LKHWT.js.map} +0 -0
- /package/dist/{chunk-7JBDVH7L.js.map → chunk-TMFC2LYC.js.map} +0 -0
- /package/dist/{chunk-5W2FXAMY.js.map → chunk-UGIF23QY.js.map} +0 -0
- /package/dist/{chunk-2YGUNIQJ.js.map → chunk-UMTGHV5C.js.map} +0 -0
- /package/dist/{chunk-DJCG3C2K.js.map → chunk-UXY7V3PK.js.map} +0 -0
- /package/dist/{chunk-6RDVZRK2.js.map → chunk-VNRL3EF7.js.map} +0 -0
- /package/dist/{chunk-7DKJF3Y5.js.map → chunk-WGD6LMRW.js.map} +0 -0
- /package/dist/{chunk-QDCU26CB.js.map → chunk-XWN2BUAD.js.map} +0 -0
- /package/dist/{chunk-YXEUUGUJ.js.map → chunk-YFXF5XAT.js.map} +0 -0
- /package/dist/{chunk-TJHEMCST.js.map → chunk-ZF5G7QTP.js.map} +0 -0
- /package/dist/{chunk-FZJALNM6.js.map → chunk-ZIKSJBWD.js.map} +0 -0
- /package/dist/{chunk-5W3PAQTH.js.map → chunk-ZNZHEDVB.js.map} +0 -0
- /package/dist/{chunk-E5V5HPYO.js.map → chunk-ZV2GM3LW.js.map} +0 -0
- /package/dist/{claim-23PPIKS4.js.map → claim-44U3RIL6.js.map} +0 -0
- /package/dist/{companies-F5WNG6SA.js.map → companies-CBWSZMLE.js.map} +0 -0
- /package/dist/{company-LXEKV5YA.js.map → company-XZAQYAAE.js.map} +0 -0
- /package/dist/{complete-G3GRNRMY.js.map → complete-FQH646EJ.js.map} +0 -0
- /package/dist/{connect-NEUYLAWT.js.map → connect-JCN3JCGD.js.map} +0 -0
- /package/dist/{conversation-CRNAMONB.js.map → conversation-VW7VBIOQ.js.map} +0 -0
- /package/dist/{conversions-G5ISEE5Z.js.map → conversions-Q3TYENCG.js.map} +0 -0
- /package/dist/{create-P72PSLV7.js.map → create-5X2MFN6V.js.map} +0 -0
- /package/dist/{create-63IX52HC.js.map → create-CG34L6OG.js.map} +0 -0
- /package/dist/{create-MZHQ422P.js.map → create-FYJFH6A7.js.map} +0 -0
- /package/dist/{create-46WB2E3A.js.map → create-LQCOOKWJ.js.map} +0 -0
- /package/dist/{creatives-OUAFL46L.js.map → creatives-PU3V4EDT.js.map} +0 -0
- /package/dist/{creatives-URDL6XUQ.js.map → creatives-PWIEGVPE.js.map} +0 -0
- /package/dist/{credentials-PN4YOTED.js.map → credentials-RHSPLXSE.js.map} +0 -0
- /package/dist/{critique-IDUJYXRT.js.map → critique-B5FSBCL6.js.map} +0 -0
- /package/dist/{critique-6PZWQ6GE.js.map → critique-WEIGEHNU.js.map} +0 -0
- /package/dist/{crm-UA5QNDY4.js.map → crm-EBK4Z6EO.js.map} +0 -0
- /package/dist/{crm-DC7BXQBS.js.map → crm-QB4AUGEW.js.map} +0 -0
- /package/dist/{customers-F6FZ4BYS.js.map → customers-U3SNJUZB.js.map} +0 -0
- /package/dist/{delete-TAGNP5FJ.js.map → delete-B4WV52YL.js.map} +0 -0
- /package/dist/{delete-ZHGITRWJ.js.map → delete-CKCG56WV.js.map} +0 -0
- /package/dist/{delete-PUX6AGGG.js.map → delete-Q2WPGQQQ.js.map} +0 -0
- /package/dist/{demographics-265MC2Y5.js.map → demographics-HRH4TJ76.js.map} +0 -0
- /package/dist/{discard-RAYUL25N.js.map → discard-R2SJQDCW.js.map} +0 -0
- /package/dist/{domain-GSQX4Z2V.js.map → domain-LV6YI57G.js.map} +0 -0
- /package/dist/{download-CP3Y2K54.js.map → download-5NLYEXK3.js.map} +0 -0
- /package/dist/{draft-3HRGCNWA.js.map → draft-33DTE674.js.map} +0 -0
- /package/dist/{draft-LJJ7K45J.js.map → draft-KA5F4QIQ.js.map} +0 -0
- /package/dist/{draft-NNLOJEEV.js.map → draft-MRRCPIKF.js.map} +0 -0
- /package/dist/{experiment-EFLKDQ3C.js.map → experiment-AZUKJ7ZO.js.map} +0 -0
- /package/dist/{experiments-SSXYFZRC.js.map → experiments-AKQDYU5Z.js.map} +0 -0
- /package/dist/{extract-JNKU6ANI.js.map → extract-FZ7YZFYN.js.map} +0 -0
- /package/dist/{facets-67DUHP7G.js.map → facets-IRDQ2TNF.js.map} +0 -0
- /package/dist/{feedback-3W3F3YUN.js.map → feedback-CGOFO6UH.js.map} +0 -0
- /package/dist/{feedback-FGOUIPFM.js.map → feedback-V6TCMABL.js.map} +0 -0
- /package/dist/{feedback-record-I3XMUJOX.js.map → feedback-record-SKMSWYAI.js.map} +0 -0
- /package/dist/{fetch-I74KDC2I.js.map → fetch-2ZOPSTXX.js.map} +0 -0
- /package/dist/{fit-DEY4SJ3Z.js.map → fit-JQ7MR5FU.js.map} +0 -0
- /package/dist/{fonts-WPI3P562.js.map → fonts-VOHGLU5R.js.map} +0 -0
- /package/dist/{forecast-B4PXDUUF.js.map → forecast-PAGM5TBI.js.map} +0 -0
- /package/dist/{funnel-QGMJBM23.js.map → funnel-7FWBX2MH.js.map} +0 -0
- /package/dist/{get-4QQDVHFA.js.map → get-DISZAEWO.js.map} +0 -0
- /package/dist/{get-FS5JCUJ6.js.map → get-TPFELCGO.js.map} +0 -0
- /package/dist/{google-UVRF4POY.js.map → google-OYCSQ6Z3.js.map} +0 -0
- /package/dist/{google-ads-HLE2JZKC.js.map → google-ads-6KW323PN.js.map} +0 -0
- /package/dist/{history-TTTAC775.js.map → history-BFWII3NI.js.map} +0 -0
- /package/dist/{history-NULATRWC.js.map → history-GXFXEPSQ.js.map} +0 -0
- /package/dist/{hubspot-J7ZLBL6R.js.map → hubspot-BU3UJNZY.js.map} +0 -0
- /package/dist/{ideas-PDIJ3I2H.js.map → ideas-WSUZEFLG.js.map} +0 -0
- /package/dist/{images-7WZM4I6K.js.map → images-CFZL3N4Z.js.map} +0 -0
- /package/dist/{ingest-4FLTGD2G.js.map → ingest-ML2BFCNR.js.map} +0 -0
- /package/dist/{ingest-M47H5CT7.js.map → ingest-NGNELRYE.js.map} +0 -0
- /package/dist/{inspect-HDC263MS.js.map → inspect-VF3DJBRX.js.map} +0 -0
- /package/dist/{keyword-metrics-QZKWO3BX.js.map → keyword-metrics-VDLZYA76.js.map} +0 -0
- /package/dist/{keywords-for-site-EEIRZ77L.js.map → keywords-for-site-6IAS7QK3.js.map} +0 -0
- /package/dist/{landing-TTKIW7CQ.js.map → landing-HBBNHU4W.js.map} +0 -0
- /package/dist/{leads-DGOFIQMH.js.map → leads-6RFLDXIP.js.map} +0 -0
- /package/dist/{learn-56DN2S6B.js.map → learn-QL2ZO7OP.js.map} +0 -0
- /package/dist/{line-item-writes-BHYFH4AZ.js.map → line-item-writes-FZVYSBWK.js.map} +0 -0
- /package/dist/{line-items-PUWPYZOV.js.map → line-items-44QSYZTE.js.map} +0 -0
- /package/dist/{link-AED2A2ML.js.map → link-N7VUZE5R.js.map} +0 -0
- /package/dist/{linkedin-WB73GQ7E.js.map → linkedin-BP6LWQIS.js.map} +0 -0
- /package/dist/{linkedin-person-EPSR7OIR.js.map → linkedin-person-KPFROM7O.js.map} +0 -0
- /package/dist/{list-2YE5JWYG.js.map → list-IZ2MUUQ5.js.map} +0 -0
- /package/dist/{list-LLLEF6YM.js.map → list-OW5UIFI3.js.map} +0 -0
- /package/dist/{list-O5RQLGQO.js.map → list-VSDOV3QX.js.map} +0 -0
- /package/dist/{log-FRQ2XD7O.js.map → log-U5P25U6W.js.map} +0 -0
- /package/dist/{make-ALUBF2U7.js.map → make-55LQECUE.js.map} +0 -0
- /package/dist/{mcp-AGZL4CA3.js.map → mcp-4VUUHCWJ.js.map} +0 -0
- /package/dist/{media-sources-5ECRCDXJ.js.map → media-sources-B36AGK4K.js.map} +0 -0
- /package/dist/{members-CH5TDNEZ.js.map → members-O5MYSZ6W.js.map} +0 -0
- /package/dist/{normalize-AEJP2AEI.js.map → normalize-6YBZQ6MJ.js.map} +0 -0
- /package/dist/{options-VENBF5ES.js.map → options-WCJ4SZ4Q.js.map} +0 -0
- /package/dist/{organization-USVPE43J.js.map → organization-RKV7KDMQ.js.map} +0 -0
- /package/dist/{performance-2V2O5QIB.js.map → performance-ASGNJQTT.js.map} +0 -0
- /package/dist/{performance-GEALWLJF.js.map → performance-JZ2IUWJX.js.map} +0 -0
- /package/dist/{preview-Q3N6NMQ5.js.map → preview-SMFKMMZU.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-DB6U5OIJ.js.map → promoted-tweet-writes-5VBLE23Q.js.map} +0 -0
- /package/dist/{promoted-tweets-ATKIVR2F.js.map → promoted-tweets-N7XPG3XB.js.map} +0 -0
- /package/dist/{publish-R7RFAVGE.js.map → publish-ZCVVBT2E.js.map} +0 -0
- /package/dist/{reddit-2FEGFGU7.js.map → reddit-ZWA4GSD3.js.map} +0 -0
- /package/dist/{refresh-BDEAUQEB.js.map → refresh-GZSPTRQO.js.map} +0 -0
- /package/dist/{release-CA7H6KLD.js.map → release-YQSDFSAD.js.map} +0 -0
- /package/dist/{remove-GVLJDVSB.js.map → remove-IC6XZSLZ.js.map} +0 -0
- /package/dist/{reopen-5UVQ5EXY.js.map → reopen-4D4S5TFN.js.map} +0 -0
- /package/dist/{rerun-4SVR7QGC.js.map → rerun-QCV3QX2U.js.map} +0 -0
- /package/dist/{research-63R4XYM6.js.map → research-SPWJYSF3.js.map} +0 -0
- /package/dist/{research-VPONEQYW.js.map → research-XRKLDLK3.js.map} +0 -0
- /package/dist/{reset-RKW5GJAX.js.map → reset-MTSRIAXC.js.map} +0 -0
- /package/dist/{reset-75QSSW7G.js.map → reset-RPHQ6R4T.js.map} +0 -0
- /package/dist/{resolve-GZPY2HSF.js.map → resolve-F4Q7TPBU.js.map} +0 -0
- /package/dist/{retry-QXKDF4VY.js.map → retry-EY4VUCWE.js.map} +0 -0
- /package/dist/{retry-ZZM63KIG.js.map → retry-ZJYQRVXA.js.map} +0 -0
- /package/dist/{revenue-QJIUOCIR.js.map → revenue-MWDAUG2M.js.map} +0 -0
- /package/dist/{rules-MTOM5TXU.js.map → rules-LIHB6YIY.js.map} +0 -0
- /package/dist/{rules-add-P7QMIJ47.js.map → rules-add-6NIC4BSS.js.map} +0 -0
- /package/dist/{run-UXLXTYI4.js.map → run-K3ZTVHXF.js.map} +0 -0
- /package/dist/{run-5XN3VZTK.js.map → run-TSLHGOVM.js.map} +0 -0
- /package/dist/{scaffold-ad-WGNIHTWJ.js.map → scaffold-ad-G4GPAJNA.js.map} +0 -0
- /package/dist/{scaffold-static-ad-5AWGI5QC.js.map → scaffold-static-ad-5G4T4QOV.js.map} +0 -0
- /package/dist/{scaffold-video-UUHRYZFC.js.map → scaffold-video-BCQTXK3B.js.map} +0 -0
- /package/dist/{schedule-HVLI4YDP.js.map → schedule-6AEZXHSM.js.map} +0 -0
- /package/dist/{scheduled-agents-DHKDQSOS.js.map → scheduled-agents-4ALAF7S2.js.map} +0 -0
- /package/dist/{schema-CCM76NWZ.js.map → schema-G2RFAHMC.js.map} +0 -0
- /package/dist/{search-563LZ4JQ.js.map → search-QXTEVPDB.js.map} +0 -0
- /package/dist/{select-EBBZB4I7.js.map → select-BDE4444H.js.map} +0 -0
- /package/dist/{set-prompt-DIWUIE6L.js.map → set-prompt-BJGXSGF7.js.map} +0 -0
- /package/dist/{setup-links-BTG7AOMH.js.map → setup-links-PI6HRHB3.js.map} +0 -0
- /package/dist/{shopify-XOZ6H5WN.js.map → shopify-RTWQDLMB.js.map} +0 -0
- /package/dist/{site-BUJSVT4Y.js.map → site-F5YCQRXX.js.map} +0 -0
- /package/dist/{sources-6IU6U3CQ.js.map → sources-AIY3SEIE.js.map} +0 -0
- /package/dist/{sources-FZZRJTQV.js.map → sources-JBOEVF5L.js.map} +0 -0
- /package/dist/{stale-MZCPHFMS.js.map → stale-R63TSO5I.js.map} +0 -0
- /package/dist/{status-OHMKGRZ6.js.map → status-NXZSC3WG.js.map} +0 -0
- /package/dist/{stock-WEY6RYKP.js.map → stock-WUOFRG3K.js.map} +0 -0
- /package/dist/{sync-EVJR4GY6.js.map → sync-4T577GH4.js.map} +0 -0
- /package/dist/{sync-definition-PESPTSAQ.js.map → sync-definition-IRW4MSRQ.js.map} +0 -0
- /package/dist/{tags-OZUQMA2G.js.map → tags-24RR4Q2Y.js.map} +0 -0
- /package/dist/{tags-PF4TBBEX.js.map → tags-DVWORXQR.js.map} +0 -0
- /package/dist/{tags-T4QZEQIR.js.map → tags-R66INE52.js.map} +0 -0
- /package/dist/{tags-YTZ6ZPQQ.js.map → tags-VAPD3LWN.js.map} +0 -0
- /package/dist/{tags-HN67SXIG.js.map → tags-VS37KZCM.js.map} +0 -0
- /package/dist/{targeting-criteria-JTY4OUQV.js.map → targeting-criteria-CR5VHR35.js.map} +0 -0
- /package/dist/{targets-RG3NONXL.js.map → targets-MF2K7JRS.js.map} +0 -0
- /package/dist/{testimonials-M4GVNUI7.js.map → testimonials-J6FUERA2.js.map} +0 -0
- /package/dist/{top-companies-VNFPTJBI.js.map → top-companies-ZEFG2CVI.js.map} +0 -0
- /package/dist/{transcript-F5XLS33R.js.map → transcript-O2UOSI54.js.map} +0 -0
- /package/dist/{translate-ETC6UFI6.js.map → translate-DZAZAUI2.js.map} +0 -0
- /package/dist/{triggers-3GJOP4QN.js.map → triggers-NQMVL755.js.map} +0 -0
- /package/dist/{unlink-636FAP6D.js.map → unlink-2RGEODVO.js.map} +0 -0
- /package/dist/{unstage-445BCA7J.js.map → unstage-KLYI3EMB.js.map} +0 -0
- /package/dist/{update-V5WN6HAR.js.map → update-CVUA6TTH.js.map} +0 -0
- /package/dist/{update-J357GPUA.js.map → update-HDI54TX2.js.map} +0 -0
- /package/dist/{update-U4UVU7LC.js.map → update-YUMXVVIV.js.map} +0 -0
- /package/dist/{update-64M3KSXE.js.map → update-ZUB7IM4K.js.map} +0 -0
- /package/dist/{upload-PCXMVTGL.js.map → upload-RARJSXYY.js.map} +0 -0
- /package/dist/{url-params-NEVV6NED.js.map → url-params-YRMDSBOO.js.map} +0 -0
- /package/dist/{validate-73GLPP7O.js.map → validate-NG3O63DD.js.map} +0 -0
- /package/dist/{videos-HBQGC3G6.js.map → videos-IWTKAIJL.js.map} +0 -0
- /package/dist/{viewer-check-7YL3WXQK.js.map → viewer-check-JNFFC5IK.js.map} +0 -0
- /package/dist/{web-JUSF75RR.js.map → web-VR6XXNL6.js.map} +0 -0
- /package/dist/{winning-ads-RIZANJER.js.map → winning-ads-M6UG74BB.js.map} +0 -0
- /package/dist/{write-commands-2TODH3QX.js.map → write-commands-6OHNL3UR.js.map} +0 -0
- /package/dist/{x-WNZNCXG3.js.map → x-TSLM5O2T.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../api/src/activecampaign.ts","../src/commands/flows/value-expression.ts","../src/commands/flows/mapping.ts"],"sourcesContent":["/**\n * ActiveCampaign as a Form destination: the contract the CLI, the dashboard and\n * the backend share.\n *\n * A Form's `activeCampaignContact` side effect maps answers onto these kinds of\n * destination field, each stored as one `fieldMapping` entry:\n *\n * standard a field every contact has (`email`, `firstName`, `lastName`, `phone`)\n * custom one of the account's own custom contact fields, addressed by its id —\n * or by its personalization tag (`UTM_SOURCE`), resolved to the id at\n * delivery, so a field that is only staged so far can already be mapped\n * tags the one entry whose value is a comma-separated list of tag names\n * lists comma-separated list ids or names the contact is subscribed to\n * automations comma-separated automation ids or names the contact is enrolled in\n * deal a deal tied to the contact (`title`, `value`, `pipeline`, `stage`, …)\n * account the B2B company the contact works at (`name`, `url`), found or created\n * note a note left on the contact\n * event a custom event recorded against the contact (`name`, `data`)\n *\n * The page sends each mapped value under `<fieldType>.<fieldKey>` and the\n * backend reads it back with {@link parseActiveCampaignPropertyKey}.\n */\nimport { z } from \"zod\";\n\nexport const ACTIVECAMPAIGN_FIELD_TYPES = [\n \"standard\",\n \"custom\",\n \"tags\",\n \"lists\",\n \"automations\",\n \"deal\",\n \"account\",\n \"note\",\n \"event\",\n] as const;\nexport type ActiveCampaignFieldType = (typeof ACTIVECAMPAIGN_FIELD_TYPES)[number];\n\n/** Contact fields ActiveCampaign defines on every account, with the label it shows them under. */\nexport const ACTIVECAMPAIGN_STANDARD_FIELDS = [\n { key: \"email\", label: \"Email\" },\n { key: \"firstName\", label: \"First name\" },\n { key: \"lastName\", label: \"Last name\" },\n { key: \"phone\", label: \"Phone\" },\n] as const;\n\n/** The `fieldKey` of the one mapping that carries tags. */\nexport const ACTIVECAMPAIGN_TAGS_KEY = \"tags\";\n\n/** A deal's parts. `pipeline`, `stage` and `owner` take an id or a name; `value` is in major units. */\nexport const ACTIVECAMPAIGN_DEAL_FIELDS = [\n { key: \"title\", label: \"Deal title\" },\n { key: \"value\", label: \"Deal value\" },\n { key: \"currency\", label: \"Deal currency\" },\n { key: \"pipeline\", label: \"Pipeline\" },\n { key: \"stage\", label: \"Stage\" },\n { key: \"owner\", label: \"Deal owner\" },\n { key: \"description\", label: \"Deal description\" },\n] as const;\nexport type ActiveCampaignDealKey = (typeof ACTIVECAMPAIGN_DEAL_FIELDS)[number][\"key\"];\n\n/** The company (ActiveCampaign \"Account\") a contact works at. */\nexport const ACTIVECAMPAIGN_ACCOUNT_FIELDS = [\n { key: \"name\", label: \"Account name\" },\n { key: \"url\", label: \"Account website\" },\n] as const;\n\n/** A custom event; ActiveCampaign records it against the contact by email. */\nexport const ACTIVECAMPAIGN_EVENT_FIELDS = [\n { key: \"name\", label: \"Event name\" },\n { key: \"data\", label: \"Event details\" },\n] as const;\n\n/** The property key a mapped value travels under, from the page to the backend. */\nexport function activeCampaignPropertyKey(fieldType: ActiveCampaignFieldType, fieldKey: string): string {\n return `${fieldType}.${fieldKey}`;\n}\n\n/** The mapping a property key names, or null when it is not one this destination reads. */\nexport function parseActiveCampaignPropertyKey(\n key: string,\n): { fieldType: ActiveCampaignFieldType; fieldKey: string } | null {\n const dot = key.indexOf(\".\");\n if (dot <= 0) return null;\n const fieldType = key.slice(0, dot);\n const fieldKey = key.slice(dot + 1);\n if (!fieldKey || !(ACTIVECAMPAIGN_FIELD_TYPES as readonly string[]).includes(fieldType)) return null;\n return { fieldType: fieldType as ActiveCampaignFieldType, fieldKey };\n}\n\n/**\n * The names one resolved comma-separated value names (tags, lists,\n * automations): split on commas, trimmed, blanks and repeats dropped.\n * ActiveCampaign caps a name at 255 characters.\n */\nexport function splitActiveCampaignNames(value: string): string[] {\n const seen = new Set<string>();\n for (const raw of value.split(\",\")) {\n const name = raw.trim().slice(0, 255);\n if (name) seen.add(name);\n }\n return [...seen];\n}\n\n/** The tag names one resolved `tags` value names. */\nexport const splitActiveCampaignTags = splitActiveCampaignNames;\n\n/** One thing in the account a mapping can name: a list, an automation, a pipeline, a stage, a user. */\nexport interface ActiveCampaignOption {\n id: string;\n name: string;\n}\n\n/** The option a mapping names, by its id or — case-insensitively — its name. */\nexport function findActiveCampaignOption<T extends ActiveCampaignOption>(\n options: readonly T[],\n named: string,\n): T | undefined {\n const wanted = named.trim();\n if (!wanted) return undefined;\n return (\n options.find((option) => option.id === wanted) ??\n options.find((option) => option.name.trim().toLowerCase() === wanted.toLowerCase())\n );\n}\n\n/** `text` (digits and separators only) as a plain decimal number string. */\nfunction plainDecimal(text: string): string {\n const lastDot = text.lastIndexOf(\".\");\n const lastComma = text.lastIndexOf(\",\");\n if (lastDot !== -1 && lastComma !== -1) {\n const decimal = lastDot > lastComma ? \".\" : \",\";\n return text.replaceAll(decimal === \".\" ? \",\" : \".\", \"\").replace(decimal, \".\");\n }\n const separator = lastDot !== -1 ? \".\" : \",\";\n const parts = text.split(separator);\n if (parts.length === 1) return text;\n const last = parts[parts.length - 1] ?? \"\";\n const isThousands = parts.length > 2 || last.length === 3;\n return isThousands ? parts.join(\"\") : `${parts.slice(0, -1).join(\"\")}.${last}`;\n}\n\n/**\n * A typed amount in major units (`1,500.50`, `1.500,50 €`, `$99`) as the cents\n * ActiveCampaign stores a deal's value in, or null when it is not a positive\n * number. A lone separator followed by exactly three digits is a thousands\n * separator (`10.000`); otherwise the last separator is the decimal point.\n */\nexport function activeCampaignAmountToCents(raw: string): number | null {\n if (raw.includes(\"-\")) return null;\n const text = raw.replace(/[^\\d.,]/g, \"\");\n if (!/\\d/.test(text)) return null;\n const amount = Number(plainDecimal(text));\n return Number.isFinite(amount) ? Math.round(amount * 100) : null;\n}\n\n/**\n * The account's API address, normalised to its origin, or null when it is not\n * an ActiveCampaign API host.\n *\n * Every request carries the account's key to this host, so it is held to\n * ActiveCampaign's own domains: anything else would let a pasted address send\n * the key — and every lead — somewhere else. Accepts what Settings → Developer\n * shows (`https://acme.api-us1.com`), with or without `/api/3` or a trailing slash.\n */\nexport function normalizeActiveCampaignApiUrl(raw: string): string | null {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n let url: URL;\n try {\n url = new URL(/^https?:\\/\\//i.test(trimmed) ? trimmed : `https://${trimmed}`);\n } catch {\n return null;\n }\n const host = url.hostname.toLowerCase();\n const allowed = /^[a-z0-9][a-z0-9-]*\\.(api-[a-z]{2}\\d+\\.com|activehosted\\.com)$/;\n if (!allowed.test(host) || url.port !== \"\") return null;\n return `https://${host}`;\n}\n\n/** One field a Form's answer can be mapped onto, as `baker flows map` and the editor list it. */\nexport const activeCampaignFieldSchema = z.object({\n fieldType: z.enum(ACTIVECAMPAIGN_FIELD_TYPES),\n /** What the mapping stores: the standard field's name, a custom field's id, `tags`, a deal part, …. */\n fieldKey: z.string(),\n label: z.string(),\n /** ActiveCampaign's own type for a custom field (`text`, `date`, `dropdown`, …); null otherwise. */\n dataType: z.string().nullable(),\n /** A custom field's personalization tag (`%SECTOR%`), which people recognise it by. */\n perstag: z.string().nullable(),\n});\nexport type ActiveCampaignField = z.infer<typeof activeCampaignFieldSchema>;\n\nfunction fixedField(\n fieldType: ActiveCampaignFieldType,\n fieldKey: string,\n label: string,\n dataType: string | null = null,\n): ActiveCampaignField {\n return { fieldType, fieldKey, label, dataType, perstag: null };\n}\n\n/**\n * Every destination entry that is the same on every account — everything but\n * the contact's own fields — in the order the editor and `flows map` offer them.\n */\nexport const ACTIVECAMPAIGN_FIXED_FIELDS: readonly ActiveCampaignField[] = [\n fixedField(\"tags\", ACTIVECAMPAIGN_TAGS_KEY, \"Tags\"),\n fixedField(\"lists\", \"lists\", \"Lists\"),\n fixedField(\"automations\", \"automations\", \"Automations\"),\n ...ACTIVECAMPAIGN_DEAL_FIELDS.map((field) =>\n fixedField(\"deal\", field.key, field.label, field.key === \"value\" ? \"currency\" : null),\n ),\n ...ACTIVECAMPAIGN_ACCOUNT_FIELDS.map((field) => fixedField(\"account\", field.key, field.label)),\n fixedField(\"note\", \"note\", \"Note\"),\n ...ACTIVECAMPAIGN_EVENT_FIELDS.map((field) => fixedField(\"event\", field.key, field.label)),\n];\n\nexport const activeCampaignOptionSchema = z.object({ id: z.string(), name: z.string() });\n\n/** A deal pipeline and its stages, first stage first — the one a deal lands in by default. */\nexport const activeCampaignPipelineSchema = activeCampaignOptionSchema.extend({\n stages: z.array(activeCampaignOptionSchema),\n});\nexport type ActiveCampaignPipeline = z.infer<typeof activeCampaignPipelineSchema>;\n\n/** An automation, and the tags whose adding starts it (\"tag is added\" starts) — empty when it starts some other way. */\nexport const activeCampaignAutomationSchema = activeCampaignOptionSchema.extend({\n startTags: z.array(z.string()).default([]),\n});\nexport type ActiveCampaignAutomation = z.infer<typeof activeCampaignAutomationSchema>;\n\n/** What a connected account offers a Form: its fields, and the things the other mappings can name. */\nexport const activeCampaignCatalogSchema = z.object({\n fields: z.array(activeCampaignFieldSchema),\n lists: z.array(activeCampaignOptionSchema).default([]),\n automations: z.array(activeCampaignAutomationSchema).default([]),\n pipelines: z.array(activeCampaignPipelineSchema).default([]),\n users: z.array(activeCampaignOptionSchema).default([]),\n /** Whether events can be sent: an event key is pasted on the connection, or ActiveCampaign reports one (event tracking is on). */\n eventKeySaved: z.boolean().default(false),\n});\nexport type ActiveCampaignCatalog = z.infer<typeof activeCampaignCatalogSchema>;\n\nexport const activeCampaignFieldsRequestSchema = z.object({\n /** Connection id; optional when the company has exactly one ActiveCampaign account. */\n account: z.string().optional(),\n});\nexport type ActiveCampaignFieldsRequest = z.infer<typeof activeCampaignFieldsRequestSchema>;\n\nexport const activeCampaignFieldsResponseSchema = z.object({\n ok: z.literal(true),\n data: activeCampaignCatalogSchema.extend({ account: z.string() }),\n});\nexport type ActiveCampaignFieldsResponse = z.infer<typeof activeCampaignFieldsResponseSchema>;\n","/**\n * What goes on the RIGHT of a `--map`, and how it becomes an AutofillDoc.\n *\n * The first version of this command could only map a plain form field, which\n * left out most of what a real CRM mapping is made of. `lead_source` almost\n * always wants `tracking.utm_source`; a \"full name\" column wants two fields and\n * a space between them; a Pipedrive owner field wants a literal. None of that\n * was expressible, so the command that exists to stop the agent hand-writing\n * ProseMirror sent it straight back to hand-writing ProseMirror for the most\n * common mapping in paid marketing.\n *\n * The grammar is four prefixes, a quoted literal, and `+`:\n *\n * nombre a form field (shorthand for field:nombre)\n * field:nombre …the same, explicit\n * field:Contact Info.nombre …disambiguated when two steps share a name\n * tracking:utm_source a built-in tracking variable\n * global:UserEmail a global variable, by the name it was given\n * code:total_score a codeExecution exposed value\n * \"Paid Search\" literal text\n * field:first + \" \" + field:last concatenation\n * {{<stepId>.customForm.nombre}} a mention as the flow file stores it\n * (also .codeExecution., tracking., global.)\n *\n * A value never runs code: `.split(\" \")[0]` and the like are refused, because\n * the engine substitutes a mention and nothing evaluates what follows it.\n *\n * Every reference is resolved against the flow's own tree — a name that is not\n * there is refused with the names that are. That is the whole point: `attrs.id`\n * is not checked by anything downstream, so a mapping with a subtly wrong id is\n * valid, ships, and sends an empty value forever.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { MappingError } from \"./mapping.ts\";\nimport { flowsDir, walkNodes } from \"./shared.ts\";\n\ntype AnyRecord = Record<string, unknown>;\n\nexport type ValuePart =\n | { kind: \"text\"; text: string }\n | { kind: \"field\"; ref: string }\n | { kind: \"tracking\"; name: string }\n | { kind: \"global\"; name: string }\n | { kind: \"code\"; ref: string };\n\nconst PREFIXES = [\"field\", \"tracking\", \"global\", \"code\"] as const;\n\n/**\n * Split on `+` at the top level, keeping quoted segments intact.\n *\n * Hand-rolled rather than a regex because a literal may contain `+` — a mapping\n * that emits `\"A + B\"` as text is legitimate, and a regex split would tear it in\n * half silently.\n */\nfunction splitParts(raw: string): string[] {\n const parts: string[] = [];\n let current = \"\";\n let inQuotes = false;\n for (let i = 0; i < raw.length; i++) {\n const char = raw[i];\n if (char === '\"') {\n inQuotes = !inQuotes;\n current += char;\n } else if (char === \"+\" && !inQuotes) {\n parts.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n parts.push(current);\n if (inQuotes) {\n throw new MappingError(`Unclosed quote in value \\`${raw}\\`.`, 'A literal is written \"like this\".');\n }\n return parts.map((part) => part.trim()).filter((part) => part.length > 0);\n}\n\nconst TRANSFORM_REFUSAL =\n \"A value cannot run code. Map the field as it is (firstname=full_name), or split it in the step with a codeExecution that exposes first_name and last_name and map code:first_name.\";\n\n/** `.split(`, `.slice(`, `.toUpperCase()` — a method call, which no mapping can run. */\nconst METHOD_CALL = /\\.\\s*[A-Za-z_$][\\w$]*\\s*\\(/;\n/** `[0]` on the end of a reference — an index, which no mapping can run either. */\nconst TRAILING_INDEX = /\\[[^\\]]*\\]$/;\n\n/**\n * A reference in the spelling the flow file itself stores it in —\n * `{{<stepId>.customForm.<field>}}` — and the one every refusal's inventory\n * prints the step id for. Refusing it sent the agent back to hand-writing the\n * ProseMirror doc for a field the command had just listed.\n */\nfunction mentionPart(inner: string): ValuePart {\n if (inner.startsWith(\"tracking.\")) return { kind: \"tracking\", name: inner.slice(\"tracking.\".length) };\n if (inner.startsWith(\"global.\")) return { kind: \"global\", name: inner.slice(\"global.\".length) };\n return referencePart(inner);\n}\n\n/** A bare reference: `<stepId>.codeExecution.<name>` is an exposed value, anything else a form field. */\nfunction referencePart(ref: string): ValuePart {\n return /\\.codeExecution\\.[^.]+$/.test(ref) ? { kind: \"code\", ref } : { kind: \"field\", ref };\n}\n\n/** One `+`-separated segment: a quoted literal, a prefixed reference, or a bare field name. */\nfunction parsePart(part: string): ValuePart {\n if (part.startsWith('\"') && part.endsWith('\"') && part.length >= 2) {\n return { kind: \"text\", text: part.slice(1, -1) };\n }\n if (METHOD_CALL.test(part) || TRAILING_INDEX.test(part)) {\n throw new MappingError(TRANSFORM_REFUSAL);\n }\n\n if (part.startsWith(\"{{\")) {\n const close = part.indexOf(\"}}\");\n if (close < 0) {\n throw new MappingError(\n `Unclosed \\`{{\\` in value \\`${part}\\`.`,\n \"A mention is written {{<stepId>.customForm.<field>}}.\",\n );\n }\n if (part.slice(close + 2).trim()) throw new MappingError(TRANSFORM_REFUSAL);\n return mentionPart(part.slice(2, close).trim());\n }\n\n const colon = part.indexOf(\":\");\n if (colon <= 0) return referencePart(part);\n\n const prefix = part.slice(0, colon);\n const rest = part.slice(colon + 1).trim();\n if (!(PREFIXES as readonly string[]).includes(prefix)) {\n throw new MappingError(\n `\\`${prefix}:\\` is not a value kind.`,\n `Use one of ${PREFIXES.map((candidate) => `${candidate}:`).join(\" \")}, a bare form field name, or a \"quoted literal\".`,\n );\n }\n if (!rest) throw new MappingError(`\\`${part}\\` names no ${prefix}.`);\n\n switch (prefix) {\n case \"tracking\":\n return { kind: \"tracking\", name: rest.replace(/^tracking\\./, \"\") };\n case \"global\":\n return { kind: \"global\", name: rest };\n case \"code\":\n return { kind: \"code\", ref: rest };\n default:\n return { kind: \"field\", ref: rest };\n }\n}\n\nexport function parseValueExpression(raw: string): ValuePart[] {\n const parts = splitParts(raw);\n if (parts.length === 0) {\n throw new MappingError(\"A --map needs a value on the right of the `=`.\");\n }\n return parts.map(parsePart);\n}\n\n/**\n * The tracking vocabulary, read out of the workspace the command is running in\n * rather than copied here. `TRACKING_FIELD_IDS` is the engine's own list, so\n * reading it is the only way this cannot drift — and there are already four\n * hand-copies of the flow taxonomy in this repo without adding a fifth.\n *\n * Returns null when the file is not there (the CLI run outside a client repo),\n * which skips validation rather than refusing a mapping that is probably fine.\n */\nexport function trackingFieldIds(): Set<string> | null {\n const path = join(flowsDir(), \"..\", \"tracking.ts\");\n if (!existsSync(path)) return null;\n try {\n const source = readFileSync(path, \"utf-8\");\n const block = source.match(/TRACKING_FIELD_IDS\\s*=\\s*\\[([\\s\\S]*?)\\]\\s*as const/)?.[1];\n if (!block) return null;\n const ids = [...block.matchAll(/\"(tracking\\.[a-z0-9_]+)\"/g)].map((match) => match[1] as string);\n return ids.length > 0 ? new Set(ids) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * A step's `nodeData.form.external` — the one place the engine keeps both a\n * step's fields and its `codeExecution`.\n *\n * Read through here rather than off `nodeData` directly. `codeExecution` is\n * nested one level deeper than it looks (`CustomFormData` in `types.ts`, and\n * both readers — `store.ts` `applyCodeExecution` and `code-normalize.ts`\n * `pushCustomFormExposedNames` — go through `form.external`), and reading it\n * from the wrong level is invisible: the lookup simply finds nothing and every\n * `code:` reference is refused as if the form exposed no values at all.\n */\nfunction externalOf(node: AnyRecord): AnyRecord {\n const nodeData = (node.nodeData ?? {}) as AnyRecord;\n return ((nodeData.form as AnyRecord | undefined)?.external ?? {}) as AnyRecord;\n}\n\ntype FieldOwner = { id: string; name: string; fields: string[] };\n\n/** Steps that collect data, with the fields each one owns. */\nfunction fieldOwners(tree: AnyRecord): FieldOwner[] {\n return walkNodes(tree).flatMap((node) => {\n const external = externalOf(node);\n if (!Array.isArray(external.fields)) return [];\n return [\n {\n id: String(node.id ?? \"\"),\n name: typeof node.name === \"string\" && node.name ? node.name : \"Form\",\n fields: (external.fields as AnyRecord[])\n .map((field) => field?.fieldName)\n .filter((name): name is string => typeof name === \"string\"),\n },\n ];\n });\n}\n\n/**\n * `Contact Info.email` → the step called \"Contact Info\"; `email` → whichever step\n * owns it; `<stepId>.customForm.email` → that step, spelled as the flow file\n * stores the mention (`segment` is `customForm` for a field, `codeExecution`\n * for an exposed value).\n */\nfunction splitRef(ref: string, segment: \"customForm\" | \"codeExecution\"): { step?: string; name: string } {\n const marker = `.${segment}.`;\n const at = ref.lastIndexOf(marker);\n if (at > 0 && !ref.slice(at + marker.length).includes(\".\")) {\n return { step: ref.slice(0, at), name: ref.slice(at + marker.length) };\n }\n const dot = ref.lastIndexOf(\".\");\n if (dot <= 0) return { name: ref };\n return { step: ref.slice(0, dot), name: ref.slice(dot + 1) };\n}\n\nfunction mention(id: string, label: string): AnyRecord {\n return { type: \"VariablesMention\", attrs: { id, label, mentionSuggestionChar: \"{{\" } };\n}\n\n/** \"servicio_deseado\" → \"Servicio Deseado\" — the dashboard's display convention. */\nfunction titleize(value: string): string {\n return value\n .split(/[_-]+/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nfunction resolveField(tree: AnyRecord, ref: string): AnyRecord {\n const { step, name } = splitRef(ref, \"customForm\");\n const owners = fieldOwners(tree);\n const inventory = owners\n .map((owner) => ` ${owner.name} (${owner.id}): ${owner.fields.join(\", \") || \"(no fields)\"}`)\n .join(\"\\n\");\n\n const candidates = owners.filter(\n (owner) => owner.fields.includes(name) && (!step || owner.name === step || owner.id === step),\n );\n if (candidates.length === 0) {\n throw new MappingError(`Form field \"${ref}\" does not exist in this form.`, inventory);\n }\n // Two steps can legitimately own a field with the same name. Picking one would\n // wire the mapping to whichever happened to come first in the tree.\n if (candidates.length > 1) {\n throw new MappingError(\n `Form field \"${name}\" exists on ${candidates.length} steps — say which: field:<step>.${name}`,\n candidates.map((owner) => ` field:${owner.name}.${name}`).join(\"\\n\"),\n );\n }\n const owner = candidates[0] as FieldOwner;\n // The engine stores every node type's submission under `.customForm.`\n // (`controller.ts`, `wire.ts`), so this prefix is not the node's type.\n return mention(`${owner.id}.customForm.${name}`, `${owner.name} => ${titleize(name)}`);\n}\n\nfunction resolveTracking(name: string): AnyRecord {\n const id = `tracking.${name}`;\n const known = trackingFieldIds();\n if (known && !known.has(id)) {\n const near = [...known].filter((candidate) => candidate.includes(name.split(\"_\")[0] ?? name)).slice(0, 8);\n throw new MappingError(\n `\\`${id}\\` is not a tracking variable.`,\n near.length > 0\n ? `Close matches: ${near.join(\", \")}`\n : \"See references/autofill-and-variables.md § Built-in Tracking Variables.\",\n );\n }\n // Tracking and global mentions carry the id as their own label — that is what\n // the dashboard editor writes, and what the renderer displays.\n return mention(id, id);\n}\n\nfunction resolveGlobal(tree: AnyRecord, name: string): AnyRecord {\n const globals = (tree.globalVariables as AnyRecord[] | undefined) ?? [];\n const match = globals.find((variable) => variable?.name === name || variable?.id === name);\n if (!match) {\n throw new MappingError(\n `No global variable named \"${name}\" on this form.`,\n globals.length > 0\n ? `Defined: ${globals.map((variable) => String(variable.name)).join(\", \")}`\n : \"This form defines none. Globals live on the first node only — see references/autofill-and-variables.md § Global Variables.\",\n );\n }\n const id = `global.${String(match.id)}`;\n return mention(id, id);\n}\n\nfunction resolveCode(tree: AnyRecord, ref: string): AnyRecord {\n const { step, name } = splitRef(ref, \"codeExecution\");\n const owners = walkNodes(tree).flatMap((node) => {\n const exposed = ((externalOf(node).codeExecution as AnyRecord | undefined)?.exposedValues ?? []) as AnyRecord[];\n const names = exposed.map((value) => value?.name).filter((value): value is string => typeof value === \"string\");\n return names.length > 0 ? [{ id: String(node.id ?? \"\"), name: String(node.name ?? \"step\"), names }] : [];\n });\n\n const candidates = owners.filter(\n (owner) => owner.names.includes(name) && (!step || owner.name === step || owner.id === step),\n );\n if (candidates.length !== 1) {\n throw new MappingError(\n candidates.length === 0\n ? `No codeExecution exposes \"${ref}\" on this form.`\n : `\"${name}\" is exposed by ${candidates.length} steps — say which: code:<step>.${name}`,\n owners.length > 0\n ? owners.map((owner) => ` ${owner.name} (${owner.id}): ${owner.names.join(\", \")}`).join(\"\\n\")\n : \"No step on this form exposes any codeExecution value.\",\n );\n }\n const owner = candidates[0] as { id: string; name: string };\n // Exposed values live under `.codeExecution.`, NOT `.customForm.` — the same\n // id under the wrong segment resolves to empty in every CRM payload.\n return mention(`${owner.id}.codeExecution.${name}`, `${owner.name} => ${titleize(name)}`);\n}\n\n/**\n * Build the AutofillDoc a mapping's `value` holds.\n *\n * A single mention keeps its trailing space: that is byte-for-byte what the\n * dashboard's editor produces, and matching it means a mapping written here and\n * one written there are indistinguishable. A multi-part expression emits exactly\n * the parts given, because an injected space would corrupt `first + last`.\n */\nexport function buildValueDoc(tree: AnyRecord, expression: string): AnyRecord {\n const parts = parseValueExpression(expression);\n const content = parts.map((part) => {\n switch (part.kind) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"tracking\":\n return resolveTracking(part.name);\n case \"global\":\n return resolveGlobal(tree, part.name);\n case \"code\":\n return resolveCode(tree, part.ref);\n default:\n return resolveField(tree, part.ref);\n }\n });\n\n const single = content.length === 1 && parts[0]?.kind !== \"text\";\n return {\n type: \"doc\",\n content: [{ type: \"paragraph\", content: single ? [...content, { type: \"text\", text: \" \" }] : content }],\n };\n}\n","/**\n * Build a side effect's `fieldMapping` / `columnMapping` from a short spec.\n *\n * Why this exists. A single mapped field is a ~28-line ProseMirror document:\n *\n * { \"objectTypeId\": \"0-1\", \"fieldType\": \"email\", \"fieldName\": \"email\",\n * \"value\": { \"type\": \"doc\", \"content\": [ { \"type\": \"paragraph\", \"content\": [\n * { \"type\": \"VariablesMention\", \"attrs\": {\n * \"id\": \"<nodeId>.customForm.<formField>\",\n * \"label\": \"<Node Name> => <Form Field>\",\n * \"mentionSuggestionChar\": \"{{\" } },\n * { \"type\": \"text\", \"text\": \" \" } ] } ] } }\n *\n * An eight-field CRM mapping is ~230 lines of hand-emitted JSON per form, in\n * which the only information is eight pairs of names. In one real session two\n * forms cost ~460 lines — written once, lost, and written again by hand.\n *\n * It also removes the failure mode those lines invite. `attrs.id` is\n * `<owning node's id>.customForm.<field>`: get the node wrong, or the field name\n * subtly wrong, and the mapping is structurally valid, ships, and silently sends\n * an empty value forever. This resolves the node id from the tree and refuses a\n * form field that does not exist.\n *\n * What it deliberately does NOT do: choose the destination. The CRM-side names\n * (`firstname`, a sheet column) describe an account only `request_flow_input`\n * can see. Configure the side effect first, read the real names back off that\n * call's own result, then map.\n *\n * This file owns the DESTINATION half — which record shape each side-effect type\n * reads, and what it refuses to guess. What goes in `value` is the other half,\n * and it lives in `value-expression.ts`.\n *\n * ## A mapping accumulates, so a write merges\n *\n * Every slot merges with what is already in it, addressed by destination name:\n * re-mapping a name overwrites it in place, a new name is appended, and a name\n * this call did not mention is left alone. `MapOptions.replace` is the opt-in\n * for the other reading, and it is the only way to remove a mapping.\n *\n * Merging is the default because building a mapping is not one act. The\n * documented order is configure the destination, read the real field names back,\n * then map — and in practice that means several calls, because the names arrive\n * in batches and some of them need a field type the first call did not have.\n * Replacing on every call turned \"add the ninth field\" into \"delete the other\n * eight\", with nothing said. That is this file's own failure mode, one level up:\n * a mapping that is structurally valid, ships, and delivers nothing.\n *\n * ## Destination metadata is derived, never defaulted\n *\n * A CRM mapping carries more than a pair of names: `fieldType`, `objectTypeId`,\n * `entityType`, `isCustomField`. Every one of them is a fact about the connected\n * account, and every one is required by the record the engine reads — so there\n * are exactly two honest ways to fill them, and inventing a plausible value is\n * not one. Either the caller hands over the destination's own field catalog\n * (`MapOptions.destinationFields`, which `map.ts` reads off the account) and\n * they are DERIVED, or the mapping states them and they are declared. Anything\n * else is refused.\n *\n * That order matters for how much work the agent does. Deriving is both less\n * work and more accurate than being told, so a caller that can read the\n * destination should: the agent then writes `firstname=nombre` and the types\n * take care of themselves.\n *\n * Pure — every function here takes a decoded tree and returns data, so the\n * refusals are unit-tested without a filesystem. Reading a destination's\n * catalog is I/O and therefore lives in `map.ts`.\n */\n\nimport {\n ACTIVECAMPAIGN_FIELD_TYPES,\n type ActiveCampaignCatalog,\n type ActiveCampaignField,\n type ActiveCampaignOption,\n findActiveCampaignOption,\n splitActiveCampaignNames,\n} from \"@baker/api/activecampaign\";\nimport { buildValueDoc } from \"./value-expression.ts\";\n\ntype AnyRecord = Record<string, unknown>;\n\n/** A refusal the caller turns into a `{ ok: false }` envelope with a `fix`. */\nexport class MappingError extends Error {\n readonly fix: string | undefined;\n constructor(message: string, fix?: string) {\n super(message);\n this.name = \"MappingError\";\n this.fix = fix;\n }\n}\n\n/**\n * A destination addressed by a list of records: one entry per mapped field.\n *\n * Two families share it. The CRM/sheet family (`fieldMapping`, `columnMapping`)\n * carries destination metadata alongside the value; the `PayloadKey` family\n * (`payloadKeys`, `eventParams`, `eventProperties`, `dataLayerParams`,\n * `goalParams`) is just `{ key, value }`.\n */\ntype ListShape = {\n kind: \"list\";\n key: string;\n /**\n * The object the list hangs off, when it is not the side effect itself.\n *\n * Only `email` needs it — its keys live at `body.fields`, and only while\n * `body.format` is `\"json\"`. That one level of nesting is why this command\n * used to refuse `email` outright, which left the single most common\n * notification side effect as the one place an agent still hand-wrote a\n * ProseMirror document per field.\n */\n under?: string;\n addressedBy: string;\n entities?: readonly string[];\n needsFieldType?: boolean;\n needsIsCustom?: boolean;\n /** Where the per-mapping field types come from, for the refusal that asks for one. */\n fieldTypeSource?: string;\n /** The closed set a stated field type must belong to, when the destination defines one. */\n fieldTypes?: readonly string[];\n /**\n * An entry is named by `<fieldType>.<address>` rather than its address alone,\n * when one address means different things under different types — an\n * ActiveCampaign `account.name` and `event.name` are two destinations.\n */\n qualifiedByFieldType?: boolean;\n};\n\n/**\n * A destination addressed by a fixed set of named slots, each an AutofillDoc.\n *\n * Meta advanced matching, Google Ads enhanced conversions, TikTok identify,\n * LinkedIn/X user matching, Pinterest enhanced matching. The key set is closed\n * and defined by the platform, so a name outside it is a typo, not a field.\n */\ntype RecordShape = { kind: \"record\"; key: string; allowed: readonly string[] };\n\n/** A single AutofillDoc sitting directly on the side effect (`value`, `currency`, …). */\ntype ScalarShape = { kind: \"scalar\"; keys: readonly string[] };\n\ntype MappingShape = ListShape | RecordShape | ScalarShape;\n\nconst PAYLOAD = (key: string): ListShape => ({ kind: \"list\", key, addressedBy: \"key\" });\n\nconst META_MATCHING = [\"em\", \"fn\", \"ln\", \"ph\", \"external_id\", \"ge\", \"db\", \"ct\", \"st\", \"zp\", \"country\"] as const;\nconst ADS_MATCHING = [\n \"email\",\n \"phone_number\",\n \"first_name\",\n \"last_name\",\n \"street\",\n \"city\",\n \"region\",\n \"postal_code\",\n \"country\",\n] as const;\n\n/**\n * Every slot each side-effect type can have a value mapped into, in the order\n * `--map` defaults to.\n *\n * This started as five CRM entries, which meant `baker flows map` refused\n * eleven of the sixteen mappable types — including the two most common things\n * in a real workspace: a webhook body and a Meta pixel's parameters. Its\n * refusal also said, in as many words, that `httpWebhook` and `zapier` \"carry\n * the whole submission and do not address individual destination fields\", which\n * is not true of either: both have `payloadKeys`, and a real form was already\n * using fourteen of them.\n *\n * A type with more than one slot takes `--into <key>` to pick; without it the\n * first is used, and the response names the others.\n */\nexport const MAPPING_SLOTS: Record<string, readonly MappingShape[]> = {\n shopifyCustomer: [\n {\n kind: \"record\",\n key: \"customer\",\n allowed: [\"email\", \"phone\", \"firstName\", \"lastName\", \"acceptsEmailMarketing\", \"acceptsSmsMarketing\"],\n },\n ],\n googleSpreadsheet: [{ kind: \"list\", key: \"columnMapping\", addressedBy: \"column\" }],\n hubspotForm: [\n {\n kind: \"list\",\n key: \"fieldMapping\",\n addressedBy: \"fieldName\",\n needsFieldType: true,\n fieldTypeSource:\n \"Pass --hubspot-form <formGuid> and this command reads every property's type off the form itself — the guid is the `formGuid` in the `destination` request_flow_input returned. `baker hubspot forms view <formGuid>` prints the same list if you want to see it.\",\n },\n ],\n pipedrive: [\n {\n kind: \"list\",\n key: \"fieldMapping\",\n addressedBy: \"fieldKey\",\n entities: [\"person\", \"organization\", \"lead\"],\n needsFieldType: true,\n needsIsCustom: true,\n },\n ],\n goHighlevelContact: [\n {\n kind: \"list\",\n key: \"fieldMapping\",\n addressedBy: \"fieldKey\",\n entities: [\"business\", \"contact\", \"opportunity\"],\n needsFieldType: true,\n needsIsCustom: true,\n },\n ],\n crmble: [\n { kind: \"list\", key: \"fieldMapping\", addressedBy: \"fieldId\", entities: [\"contact\", \"lead\"], needsFieldType: true },\n ],\n activeCampaignContact: [\n {\n kind: \"list\",\n key: \"fieldMapping\",\n addressedBy: \"fieldKey\",\n needsFieldType: true,\n fieldTypes: ACTIVECAMPAIGN_FIELD_TYPES,\n qualifiedByFieldType: true,\n fieldTypeSource:\n 'None to write: this command reads the connected ActiveCampaign account\\'s field list itself. Write `email=email`, `firstName=nombre`, a custom field by its id, personalization tag or label (`SECTOR=sector`; `custom.UTM_SOURCE=…` for one only staged so far), `tags=\"withbaker-\"+tracking:page_path`, `lists=\"Newsletter\"`, `automations=\"Welcome\"`, `deal.title=…` / `deal.pipeline=\"Sales\"` / `deal.value=budget`, `account.name=company`, `note=…`, `event.name=\"demo_requested\"`.',\n },\n ],\n\n email: [{ ...PAYLOAD(\"fields\"), under: \"body\" }],\n zapier: [PAYLOAD(\"payloadKeys\")],\n httpWebhook: [PAYLOAD(\"payloadKeys\")],\n googleTagManager: [PAYLOAD(\"dataLayerParams\")],\n googleAnalytics: [PAYLOAD(\"eventParams\")],\n posthog: [PAYLOAD(\"eventParams\")],\n amplitude: [PAYLOAD(\"eventProperties\")],\n hubspot: [PAYLOAD(\"eventProperties\")],\n vwo: [PAYLOAD(\"eventProperties\")],\n code: [PAYLOAD(\"eventProperties\")],\n datafast: [PAYLOAD(\"goalParams\")],\n\n meta: [PAYLOAD(\"eventParams\"), { kind: \"record\", key: \"advancedMatching\", allowed: META_MATCHING }],\n chatgptAds: [\n PAYLOAD(\"eventParams\"),\n {\n kind: \"record\",\n key: \"advancedMatching\",\n allowed: [\"em\", \"ph\", \"fn\", \"ln\", \"external_id\", \"ct\", \"st\", \"zp\", \"country\"],\n },\n ],\n tiktok: [\n PAYLOAD(\"eventParams\"),\n { kind: \"record\", key: \"identify\", allowed: [\"email\", \"phone_number\", \"external_id\"] },\n ],\n pinterest: [PAYLOAD(\"eventParams\"), { kind: \"record\", key: \"enhancedMatching\", allowed: [\"em\", \"hashed_maids\"] }],\n googleAds: [\n { kind: \"record\", key: \"enhancedConversions\", allowed: ADS_MATCHING },\n { kind: \"scalar\", keys: [\"value\", \"currency\", \"transactionId\"] },\n ],\n linkedinInsightTag: [\n { kind: \"record\", key: \"userMatching\", allowed: [\"em\", \"fn\", \"ln\", \"title\", \"companyName\", \"country\"] },\n { kind: \"scalar\", keys: [\"value\", \"currency\"] },\n ],\n twitterAds: [\n { kind: \"record\", key: \"userMatching\", allowed: [\"em\", \"ph\"] },\n { kind: \"scalar\", keys: [\"value\", \"currency\"] },\n ],\n};\n\n/**\n * The types that genuinely address nothing, and why — so the refusal can say it.\n *\n * Exported for `flow-catalog-coverage.test.ts`, which asserts that this and\n * `MAPPING_SLOTS` between them classify EVERY side-effect type the catalog\n * defines, exactly once. That gate is the reason a claim about this file can be\n * trusted: `email` used to live here, moved to `MAPPING_SLOTS` when `body.fields`\n * became mappable, and left behind prose elsewhere still describing it as\n * unmappable. A type in neither list refuses with \"not a side-effect type this\n * workspace's flow engine defines\" — which is false, and unanswerable.\n */\nexport const UNMAPPABLE: Record<string, string> = {\n hotjar: \"A Hotjar event carries only its name.\",\n clarity: \"A Clarity custom tag carries only its name.\",\n};\n\n/** How a slot is named everywhere the agent sees it — qualified when it is nested. */\nfunction slotName(shape: MappingShape): string {\n if (shape.kind === \"scalar\") return shape.keys.join(\"/\");\n if (shape.kind === \"list\" && shape.under) return `${shape.under}.${shape.key}`;\n return shape.key;\n}\n\n/**\n * The slot to map into: the one named by `--into`, or the first.\n * Refuses rather than guessing between a real slot and a name that is not one.\n */\nexport function shapeFor(type: string, into?: string): MappingShape {\n const slots = MAPPING_SLOTS[type];\n if (!slots) {\n const why = UNMAPPABLE[type];\n throw new MappingError(\n `Side effect \"${type}\" has no mappable field.`,\n why ?? `\"${type}\" is not a side-effect type this workspace's flow engine defines.`,\n );\n }\n if (!into) return slots[0] as MappingShape;\n const chosen = slots.find((slot) =>\n slot.kind === \"scalar\"\n ? slot.keys.includes(into) || into === \"scalar\"\n : slot.key === into || slotName(slot) === into,\n );\n if (!chosen) {\n throw new MappingError(\n `\"${into}\" is not a mappable slot on a ${type} side effect.`,\n `Slots on ${type}: ${slots.map(slotName).join(\", \")}`,\n );\n }\n return chosen;\n}\n\n/**\n * Whether this slot's names come from the connected account, or from the agent.\n *\n * The distinction decides what an unconfigured destination means. A sheet\n * column, a HubSpot property, a Pipedrive field key — those exist only in an\n * account the agent cannot see, so writing them before `request_flow_input` has\n * run means inventing them, and an invented destination is valid JSON that\n * ships and drops every submission. A webhook's `payloadKeys` and a pixel's\n * `eventParams` are the opposite: the agent picks those names (or the platform\n * fixes them), so they are perfectly authorable before the endpoint is set.\n */\nexport function namesComeFromAccount(shape: MappingShape): boolean {\n return shape.kind === \"list\" && shape.addressedBy !== \"key\";\n}\n\n/**\n * What can be mapped into a side effect, and — the part that is not guessable —\n * where the legal keys on the LEFT of each mapping come from.\n *\n * There are three different answers, and reading the wrong one produces a\n * mapping that is valid JSON and silently delivers nothing:\n *\n * closed the platform fixes the names (`em`, `ph`, `postal_code`). Anything\n * else is a typo, and they are listed here in full.\n * yours the keys are whatever the receiving system expects — a Make\n * scenario's field names, a GA4 parameter. Nobody but the user knows\n * them, but nothing validates them either, so you write what you were told.\n * account a sheet column, a HubSpot property, a Pipedrive field key. These\n * exist only in the connected account, so they come back from\n * `request_flow_input` and cannot be known before it runs.\n *\n * Exposed so the discovery path is a plain read rather than a wrong guess: the\n * agent used to learn a closed set only by naming a key outside it.\n */\nexport type SlotDescription = {\n slot: string;\n addressedBy: string;\n keysFrom: \"closed\" | \"yours\" | \"account\";\n keys?: readonly string[];\n note: string;\n /** How to get the per-mapping field types, for a slot that stores one. */\n fieldTypes?: string;\n};\n\nexport function describeSlots(type: string): SlotDescription[] {\n return (MAPPING_SLOTS[type] ?? []).map((shape) => {\n if (shape.kind === \"record\") {\n return {\n slot: shape.key,\n addressedBy: \"one of a closed set\",\n keysFrom: \"closed\" as const,\n keys: shape.allowed,\n note: `${type} defines these names; any other is refused.`,\n };\n }\n if (shape.kind === \"scalar\") {\n return {\n slot: shape.keys.join(\"/\"),\n addressedBy: \"the field's own name\",\n keysFrom: \"closed\" as const,\n keys: shape.keys,\n note: \"Each is a single value on the side effect, mapped like any other.\",\n };\n }\n if (shape.addressedBy === \"key\") {\n return {\n slot: slotName(shape),\n addressedBy: \"key\",\n keysFrom: \"yours\" as const,\n note: \"You name these — they are what the receiving system expects. Ask the user if you do not know them.\",\n };\n }\n return {\n slot: slotName(shape),\n addressedBy: shape.addressedBy,\n keysFrom: \"account\" as const,\n note: \"These live in the connected account. Read them off the request_flow_input result; they cannot be guessed.\",\n ...(shape.needsFieldType ? { fieldTypes: shape.fieldTypeSource ?? FIELD_TYPE_FROM_INPUT } : {}),\n };\n });\n}\n\n/** Where a per-mapping field type comes from when the shape names no better source. */\nconst FIELD_TYPE_FROM_INPUT =\n \"Each mapping stores a field type. They come back from request_flow_input with the field list — write one on the LEFT: <field>:<fieldType>=<value>.\";\n\n/** Every slot a type offers, for the hint that tells the agent what else it could map. */\nexport function otherSlots(type: string, used: MappingShape): string[] {\n return (MAPPING_SLOTS[type] ?? []).filter((slot) => slot !== used).map(slotName);\n}\n\nfunction isRecord(value: unknown): value is AnyRecord {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * An AutofillDoc as the `--map` value it came from: a mention by its label, a\n * literal quoted, parts joined by `+`. The space the editor puts after a lone\n * mention is not part of the value; a space a compound value spells out is. A\n * hand-written value that is not a document reads as what it holds, never fails.\n */\nfunction valueText(doc: unknown): string {\n const blocks = isRecord(doc) && Array.isArray(doc.content) ? doc.content : [];\n const parts = blocks.flatMap((block) =>\n isRecord(block) && Array.isArray(block.content) ? block.content.filter(isRecord) : [],\n );\n const spacer = parts[1];\n const loneMention =\n parts.length === 2 &&\n parts[0]?.type !== \"text\" &&\n spacer?.type === \"text\" &&\n String(spacer.text ?? \"\").trim() === \"\";\n return (loneMention ? parts.slice(0, 1) : parts)\n .map((part) => {\n if (part.type === \"text\") return JSON.stringify(String(part.text ?? \"\"));\n const attrs = isRecord(part.attrs) ? part.attrs : {};\n return String(attrs.label ?? attrs.id ?? \"?\");\n })\n .join(\" + \");\n}\n\n/**\n * Values a side effect sends that `--map` does not write, read back all the\n * same: a read that skipped them said \"Nothing mapped\" over a mapped value.\n */\nconst READ_ONLY_SLOTS: Record<string, { records: readonly string[]; scalars: readonly string[] }> = {\n posthog: { records: [\"setProperties\", \"setOnceProperties\", \"groups\"], scalars: [\"distinctIdField\"] },\n};\n\nfunction readOnlyMapping(sideEffect: AnyRecord): string[] {\n const slots = READ_ONLY_SLOTS[String(sideEffect.type ?? \"\")];\n if (!slots) return [];\n const records = slots.records.flatMap((key) => {\n const record = sideEffect[key];\n if (!isRecord(record)) return [];\n return Object.entries(record).flatMap(([slot, value]) =>\n value != null ? [`${key}.${slot} ← ${valueText(value)}`] : [],\n );\n });\n const scalars = slots.scalars.flatMap((key) =>\n sideEffect[key] != null ? [`${key} ← ${valueText(sideEffect[key])}`] : [],\n );\n return [...records, ...scalars];\n}\n\n/**\n * What a side effect sends today, one `destination ← source` line per mapped\n * value, in every slot it has. Empty when nothing is mapped.\n */\nexport function currentMapping(sideEffect: AnyRecord): string[] {\n const writable = (MAPPING_SLOTS[String(sideEffect.type ?? \"\")] ?? []).flatMap((shape) => {\n if (shape.kind === \"scalar\") {\n return shape.keys.flatMap((key) => (sideEffect[key] != null ? [`${key} ← ${valueText(sideEffect[key])}`] : []));\n }\n if (shape.kind === \"record\") {\n const record = isRecord(sideEffect[shape.key]) ? (sideEffect[shape.key] as AnyRecord) : {};\n return shape.allowed.flatMap((slot) =>\n record[slot] != null ? [`${shape.key}.${slot} ← ${valueText(record[slot])}`] : [],\n );\n }\n return existingEntries(shape, sideEffect).map(\n (entry) => `${entryAddress(shape, entry) ?? \"?\"} ← ${valueText(entry.value)}`,\n );\n });\n return [...writable, ...readOnlyMapping(sideEffect)];\n}\n\n/**\n * One destination property as the connected account describes it.\n *\n * The point of carrying this is that `fieldType` stops being something the agent\n * has to know. It is a destination-side fact — HubSpot's own answer for that\n * property — so the only two honest ways to fill it are to read it off the\n * account or to be told it explicitly. Guessing a plausible-looking one is the\n * third option, and it is the one that ships: the key the engine builds is\n * `<objectTypeId>.<fieldType>.<fieldName>`, and a wrong `fieldType` on a date\n * property silently skips the YYYY-MM-DD coercion HubSpot requires.\n */\nexport type DestinationField = {\n fieldType: string;\n objectTypeId?: string;\n /**\n * The name the mapping is stored under, when the catalog also answers to\n * other names for it (an ActiveCampaign custom field is stored by id but known\n * by its personalization tag and label). Absent ⇒ the name looked up is the\n * one stored, and it must match exactly.\n */\n fieldKey?: string;\n /** How people know the field, for the refusal that lists what the destination has. */\n label?: string;\n /** The name to write it by, when that is not `fieldKey` alone (`deal.title`). */\n listedAs?: string;\n};\n\n/** Kinds whose one entry is also reachable by the bare word (`tags`, `lists`, `note`). */\nconst ACTIVECAMPAIGN_BARE_KINDS = new Set([\"standard\", \"custom\", \"tags\", \"lists\", \"automations\", \"note\"]);\n\n/**\n * An ActiveCampaign account's field list, as `buildFieldMapping` reads it.\n *\n * Every field is reachable as `<fieldType>.<fieldKey>` (`deal.title`,\n * `account.name`, `event.name`), the name the mapping is merged and pruned by.\n * Contact fields and the single-entry kinds also answer to the bare key\n * (`email`, `tags`, `lists`, `note`). A custom field is stored by its id (\"12\"),\n * which nobody recognises, so it also answers to its personalization tag (with\n * or without the `%`) and to its label, case-insensitively — and each of those\n * is normalised back to the id, because the id is what the backend sends.\n */\n/** A custom field's personalization tag and label as further names for it, never shadowing a field's own key. */\nfunction addCustomAliases(catalog: Map<string, DestinationField>, field: ActiveCampaignField): void {\n const entry = catalog.get(`custom.${field.fieldKey}`);\n if (!entry) return;\n const tag = field.perstag?.replaceAll(\"%\", \"\");\n if (tag) catalog.set(`custom.${tag.toUpperCase()}`, entry);\n const aliases = [field.perstag, tag, field.label].filter((alias): alias is string => !!alias);\n for (const alias of aliases) {\n const key = alias.trim().toLowerCase();\n if (key && !catalog.has(key)) catalog.set(key, entry);\n }\n}\n\nexport function activeCampaignDestinationFields(\n fields: readonly ActiveCampaignField[],\n): ReadonlyMap<string, DestinationField> {\n const catalog = new Map<string, DestinationField>();\n for (const field of fields) {\n const qualified = `${field.fieldType}.${field.fieldKey}`;\n const bare = ACTIVECAMPAIGN_BARE_KINDS.has(field.fieldType);\n const entry: DestinationField = {\n fieldType: field.fieldType,\n fieldKey: field.fieldKey,\n label: field.label,\n ...(bare ? {} : { listedAs: qualified }),\n };\n catalog.set(qualified, entry);\n if (bare && !catalog.has(field.fieldKey)) {\n catalog.set(field.fieldKey, entry);\n }\n }\n for (const field of fields) {\n if (field.fieldType === \"custom\") addCustomAliases(catalog, field);\n }\n return catalog;\n}\n\n/**\n * A custom field named by a personalization tag the account does not have yet\n * (`custom.UTM_SOURCE`) — typically one staged in this Session, created at\n * Publish. Stored by the tag and resolved to the field's id when a lead is sent;\n * until the field exists that value is left empty and the delivery says so.\n */\nexport function activeCampaignUnlistedField(destField: string): DestinationField | undefined {\n const match = /^custom\\.%?([A-Za-z][A-Za-z0-9_]*)%?$/.exec(destField.trim());\n if (!match?.[1]) return undefined;\n const tag = match[1].toUpperCase();\n return { fieldType: \"custom\", fieldKey: tag, label: `%${tag}%` };\n}\n\n/** A mapped value's text when it is only text — no variable, so it can be checked now. */\nfunction literalText(value: unknown): string | null {\n const paragraphs = ((value ?? {}) as { content?: { content?: { type?: string; text?: string }[] }[] }).content;\n if (!Array.isArray(paragraphs)) return null;\n const inline = paragraphs.flatMap((paragraph) => paragraph.content ?? []);\n if (inline.length === 0 || inline.some((node) => node.type !== \"text\")) return null;\n return inline.map((node) => node.text ?? \"\").join(\"\");\n}\n\nfunction optionListing(options: readonly ActiveCampaignOption[]): string {\n return options.length > 0 ? options.map((option) => `${option.name} (${option.id})`).join(\", \") : \"none\";\n}\n\n/** Each literal name in a comma-separated value the account has no option for. */\nfunction unknownNames(value: unknown, options: readonly ActiveCampaignOption[]): string[] {\n const text = literalText(value);\n if (text === null) return [];\n return splitActiveCampaignNames(text).filter((name) => !findActiveCampaignOption(options, name));\n}\n\ntype Mapped = (type: string, key: string) => AnyRecord | undefined;\n\nfunction namedOptionHints(mapped: Mapped, catalog: ActiveCampaignCatalog): string[] {\n const hints: string[] = [];\n const unknown = (type: string, key: string, options: readonly ActiveCampaignOption[], noun: string) => {\n for (const name of unknownNames(mapped(type, key)?.value, options)) {\n hints.push(\n `ActiveCampaign has no ${noun} called \"${name}\", so that part will be skipped. It has: ${optionListing(options)}.`,\n );\n }\n };\n unknown(\"lists\", \"lists\", catalog.lists, \"list\");\n unknown(\"automations\", \"automations\", catalog.automations, \"automation\");\n if (mapped(\"automations\", \"automations\") && catalog.automations.length === 0) {\n hints.push(\n \"This ActiveCampaign account has no automations. They can only be built in ActiveCampaign — ask the user to create one.\",\n );\n }\n unknown(\"deal\", \"pipeline\", catalog.pipelines, \"pipeline\");\n unknown(\"deal\", \"owner\", catalog.users, \"user\");\n return hints;\n}\n\n/**\n * The tags a value adds for certain: each comma-separated piece of its text\n * that no variable touches (`\"quote-request, withbaker-\"+page_path` adds\n * `quote-request` for sure; `withbaker-` is only the start of a tag).\n */\nfunction literalTags(value: unknown): string[] {\n const paragraphs = ((value ?? {}) as { content?: { content?: { type?: string; text?: string }[] }[] }).content;\n if (!Array.isArray(paragraphs)) return [];\n const inline = paragraphs.flatMap((paragraph) => paragraph.content ?? []);\n return inline.flatMap((node, index) => {\n if (node.type !== \"text\") return [];\n const pieces = (node.text ?? \"\").split(\",\");\n const touchesBefore = index > 0 && inline[index - 1]?.type !== \"text\";\n const touchesAfter = index < inline.length - 1 && inline[index + 1]?.type !== \"text\";\n return pieces\n .filter((_, piece) => !(piece === 0 && touchesBefore) && !(piece === pieces.length - 1 && touchesAfter))\n .map((piece) => piece.trim())\n .filter((piece) => piece !== \"\");\n });\n}\n\n/** An automation the Form enrolls a lead in AND starts by tagging them: the lead runs it twice. */\nfunction doubleEnrollmentHints(mapped: Mapped, catalog: ActiveCampaignCatalog): string[] {\n const enrolled = literalText(mapped(\"automations\", \"automations\")?.value);\n if (enrolled === null) return [];\n const tags = new Set(literalTags(mapped(\"tags\", \"tags\")?.value).map((tag) => tag.toLowerCase()));\n return splitActiveCampaignNames(enrolled).flatMap((name) => {\n const automation = catalog.automations.find((option) => findActiveCampaignOption([option], name));\n const tag = automation?.startTags.find((start) => tags.has(start.toLowerCase()));\n return automation && tag\n ? [\n `\"${automation.name}\" starts when the tag \"${tag}\" is added, and this Form adds that tag AND enrolls the lead in it — every lead would run it twice (ActiveCampaign's \"runs once\" does not stop a direct enrollment). Keep one: drop \"${automation.name}\" from automations, or drop the tag.`,\n ]\n : [];\n });\n}\n\nfunction dealHints(fieldMapping: readonly AnyRecord[], mapped: Mapped, catalog: ActiveCampaignCatalog): string[] {\n if (!fieldMapping.some((entry) => entry.fieldType === \"deal\")) return [];\n const hints: string[] = [];\n if (!mapped(\"deal\", \"title\") && !mapped(\"deal\", \"pipeline\")) {\n hints.push(\"No deal is created without deal.title or deal.pipeline — map one of them too.\");\n }\n if (catalog.pipelines.length === 0) {\n hints.push(\"This ActiveCampaign account has no deal pipeline, so no deal can be created until one exists.\");\n }\n const pipelineText = literalText(mapped(\"deal\", \"pipeline\")?.value);\n const pipeline = pipelineText ? findActiveCampaignOption(catalog.pipelines, pipelineText) : catalog.pipelines[0];\n if (!pipeline) return hints;\n for (const name of unknownNames(mapped(\"deal\", \"stage\")?.value, pipeline.stages)) {\n hints.push(\n `The pipeline \"${pipeline.name}\" has no stage called \"${name}\", so deals land in its first stage. Its stages: ${optionListing(pipeline.stages)}.`,\n );\n }\n return hints;\n}\n\nfunction attachmentHints(mapped: Mapped, catalog: ActiveCampaignCatalog): string[] {\n const hints: string[] = [];\n if (mapped(\"account\", \"url\") && !mapped(\"account\", \"name\")) {\n hints.push(\"account.url is only sent with account.name — map the company name too.\");\n }\n if (mapped(\"event\", \"data\") && !mapped(\"event\", \"name\")) hints.push(\"event.data is only sent with event.name.\");\n if (mapped(\"event\", \"name\") && !catalog.eventKeySaved) {\n hints.push(\n \"Event tracking is off on this ActiveCampaign account, so the event will be skipped: ask the user to switch event tracking on in ActiveCampaign (Settings → Tracking → Event Tracking). There is nothing to paste — Baker reads the account's event key itself once it is on. Until then only the event is skipped; the contact and the rest still arrive.\",\n );\n }\n return hints;\n}\n\nfunction unlistedCustomHints(fieldMapping: readonly AnyRecord[], catalog: ActiveCampaignCatalog): string[] {\n const listedIds = new Set(catalog.fields.flatMap((field) => (field.fieldType === \"custom\" ? [field.fieldKey] : [])));\n return fieldMapping.flatMap((entry) => {\n const key = typeof entry.fieldKey === \"string\" ? entry.fieldKey : \"\";\n if (entry.fieldType !== \"custom\" || /^\\d+$/.test(key) || listedIds.has(key)) return [];\n return [\n `custom.${key} is not on the ActiveCampaign account yet. Stage the field (\\`baker activecampaign stage field\\`) so it exists at Publish; until it does, that value is left empty on each contact.`,\n ];\n });\n}\n\n/**\n * What an ActiveCampaign mapping would fail to deliver, said while it can still\n * be fixed: a list, automation, pipeline, stage or owner the account does not\n * have (checked when the value is plain text), a deal nothing creates, an\n * account website or event details with nothing to attach to, an event with no\n * event key on the connection, and custom fields known only by a tag that is\n * not on the account yet. Warnings, not refusals: each one costs only its own\n * step — the contact still arrives.\n */\nexport function activeCampaignMappingHints(\n fieldMapping: readonly AnyRecord[],\n catalog: ActiveCampaignCatalog,\n): string[] {\n const mapped: Mapped = (type, key) =>\n fieldMapping.find((entry) => entry.fieldType === type && entry.fieldKey === key);\n return [\n ...namedOptionHints(mapped, catalog),\n ...doubleEnrollmentHints(mapped, catalog),\n ...dealHints(fieldMapping, mapped, catalog),\n ...attachmentHints(mapped, catalog),\n ...unlistedCustomHints(fieldMapping, catalog),\n ];\n}\n\nexport type MapOptions = {\n /** Which slot to map into, when the type has more than one. */\n into?: string | undefined;\n entity?: string | undefined;\n isCustomField?: boolean | undefined;\n objectType?: string | undefined;\n /**\n * The destination's own field catalog, keyed by destination field name, when\n * the caller was able to read it. Present ⇒ a per-mapping field type is\n * derived rather than demanded, and a name that is not on the destination is\n * refused with the ones that are.\n */\n destinationFields?: ReadonlyMap<string, DestinationField> | undefined;\n /**\n * A destination field `destinationFields` does not list but the destination\n * still accepts by that name, or undefined to refuse it as unknown.\n */\n unlistedField?: ((destField: string) => DestinationField | undefined) | undefined;\n /**\n * Drop the mappings whose destination field is no longer on the account.\n *\n * The repair for a deleted CRM property, and the reason it is not `--replace`:\n * HubSpot refuses the WHOLE submission when it names a field it does not\n * have, so a Form with one dead mapping delivers nothing — and the only tool\n * for removing one was `--replace`, which drops everything the call does not\n * name. Repairing seven dead mappings that way meant first reconstructing the\n * other twenty correctly, from a file the agent had to read and re-emit, or\n * silently deleting them.\n *\n * This removes exactly the entries the destination cannot accept and touches\n * nothing else, so the safe move and the small move are the same move.\n * Requires `destinationFields`: without the account's own catalog \"missing\n * from the destination\" has no answer, and the available wrong answer is\n * \"drop them all\".\n */\n pruneMissing?: boolean | undefined;\n /**\n * Write the slot exactly as given, dropping every mapping already in it.\n *\n * Off by default, because the default has to be the one that cannot lose\n * work. A mapping accumulates — read a destination, map what you can name,\n * come back for the rest — and a call that quietly replaced the slot turned\n * \"add a ninth field\" into \"delete eight\". The reverse mistake is visible\n * the moment you look: an entry you meant to remove is still listed.\n *\n * `--from` is the one place replacing is the natural reading, since a\n * mapping file states the whole mapping — so it can set `\"replace\": true`.\n */\n replace?: boolean | undefined;\n};\n\ntype Spec = { raw: string; destField: string; fieldType?: string | undefined; expression: string };\n\n/**\n * `<destField>[:<fieldType>]=<value expression>`\n *\n * The field type sits with the destination rather than the value, for two\n * reasons: it IS a destination-side property (a HubSpot `single_line_text`, a\n * Pipedrive `varchar`), and on the right it would collide with the value\n * grammar's `field:` / `tracking:` / `global:` / `code:` prefixes.\n */\nexport function parseMapSpec(raw: string): Spec {\n const eq = raw.indexOf(\"=\");\n if (eq <= 0 || eq === raw.length - 1) {\n throw new MappingError(\n `--map \"${raw}\" must be <destField>[:<fieldType>]=<value>`,\n 'Value: a form field (`nombre`), `tracking:utm_source`, `global:Name`, `code:name`, a \"literal\", or those joined with `+`.',\n );\n }\n const left = raw.slice(0, eq).trim();\n const expression = raw.slice(eq + 1).trim();\n const colon = left.indexOf(\":\");\n const destField = (colon > 0 ? left.slice(0, colon) : left).trim();\n const fieldType = colon > 0 ? left.slice(colon + 1).trim() : \"\";\n if (!destField) throw new MappingError(`--map \"${raw}\" names no destination field.`);\n return { raw, destField, fieldType: fieldType || undefined, expression };\n}\n\nfunction sheetEntry(spec: Spec, value: AnyRecord): AnyRecord {\n if (!/^[A-Z]{1,3}$/.test(spec.destField)) {\n throw new MappingError(\n `--map \"${spec.raw}\": a Google Sheet is addressed by COLUMN, so the left side must be a column letter (A, B, … AA), got \"${spec.destField}\".`,\n \"Read the real destination back from the configured side effect first — a column letter is a guess until a spreadsheet is picked.\",\n );\n }\n return { column: spec.destField, value };\n}\n\n/**\n * The destination property this mapping addresses, when the caller read the\n * destination's own catalog.\n *\n * Refusing an unknown name is the whole reason to carry the catalog at all. A\n * destination field nothing validates is the same failure as a wrong `attrs.id`\n * on the value side: structurally valid, ships, delivers nothing forever.\n */\nfunction destinationField(spec: Spec, options: MapOptions): DestinationField | undefined {\n const catalog = options.destinationFields;\n if (!catalog) return undefined;\n const match = catalog.get(spec.destField);\n if (match) return match;\n // A case-insensitive alias only reaches an entry that names the key it is\n // stored under, so the stored name is still the destination's own spelling.\n const alias = catalog.get(spec.destField.trim().toLowerCase());\n if (alias?.fieldKey) return alias;\n const unlisted = options.unlistedField?.(spec.destField);\n if (unlisted) return unlisted;\n throw new MappingError(\n `--map \"${spec.raw}\": the destination has no field called \"${spec.destField}\".`,\n `Fields on it: ${catalogListing(catalog) || \"(none)\"}`,\n );\n}\n\n/** Each destination field once, under the name it is stored by, with its label when that says more. */\nfunction catalogListing(catalog: ReadonlyMap<string, DestinationField>): string {\n const seen = new Set<DestinationField>();\n const names: string[] = [];\n for (const [name, field] of catalog) {\n if (seen.has(field)) continue;\n seen.add(field);\n const key = field.listedAs ?? field.fieldKey ?? name;\n names.push(field.label && field.label.toLowerCase() !== key.toLowerCase() ? `${key} (${field.label})` : key);\n }\n return names.join(\", \");\n}\n\n/**\n * The per-mapping field type: taken from the destination when we can read it,\n * from the spec when we were told, and refused when neither.\n *\n * Derived first, on purpose. The type is a destination-side fact, so reading it\n * off the account is both less work for the caller and MORE accurate than being\n * told — an explicit `:type` is kept as the override for a destination this\n * command cannot reach.\n */\nfunction fieldTypeFor(type: string, shape: ListShape, spec: Spec, known: DestinationField | undefined): string {\n const resolved = spec.fieldType ?? known?.fieldType;\n if (resolved && shape.fieldTypes && !shape.fieldTypes.includes(resolved)) {\n throw new MappingError(\n `--map \"${spec.raw}\": \"${resolved}\" is not a ${type} field type — expected one of: ${shape.fieldTypes.join(\", \")}.`,\n shape.fieldTypeSource,\n );\n }\n if (resolved) return resolved;\n throw new MappingError(\n `--map \"${spec.raw}\": ${type} stores a field type per mapping, and \"${spec.destField}\" has none — write it on the left: <field>:<fieldType>=<value>.`,\n shape.fieldTypeSource ?? FIELD_TYPE_FROM_INPUT,\n );\n}\n\n/**\n * The two answers a CRM shape needs beyond the field type, and will not default.\n *\n * Each decides whether the write lands or is accepted and dropped: which object\n * it lands on, and whether the key is looked up as a custom field. Both are\n * destination-side facts that come back from `request_flow_input`, so refusing\n * is the only honest response to their absence.\n *\n * The entity check is skipped for a shape that declares no `entities` —\n * `hubspotForm` addresses its object through `objectTypeId`, which rides on each\n * mapping rather than on the call.\n */\nfunction assertCrmOptions(type: string, shape: ListShape, options: MapOptions): void {\n const entities = shape.entities;\n if (entities) {\n if (!options.entity) {\n throw new MappingError(\n `${type} addresses a specific object, so --entity is required (one of: ${entities.join(\", \")}).`,\n \"Which object a value lands on is a destination-side fact — read it back from the configured side effect, do not assume.\",\n );\n }\n if (!entities.includes(options.entity)) {\n throw new MappingError(\n `--entity \"${options.entity}\" is not valid for ${type} — expected one of: ${entities.join(\", \")}.`,\n );\n }\n }\n if (shape.needsIsCustom && options.isCustomField === undefined) {\n throw new MappingError(\n `${type} looks a key up differently for custom and standard fields, so pass --custom or --standard.`,\n \"Mapping a custom field as standard (or the reverse) is accepted and then dropped. The field list from request_flow_input says which each one is.\",\n );\n }\n}\n\nfunction buildEntry(type: string, shape: ListShape, spec: Spec, value: AnyRecord, options: MapOptions): AnyRecord {\n if (shape.key === \"columnMapping\") {\n return sheetEntry(spec, value);\n }\n\n // The PayloadKey family is the plain shape: a name and a value, nothing else\n // to get wrong. Refuse the CRM flags here rather than writing a record with\n // keys the engine does not read.\n if (shape.addressedBy === \"key\") {\n if (spec.fieldType) {\n throw new MappingError(\n `--map \"${spec.raw}\": a ${type} ${shape.key} entry is just a name and a value — it takes no field type.`,\n `Write it as ${spec.destField}=${spec.expression}`,\n );\n }\n return { key: spec.destField, value };\n }\n\n const known = destinationField(spec, options);\n\n if (type === \"hubspotForm\") {\n // `objectTypeId` and `fieldType` are both HubSpot's answer, not ours. The\n // engine concatenates them into `<objectTypeId>.<fieldType>.<fieldName>`,\n // which is the key the dashboard's own picker writes — so a mapping built\n // here and one built there have to be indistinguishable, or HubSpot's\n // \"add the required fields\" list offers a field that is already mapped.\n // `0-1` (contact) is the fallback the engine itself uses for a key it\n // cannot split, so it is the one default that changes no behaviour.\n return {\n objectTypeId: options.objectType ?? known?.objectTypeId ?? \"0-1\",\n fieldType: fieldTypeFor(type, shape, spec, known),\n fieldName: spec.destField,\n value,\n };\n }\n\n // Everything left is the CRM `fieldMapping` family, and every one of those\n // records types `fieldType` as required — so it is resolved, never optional.\n assertCrmOptions(type, shape, options);\n return {\n ...(shape.entities ? { entityType: options.entity } : {}),\n fieldType: fieldTypeFor(type, shape, spec, known),\n ...(shape.needsIsCustom ? { isCustomField: options.isCustomField } : {}),\n [shape.addressedBy]: known?.fieldKey ?? spec.destField,\n value,\n };\n}\n\n/**\n * What a built mapping is, and where it goes.\n *\n * `patch` is spliced onto the side effect as-is, so a list slot yields\n * `{ payloadKeys: [...] }` and a record slot yields the whole record with the\n * mapped slots filled and the rest left `null`. Merging rather than replacing\n * matters for a record: every key is required by the engine, so writing only\n * the mapped ones would produce a side effect that no longer typechecks.\n *\n * `kept` is how many mappings were already in the slot and survive this call.\n * It exists so the response can say so out loud — a number that moves without\n * being named is the shape of every silent-loss bug this file is about.\n */\nexport type BuiltMapping = {\n key: string;\n count: number;\n kept: number;\n /** Destination names removed by `pruneMissing`, named so the caller can print each. */\n dropped: string[];\n patch: AnyRecord;\n};\n\n/**\n * Splice a list into the object that owns it, keeping that object's other keys.\n *\n * `email` is the one nested case, and the key it must not lose is `body.format`:\n * the engine reads `{ format: \"json\", fields }` as a discriminated union, so a\n * patch that replaced `body` wholesale would drop the discriminator and the\n * side effect would stop typechecking.\n */\nfunction listPatch(shape: ListShape, sideEffect: AnyRecord, entries: AnyRecord[]): AnyRecord {\n if (!shape.under) return { [shape.key]: entries };\n const owner = (sideEffect[shape.under] ?? {}) as AnyRecord;\n return { [shape.under]: { ...owner, [shape.key]: entries } };\n}\n\n/** The list already in a slot, skipping anything that is not a record to merge with. */\nfunction existingEntries(shape: ListShape, sideEffect: AnyRecord): AnyRecord[] {\n const owner = shape.under ? sideEffect[shape.under] : sideEffect;\n if (!owner || typeof owner !== \"object\") return [];\n const list = (owner as AnyRecord)[shape.key];\n if (!Array.isArray(list)) return [];\n return list.filter((entry): entry is AnyRecord => Boolean(entry) && typeof entry === \"object\");\n}\n\n/**\n * Merge new mappings into the ones already in the slot, addressed by name.\n *\n * A mapping is built up over several calls in practice — you configure the\n * destination, map the fields you can name, read the rest back, map those —\n * so replacing the slot on every call deleted the earlier ones with nothing\n * said. That is the same failure the whole command exists to prevent\n * (a mapping that is valid, ships, and delivers nothing), one level up.\n *\n * Address, not position: `shape.addressedBy` is the key that names the\n * destination (`key`, `column`, `fieldName`, `fieldKey`, `fieldId`), so\n * re-mapping the same destination overwrites it IN PLACE and a new one is\n * appended. Order therefore stays stable across calls, which matters for a\n * Google Sheet, where the column order is the row the client reads.\n *\n * An existing entry with no address at all is kept as-is: it is not something\n * this call can be addressing, and dropping it would be the silent loss again.\n *\n * `kept` counts the entries that were already there and this call did not touch,\n * so it is derived from what happened rather than from the spec count — two\n * `--map` flags naming one destination are one written mapping, not two.\n */\n/** The name an entry is merged and pruned by — see {@link ListShape.qualifiedByFieldType}. */\nfunction entryAddress(shape: ListShape, entry: AnyRecord): string | null {\n const value = entry[shape.addressedBy];\n if (typeof value !== \"string\") return null;\n return shape.qualifiedByFieldType && typeof entry.fieldType === \"string\" ? `${entry.fieldType}.${value}` : value;\n}\n\nfunction mergeEntries(\n shape: ListShape,\n existing: AnyRecord[],\n incoming: AnyRecord[],\n): { entries: AnyRecord[]; written: number; kept: number } {\n const address = (entry: AnyRecord) => entryAddress(shape, entry);\n const entries = [...existing];\n const overwritten = new Set<number>();\n for (const entry of incoming) {\n const name = address(entry);\n const at = name === null ? -1 : entries.findIndex((candidate) => address(candidate) === name);\n if (at === -1) {\n entries.push(entry);\n continue;\n }\n entries[at] = entry;\n if (at < existing.length) overwritten.add(at);\n }\n const kept = existing.length - overwritten.size;\n return { entries, written: entries.length - kept, kept };\n}\n\n/**\n * An email's mapped keys exist only in its JSON body shape.\n *\n * `{ format: \"body\", content: <AutofillDoc> }` is one written message, not named\n * keys — mapping into it would produce a `fields` array the engine never reads.\n * Refuse rather than switch the format: which of the two an email sends is the\n * agent's decision about the notification, not this command's to make.\n */\nfunction assertMappableOwner(type: string, shape: ListShape, sideEffect: AnyRecord): void {\n if (shape.under !== \"body\") return;\n const format = ((sideEffect.body ?? {}) as AnyRecord).format;\n if (format !== undefined && format !== \"json\") {\n throw new MappingError(\n `This ${type} side effect sends \\`body.format: \"${String(format)}\"\\`, which is one written message rather than named keys.`,\n 'Set `body` to `{ \"format\": \"json\", \"fields\": [] }` first if you want mapped keys, or write the message in `body.content` and map nothing.',\n );\n }\n}\n\nfunction buildList(\n tree: AnyRecord,\n type: string,\n shape: ListShape,\n sideEffect: AnyRecord,\n specs: string[],\n options: MapOptions,\n): BuiltMapping {\n assertMappableOwner(type, shape, sideEffect);\n const incoming = specs.map((raw) => {\n const spec = parseMapSpec(raw);\n return buildEntry(type, shape, spec, buildValueDoc(tree, spec.expression), options);\n });\n const present = options.replace === true ? [] : existingEntries(shape, sideEffect);\n const { kept: existing, dropped } = pruneAbsent(shape, present, options);\n const { entries, written, kept } = mergeEntries(shape, existing, incoming);\n return { key: slotName(shape), count: written, kept, dropped, patch: listPatch(shape, sideEffect, entries) };\n}\n\n/**\n * Split the mappings already in the slot into the ones the destination still\n * has and the ones it does not.\n *\n * An entry with no address at all is kept, for the same reason `mergeEntries`\n * keeps it: it is not something this call can be addressing, and dropping it\n * would be the silent loss the whole module exists to prevent.\n */\nfunction pruneAbsent(\n shape: ListShape,\n existing: AnyRecord[],\n options: MapOptions,\n): { kept: AnyRecord[]; dropped: string[] } {\n if (options.pruneMissing !== true) return { kept: existing, dropped: [] };\n\n const catalog = options.destinationFields;\n if (!catalog) {\n throw new MappingError(\n \"--prune-missing needs the destination's own field list, and it could not be read.\",\n \"Name the destination so its fields can be read — --hubspot-form <formGuid> for HubSpot (an ActiveCampaign side effect is read automatically). `baker flows show <slug>` names the side effect and returns the request_flow_input call that carries the guid.\",\n );\n }\n\n const kept: AnyRecord[] = [];\n const dropped: string[] = [];\n for (const entry of existing) {\n const name = entryAddress(shape, entry);\n if (name === null || catalog.has(name)) {\n kept.push(entry);\n continue;\n }\n dropped.push(name);\n }\n return { kept, dropped };\n}\n\nfunction buildRecord(\n tree: AnyRecord,\n type: string,\n shape: RecordShape,\n sideEffect: AnyRecord,\n specs: string[],\n options: MapOptions,\n): BuiltMapping {\n const existing = (options.replace === true ? {} : (sideEffect[shape.key] ?? {})) as AnyRecord;\n const record: AnyRecord = Object.fromEntries(shape.allowed.map((slot) => [slot, existing[slot] ?? null]));\n const filledBefore = shape.allowed.filter((slot) => record[slot] != null);\n const written = new Set<string>();\n for (const raw of specs) {\n const spec = parseMapSpec(raw);\n if (!shape.allowed.includes(spec.destField)) {\n throw new MappingError(\n `\"${spec.destField}\" is not a slot in ${shape.key} on a ${type} side effect.`,\n `${shape.key} slots: ${shape.allowed.join(\", \")}`,\n );\n }\n if (spec.fieldType) {\n throw new MappingError(`--map \"${spec.raw}\": a ${shape.key} slot takes no field type.`);\n }\n record[spec.destField] = buildValueDoc(tree, spec.expression);\n written.add(spec.destField);\n }\n return {\n key: shape.key,\n count: written.size,\n kept: filledBefore.filter((slot) => !written.has(slot)).length,\n dropped: [],\n patch: { [shape.key]: record },\n };\n}\n\nfunction buildScalar(\n tree: AnyRecord,\n type: string,\n shape: ScalarShape,\n sideEffect: AnyRecord,\n specs: string[],\n options: MapOptions,\n): BuiltMapping {\n // `--replace` means the same thing here as everywhere else: the slot ends up\n // exactly what was passed. Each key is typed `AutofillDoc | null`, so the\n // ones this call did not name are cleared rather than left standing.\n const patch: AnyRecord = options.replace === true ? Object.fromEntries(shape.keys.map((key) => [key, null])) : {};\n const written = new Set<string>();\n for (const raw of specs) {\n const spec = parseMapSpec(raw);\n if (!shape.keys.includes(spec.destField)) {\n throw new MappingError(\n `\"${spec.destField}\" is not a mappable field on a ${type} side effect.`,\n `Mappable directly: ${shape.keys.join(\", \")}`,\n );\n }\n if (spec.fieldType) {\n throw new MappingError(`--map \"${spec.raw}\": ${spec.destField} takes no field type.`);\n }\n patch[spec.destField] = buildValueDoc(tree, spec.expression);\n written.add(spec.destField);\n }\n const kept =\n options.replace === true ? 0 : shape.keys.filter((key) => !written.has(key) && sideEffect[key] != null).length;\n return { key: shape.keys.join(\"/\"), count: written.size, kept, dropped: [], patch };\n}\n\n/**\n * Build the mapping a side effect reads, from the form's own tree.\n * Throws `MappingError` for every refusal — nothing is guessed.\n */\nexport function buildFieldMapping(\n tree: AnyRecord,\n sideEffect: AnyRecord,\n specs: string[],\n options: MapOptions = {},\n): BuiltMapping {\n const type = String(sideEffect.type ?? \"\");\n const shape = shapeFor(type, options.into);\n if (shape.kind === \"record\") return buildRecord(tree, type, shape, sideEffect, specs, options);\n if (shape.kind === \"scalar\") return buildScalar(tree, type, shape, sideEffect, specs, options);\n return buildList(tree, type, shape, sideEffect, specs, options);\n}\n"],"mappings":"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","names":["owner"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
avatarsOf
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-J47JWEHU.js";
|
|
4
4
|
import {
|
|
5
5
|
readAvatars
|
|
6
6
|
} from "./chunk-OFMFBRSL.js";
|
|
7
7
|
import {
|
|
8
8
|
readCreativeContext,
|
|
9
9
|
workspaceOfCreative
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-2KT7DG5E.js";
|
|
11
11
|
import {
|
|
12
12
|
frontmatterOf,
|
|
13
13
|
ruleTells
|
|
@@ -139,4 +139,4 @@ export {
|
|
|
139
139
|
heldRules,
|
|
140
140
|
ruleGate
|
|
141
141
|
};
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
142
|
+
//# sourceMappingURL=chunk-NQVUPVI5.js.map
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
hubspotRefusal
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4E6EZ4RL.js";
|
|
4
4
|
import {
|
|
5
5
|
collectSideEffects,
|
|
6
6
|
readFlowTree,
|
|
7
7
|
readSettings,
|
|
8
8
|
walkNodes,
|
|
9
9
|
writeFlowTree
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4JONZ6LA.js";
|
|
11
11
|
import {
|
|
12
12
|
failApi
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-OZTNA2O7.js";
|
|
14
14
|
import {
|
|
15
15
|
FLOW_AGENT_DESTINATION_KINDS,
|
|
16
16
|
FLOW_PROVIDER_TYPE
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-2J5OCFOW.js";
|
|
18
18
|
import {
|
|
19
19
|
ApiError,
|
|
20
20
|
apiPost
|
|
@@ -544,4 +544,4 @@ export {
|
|
|
544
544
|
destinationRefusal,
|
|
545
545
|
connectCommand
|
|
546
546
|
};
|
|
547
|
-
//# sourceMappingURL=chunk-
|
|
547
|
+
//# sourceMappingURL=chunk-OBVSGXTA.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
calendarDaySchema,
|
|
9
9
|
todayUtc,
|
|
10
10
|
windowTooLong
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-2J5OCFOW.js";
|
|
12
12
|
|
|
13
13
|
// ../api/src/accounts/crm-columns.ts
|
|
14
14
|
var COLUMN_HELD = 0.7;
|
|
@@ -465,4 +465,4 @@ export {
|
|
|
465
465
|
accountsCampaignsRequestSchema,
|
|
466
466
|
ACCOUNTS_NO_SETTINGS_MESSAGE
|
|
467
467
|
};
|
|
468
|
-
//# sourceMappingURL=chunk-
|
|
468
|
+
//# sourceMappingURL=chunk-OJGNQYYS.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ACTION_TEMP_ID_PREFIX
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2J5OCFOW.js";
|
|
4
4
|
import {
|
|
5
5
|
ApiError
|
|
6
6
|
} from "./chunk-QEREDRZO.js";
|
|
@@ -200,4 +200,4 @@ export {
|
|
|
200
200
|
buildListHints,
|
|
201
201
|
buildGetHints
|
|
202
202
|
};
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
203
|
+
//# sourceMappingURL=chunk-OZTNA2O7.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-KDAINT54.js";
|
|
4
4
|
import {
|
|
5
5
|
brandTokensSchema
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2J5OCFOW.js";
|
|
7
7
|
|
|
8
8
|
// src/engine/landing/lib/brand-tokens.ts
|
|
9
9
|
import { readFile } from "fs/promises";
|
|
@@ -246,4 +246,4 @@ export {
|
|
|
246
246
|
brandCommitsGradient,
|
|
247
247
|
brandCommitsCream
|
|
248
248
|
};
|
|
249
|
-
//# sourceMappingURL=chunk-
|
|
249
|
+
//# sourceMappingURL=chunk-PX2VBLV7.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fetchRunRecord
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WGD6LMRW.js";
|
|
4
4
|
import {
|
|
5
5
|
isStaticAdCanvas,
|
|
6
6
|
readRenderState
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FZ4OKE7N.js";
|
|
8
8
|
import {
|
|
9
9
|
finalOutputLabelsFromCanvas
|
|
10
10
|
} from "./chunk-EJBLF2LI.js";
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
plateFixPrompt,
|
|
18
18
|
sameTag,
|
|
19
19
|
seriesMemberAd
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-ZF5G7QTP.js";
|
|
21
21
|
import {
|
|
22
22
|
localPathParam
|
|
23
23
|
} from "./chunk-N3PASNUA.js";
|
|
@@ -927,4 +927,4 @@ export {
|
|
|
927
927
|
writeSeriesMemberCanvas,
|
|
928
928
|
seriesRunHints
|
|
929
929
|
};
|
|
930
|
-
//# sourceMappingURL=chunk-
|
|
930
|
+
//# sourceMappingURL=chunk-RNVDTUWO.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseBrandTokens
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PX2VBLV7.js";
|
|
4
4
|
|
|
5
5
|
// src/engine/brand/fonts.ts
|
|
6
6
|
import { posix } from "path";
|
|
@@ -452,4 +452,4 @@ export {
|
|
|
452
452
|
stripFontFaceBlocks,
|
|
453
453
|
upsertFontFaceCss
|
|
454
454
|
};
|
|
455
|
-
//# sourceMappingURL=chunk-
|
|
455
|
+
//# sourceMappingURL=chunk-SICI27M7.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readRenderState,
|
|
3
3
|
recordSeen
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FZ4OKE7N.js";
|
|
5
5
|
import {
|
|
6
6
|
GLOBAL_PROMPT_FILE,
|
|
7
7
|
ideaBaseline,
|
|
8
8
|
isVideoBlueprint,
|
|
9
9
|
readIdeaAnchor,
|
|
10
10
|
recordedChanges
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ZF5G7QTP.js";
|
|
12
12
|
import {
|
|
13
13
|
loadCompositionMeta
|
|
14
14
|
} from "./chunk-DWPOAU4Z.js";
|
|
@@ -188,4 +188,4 @@ export {
|
|
|
188
188
|
shownVersion,
|
|
189
189
|
shownBaseline
|
|
190
190
|
};
|
|
191
|
-
//# sourceMappingURL=chunk-
|
|
191
|
+
//# sourceMappingURL=chunk-SSEJKI43.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-DLM5OSHM.js";
|
|
13
13
|
import {
|
|
14
14
|
CREATIVE_FEEDBACK_REASON_LABELS
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2J5OCFOW.js";
|
|
16
16
|
|
|
17
17
|
// src/commands/creatives/rule-candidate.ts
|
|
18
18
|
import { createHash } from "crypto";
|
|
@@ -153,4 +153,4 @@ export {
|
|
|
153
153
|
repeatedReasons,
|
|
154
154
|
ruleCandidateHints
|
|
155
155
|
};
|
|
156
|
-
//# sourceMappingURL=chunk-
|
|
156
|
+
//# sourceMappingURL=chunk-T2MBCTLY.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
onlyCondition,
|
|
13
13
|
triggerProblem,
|
|
14
14
|
validateEventName
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2J5OCFOW.js";
|
|
16
16
|
|
|
17
17
|
// ../api/src/event-sources/hubspot.ts
|
|
18
18
|
var HUBSPOT_CONTACT_ID_VARIABLE = "id";
|
|
@@ -389,4 +389,4 @@ export {
|
|
|
389
389
|
hubspotDefaultMapping,
|
|
390
390
|
hubspotTriggerInputSchema
|
|
391
391
|
};
|
|
392
|
-
//# sourceMappingURL=chunk-
|
|
392
|
+
//# sourceMappingURL=chunk-TH4LKHWT.js.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
parseDefinitionSourceFields,
|
|
11
11
|
parseDefinitionStrategyFields,
|
|
12
12
|
prepareCanvas
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ZF5G7QTP.js";
|
|
14
14
|
import {
|
|
15
15
|
BackendClient
|
|
16
16
|
} from "./chunk-DWPOAU4Z.js";
|
|
@@ -221,4 +221,4 @@ export {
|
|
|
221
221
|
resolveCanvasPath,
|
|
222
222
|
syncDefinitionCommand
|
|
223
223
|
};
|
|
224
|
-
//# sourceMappingURL=chunk-
|
|
224
|
+
//# sourceMappingURL=chunk-TMFC2LYC.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-PILLZPNC.js";
|
|
4
4
|
import {
|
|
5
5
|
flowNodeTriggers
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2J5OCFOW.js";
|
|
7
7
|
|
|
8
8
|
// ../api/src/analytics/flowEventKeys.ts
|
|
9
9
|
function flowNodes(node, acc = []) {
|
|
@@ -54,4 +54,4 @@ export {
|
|
|
54
54
|
flowNodes,
|
|
55
55
|
flowEventKeys
|
|
56
56
|
};
|
|
57
|
-
//# sourceMappingURL=chunk-
|
|
57
|
+
//# sourceMappingURL=chunk-UGIF23QY.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
recordIdeaLines
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FZ4OKE7N.js";
|
|
4
4
|
import {
|
|
5
5
|
anchorLines,
|
|
6
6
|
readIdeaAnchor
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZF5G7QTP.js";
|
|
8
8
|
import {
|
|
9
9
|
findWorkspaceRoot
|
|
10
10
|
} from "./chunk-N3PASNUA.js";
|
|
@@ -63,4 +63,4 @@ export {
|
|
|
63
63
|
withAnchor,
|
|
64
64
|
readCreativeIdea
|
|
65
65
|
};
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
66
|
+
//# sourceMappingURL=chunk-UMTGHV5C.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-Q5DFEVLE.js";
|
|
14
14
|
import {
|
|
15
15
|
readAllRules
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-2KT7DG5E.js";
|
|
17
17
|
import {
|
|
18
18
|
IDEA_ANGLES,
|
|
19
19
|
IDEA_FORMATS,
|
|
@@ -167,4 +167,4 @@ export {
|
|
|
167
167
|
ideasReport,
|
|
168
168
|
ideasCommand
|
|
169
169
|
};
|
|
170
|
-
//# sourceMappingURL=chunk-
|
|
170
|
+
//# sourceMappingURL=chunk-UXY7V3PK.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
failApi
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OZTNA2O7.js";
|
|
4
4
|
import {
|
|
5
5
|
CREATIVE_PERFORMANCE_DEFAULT_DAYS,
|
|
6
6
|
CREATIVE_PERFORMANCE_MAX_DAYS
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2J5OCFOW.js";
|
|
8
8
|
import {
|
|
9
9
|
apiPost
|
|
10
10
|
} from "./chunk-QEREDRZO.js";
|
|
@@ -160,4 +160,4 @@ export {
|
|
|
160
160
|
parseDays,
|
|
161
161
|
performanceCommand
|
|
162
162
|
};
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
163
|
+
//# sourceMappingURL=chunk-VNRL3EF7.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
creativesRunResponseSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2J5OCFOW.js";
|
|
4
4
|
import {
|
|
5
5
|
ApiError,
|
|
6
6
|
apiPost
|
|
@@ -20,4 +20,4 @@ async function fetchRunRecord(runId, post = apiPost) {
|
|
|
20
20
|
export {
|
|
21
21
|
fetchRunRecord
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-WGD6LMRW.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
redditSearchHints,
|
|
4
4
|
redditSubredditsHints,
|
|
5
5
|
redditThreadHints
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JAZZ3HFR.js";
|
|
7
7
|
import {
|
|
8
8
|
handleResearchError,
|
|
9
9
|
writeResearchJson
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-ERSX3MKH.js";
|
|
14
14
|
import {
|
|
15
15
|
RESEARCH_REDDIT_THREAD_DEFAULT_COMMENTS
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-2J5OCFOW.js";
|
|
17
17
|
import {
|
|
18
18
|
apiPost
|
|
19
19
|
} from "./chunk-QEREDRZO.js";
|
|
@@ -294,4 +294,4 @@ export {
|
|
|
294
294
|
subredditsFromArgs,
|
|
295
295
|
redditCommand
|
|
296
296
|
};
|
|
297
|
-
//# sourceMappingURL=chunk-
|
|
297
|
+
//# sourceMappingURL=chunk-XWN2BUAD.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
X_DRAFT_BATCH_MAX,
|
|
13
13
|
xDraftOpInputSchema
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2J5OCFOW.js";
|
|
15
15
|
import {
|
|
16
16
|
ApiError,
|
|
17
17
|
apiPost
|
|
@@ -166,4 +166,4 @@ export {
|
|
|
166
166
|
requireTarget,
|
|
167
167
|
requireTargets
|
|
168
168
|
};
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-YFXF5XAT.js.map
|