@koda-sl/baker-cli 0.568.0 → 0.569.0-dev.1b455b3fe
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 -3
- package/dist/account-JREYXYNE.js +82 -0
- package/dist/account-OUKPRB7C.js +139 -0
- package/dist/account-WN5MJ5QN.js +82 -0
- package/dist/account-assets-IWJWYNQ3.js +290 -0
- package/dist/account-level-SHZBOMVV.js +612 -0
- package/dist/account-level-SHZBOMVV.js.map +1 -0
- package/dist/account-reads-GF3T25HX.js +220 -0
- package/dist/account-reads-GF3T25HX.js.map +1 -0
- package/dist/account-users-7NKBUVYA.js +65 -0
- package/dist/account-users-7NKBUVYA.js.map +1 -0
- package/dist/account-writes-IUIXIVRC.js +68 -0
- package/dist/accounts-4YRDRLHX.js +80 -0
- package/dist/accounts-HEGADQ6E.js +119 -0
- package/dist/accounts-OSVXKNSI.js +76 -0
- package/dist/accounts-SJOO4MQX.js +115 -0
- package/dist/accounts-V7EOUTNL.js +713 -0
- package/dist/actions-5LYJ3U6G.js +55 -0
- package/dist/active-entities-4KQQSMRZ.js +103 -0
- package/dist/activecampaign-CZHLHGT4.js +938 -0
- package/dist/activities-FRA33VZZ.js +75 -0
- package/dist/ad-group-writes-YQXBUA3Q.js +172 -0
- package/dist/ad-groups-NJR4ILEN.js +70 -0
- package/dist/ad-writes-TZV64CC2.js +176 -0
- package/dist/add-MZUSKY2L.js +305 -0
- package/dist/add-NAUSQKRS.js +107 -0
- package/dist/ads-A2FXTQES.js +120 -0
- package/dist/ads-PYTK3LJE.js +48 -0
- package/dist/ads-Q7DD5VXU.js +79 -0
- package/dist/adsets-ZHEVFOK4.js +182 -0
- package/dist/advertisers-HSTND4HE.js +123 -0
- package/dist/analytics-63Q3FJN4.js +447 -0
- package/dist/analytics-GLJODEIM.js +2437 -0
- package/dist/animate-EI6AYBDI.js +480 -0
- package/dist/asset-writes-MS45UKJ3.js +51 -0
- package/dist/assign-7HT3XSSN.js +80 -0
- package/dist/audience-size-DG7544D2.js +76 -0
- package/dist/audience-writes-IL64HQBS.js +328 -0
- package/dist/audience-writes-IL64HQBS.js.map +1 -0
- package/dist/audiences-2IVVS3SJ.js +280 -0
- package/dist/audiences-RN745R53.js +85 -0
- package/dist/audiences-Z2TQT35L.js +106 -0
- package/dist/audit-BIHMDO5K.js +88 -0
- package/dist/audit-ZYST7KCO.js +154 -0
- package/dist/autocomplete-5BKEMOQ3.js +114 -0
- package/dist/avatars-FQOCDWLW.js +38 -0
- package/dist/bid-pricing-JEW7T2VR.js +103 -0
- package/dist/brand-FR6BKWXN.js +22 -0
- package/dist/brief-32IXDJ4J.js +543 -0
- package/dist/businesses-HECSW3EL.js +54 -0
- package/dist/campaign-groups-LYPVIZT5.js +99 -0
- package/dist/campaign-writes-D5MM5LUH.js +168 -0
- package/dist/campaign-writes-S7A6W5V3.js +176 -0
- package/dist/campaigns-CMDF3P7Y.js +111 -0
- package/dist/campaigns-LIICP5JU.js +113 -0
- package/dist/campaigns-N72TOUQX.js +130 -0
- package/dist/campaigns-ZWJKBF3L.js +78 -0
- package/dist/canvas-3SNC3UUV.js +46 -0
- package/dist/capabilities-GL7P3SWY.js +147 -0
- package/dist/cards-RYQN5JLR.js +85 -0
- package/dist/catalog-PWAWDK42.js +66 -0
- package/dist/catalogs-2R5RV4L7.js +783 -0
- package/dist/catalogs-2R5RV4L7.js.map +1 -0
- package/dist/catalogs-SLPYHA7D.js +130 -0
- package/dist/changes-WOD4EOSN.js +167 -0
- package/dist/chatgpt-3GX4I6NH.js +47 -0
- package/dist/chats-K2WUFVCG.js +584 -0
- package/dist/check-ZSQ4EIFB.js +154 -0
- package/dist/check-ZSQ4EIFB.js.map +1 -0
- package/dist/chunk-34ARMQNL.js +197 -0
- package/dist/chunk-34MZGC2Y.js +207 -0
- package/dist/chunk-3JOGDGGP.js +24026 -0
- package/dist/chunk-3JOGDGGP.js.map +1 -0
- package/dist/chunk-46DHUWMV.js +642 -0
- package/dist/chunk-46DHUWMV.js.map +1 -0
- package/dist/chunk-4KBTW5NE.js +494 -0
- package/dist/chunk-4PAGS7QH.js +76 -0
- package/dist/chunk-53KV66ZZ.js +163 -0
- package/dist/chunk-55AX6DOP.js +86 -0
- package/dist/chunk-55AX6DOP.js.map +1 -0
- package/dist/chunk-5C4RRCKM.js +69 -0
- package/dist/chunk-5I6XOSNI.js +709 -0
- package/dist/chunk-5OE4Z7TP.js +287 -0
- package/dist/chunk-6OIKNJ7G.js +26 -0
- package/dist/chunk-6S4B67KP.js +962 -0
- package/dist/chunk-77LXZAX2.js +930 -0
- package/dist/chunk-7TVVYP7K.js +217 -0
- package/dist/chunk-7URHRPC7.js +3510 -0
- package/dist/chunk-7YMQEAGA.js +399 -0
- package/dist/chunk-A4O3JL6D.js +26 -0
- package/dist/chunk-ANRTDNPQ.js +115 -0
- package/dist/chunk-AQNTVM6S.js +1518 -0
- package/dist/chunk-BPDIY5CF.js +274 -0
- package/dist/chunk-CKHF7UXS.js +831 -0
- package/dist/chunk-CUTTTFAU.js +783 -0
- package/dist/chunk-D32EWSMB.js +150 -0
- package/dist/chunk-D55MN5IH.js +547 -0
- package/dist/chunk-DRQI2CJJ.js +138 -0
- package/dist/chunk-ESSA3AWR.js +133 -0
- package/dist/chunk-ESSA3AWR.js.map +1 -0
- package/dist/chunk-ETI6DGR2.js +312 -0
- package/dist/chunk-F3CZFUXZ.js +3187 -0
- package/dist/chunk-F3CZFUXZ.js.map +1 -0
- package/dist/chunk-FFTD7XDA.js +91 -0
- package/dist/chunk-FTKUHGTC.js +224 -0
- package/dist/chunk-GFYGVIT3.js +392 -0
- package/dist/chunk-GGXPO4NQ.js +225 -0
- package/dist/chunk-H56UJRLV.js +170 -0
- package/dist/chunk-HDMD6LXS.js +142 -0
- package/dist/chunk-HFZZKYUX.js +1320 -0
- package/dist/chunk-IAYJKH4R.js +5471 -0
- package/dist/chunk-IEPCI2EB.js +479 -0
- package/dist/chunk-IKADYUXK.js +344 -0
- package/dist/chunk-IMS53EQU.js +4277 -0
- package/dist/chunk-IMS53EQU.js.map +1 -0
- package/dist/chunk-IUX2LBW4.js +86 -0
- package/dist/chunk-IUX2LBW4.js.map +1 -0
- package/dist/chunk-J32CYEIH.js +74 -0
- package/dist/chunk-J5I3GYSJ.js +156 -0
- package/dist/chunk-JCVXKHVB.js +285 -0
- package/dist/chunk-JESSFI7R.js +468 -0
- package/dist/chunk-K4QPBXV7.js +61 -0
- package/dist/chunk-KJ3J2DYM.js +1919 -0
- package/dist/chunk-L43B2YGZ.js +2209 -0
- package/dist/chunk-L7UD57TV.js +219 -0
- package/dist/chunk-LJYXGUQ3.js +430 -0
- package/dist/chunk-LNYM4PQS.js +203 -0
- package/dist/chunk-LZR7LSYO.js +180 -0
- package/dist/chunk-LZR7LSYO.js.map +1 -0
- package/dist/chunk-MIXUMGJE.js +66 -0
- package/dist/chunk-MK4HCMEA.js +325 -0
- package/dist/chunk-MK4HCMEA.js.map +1 -0
- package/dist/chunk-MTFAG6E3.js +853 -0
- package/dist/chunk-MTFAG6E3.js.map +1 -0
- package/dist/chunk-MWJ6BCZJ.js +455 -0
- package/dist/chunk-MX5NQAK6.js +54 -0
- package/dist/chunk-MX5NQAK6.js.map +1 -0
- package/dist/chunk-O7WRA3JU.js +1902 -0
- package/dist/chunk-OADMSHME.js +334 -0
- package/dist/chunk-OLPABGH3.js +152 -0
- package/dist/chunk-ONGZKI5J.js +57 -0
- package/dist/chunk-OSZOUSK5.js +23 -0
- package/dist/chunk-PK7YNQ2T.js +454 -0
- package/dist/chunk-PN3CHL5W.js +98 -0
- package/dist/chunk-QMQSI4WA.js +89 -0
- package/dist/chunk-QUSDGZFS.js +188 -0
- package/dist/chunk-QXRSFH6M.js +604 -0
- package/dist/chunk-QZ4YHQLW.js +63 -0
- package/dist/chunk-RF3TP643.js +288 -0
- package/dist/chunk-RIRSFFWA.js +191 -0
- package/dist/chunk-ROHICQPK.js +8954 -0
- package/dist/chunk-RP3PC54R.js +169 -0
- package/dist/chunk-SIKCVWM3.js +76 -0
- package/dist/chunk-SOM4OTR5.js +167 -0
- package/dist/chunk-SYDPUGF5.js +126 -0
- package/dist/chunk-SYDPUGF5.js.map +1 -0
- package/dist/chunk-SZZ7BBED.js +148 -0
- package/dist/chunk-TAGJYHVI.js +191 -0
- package/dist/chunk-TB5JZTLN.js +19 -0
- package/dist/chunk-TQJLEVLA.js +131 -0
- package/dist/chunk-TW57RTKN.js +5368 -0
- package/dist/chunk-TXJOYQE2.js +1065 -0
- package/dist/chunk-TXJOYQE2.js.map +1 -0
- package/dist/chunk-UGIF56NZ.js +1254 -0
- package/dist/chunk-UGIF56NZ.js.map +1 -0
- package/dist/chunk-V3ANSXCB.js +51 -0
- package/dist/chunk-WSG4K2TR.js +103 -0
- package/dist/chunk-WXSRSMY3.js +64 -0
- package/dist/chunk-WZXMZFVB.js +238 -0
- package/dist/chunk-X3L5HYQM.js +91 -0
- package/dist/chunk-Y2TOB4N5.js +46 -0
- package/dist/chunk-YOHGEF2N.js +7899 -0
- package/dist/chunk-Z2LPYAN4.js +297 -0
- package/dist/chunk-ZICB4OI5.js +106 -0
- package/dist/chunk-ZOCAGPS5.js +225 -0
- package/dist/chunk-ZZWZUTEP.js +685 -0
- package/dist/claim-QHYA5UTF.js +200 -0
- package/dist/cli.js +36 -36
- package/dist/companies-BNMAOQUQ.js +198 -0
- package/dist/company-YANP3G62.js +308 -0
- package/dist/complete-ICZCBO6M.js +84 -0
- package/dist/config-GIETKZGS.js +88 -0
- package/dist/connect-ZXGEFS53.js +45 -0
- package/dist/conversation-YIWZIUIK.js +96 -0
- package/dist/conversion-report-E35RCZU7.js +127 -0
- package/dist/conversion-upload-command-QN33HEVV.js +440 -0
- package/dist/conversion-upload-command-QN33HEVV.js.map +1 -0
- package/dist/conversion-writes-MUD7WJDH.js +122 -0
- package/dist/conversions-B7HR6JMC.js +140 -0
- package/dist/conversions-WU7DNFF7.js +78 -0
- package/dist/copy-writes-R7VYSZXC.js +171 -0
- package/dist/copy-writes-R7VYSZXC.js.map +1 -0
- package/dist/create-EL47XN73.js +135 -0
- package/dist/create-GU5MUZ7U.js +62 -0
- package/dist/create-IKQ7A47F.js +239 -0
- package/dist/create-TKQDLX7M.js +218 -0
- package/dist/creatives-PW6HB4JB.js +58 -0
- package/dist/creatives-S4EGN44U.js +118 -0
- package/dist/creatives-VBD4T6C7.js +229 -0
- package/dist/credentials-57U2UQ7G.js +290 -0
- package/dist/critique-JTHSIXUF.js +233 -0
- package/dist/critique-JTHSIXUF.js.map +1 -0
- package/dist/critique-KAOJTSPQ.js +420 -0
- package/dist/critique-KAOJTSPQ.js.map +1 -0
- package/dist/crm-JCYLJQ7K.js +323 -0
- package/dist/crm-LQTYPDMZ.js +229 -0
- package/dist/currency-5NYTOLEL.js +88 -0
- package/dist/custom-conversions-NT7ONTEX.js +128 -0
- package/dist/customers-LP6I7POL.js +65 -0
- package/dist/delete-PZ6GP7J6.js +57 -0
- package/dist/delete-WW4JYQMX.js +69 -0
- package/dist/delete-XZNY426Q.js +67 -0
- package/dist/demographics-HZY2JEYQ.js +141 -0
- package/dist/discard-NRTGRVXR.js +69 -0
- package/dist/discover-5ZFAAPNG.js +172 -0
- package/dist/domain-YGKFTN6D.js +101 -0
- package/dist/download-XERSDEN3.js +172 -0
- package/dist/draft-2EVXU5XB.js +134 -0
- package/dist/draft-CQWYTMSS.js +138 -0
- package/dist/draft-EL74RDAG.js +374 -0
- package/dist/draft-EWB4A3FG.js +579 -0
- package/dist/draft-EWB4A3FG.js.map +1 -0
- package/dist/draft-GFZ3KMRX.js +315 -0
- package/dist/draft-JYZA3BFD.js +260 -0
- package/dist/draft-RBLMOZIL.js +333 -0
- package/dist/draft-RBLMOZIL.js.map +1 -0
- package/dist/draft-UNPTTHP4.js +220 -0
- package/dist/engine/index.js +8 -8
- package/dist/experiment-YAX26BOO.js +1397 -0
- package/dist/experiments-ERXZYY5E.js +237 -0
- package/dist/experiments-ERXZYY5E.js.map +1 -0
- package/dist/extract-QMY6WPTV.js +143 -0
- package/dist/facets-QHM2IQ3E.js +117 -0
- package/dist/feedback-NLPTKWOH.js +114 -0
- package/dist/feedback-X5FNVHKU.js +116 -0
- package/dist/feedback-X5FNVHKU.js.map +1 -0
- package/dist/feedback-record-7QCQTF26.js +270 -0
- package/dist/feedback-record-7QCQTF26.js.map +1 -0
- package/dist/fetch-72ZILZHO.js +204 -0
- package/dist/fit-AURKFPAY.js +65 -0
- package/dist/flows-CZPXHOZW.js +340 -0
- package/dist/fonts-NA26RQ4C.js +40 -0
- package/dist/forecast-ARIHRQAX.js +121 -0
- package/dist/forecast-BU22ZMOW.js +170 -0
- package/dist/forecast-BU22ZMOW.js.map +1 -0
- package/dist/funding-QDKFNQI2.js +85 -0
- package/dist/funnel-4VQB3T3M.js +397 -0
- package/dist/ga4-N6EBLN2W.js +55 -0
- package/dist/generate-IJLMJC4S.js +263 -0
- package/dist/get-LOEUOTG3.js +82 -0
- package/dist/get-W3VJIQBN.js +62 -0
- package/dist/google-5RKO3DND.js +3301 -0
- package/dist/google-5RKO3DND.js.map +1 -0
- package/dist/google-7VEPEBFV.js +163 -0
- package/dist/google-ads-YBOJ3XXK.js +198 -0
- package/dist/gsc-FILOUFCG.js +30 -0
- package/dist/history-6LLGAK7B.js +69 -0
- package/dist/history-H2SHADAM.js +153 -0
- package/dist/history-LJG64M6P.js +102 -0
- package/dist/hubspot-6JDARLIU.js +814 -0
- package/dist/ideas-MTWJDRRK.js +45 -0
- package/dist/images-RIFC6D3H.js +92 -0
- package/dist/ingest-K45T4OLM.js +131 -0
- package/dist/ingest-MSS52UO5.js +28 -0
- package/dist/insights-AVNMRFQ4.js +658 -0
- package/dist/insights-TBIT6DTF.js +132 -0
- package/dist/inspect-EBGYJOZ3.js +192 -0
- package/dist/instant-experiences-EEMQJ7H5.js +265 -0
- package/dist/instant-experiences-EEMQJ7H5.js.map +1 -0
- package/dist/intent-URHTU4AK.js +95 -0
- package/dist/job-OJB6KIDV.js +202 -0
- package/dist/job-create-C6FGCDW4.js +109 -0
- package/dist/job-status-4RJHESID.js +74 -0
- package/dist/keyword-gap-WXM6SN6A.js +130 -0
- package/dist/keyword-metrics-57MUTYMH.js +200 -0
- package/dist/keywords-for-site-ABZS7O5B.js +131 -0
- package/dist/landing-AXCYLUQZ.js +28 -0
- package/dist/languages-6XTVTFZC.js +40 -0
- package/dist/leads-C5BUBBLZ.js +115 -0
- package/dist/leads-IXF647ZC.js +542 -0
- package/dist/leads-IXF647ZC.js.map +1 -0
- package/dist/learn-M64GVGPX.js +207 -0
- package/dist/line-item-writes-HYLWBQTM.js +211 -0
- package/dist/line-items-Y4THDHSE.js +107 -0
- package/dist/link-BU7YCL2M.js +67 -0
- package/dist/linkedin-2SUTGGII.js +1345 -0
- package/dist/linkedin-2SUTGGII.js.map +1 -0
- package/dist/linkedin-person-FEIY7FYQ.js +139 -0
- package/dist/list-BKIL7O4G.js +306 -0
- package/dist/list-H3C345WG.js +154 -0
- package/dist/list-UGTDZ7YI.js +67 -0
- package/dist/locations-F4365X4S.js +40 -0
- package/dist/locations-HOI7AUZ2.js +69 -0
- package/dist/log-54SJV6MW.js +95 -0
- package/dist/lookup-QNLX2535.js +23 -0
- package/dist/make-AQ43J5LH.js +1368 -0
- package/dist/make-AQ43J5LH.js.map +1 -0
- package/dist/map-BPPGQGDV.js +445 -0
- package/dist/mcp-EXOMBMYL.js +729 -0
- package/dist/media-MITWBYVZ.js +18 -0
- package/dist/media-WGIEUEZW.js +89 -0
- package/dist/media-sources-XEC72K7X.js +35 -0
- package/dist/members-VDON57BE.js +47 -0
- package/dist/meta-NUBBKE2V.js +124 -0
- package/dist/metrics-V6FAZO5A.js +152 -0
- package/dist/models-TSMFIOZU.js +155 -0
- package/dist/normalize-632DD2HJ.js +144 -0
- package/dist/options-TZYZQZ3M.js +125 -0
- package/dist/organization-FYRXSGB4.js +949 -0
- package/dist/output-HZW7LNUL.js +24 -0
- package/dist/page-photos-4DNBQZUL.js +119 -0
- package/dist/page-photos-4DNBQZUL.js.map +1 -0
- package/dist/pages-UH6XEZBO.js +67 -0
- package/dist/performance-JKXHQIAV.js +27 -0
- package/dist/performance-OF3N43OP.js +5565 -0
- package/dist/pixels-KXA6R3G3.js +62 -0
- package/dist/pixels-PYNK73UG.js +109 -0
- package/dist/plan-4OYUV2EF.js +208 -0
- package/dist/preview-7E4E3QPT.js +245 -0
- package/dist/preview-FPBM75L2.js +101 -0
- package/dist/promoted-tweet-writes-IJRBFK7W.js +183 -0
- package/dist/promoted-tweets-7PYH3RPV.js +119 -0
- package/dist/properties-RDOGNY2O.js +101 -0
- package/dist/publish-MNSDFPEQ.js +350 -0
- package/dist/query-GMGWJW3X.js +62 -0
- package/dist/query-K7R5GQ4E.js +236 -0
- package/dist/query-PO3RT7BR.js +231 -0
- package/dist/questionnaire-4OH6K2BF.js +94 -0
- package/dist/read-MU5XGWMK.js +141 -0
- package/dist/reddit-JFFMZLJS.js +29 -0
- package/dist/refresh-EJ7WKW3H.js +97 -0
- package/dist/release-AFRLCZWB.js +63 -0
- package/dist/relevant-pages-4YGN3I2U.js +99 -0
- package/dist/remove-QD4PITBL.js +53 -0
- package/dist/reopen-JSC6AVJC.js +66 -0
- package/dist/rerun-QIAUVJX6.js +98 -0
- package/dist/rerun-QIAUVJX6.js.map +1 -0
- package/dist/research-MMFUFZGS.js +265 -0
- package/dist/research-SRISCVBM.js +75 -0
- package/dist/reset-752CNET3.js +57 -0
- package/dist/reset-R3TQAHRU.js +57 -0
- package/dist/resolve-EWHSJNBX.js +124 -0
- package/dist/retry-DVHDVHVP.js +65 -0
- package/dist/retry-PVULTONO.js +63 -0
- package/dist/revenue-B4N6QJM3.js +92 -0
- package/dist/revenue-B4N6QJM3.js.map +1 -0
- package/dist/rule-writes-YXK7HNLR.js +531 -0
- package/dist/rule-writes-YXK7HNLR.js.map +1 -0
- package/dist/rules-4YTY57FM.js +217 -0
- package/dist/rules-LRFDZFF6.js +108 -0
- package/dist/rules-LRFDZFF6.js.map +1 -0
- package/dist/rules-add-XVOGYHQO.js +497 -0
- package/dist/rules-add-XVOGYHQO.js.map +1 -0
- package/dist/run-PCZRYL42.js +69 -0
- package/dist/run-PRSAUWAJ.js +73 -0
- package/dist/scaffold-ad-A6SROV4X.js +1514 -0
- package/dist/scaffold-ad-A6SROV4X.js.map +1 -0
- package/dist/scaffold-static-ad-CRN5XZIZ.js +1013 -0
- package/dist/scaffold-static-ad-CRN5XZIZ.js.map +1 -0
- package/dist/scaffold-video-3F5JVFFR.js +886 -0
- package/dist/scaffold-video-3F5JVFFR.js.map +1 -0
- package/dist/schedule-6YTZBCZA.js +64 -0
- package/dist/scheduled-agents-XCPU57LU.js +55 -0
- package/dist/schema-4PS5BDG3.js +135 -0
- package/dist/search-IMZD5RGD.js +177 -0
- package/dist/select-GSO4BEIL.js +111 -0
- package/dist/select-GSO4BEIL.js.map +1 -0
- package/dist/sends-I2B6F5NW.js +349 -0
- package/dist/set-prompt-D32XJNWM.js +200 -0
- package/dist/set-prompt-D32XJNWM.js.map +1 -0
- package/dist/setup-links-PTL6RF2J.js +144 -0
- package/dist/shared-Z7INVKCZ.js +32 -0
- package/dist/shopify-SDZZ5HTA.js +4009 -0
- package/dist/site-NGQ7K6UD.js +180 -0
- package/dist/sitemaps-EOMSRKOD.js +77 -0
- package/dist/sites-6M73AONG.js +97 -0
- package/dist/sources-NKFSCI6M.js +30 -0
- package/dist/sources-O4CQ5KSX.js +457 -0
- package/dist/stale-CEZJ53RO.js +91 -0
- package/dist/stale-CEZJ53RO.js.map +1 -0
- package/dist/stats-MFEH2TSW.js +34 -0
- package/dist/status-DLYRPGFS.js +65 -0
- package/dist/stock-RDCDVBHX.js +212 -0
- package/dist/studies-SSA3SR2L.js +250 -0
- package/dist/studio-MBHPDGMN.js +49 -0
- package/dist/study-writes-EDV6OH7I.js +472 -0
- package/dist/study-writes-EDV6OH7I.js.map +1 -0
- package/dist/sync-BEW3TZP7.js +57 -0
- package/dist/sync-SI25TKY5.js +279 -0
- package/dist/sync-definition-RECCA3QH.js +71 -0
- package/dist/tag-manager-JFC6YYVP.js +43 -0
- package/dist/tags-IJIGZYR3.js +23 -0
- package/dist/tags-K4HIKHNU.js +26 -0
- package/dist/tags-OTA55BQ6.js +23 -0
- package/dist/tags-QF2V4B3M.js +23 -0
- package/dist/tags-SK7WXMBS.js +227 -0
- package/dist/targeting-NPNBPEHW.js +763 -0
- package/dist/targeting-NPNBPEHW.js.map +1 -0
- package/dist/targeting-constants-RF2732EW.js +118 -0
- package/dist/targeting-criteria-7BUUYDYC.js +113 -0
- package/dist/targets-7V3NCQSD.js +106 -0
- package/dist/terms-XFL6QO7A.js +102 -0
- package/dist/testimonials-XYD5DLBJ.js +32 -0
- package/dist/themes-HYDGH4GM.js +96 -0
- package/dist/themes-HYDGH4GM.js.map +1 -0
- package/dist/top-companies-LI26TONY.js +111 -0
- package/dist/transcript-FTHDWMGU.js +165 -0
- package/dist/translate-YATYKOEX.js +604 -0
- package/dist/translate-YATYKOEX.js.map +1 -0
- package/dist/triggers-3LHJVK5P.js +144 -0
- package/dist/tweets-6PQHJXJC.js +123 -0
- package/dist/unlink-BMOUBGWO.js +70 -0
- package/dist/unstage-O23ILHCY.js +96 -0
- package/dist/unstage-YEW5KXJL.js +88 -0
- package/dist/update-2IWZA5UU.js +101 -0
- package/dist/update-G7YZICSU.js +155 -0
- package/dist/update-T5INCQJZ.js +192 -0
- package/dist/update-UTQVTG45.js +66 -0
- package/dist/upload-UXYJDA2U.js +137 -0
- package/dist/url-options-Y7I5EL55.js +131 -0
- package/dist/url-params-PE4XAQNH.js +101 -0
- package/dist/validate-MMHBTNWU.js +126 -0
- package/dist/validate-MMHBTNWU.js.map +1 -0
- package/dist/videos-AHOLXU42.js +146 -0
- package/dist/videos-EVPJHY3B.js +41 -0
- package/dist/viewer-check-NA4TMNY4.js +83 -0
- package/dist/web-7EODEH25.js +173 -0
- package/dist/winning-ads-5UKX6QV7.js +86 -0
- package/dist/write-commands-HFP5KLYZ.js +1525 -0
- package/dist/write-commands-HFP5KLYZ.js.map +1 -0
- package/dist/write-commands-KVOMOYME.js +1170 -0
- package/dist/write-commands-KVOMOYME.js.map +1 -0
- package/dist/write-commands-LHEJESKL.js +206 -0
- package/dist/write-commands-SD6DXVNK.js +721 -0
- package/dist/x-R72UTFQT.js +47 -0
- package/package.json +1 -1
- package/dist/account-D2AGXMM3.js +0 -82
- package/dist/account-OCFXNHG7.js +0 -139
- package/dist/account-U6DFMD2V.js +0 -82
- package/dist/account-assets-W7K2PUYB.js +0 -290
- package/dist/account-level-Z2JEIJ3X.js +0 -611
- package/dist/account-level-Z2JEIJ3X.js.map +0 -1
- package/dist/account-reads-WPKD2LPB.js +0 -219
- package/dist/account-reads-WPKD2LPB.js.map +0 -1
- package/dist/account-users-BK45DBUH.js +0 -64
- package/dist/account-users-BK45DBUH.js.map +0 -1
- package/dist/account-writes-QSJ74QFR.js +0 -68
- package/dist/accounts-3DS67RX7.js +0 -119
- package/dist/accounts-55PDBEDN.js +0 -76
- package/dist/accounts-AK4QIG24.js +0 -115
- package/dist/accounts-FALANOYX.js +0 -80
- package/dist/accounts-VSJVFIPH.js +0 -713
- package/dist/actions-JIXQEVIN.js +0 -55
- package/dist/active-entities-HR7NJJLU.js +0 -103
- package/dist/activecampaign-4ST7BMHO.js +0 -938
- package/dist/activities-DEWHKBID.js +0 -75
- package/dist/ad-group-writes-QBHOPTT5.js +0 -172
- package/dist/ad-groups-JZDUFT6J.js +0 -70
- package/dist/ad-writes-QYJO4IB3.js +0 -176
- package/dist/add-NZ6SEWUR.js +0 -107
- package/dist/add-ZH5HJBUN.js +0 -305
- package/dist/ads-JYSYXF3U.js +0 -48
- package/dist/ads-QKVNPHBH.js +0 -120
- package/dist/ads-UMSWEI5X.js +0 -79
- package/dist/adsets-FEVYHKAQ.js +0 -182
- package/dist/advertisers-T37UHN3C.js +0 -123
- package/dist/analytics-7QSUKFXF.js +0 -2437
- package/dist/analytics-DR4DPUP4.js +0 -447
- package/dist/animate-WS63CZ3Y.js +0 -480
- package/dist/asset-writes-7RFZZYU7.js +0 -50
- package/dist/assign-3CVJL35R.js +0 -80
- package/dist/audience-size-6CZ2AZCK.js +0 -76
- package/dist/audience-writes-RUGU6KEC.js +0 -327
- package/dist/audience-writes-RUGU6KEC.js.map +0 -1
- package/dist/audiences-6GVUZUCN.js +0 -106
- package/dist/audiences-7OS2ZJYO.js +0 -85
- package/dist/audiences-RSAUXKHR.js +0 -280
- package/dist/audit-4L7IKIRY.js +0 -88
- package/dist/audit-Q66O3Z46.js +0 -154
- package/dist/autocomplete-T642QXBX.js +0 -114
- package/dist/avatars-33UGHCQA.js +0 -38
- package/dist/bid-pricing-LUWEWGCJ.js +0 -103
- package/dist/brand-36YIAVGK.js +0 -22
- package/dist/brief-A5XFT6VH.js +0 -543
- package/dist/businesses-42NZP6FP.js +0 -54
- package/dist/campaign-groups-SZSO5B6C.js +0 -99
- package/dist/campaign-writes-AN4IHY5G.js +0 -168
- package/dist/campaign-writes-GKNH2EHV.js +0 -176
- package/dist/campaigns-7RV65SXR.js +0 -78
- package/dist/campaigns-RDHQNOTI.js +0 -111
- package/dist/campaigns-TO74Z7UH.js +0 -130
- package/dist/campaigns-VLVV2PPO.js +0 -113
- package/dist/canvas-D7L7R4D2.js +0 -46
- package/dist/capabilities-YC36LOZU.js +0 -147
- package/dist/cards-CAOGPPG4.js +0 -85
- package/dist/catalog-URTZYAPU.js +0 -66
- package/dist/catalogs-5LWEXG5X.js +0 -130
- package/dist/catalogs-7IEXGLSR.js +0 -782
- package/dist/catalogs-7IEXGLSR.js.map +0 -1
- package/dist/changes-WWZYTLC6.js +0 -167
- package/dist/chatgpt-ZI4GWP6S.js +0 -47
- package/dist/chats-M3RP62YO.js +0 -584
- package/dist/check-FQYDJ5RS.js +0 -107
- package/dist/check-FQYDJ5RS.js.map +0 -1
- package/dist/chunk-22RM3UOO.js +0 -63
- package/dist/chunk-2DAWUWA4.js +0 -115
- package/dist/chunk-2JBPS2CV.js +0 -89
- package/dist/chunk-2LBQNTTH.js +0 -76
- package/dist/chunk-2N2R5YSN.js +0 -156
- package/dist/chunk-2Q7K4F4H.js +0 -7899
- package/dist/chunk-2TS2ITSG.js +0 -392
- package/dist/chunk-3E74OM2E.js +0 -288
- package/dist/chunk-4NZ47VXO.js +0 -137
- package/dist/chunk-4NZ47VXO.js.map +0 -1
- package/dist/chunk-5H6N36LS.js +0 -217
- package/dist/chunk-6E4KJMXO.js +0 -51
- package/dist/chunk-6IR7IQPV.js +0 -69
- package/dist/chunk-6QINKM6T.js +0 -46
- package/dist/chunk-7CORYCEZ.js +0 -142
- package/dist/chunk-AC7WLPXF.js +0 -8954
- package/dist/chunk-AIK2HPDZ.js +0 -312
- package/dist/chunk-BMMXYR7A.js +0 -238
- package/dist/chunk-C3EX5OKN.js +0 -188
- package/dist/chunk-CDTAKCJR.js +0 -178
- package/dist/chunk-CDTAKCJR.js.map +0 -1
- package/dist/chunk-CI3QSB6G.js +0 -207
- package/dist/chunk-CORECUKT.js +0 -685
- package/dist/chunk-DLM5OSHM.js +0 -843
- package/dist/chunk-DLM5OSHM.js.map +0 -1
- package/dist/chunk-DWPOAU4Z.js +0 -5471
- package/dist/chunk-E3PYHCQL.js +0 -344
- package/dist/chunk-EIDHLGQM.js +0 -249
- package/dist/chunk-EIDHLGQM.js.map +0 -1
- package/dist/chunk-EJBLF2LI.js +0 -167
- package/dist/chunk-FGAXZ7ET.js +0 -23
- package/dist/chunk-FGTOOTYC.js +0 -91
- package/dist/chunk-FWHEAR7F.js +0 -138
- package/dist/chunk-GDRJS2QJ.js +0 -197
- package/dist/chunk-GUYFVYLY.js +0 -170
- package/dist/chunk-GWLP45WQ.js +0 -1518
- package/dist/chunk-H3HA22Z3.js +0 -1919
- package/dist/chunk-H3RCEM6L.js +0 -61
- package/dist/chunk-HBRXFQQV.js +0 -3510
- package/dist/chunk-HH5WM5VA.js +0 -430
- package/dist/chunk-IGCS3X4F.js +0 -150
- package/dist/chunk-IID2MAYZ.js +0 -91
- package/dist/chunk-ILGRC7LJ.js +0 -287
- package/dist/chunk-JAC6JVCI.js +0 -26
- package/dist/chunk-JCDCIQMA.js +0 -479
- package/dist/chunk-JHS5PE5Y.js +0 -1246
- package/dist/chunk-JHS5PE5Y.js.map +0 -1
- package/dist/chunk-JIE45TKJ.js +0 -962
- package/dist/chunk-JSOOLOHP.js +0 -468
- package/dist/chunk-JTIWQLY5.js +0 -98
- package/dist/chunk-JWV7LUFM.js +0 -547
- package/dist/chunk-KDAINT54.js +0 -131
- package/dist/chunk-KH7AOX2R.js +0 -930
- package/dist/chunk-KJTMY7K6.js +0 -224
- package/dist/chunk-KZQQ6OLC.js +0 -169
- package/dist/chunk-L5GFFF5G.js +0 -604
- package/dist/chunk-LQACNCAV.js +0 -334
- package/dist/chunk-MCJ5I5LR.js +0 -3187
- package/dist/chunk-MCJ5I5LR.js.map +0 -1
- package/dist/chunk-MKG57P2E.js +0 -783
- package/dist/chunk-MOKZ5XZO.js +0 -455
- package/dist/chunk-MXVP7Z54.js +0 -163
- package/dist/chunk-MZPS46OR.js +0 -76
- package/dist/chunk-N2TXADL7.js +0 -1320
- package/dist/chunk-NTFNLVZG.js +0 -26
- package/dist/chunk-O3O7PXMK.js +0 -103
- package/dist/chunk-OASXBRXQ.js +0 -24026
- package/dist/chunk-OASXBRXQ.js.map +0 -1
- package/dist/chunk-ORQ3WBM6.js +0 -225
- package/dist/chunk-OSQTSS27.js +0 -74
- package/dist/chunk-OTRKBCUB.js +0 -219
- package/dist/chunk-Q5DFEVLE.js +0 -148
- package/dist/chunk-QVQKCVP7.js +0 -85
- package/dist/chunk-QVQKCVP7.js.map +0 -1
- package/dist/chunk-R4RWQ6YX.js +0 -152
- package/dist/chunk-RBCO3C3Q.js +0 -324
- package/dist/chunk-RBCO3C3Q.js.map +0 -1
- package/dist/chunk-SIUYWLXB.js +0 -494
- package/dist/chunk-TPGFX47R.js +0 -709
- package/dist/chunk-TYFXPC5D.js +0 -1902
- package/dist/chunk-TZTHGLWN.js +0 -66
- package/dist/chunk-UJTIMPEE.js +0 -203
- package/dist/chunk-UKZKLXTE.js +0 -638
- package/dist/chunk-UKZKLXTE.js.map +0 -1
- package/dist/chunk-ULIQNJ5J.js +0 -274
- package/dist/chunk-UQZZM6UM.js +0 -831
- package/dist/chunk-UUXGSDUC.js +0 -297
- package/dist/chunk-UYZ4FUC7.js +0 -225
- package/dist/chunk-UZHDNE6M.js +0 -2209
- package/dist/chunk-VJ4IOJQZ.js +0 -19
- package/dist/chunk-WBWEKZQ2.js +0 -191
- package/dist/chunk-X25XRSDP.js +0 -57
- package/dist/chunk-X3GWGFZP.js +0 -5368
- package/dist/chunk-X3YYZLBH.js +0 -285
- package/dist/chunk-XHWHBGKX.js +0 -4277
- package/dist/chunk-XHWHBGKX.js.map +0 -1
- package/dist/chunk-XRUB4KRV.js +0 -191
- package/dist/chunk-XZAVBONI.js +0 -64
- package/dist/chunk-YD6OZSSY.js +0 -106
- package/dist/chunk-YVFHDZ3K.js +0 -399
- package/dist/chunk-ZQ7JDYJB.js +0 -454
- package/dist/claim-CG3J32WS.js +0 -200
- package/dist/companies-X6O55ACG.js +0 -198
- package/dist/company-4CD2OJLB.js +0 -308
- package/dist/complete-JSP6VQYI.js +0 -84
- package/dist/config-NDL2YP37.js +0 -88
- package/dist/connect-O5NRDY4Y.js +0 -45
- package/dist/conversation-J22BH6O5.js +0 -96
- package/dist/conversion-report-76S5JOVT.js +0 -127
- package/dist/conversion-upload-command-5OILW65U.js +0 -439
- package/dist/conversion-upload-command-5OILW65U.js.map +0 -1
- package/dist/conversion-writes-6HX665JT.js +0 -122
- package/dist/conversions-I2ZOQHKJ.js +0 -140
- package/dist/conversions-QZJRF4WN.js +0 -78
- package/dist/copy-writes-X2LM5I4Z.js +0 -170
- package/dist/copy-writes-X2LM5I4Z.js.map +0 -1
- package/dist/create-DQ5X5AJT.js +0 -62
- package/dist/create-FNPFVKLT.js +0 -239
- package/dist/create-GXOFZCR5.js +0 -135
- package/dist/create-VAZ65QNJ.js +0 -218
- package/dist/creatives-4G2V4J6N.js +0 -229
- package/dist/creatives-QWNQDPNE.js +0 -58
- package/dist/creatives-SFPNXJ6Z.js +0 -118
- package/dist/credentials-VCERJE24.js +0 -290
- package/dist/critique-62QFBC33.js +0 -1451
- package/dist/critique-62QFBC33.js.map +0 -1
- package/dist/critique-MSL6EU5V.js +0 -232
- package/dist/critique-MSL6EU5V.js.map +0 -1
- package/dist/crm-HODCOAAI.js +0 -229
- package/dist/crm-J3SCOR4L.js +0 -323
- package/dist/currency-BZUNQ4XJ.js +0 -88
- package/dist/custom-conversions-UHRBVUD2.js +0 -128
- package/dist/customers-EYVTYCGY.js +0 -65
- package/dist/delete-7A6T6XBD.js +0 -69
- package/dist/delete-I3W3M6T7.js +0 -67
- package/dist/delete-RZCW3Y6L.js +0 -57
- package/dist/demographics-OFBRSF7A.js +0 -141
- package/dist/discard-I773LYVR.js +0 -69
- package/dist/discover-PDSEJR2P.js +0 -172
- package/dist/domain-7YO5HYHU.js +0 -101
- package/dist/download-IYK3UVBF.js +0 -172
- package/dist/draft-2Z7EGKBO.js +0 -220
- package/dist/draft-44KTLX4P.js +0 -134
- package/dist/draft-6MWXURYC.js +0 -374
- package/dist/draft-CKFSZDVI.js +0 -260
- package/dist/draft-PCXWAA2Y.js +0 -578
- package/dist/draft-PCXWAA2Y.js.map +0 -1
- package/dist/draft-QN5XXOS6.js +0 -332
- package/dist/draft-QN5XXOS6.js.map +0 -1
- package/dist/draft-RSKZSUOS.js +0 -138
- package/dist/draft-WOE7KQ7T.js +0 -315
- package/dist/experiment-AZUKJ7ZO.js +0 -1397
- package/dist/experiments-2DX4K3AQ.js +0 -236
- package/dist/experiments-2DX4K3AQ.js.map +0 -1
- package/dist/extract-ZIW5JFTY.js +0 -143
- package/dist/facets-OLRASLT7.js +0 -117
- package/dist/feedback-2YJ24NV7.js +0 -115
- package/dist/feedback-2YJ24NV7.js.map +0 -1
- package/dist/feedback-X3GLQ2QF.js +0 -114
- package/dist/feedback-record-A5JLS3QY.js +0 -269
- package/dist/feedback-record-A5JLS3QY.js.map +0 -1
- package/dist/fetch-6XMRKLYH.js +0 -204
- package/dist/fit-BRJSLR7P.js +0 -65
- package/dist/flows-LXJHL3KW.js +0 -340
- package/dist/fonts-UUSCLUHW.js +0 -39
- package/dist/forecast-3KMAJJWJ.js +0 -169
- package/dist/forecast-3KMAJJWJ.js.map +0 -1
- package/dist/forecast-7DZGLC7Y.js +0 -121
- package/dist/funding-BSAHWU35.js +0 -85
- package/dist/funnel-2ALYZ3GP.js +0 -397
- package/dist/ga4-YVKA3V4V.js +0 -55
- package/dist/generate-VGGXTZBP.js +0 -263
- package/dist/get-KVZSVN7U.js +0 -62
- package/dist/get-OZ7THI2W.js +0 -82
- package/dist/google-5U5KXEX7.js +0 -163
- package/dist/google-RTDPHVLU.js +0 -3300
- package/dist/google-RTDPHVLU.js.map +0 -1
- package/dist/google-ads-YZTK3YTW.js +0 -198
- package/dist/gsc-OJDMSP6H.js +0 -30
- package/dist/history-LXRFZNW7.js +0 -69
- package/dist/history-RYTNMGU5.js +0 -153
- package/dist/history-XDYDNQWK.js +0 -102
- package/dist/hubspot-MRUCRJLL.js +0 -814
- package/dist/ideas-TT24LJR5.js +0 -45
- package/dist/images-PLYPUXM2.js +0 -92
- package/dist/ingest-CSPC3RUK.js +0 -131
- package/dist/ingest-MSPQX3Z6.js +0 -28
- package/dist/insights-H6M6VI43.js +0 -132
- package/dist/insights-LZJZGNJZ.js +0 -658
- package/dist/inspect-VD6CB2NA.js +0 -192
- package/dist/instant-experiences-J4GSS3Y6.js +0 -264
- package/dist/instant-experiences-J4GSS3Y6.js.map +0 -1
- package/dist/intent-HXRSLFIO.js +0 -95
- package/dist/job-UFGGBDG7.js +0 -202
- package/dist/job-create-XM4NH322.js +0 -109
- package/dist/job-status-47L5Z57J.js +0 -74
- package/dist/keyword-gap-WUHMSTNR.js +0 -130
- package/dist/keyword-metrics-NJV3WR75.js +0 -200
- package/dist/keywords-for-site-B7MUDHFH.js +0 -131
- package/dist/landing-RKOEVY7L.js +0 -28
- package/dist/languages-SVTYYYOC.js +0 -40
- package/dist/leads-HFB5UXZJ.js +0 -115
- package/dist/leads-SEEJ3KRR.js +0 -541
- package/dist/leads-SEEJ3KRR.js.map +0 -1
- package/dist/learn-XNN3DGDF.js +0 -207
- package/dist/line-item-writes-VEJ5Y6X4.js +0 -211
- package/dist/line-items-U6L2TMPG.js +0 -107
- package/dist/link-ENZQAISO.js +0 -67
- package/dist/linkedin-SY2WZWKP.js +0 -1344
- package/dist/linkedin-SY2WZWKP.js.map +0 -1
- package/dist/linkedin-person-3RCX4MI3.js +0 -139
- package/dist/list-AF522LRC.js +0 -67
- package/dist/list-GPTYUCSX.js +0 -154
- package/dist/list-VYTHVUDP.js +0 -306
- package/dist/locations-5SLLGWZO.js +0 -69
- package/dist/locations-7EBZ6KRH.js +0 -40
- package/dist/log-NJR3FJWN.js +0 -95
- package/dist/lookup-OU6CLATK.js +0 -23
- package/dist/make-4XUB6RSF.js +0 -1367
- package/dist/make-4XUB6RSF.js.map +0 -1
- package/dist/map-LIYQCWXU.js +0 -445
- package/dist/mcp-QDOAKB3A.js +0 -729
- package/dist/media-DGV2AMZI.js +0 -89
- package/dist/media-YKCCMLXL.js +0 -18
- package/dist/media-sources-LFSDIPUB.js +0 -35
- package/dist/members-KGKQQFMN.js +0 -47
- package/dist/meta-5TRG7RTQ.js +0 -124
- package/dist/metrics-WRERNMRK.js +0 -152
- package/dist/models-SITHUNAA.js +0 -155
- package/dist/normalize-DQPKM3MG.js +0 -144
- package/dist/options-XIH7YPEG.js +0 -125
- package/dist/organization-BUSXIGA4.js +0 -949
- package/dist/output-7X5WPPCA.js +0 -24
- package/dist/page-photos-VYJU4RNQ.js +0 -118
- package/dist/page-photos-VYJU4RNQ.js.map +0 -1
- package/dist/pages-6YMPZDEY.js +0 -67
- package/dist/performance-PU4NHFUE.js +0 -27
- package/dist/performance-Y2DTYSFV.js +0 -5565
- package/dist/pixels-DZDVNIVL.js +0 -109
- package/dist/pixels-WTTLC4O5.js +0 -62
- package/dist/plan-JAWESWJN.js +0 -208
- package/dist/preview-3UOBVP6M.js +0 -101
- package/dist/preview-JZXGR4KN.js +0 -245
- package/dist/promoted-tweet-writes-6Y4MDPBH.js +0 -183
- package/dist/promoted-tweets-JAR2W6KC.js +0 -119
- package/dist/properties-Z5S3LRJ5.js +0 -101
- package/dist/publish-MDVPC77V.js +0 -350
- package/dist/query-3QFT42PG.js +0 -62
- package/dist/query-KKXCMH3Q.js +0 -236
- package/dist/query-QXKGVHZL.js +0 -231
- package/dist/questionnaire-U7UYICEA.js +0 -94
- package/dist/read-ENUS7P3L.js +0 -141
- package/dist/reddit-ZPKVVZGP.js +0 -29
- package/dist/refresh-V34YWN3W.js +0 -97
- package/dist/release-WRNUOSHB.js +0 -63
- package/dist/relevant-pages-OFKZYWR3.js +0 -99
- package/dist/remove-HKWV7P27.js +0 -53
- package/dist/reopen-VHHYVAKC.js +0 -66
- package/dist/rerun-THE43RCG.js +0 -97
- package/dist/rerun-THE43RCG.js.map +0 -1
- package/dist/research-773Y7GT4.js +0 -75
- package/dist/research-G5A2WXVK.js +0 -265
- package/dist/reset-GFJ3AKF5.js +0 -57
- package/dist/reset-MVTWA3HT.js +0 -57
- package/dist/resolve-JRSSTIAF.js +0 -124
- package/dist/retry-AGHA6IVT.js +0 -65
- package/dist/retry-LDJ6FZCZ.js +0 -63
- package/dist/revenue-Q2JK5VY6.js +0 -91
- package/dist/revenue-Q2JK5VY6.js.map +0 -1
- package/dist/rule-writes-WT6DQZZE.js +0 -530
- package/dist/rule-writes-WT6DQZZE.js.map +0 -1
- package/dist/rules-4A25K2P7.js +0 -99
- package/dist/rules-4A25K2P7.js.map +0 -1
- package/dist/rules-Y75KR2PC.js +0 -217
- package/dist/rules-add-GT7NCUB3.js +0 -465
- package/dist/rules-add-GT7NCUB3.js.map +0 -1
- package/dist/run-NFLKYVIC.js +0 -72
- package/dist/run-ZLHQNLCF.js +0 -69
- package/dist/scaffold-ad-AJN67FWG.js +0 -1513
- package/dist/scaffold-ad-AJN67FWG.js.map +0 -1
- package/dist/scaffold-static-ad-L6KXZ3TN.js +0 -1012
- package/dist/scaffold-static-ad-L6KXZ3TN.js.map +0 -1
- package/dist/scaffold-video-XQBZZ5TZ.js +0 -885
- package/dist/scaffold-video-XQBZZ5TZ.js.map +0 -1
- package/dist/schedule-45CJDHIX.js +0 -64
- package/dist/scheduled-agents-72MWHK63.js +0 -55
- package/dist/schema-VX66FH4O.js +0 -135
- package/dist/search-Y6TS5UZS.js +0 -177
- package/dist/select-MZ2U7U5U.js +0 -110
- package/dist/select-MZ2U7U5U.js.map +0 -1
- package/dist/sends-4ZO6BNZ4.js +0 -349
- package/dist/set-prompt-YH6PXNXB.js +0 -199
- package/dist/set-prompt-YH6PXNXB.js.map +0 -1
- package/dist/setup-links-Y4YYDQBK.js +0 -144
- package/dist/shared-UPMEBTVP.js +0 -32
- package/dist/shopify-HGFUHYT7.js +0 -4009
- package/dist/site-WZ654OP3.js +0 -180
- package/dist/sitemaps-P3K5Z4TW.js +0 -77
- package/dist/sites-TURWC53D.js +0 -97
- package/dist/sources-7ZFY3VEZ.js +0 -457
- package/dist/sources-FCBFLR2J.js +0 -30
- package/dist/stale-VSSDVB4H.js +0 -90
- package/dist/stale-VSSDVB4H.js.map +0 -1
- package/dist/stats-XNKAJD2Z.js +0 -34
- package/dist/status-L7LYUD3F.js +0 -65
- package/dist/stock-73PLAUYU.js +0 -212
- package/dist/studies-5G67ODR2.js +0 -250
- package/dist/studio-D2OMFCZZ.js +0 -49
- package/dist/study-writes-34BJFZAZ.js +0 -471
- package/dist/study-writes-34BJFZAZ.js.map +0 -1
- package/dist/sync-QVEUQKU5.js +0 -279
- package/dist/sync-XBC3PSSV.js +0 -57
- package/dist/sync-definition-IM2NY5QC.js +0 -70
- package/dist/tag-manager-3GIW6BPB.js +0 -43
- package/dist/tags-2KNOJ7A6.js +0 -26
- package/dist/tags-COALQ2CT.js +0 -23
- package/dist/tags-HCJTTLSR.js +0 -227
- package/dist/tags-MVC56SHA.js +0 -23
- package/dist/tags-UNUZVGUA.js +0 -23
- package/dist/targeting-TVZPIUUI.js +0 -762
- package/dist/targeting-TVZPIUUI.js.map +0 -1
- package/dist/targeting-constants-RJS2STR5.js +0 -118
- package/dist/targeting-criteria-SMBIEM7U.js +0 -113
- package/dist/targets-BNH37YAQ.js +0 -106
- package/dist/terms-AATAGKPT.js +0 -102
- package/dist/testimonials-IIAT5IDM.js +0 -32
- package/dist/themes-5HKRO5RR.js +0 -95
- package/dist/themes-5HKRO5RR.js.map +0 -1
- package/dist/top-companies-PY2NL2GS.js +0 -111
- package/dist/transcript-7WFXVRVW.js +0 -165
- package/dist/translate-IPTYPZF6.js +0 -603
- package/dist/translate-IPTYPZF6.js.map +0 -1
- package/dist/triggers-RBD2XGNG.js +0 -144
- package/dist/tweets-MLDLLLDB.js +0 -123
- package/dist/unlink-5IMEUVIS.js +0 -70
- package/dist/unstage-65DUBYNZ.js +0 -96
- package/dist/unstage-DSOVSWEK.js +0 -88
- package/dist/update-7JVV5ZL3.js +0 -66
- package/dist/update-FIU2ECYQ.js +0 -192
- package/dist/update-HSS6CVUK.js +0 -101
- package/dist/update-XWL3Q5QY.js +0 -155
- package/dist/upload-B5SM33MK.js +0 -137
- package/dist/url-options-4J3FRXHO.js +0 -131
- package/dist/url-params-TGCGWKAJ.js +0 -101
- package/dist/validate-4NXKYAL2.js +0 -125
- package/dist/validate-4NXKYAL2.js.map +0 -1
- package/dist/videos-FMV4AVB2.js +0 -41
- package/dist/videos-NITQKILV.js +0 -146
- package/dist/viewer-check-2W6BTVQV.js +0 -83
- package/dist/web-K2EMYVCD.js +0 -173
- package/dist/winning-ads-Q3RXH7EC.js +0 -86
- package/dist/write-commands-OBQPQUIE.js +0 -721
- package/dist/write-commands-SIOVTRHH.js +0 -1169
- package/dist/write-commands-SIOVTRHH.js.map +0 -1
- package/dist/write-commands-VQPEHKH7.js +0 -1524
- package/dist/write-commands-VQPEHKH7.js.map +0 -1
- package/dist/write-commands-XLZCRVTU.js +0 -206
- package/dist/x-PW43O6JS.js +0 -47
- /package/dist/{account-U6DFMD2V.js.map → account-JREYXYNE.js.map} +0 -0
- /package/dist/{account-OCFXNHG7.js.map → account-OUKPRB7C.js.map} +0 -0
- /package/dist/{account-D2AGXMM3.js.map → account-WN5MJ5QN.js.map} +0 -0
- /package/dist/{account-assets-W7K2PUYB.js.map → account-assets-IWJWYNQ3.js.map} +0 -0
- /package/dist/{account-writes-QSJ74QFR.js.map → account-writes-IUIXIVRC.js.map} +0 -0
- /package/dist/{accounts-FALANOYX.js.map → accounts-4YRDRLHX.js.map} +0 -0
- /package/dist/{accounts-3DS67RX7.js.map → accounts-HEGADQ6E.js.map} +0 -0
- /package/dist/{accounts-55PDBEDN.js.map → accounts-OSVXKNSI.js.map} +0 -0
- /package/dist/{accounts-AK4QIG24.js.map → accounts-SJOO4MQX.js.map} +0 -0
- /package/dist/{accounts-VSJVFIPH.js.map → accounts-V7EOUTNL.js.map} +0 -0
- /package/dist/{actions-JIXQEVIN.js.map → actions-5LYJ3U6G.js.map} +0 -0
- /package/dist/{active-entities-HR7NJJLU.js.map → active-entities-4KQQSMRZ.js.map} +0 -0
- /package/dist/{activecampaign-4ST7BMHO.js.map → activecampaign-CZHLHGT4.js.map} +0 -0
- /package/dist/{activities-DEWHKBID.js.map → activities-FRA33VZZ.js.map} +0 -0
- /package/dist/{ad-group-writes-QBHOPTT5.js.map → ad-group-writes-YQXBUA3Q.js.map} +0 -0
- /package/dist/{ad-groups-JZDUFT6J.js.map → ad-groups-NJR4ILEN.js.map} +0 -0
- /package/dist/{ad-writes-QYJO4IB3.js.map → ad-writes-TZV64CC2.js.map} +0 -0
- /package/dist/{add-ZH5HJBUN.js.map → add-MZUSKY2L.js.map} +0 -0
- /package/dist/{add-NZ6SEWUR.js.map → add-NAUSQKRS.js.map} +0 -0
- /package/dist/{ads-QKVNPHBH.js.map → ads-A2FXTQES.js.map} +0 -0
- /package/dist/{ads-JYSYXF3U.js.map → ads-PYTK3LJE.js.map} +0 -0
- /package/dist/{ads-UMSWEI5X.js.map → ads-Q7DD5VXU.js.map} +0 -0
- /package/dist/{adsets-FEVYHKAQ.js.map → adsets-ZHEVFOK4.js.map} +0 -0
- /package/dist/{advertisers-T37UHN3C.js.map → advertisers-HSTND4HE.js.map} +0 -0
- /package/dist/{analytics-DR4DPUP4.js.map → analytics-63Q3FJN4.js.map} +0 -0
- /package/dist/{analytics-7QSUKFXF.js.map → analytics-GLJODEIM.js.map} +0 -0
- /package/dist/{animate-WS63CZ3Y.js.map → animate-EI6AYBDI.js.map} +0 -0
- /package/dist/{asset-writes-7RFZZYU7.js.map → asset-writes-MS45UKJ3.js.map} +0 -0
- /package/dist/{assign-3CVJL35R.js.map → assign-7HT3XSSN.js.map} +0 -0
- /package/dist/{audience-size-6CZ2AZCK.js.map → audience-size-DG7544D2.js.map} +0 -0
- /package/dist/{audiences-RSAUXKHR.js.map → audiences-2IVVS3SJ.js.map} +0 -0
- /package/dist/{audiences-7OS2ZJYO.js.map → audiences-RN745R53.js.map} +0 -0
- /package/dist/{audiences-6GVUZUCN.js.map → audiences-Z2TQT35L.js.map} +0 -0
- /package/dist/{audit-4L7IKIRY.js.map → audit-BIHMDO5K.js.map} +0 -0
- /package/dist/{audit-Q66O3Z46.js.map → audit-ZYST7KCO.js.map} +0 -0
- /package/dist/{autocomplete-T642QXBX.js.map → autocomplete-5BKEMOQ3.js.map} +0 -0
- /package/dist/{avatars-33UGHCQA.js.map → avatars-FQOCDWLW.js.map} +0 -0
- /package/dist/{bid-pricing-LUWEWGCJ.js.map → bid-pricing-JEW7T2VR.js.map} +0 -0
- /package/dist/{brand-36YIAVGK.js.map → brand-FR6BKWXN.js.map} +0 -0
- /package/dist/{brief-A5XFT6VH.js.map → brief-32IXDJ4J.js.map} +0 -0
- /package/dist/{businesses-42NZP6FP.js.map → businesses-HECSW3EL.js.map} +0 -0
- /package/dist/{campaign-groups-SZSO5B6C.js.map → campaign-groups-LYPVIZT5.js.map} +0 -0
- /package/dist/{campaign-writes-AN4IHY5G.js.map → campaign-writes-D5MM5LUH.js.map} +0 -0
- /package/dist/{campaign-writes-GKNH2EHV.js.map → campaign-writes-S7A6W5V3.js.map} +0 -0
- /package/dist/{campaigns-RDHQNOTI.js.map → campaigns-CMDF3P7Y.js.map} +0 -0
- /package/dist/{campaigns-VLVV2PPO.js.map → campaigns-LIICP5JU.js.map} +0 -0
- /package/dist/{campaigns-TO74Z7UH.js.map → campaigns-N72TOUQX.js.map} +0 -0
- /package/dist/{campaigns-7RV65SXR.js.map → campaigns-ZWJKBF3L.js.map} +0 -0
- /package/dist/{canvas-D7L7R4D2.js.map → canvas-3SNC3UUV.js.map} +0 -0
- /package/dist/{capabilities-YC36LOZU.js.map → capabilities-GL7P3SWY.js.map} +0 -0
- /package/dist/{cards-CAOGPPG4.js.map → cards-RYQN5JLR.js.map} +0 -0
- /package/dist/{catalog-URTZYAPU.js.map → catalog-PWAWDK42.js.map} +0 -0
- /package/dist/{catalogs-5LWEXG5X.js.map → catalogs-SLPYHA7D.js.map} +0 -0
- /package/dist/{changes-WWZYTLC6.js.map → changes-WOD4EOSN.js.map} +0 -0
- /package/dist/{chatgpt-ZI4GWP6S.js.map → chatgpt-3GX4I6NH.js.map} +0 -0
- /package/dist/{chats-M3RP62YO.js.map → chats-K2WUFVCG.js.map} +0 -0
- /package/dist/{chunk-GDRJS2QJ.js.map → chunk-34ARMQNL.js.map} +0 -0
- /package/dist/{chunk-CI3QSB6G.js.map → chunk-34MZGC2Y.js.map} +0 -0
- /package/dist/{chunk-SIUYWLXB.js.map → chunk-4KBTW5NE.js.map} +0 -0
- /package/dist/{chunk-2LBQNTTH.js.map → chunk-4PAGS7QH.js.map} +0 -0
- /package/dist/{chunk-MXVP7Z54.js.map → chunk-53KV66ZZ.js.map} +0 -0
- /package/dist/{chunk-6IR7IQPV.js.map → chunk-5C4RRCKM.js.map} +0 -0
- /package/dist/{chunk-TPGFX47R.js.map → chunk-5I6XOSNI.js.map} +0 -0
- /package/dist/{chunk-ILGRC7LJ.js.map → chunk-5OE4Z7TP.js.map} +0 -0
- /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
- /package/dist/{chunk-JIE45TKJ.js.map → chunk-6S4B67KP.js.map} +0 -0
- /package/dist/{chunk-KH7AOX2R.js.map → chunk-77LXZAX2.js.map} +0 -0
- /package/dist/{chunk-5H6N36LS.js.map → chunk-7TVVYP7K.js.map} +0 -0
- /package/dist/{chunk-HBRXFQQV.js.map → chunk-7URHRPC7.js.map} +0 -0
- /package/dist/{chunk-YVFHDZ3K.js.map → chunk-7YMQEAGA.js.map} +0 -0
- /package/dist/{chunk-NTFNLVZG.js.map → chunk-A4O3JL6D.js.map} +0 -0
- /package/dist/{chunk-2DAWUWA4.js.map → chunk-ANRTDNPQ.js.map} +0 -0
- /package/dist/{chunk-GWLP45WQ.js.map → chunk-AQNTVM6S.js.map} +0 -0
- /package/dist/{chunk-ULIQNJ5J.js.map → chunk-BPDIY5CF.js.map} +0 -0
- /package/dist/{chunk-UQZZM6UM.js.map → chunk-CKHF7UXS.js.map} +0 -0
- /package/dist/{chunk-MKG57P2E.js.map → chunk-CUTTTFAU.js.map} +0 -0
- /package/dist/{chunk-IGCS3X4F.js.map → chunk-D32EWSMB.js.map} +0 -0
- /package/dist/{chunk-JWV7LUFM.js.map → chunk-D55MN5IH.js.map} +0 -0
- /package/dist/{chunk-FWHEAR7F.js.map → chunk-DRQI2CJJ.js.map} +0 -0
- /package/dist/{chunk-AIK2HPDZ.js.map → chunk-ETI6DGR2.js.map} +0 -0
- /package/dist/{chunk-FGTOOTYC.js.map → chunk-FFTD7XDA.js.map} +0 -0
- /package/dist/{chunk-KJTMY7K6.js.map → chunk-FTKUHGTC.js.map} +0 -0
- /package/dist/{chunk-2TS2ITSG.js.map → chunk-GFYGVIT3.js.map} +0 -0
- /package/dist/{chunk-ORQ3WBM6.js.map → chunk-GGXPO4NQ.js.map} +0 -0
- /package/dist/{chunk-GUYFVYLY.js.map → chunk-H56UJRLV.js.map} +0 -0
- /package/dist/{chunk-7CORYCEZ.js.map → chunk-HDMD6LXS.js.map} +0 -0
- /package/dist/{chunk-N2TXADL7.js.map → chunk-HFZZKYUX.js.map} +0 -0
- /package/dist/{chunk-DWPOAU4Z.js.map → chunk-IAYJKH4R.js.map} +0 -0
- /package/dist/{chunk-JCDCIQMA.js.map → chunk-IEPCI2EB.js.map} +0 -0
- /package/dist/{chunk-E3PYHCQL.js.map → chunk-IKADYUXK.js.map} +0 -0
- /package/dist/{chunk-OSQTSS27.js.map → chunk-J32CYEIH.js.map} +0 -0
- /package/dist/{chunk-2N2R5YSN.js.map → chunk-J5I3GYSJ.js.map} +0 -0
- /package/dist/{chunk-X3YYZLBH.js.map → chunk-JCVXKHVB.js.map} +0 -0
- /package/dist/{chunk-JSOOLOHP.js.map → chunk-JESSFI7R.js.map} +0 -0
- /package/dist/{chunk-H3RCEM6L.js.map → chunk-K4QPBXV7.js.map} +0 -0
- /package/dist/{chunk-H3HA22Z3.js.map → chunk-KJ3J2DYM.js.map} +0 -0
- /package/dist/{chunk-UZHDNE6M.js.map → chunk-L43B2YGZ.js.map} +0 -0
- /package/dist/{chunk-OTRKBCUB.js.map → chunk-L7UD57TV.js.map} +0 -0
- /package/dist/{chunk-HH5WM5VA.js.map → chunk-LJYXGUQ3.js.map} +0 -0
- /package/dist/{chunk-UJTIMPEE.js.map → chunk-LNYM4PQS.js.map} +0 -0
- /package/dist/{chunk-TZTHGLWN.js.map → chunk-MIXUMGJE.js.map} +0 -0
- /package/dist/{chunk-MOKZ5XZO.js.map → chunk-MWJ6BCZJ.js.map} +0 -0
- /package/dist/{chunk-TYFXPC5D.js.map → chunk-O7WRA3JU.js.map} +0 -0
- /package/dist/{chunk-LQACNCAV.js.map → chunk-OADMSHME.js.map} +0 -0
- /package/dist/{chunk-R4RWQ6YX.js.map → chunk-OLPABGH3.js.map} +0 -0
- /package/dist/{chunk-X25XRSDP.js.map → chunk-ONGZKI5J.js.map} +0 -0
- /package/dist/{chunk-FGAXZ7ET.js.map → chunk-OSZOUSK5.js.map} +0 -0
- /package/dist/{chunk-ZQ7JDYJB.js.map → chunk-PK7YNQ2T.js.map} +0 -0
- /package/dist/{chunk-JTIWQLY5.js.map → chunk-PN3CHL5W.js.map} +0 -0
- /package/dist/{chunk-2JBPS2CV.js.map → chunk-QMQSI4WA.js.map} +0 -0
- /package/dist/{chunk-C3EX5OKN.js.map → chunk-QUSDGZFS.js.map} +0 -0
- /package/dist/{chunk-L5GFFF5G.js.map → chunk-QXRSFH6M.js.map} +0 -0
- /package/dist/{chunk-22RM3UOO.js.map → chunk-QZ4YHQLW.js.map} +0 -0
- /package/dist/{chunk-3E74OM2E.js.map → chunk-RF3TP643.js.map} +0 -0
- /package/dist/{chunk-WBWEKZQ2.js.map → chunk-RIRSFFWA.js.map} +0 -0
- /package/dist/{chunk-AC7WLPXF.js.map → chunk-ROHICQPK.js.map} +0 -0
- /package/dist/{chunk-KZQQ6OLC.js.map → chunk-RP3PC54R.js.map} +0 -0
- /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
- /package/dist/{chunk-EJBLF2LI.js.map → chunk-SOM4OTR5.js.map} +0 -0
- /package/dist/{chunk-Q5DFEVLE.js.map → chunk-SZZ7BBED.js.map} +0 -0
- /package/dist/{chunk-XRUB4KRV.js.map → chunk-TAGJYHVI.js.map} +0 -0
- /package/dist/{chunk-VJ4IOJQZ.js.map → chunk-TB5JZTLN.js.map} +0 -0
- /package/dist/{chunk-KDAINT54.js.map → chunk-TQJLEVLA.js.map} +0 -0
- /package/dist/{chunk-X3GWGFZP.js.map → chunk-TW57RTKN.js.map} +0 -0
- /package/dist/{chunk-6E4KJMXO.js.map → chunk-V3ANSXCB.js.map} +0 -0
- /package/dist/{chunk-O3O7PXMK.js.map → chunk-WSG4K2TR.js.map} +0 -0
- /package/dist/{chunk-XZAVBONI.js.map → chunk-WXSRSMY3.js.map} +0 -0
- /package/dist/{chunk-BMMXYR7A.js.map → chunk-WZXMZFVB.js.map} +0 -0
- /package/dist/{chunk-IID2MAYZ.js.map → chunk-X3L5HYQM.js.map} +0 -0
- /package/dist/{chunk-6QINKM6T.js.map → chunk-Y2TOB4N5.js.map} +0 -0
- /package/dist/{chunk-2Q7K4F4H.js.map → chunk-YOHGEF2N.js.map} +0 -0
- /package/dist/{chunk-UUXGSDUC.js.map → chunk-Z2LPYAN4.js.map} +0 -0
- /package/dist/{chunk-YD6OZSSY.js.map → chunk-ZICB4OI5.js.map} +0 -0
- /package/dist/{chunk-UYZ4FUC7.js.map → chunk-ZOCAGPS5.js.map} +0 -0
- /package/dist/{chunk-CORECUKT.js.map → chunk-ZZWZUTEP.js.map} +0 -0
- /package/dist/{claim-CG3J32WS.js.map → claim-QHYA5UTF.js.map} +0 -0
- /package/dist/{companies-X6O55ACG.js.map → companies-BNMAOQUQ.js.map} +0 -0
- /package/dist/{company-4CD2OJLB.js.map → company-YANP3G62.js.map} +0 -0
- /package/dist/{complete-JSP6VQYI.js.map → complete-ICZCBO6M.js.map} +0 -0
- /package/dist/{config-NDL2YP37.js.map → config-GIETKZGS.js.map} +0 -0
- /package/dist/{connect-O5NRDY4Y.js.map → connect-ZXGEFS53.js.map} +0 -0
- /package/dist/{conversation-J22BH6O5.js.map → conversation-YIWZIUIK.js.map} +0 -0
- /package/dist/{conversion-report-76S5JOVT.js.map → conversion-report-E35RCZU7.js.map} +0 -0
- /package/dist/{conversion-writes-6HX665JT.js.map → conversion-writes-MUD7WJDH.js.map} +0 -0
- /package/dist/{conversions-I2ZOQHKJ.js.map → conversions-B7HR6JMC.js.map} +0 -0
- /package/dist/{conversions-QZJRF4WN.js.map → conversions-WU7DNFF7.js.map} +0 -0
- /package/dist/{create-GXOFZCR5.js.map → create-EL47XN73.js.map} +0 -0
- /package/dist/{create-DQ5X5AJT.js.map → create-GU5MUZ7U.js.map} +0 -0
- /package/dist/{create-FNPFVKLT.js.map → create-IKQ7A47F.js.map} +0 -0
- /package/dist/{create-VAZ65QNJ.js.map → create-TKQDLX7M.js.map} +0 -0
- /package/dist/{creatives-QWNQDPNE.js.map → creatives-PW6HB4JB.js.map} +0 -0
- /package/dist/{creatives-SFPNXJ6Z.js.map → creatives-S4EGN44U.js.map} +0 -0
- /package/dist/{creatives-4G2V4J6N.js.map → creatives-VBD4T6C7.js.map} +0 -0
- /package/dist/{credentials-VCERJE24.js.map → credentials-57U2UQ7G.js.map} +0 -0
- /package/dist/{crm-J3SCOR4L.js.map → crm-JCYLJQ7K.js.map} +0 -0
- /package/dist/{crm-HODCOAAI.js.map → crm-LQTYPDMZ.js.map} +0 -0
- /package/dist/{currency-BZUNQ4XJ.js.map → currency-5NYTOLEL.js.map} +0 -0
- /package/dist/{custom-conversions-UHRBVUD2.js.map → custom-conversions-NT7ONTEX.js.map} +0 -0
- /package/dist/{customers-EYVTYCGY.js.map → customers-LP6I7POL.js.map} +0 -0
- /package/dist/{delete-RZCW3Y6L.js.map → delete-PZ6GP7J6.js.map} +0 -0
- /package/dist/{delete-7A6T6XBD.js.map → delete-WW4JYQMX.js.map} +0 -0
- /package/dist/{delete-I3W3M6T7.js.map → delete-XZNY426Q.js.map} +0 -0
- /package/dist/{demographics-OFBRSF7A.js.map → demographics-HZY2JEYQ.js.map} +0 -0
- /package/dist/{discard-I773LYVR.js.map → discard-NRTGRVXR.js.map} +0 -0
- /package/dist/{discover-PDSEJR2P.js.map → discover-5ZFAAPNG.js.map} +0 -0
- /package/dist/{domain-7YO5HYHU.js.map → domain-YGKFTN6D.js.map} +0 -0
- /package/dist/{download-IYK3UVBF.js.map → download-XERSDEN3.js.map} +0 -0
- /package/dist/{draft-44KTLX4P.js.map → draft-2EVXU5XB.js.map} +0 -0
- /package/dist/{draft-RSKZSUOS.js.map → draft-CQWYTMSS.js.map} +0 -0
- /package/dist/{draft-6MWXURYC.js.map → draft-EL74RDAG.js.map} +0 -0
- /package/dist/{draft-WOE7KQ7T.js.map → draft-GFZ3KMRX.js.map} +0 -0
- /package/dist/{draft-CKFSZDVI.js.map → draft-JYZA3BFD.js.map} +0 -0
- /package/dist/{draft-2Z7EGKBO.js.map → draft-UNPTTHP4.js.map} +0 -0
- /package/dist/{experiment-AZUKJ7ZO.js.map → experiment-YAX26BOO.js.map} +0 -0
- /package/dist/{extract-ZIW5JFTY.js.map → extract-QMY6WPTV.js.map} +0 -0
- /package/dist/{facets-OLRASLT7.js.map → facets-QHM2IQ3E.js.map} +0 -0
- /package/dist/{feedback-X3GLQ2QF.js.map → feedback-NLPTKWOH.js.map} +0 -0
- /package/dist/{fetch-6XMRKLYH.js.map → fetch-72ZILZHO.js.map} +0 -0
- /package/dist/{fit-BRJSLR7P.js.map → fit-AURKFPAY.js.map} +0 -0
- /package/dist/{flows-LXJHL3KW.js.map → flows-CZPXHOZW.js.map} +0 -0
- /package/dist/{fonts-UUSCLUHW.js.map → fonts-NA26RQ4C.js.map} +0 -0
- /package/dist/{forecast-7DZGLC7Y.js.map → forecast-ARIHRQAX.js.map} +0 -0
- /package/dist/{funding-BSAHWU35.js.map → funding-QDKFNQI2.js.map} +0 -0
- /package/dist/{funnel-2ALYZ3GP.js.map → funnel-4VQB3T3M.js.map} +0 -0
- /package/dist/{ga4-YVKA3V4V.js.map → ga4-N6EBLN2W.js.map} +0 -0
- /package/dist/{generate-VGGXTZBP.js.map → generate-IJLMJC4S.js.map} +0 -0
- /package/dist/{get-OZ7THI2W.js.map → get-LOEUOTG3.js.map} +0 -0
- /package/dist/{get-KVZSVN7U.js.map → get-W3VJIQBN.js.map} +0 -0
- /package/dist/{google-5U5KXEX7.js.map → google-7VEPEBFV.js.map} +0 -0
- /package/dist/{google-ads-YZTK3YTW.js.map → google-ads-YBOJ3XXK.js.map} +0 -0
- /package/dist/{gsc-OJDMSP6H.js.map → gsc-FILOUFCG.js.map} +0 -0
- /package/dist/{history-LXRFZNW7.js.map → history-6LLGAK7B.js.map} +0 -0
- /package/dist/{history-RYTNMGU5.js.map → history-H2SHADAM.js.map} +0 -0
- /package/dist/{history-XDYDNQWK.js.map → history-LJG64M6P.js.map} +0 -0
- /package/dist/{hubspot-MRUCRJLL.js.map → hubspot-6JDARLIU.js.map} +0 -0
- /package/dist/{ideas-TT24LJR5.js.map → ideas-MTWJDRRK.js.map} +0 -0
- /package/dist/{images-PLYPUXM2.js.map → images-RIFC6D3H.js.map} +0 -0
- /package/dist/{ingest-CSPC3RUK.js.map → ingest-K45T4OLM.js.map} +0 -0
- /package/dist/{ingest-MSPQX3Z6.js.map → ingest-MSS52UO5.js.map} +0 -0
- /package/dist/{insights-LZJZGNJZ.js.map → insights-AVNMRFQ4.js.map} +0 -0
- /package/dist/{insights-H6M6VI43.js.map → insights-TBIT6DTF.js.map} +0 -0
- /package/dist/{inspect-VD6CB2NA.js.map → inspect-EBGYJOZ3.js.map} +0 -0
- /package/dist/{intent-HXRSLFIO.js.map → intent-URHTU4AK.js.map} +0 -0
- /package/dist/{job-UFGGBDG7.js.map → job-OJB6KIDV.js.map} +0 -0
- /package/dist/{job-create-XM4NH322.js.map → job-create-C6FGCDW4.js.map} +0 -0
- /package/dist/{job-status-47L5Z57J.js.map → job-status-4RJHESID.js.map} +0 -0
- /package/dist/{keyword-gap-WUHMSTNR.js.map → keyword-gap-WXM6SN6A.js.map} +0 -0
- /package/dist/{keyword-metrics-NJV3WR75.js.map → keyword-metrics-57MUTYMH.js.map} +0 -0
- /package/dist/{keywords-for-site-B7MUDHFH.js.map → keywords-for-site-ABZS7O5B.js.map} +0 -0
- /package/dist/{landing-RKOEVY7L.js.map → landing-AXCYLUQZ.js.map} +0 -0
- /package/dist/{languages-SVTYYYOC.js.map → languages-6XTVTFZC.js.map} +0 -0
- /package/dist/{leads-HFB5UXZJ.js.map → leads-C5BUBBLZ.js.map} +0 -0
- /package/dist/{learn-XNN3DGDF.js.map → learn-M64GVGPX.js.map} +0 -0
- /package/dist/{line-item-writes-VEJ5Y6X4.js.map → line-item-writes-HYLWBQTM.js.map} +0 -0
- /package/dist/{line-items-U6L2TMPG.js.map → line-items-Y4THDHSE.js.map} +0 -0
- /package/dist/{link-ENZQAISO.js.map → link-BU7YCL2M.js.map} +0 -0
- /package/dist/{linkedin-person-3RCX4MI3.js.map → linkedin-person-FEIY7FYQ.js.map} +0 -0
- /package/dist/{list-VYTHVUDP.js.map → list-BKIL7O4G.js.map} +0 -0
- /package/dist/{list-GPTYUCSX.js.map → list-H3C345WG.js.map} +0 -0
- /package/dist/{list-AF522LRC.js.map → list-UGTDZ7YI.js.map} +0 -0
- /package/dist/{locations-7EBZ6KRH.js.map → locations-F4365X4S.js.map} +0 -0
- /package/dist/{locations-5SLLGWZO.js.map → locations-HOI7AUZ2.js.map} +0 -0
- /package/dist/{log-NJR3FJWN.js.map → log-54SJV6MW.js.map} +0 -0
- /package/dist/{lookup-OU6CLATK.js.map → lookup-QNLX2535.js.map} +0 -0
- /package/dist/{map-LIYQCWXU.js.map → map-BPPGQGDV.js.map} +0 -0
- /package/dist/{mcp-QDOAKB3A.js.map → mcp-EXOMBMYL.js.map} +0 -0
- /package/dist/{media-YKCCMLXL.js.map → media-MITWBYVZ.js.map} +0 -0
- /package/dist/{media-DGV2AMZI.js.map → media-WGIEUEZW.js.map} +0 -0
- /package/dist/{media-sources-LFSDIPUB.js.map → media-sources-XEC72K7X.js.map} +0 -0
- /package/dist/{members-KGKQQFMN.js.map → members-VDON57BE.js.map} +0 -0
- /package/dist/{meta-5TRG7RTQ.js.map → meta-NUBBKE2V.js.map} +0 -0
- /package/dist/{metrics-WRERNMRK.js.map → metrics-V6FAZO5A.js.map} +0 -0
- /package/dist/{models-SITHUNAA.js.map → models-TSMFIOZU.js.map} +0 -0
- /package/dist/{normalize-DQPKM3MG.js.map → normalize-632DD2HJ.js.map} +0 -0
- /package/dist/{options-XIH7YPEG.js.map → options-TZYZQZ3M.js.map} +0 -0
- /package/dist/{organization-BUSXIGA4.js.map → organization-FYRXSGB4.js.map} +0 -0
- /package/dist/{output-7X5WPPCA.js.map → output-HZW7LNUL.js.map} +0 -0
- /package/dist/{pages-6YMPZDEY.js.map → pages-UH6XEZBO.js.map} +0 -0
- /package/dist/{performance-PU4NHFUE.js.map → performance-JKXHQIAV.js.map} +0 -0
- /package/dist/{performance-Y2DTYSFV.js.map → performance-OF3N43OP.js.map} +0 -0
- /package/dist/{pixels-WTTLC4O5.js.map → pixels-KXA6R3G3.js.map} +0 -0
- /package/dist/{pixels-DZDVNIVL.js.map → pixels-PYNK73UG.js.map} +0 -0
- /package/dist/{plan-JAWESWJN.js.map → plan-4OYUV2EF.js.map} +0 -0
- /package/dist/{preview-JZXGR4KN.js.map → preview-7E4E3QPT.js.map} +0 -0
- /package/dist/{preview-3UOBVP6M.js.map → preview-FPBM75L2.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-6Y4MDPBH.js.map → promoted-tweet-writes-IJRBFK7W.js.map} +0 -0
- /package/dist/{promoted-tweets-JAR2W6KC.js.map → promoted-tweets-7PYH3RPV.js.map} +0 -0
- /package/dist/{properties-Z5S3LRJ5.js.map → properties-RDOGNY2O.js.map} +0 -0
- /package/dist/{publish-MDVPC77V.js.map → publish-MNSDFPEQ.js.map} +0 -0
- /package/dist/{query-3QFT42PG.js.map → query-GMGWJW3X.js.map} +0 -0
- /package/dist/{query-KKXCMH3Q.js.map → query-K7R5GQ4E.js.map} +0 -0
- /package/dist/{query-QXKGVHZL.js.map → query-PO3RT7BR.js.map} +0 -0
- /package/dist/{questionnaire-U7UYICEA.js.map → questionnaire-4OH6K2BF.js.map} +0 -0
- /package/dist/{read-ENUS7P3L.js.map → read-MU5XGWMK.js.map} +0 -0
- /package/dist/{reddit-ZPKVVZGP.js.map → reddit-JFFMZLJS.js.map} +0 -0
- /package/dist/{refresh-V34YWN3W.js.map → refresh-EJ7WKW3H.js.map} +0 -0
- /package/dist/{release-WRNUOSHB.js.map → release-AFRLCZWB.js.map} +0 -0
- /package/dist/{relevant-pages-OFKZYWR3.js.map → relevant-pages-4YGN3I2U.js.map} +0 -0
- /package/dist/{remove-HKWV7P27.js.map → remove-QD4PITBL.js.map} +0 -0
- /package/dist/{reopen-VHHYVAKC.js.map → reopen-JSC6AVJC.js.map} +0 -0
- /package/dist/{research-G5A2WXVK.js.map → research-MMFUFZGS.js.map} +0 -0
- /package/dist/{research-773Y7GT4.js.map → research-SRISCVBM.js.map} +0 -0
- /package/dist/{reset-GFJ3AKF5.js.map → reset-752CNET3.js.map} +0 -0
- /package/dist/{reset-MVTWA3HT.js.map → reset-R3TQAHRU.js.map} +0 -0
- /package/dist/{resolve-JRSSTIAF.js.map → resolve-EWHSJNBX.js.map} +0 -0
- /package/dist/{retry-AGHA6IVT.js.map → retry-DVHDVHVP.js.map} +0 -0
- /package/dist/{retry-LDJ6FZCZ.js.map → retry-PVULTONO.js.map} +0 -0
- /package/dist/{rules-Y75KR2PC.js.map → rules-4YTY57FM.js.map} +0 -0
- /package/dist/{run-ZLHQNLCF.js.map → run-PCZRYL42.js.map} +0 -0
- /package/dist/{run-NFLKYVIC.js.map → run-PRSAUWAJ.js.map} +0 -0
- /package/dist/{schedule-45CJDHIX.js.map → schedule-6YTZBCZA.js.map} +0 -0
- /package/dist/{scheduled-agents-72MWHK63.js.map → scheduled-agents-XCPU57LU.js.map} +0 -0
- /package/dist/{schema-VX66FH4O.js.map → schema-4PS5BDG3.js.map} +0 -0
- /package/dist/{search-Y6TS5UZS.js.map → search-IMZD5RGD.js.map} +0 -0
- /package/dist/{sends-4ZO6BNZ4.js.map → sends-I2B6F5NW.js.map} +0 -0
- /package/dist/{setup-links-Y4YYDQBK.js.map → setup-links-PTL6RF2J.js.map} +0 -0
- /package/dist/{shared-UPMEBTVP.js.map → shared-Z7INVKCZ.js.map} +0 -0
- /package/dist/{shopify-HGFUHYT7.js.map → shopify-SDZZ5HTA.js.map} +0 -0
- /package/dist/{site-WZ654OP3.js.map → site-NGQ7K6UD.js.map} +0 -0
- /package/dist/{sitemaps-P3K5Z4TW.js.map → sitemaps-EOMSRKOD.js.map} +0 -0
- /package/dist/{sites-TURWC53D.js.map → sites-6M73AONG.js.map} +0 -0
- /package/dist/{sources-FCBFLR2J.js.map → sources-NKFSCI6M.js.map} +0 -0
- /package/dist/{sources-7ZFY3VEZ.js.map → sources-O4CQ5KSX.js.map} +0 -0
- /package/dist/{stats-XNKAJD2Z.js.map → stats-MFEH2TSW.js.map} +0 -0
- /package/dist/{status-L7LYUD3F.js.map → status-DLYRPGFS.js.map} +0 -0
- /package/dist/{stock-73PLAUYU.js.map → stock-RDCDVBHX.js.map} +0 -0
- /package/dist/{studies-5G67ODR2.js.map → studies-SSA3SR2L.js.map} +0 -0
- /package/dist/{studio-D2OMFCZZ.js.map → studio-MBHPDGMN.js.map} +0 -0
- /package/dist/{sync-XBC3PSSV.js.map → sync-BEW3TZP7.js.map} +0 -0
- /package/dist/{sync-QVEUQKU5.js.map → sync-SI25TKY5.js.map} +0 -0
- /package/dist/{sync-definition-IM2NY5QC.js.map → sync-definition-RECCA3QH.js.map} +0 -0
- /package/dist/{tag-manager-3GIW6BPB.js.map → tag-manager-JFC6YYVP.js.map} +0 -0
- /package/dist/{tags-UNUZVGUA.js.map → tags-IJIGZYR3.js.map} +0 -0
- /package/dist/{tags-2KNOJ7A6.js.map → tags-K4HIKHNU.js.map} +0 -0
- /package/dist/{tags-COALQ2CT.js.map → tags-OTA55BQ6.js.map} +0 -0
- /package/dist/{tags-MVC56SHA.js.map → tags-QF2V4B3M.js.map} +0 -0
- /package/dist/{tags-HCJTTLSR.js.map → tags-SK7WXMBS.js.map} +0 -0
- /package/dist/{targeting-constants-RJS2STR5.js.map → targeting-constants-RF2732EW.js.map} +0 -0
- /package/dist/{targeting-criteria-SMBIEM7U.js.map → targeting-criteria-7BUUYDYC.js.map} +0 -0
- /package/dist/{targets-BNH37YAQ.js.map → targets-7V3NCQSD.js.map} +0 -0
- /package/dist/{terms-AATAGKPT.js.map → terms-XFL6QO7A.js.map} +0 -0
- /package/dist/{testimonials-IIAT5IDM.js.map → testimonials-XYD5DLBJ.js.map} +0 -0
- /package/dist/{top-companies-PY2NL2GS.js.map → top-companies-LI26TONY.js.map} +0 -0
- /package/dist/{transcript-7WFXVRVW.js.map → transcript-FTHDWMGU.js.map} +0 -0
- /package/dist/{triggers-RBD2XGNG.js.map → triggers-3LHJVK5P.js.map} +0 -0
- /package/dist/{tweets-MLDLLLDB.js.map → tweets-6PQHJXJC.js.map} +0 -0
- /package/dist/{unlink-5IMEUVIS.js.map → unlink-BMOUBGWO.js.map} +0 -0
- /package/dist/{unstage-65DUBYNZ.js.map → unstage-O23ILHCY.js.map} +0 -0
- /package/dist/{unstage-DSOVSWEK.js.map → unstage-YEW5KXJL.js.map} +0 -0
- /package/dist/{update-HSS6CVUK.js.map → update-2IWZA5UU.js.map} +0 -0
- /package/dist/{update-XWL3Q5QY.js.map → update-G7YZICSU.js.map} +0 -0
- /package/dist/{update-FIU2ECYQ.js.map → update-T5INCQJZ.js.map} +0 -0
- /package/dist/{update-7JVV5ZL3.js.map → update-UTQVTG45.js.map} +0 -0
- /package/dist/{upload-B5SM33MK.js.map → upload-UXYJDA2U.js.map} +0 -0
- /package/dist/{url-options-4J3FRXHO.js.map → url-options-Y7I5EL55.js.map} +0 -0
- /package/dist/{url-params-TGCGWKAJ.js.map → url-params-PE4XAQNH.js.map} +0 -0
- /package/dist/{videos-NITQKILV.js.map → videos-AHOLXU42.js.map} +0 -0
- /package/dist/{videos-FMV4AVB2.js.map → videos-EVPJHY3B.js.map} +0 -0
- /package/dist/{viewer-check-2W6BTVQV.js.map → viewer-check-NA4TMNY4.js.map} +0 -0
- /package/dist/{web-K2EMYVCD.js.map → web-7EODEH25.js.map} +0 -0
- /package/dist/{winning-ads-Q3RXH7EC.js.map → winning-ads-5UKX6QV7.js.map} +0 -0
- /package/dist/{write-commands-XLZCRVTU.js.map → write-commands-LHEJESKL.js.map} +0 -0
- /package/dist/{write-commands-OBQPQUIE.js.map → write-commands-SD6DXVNK.js.map} +0 -0
- /package/dist/{x-PW43O6JS.js.map → x-R72UTFQT.js.map} +0 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CHATGPT_ADS_REFERENCE,
|
|
3
|
+
CHATGPT_CONVERSION_REPORT_LEVELS,
|
|
4
|
+
chatgptAdsConversionReportRequestSchema,
|
|
5
|
+
numberArg,
|
|
6
|
+
reportCsvArg,
|
|
7
|
+
runChatgptRead,
|
|
8
|
+
stringArg
|
|
9
|
+
} from "./chunk-3JOGDGGP.js";
|
|
10
|
+
import {
|
|
11
|
+
writeJsonEnvelope
|
|
12
|
+
} from "./chunk-MK4HCMEA.js";
|
|
13
|
+
import "./chunk-SOPVIIUW.js";
|
|
14
|
+
import "./chunk-G4FG5EQO.js";
|
|
15
|
+
import {
|
|
16
|
+
apiPost
|
|
17
|
+
} from "./chunk-QEREDRZO.js";
|
|
18
|
+
import "./chunk-JXTNP3B5.js";
|
|
19
|
+
import "./chunk-45D6WRCJ.js";
|
|
20
|
+
import {
|
|
21
|
+
registerSchema
|
|
22
|
+
} from "./chunk-CCYZJMZ7.js";
|
|
23
|
+
import "./chunk-YQSBHWOI.js";
|
|
24
|
+
|
|
25
|
+
// src/commands/ads/chatgpt/conversion-report.ts
|
|
26
|
+
import { defineCommand } from "citty";
|
|
27
|
+
var ARGS = {
|
|
28
|
+
level: {
|
|
29
|
+
type: "string",
|
|
30
|
+
description: `What one row is: ${CHATGPT_CONVERSION_REPORT_LEVELS.join("|")} (default campaign)`
|
|
31
|
+
},
|
|
32
|
+
ids: {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "Campaign, ad group or ad ids, comma-separated \u2014 one row each. Left out: one total for the account"
|
|
35
|
+
},
|
|
36
|
+
days: { type: "string", description: "Last N complete days, ending the account's yesterday (default 7, max 365)" },
|
|
37
|
+
since: { type: "string", description: "First day, YYYY-MM-DD, account timezone (instead of --days)" },
|
|
38
|
+
until: { type: "string", description: "Last day, inclusive, YYYY-MM-DD" },
|
|
39
|
+
granularity: { type: "string", description: "none (default: one total) | daily" },
|
|
40
|
+
segment: { type: "string", description: "Break rows down by device or country" },
|
|
41
|
+
"click-window": { type: "string", description: "Days after a click that count: 7, 14 or 30 (default 30)" },
|
|
42
|
+
"view-window": { type: "string", description: "Days after a view that count: 1 (default) or 0 to leave views out" },
|
|
43
|
+
events: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "Event names to detail, comma-separated, as the site sends them \u2014 goal or not (implies --with-events)"
|
|
46
|
+
},
|
|
47
|
+
"with-events": { type: "boolean", description: "Detail every attributed event, not just goal conversions" }
|
|
48
|
+
};
|
|
49
|
+
function conversionReportRequestFromArgs(args) {
|
|
50
|
+
return {
|
|
51
|
+
level: stringArg(args, "level"),
|
|
52
|
+
ids: reportCsvArg(args, "ids"),
|
|
53
|
+
since: stringArg(args, "since"),
|
|
54
|
+
until: stringArg(args, "until"),
|
|
55
|
+
days: numberArg(args, "days"),
|
|
56
|
+
granularity: stringArg(args, "granularity"),
|
|
57
|
+
segment: stringArg(args, "segment"),
|
|
58
|
+
clickWindowDays: numberArg(args, "click-window"),
|
|
59
|
+
viewWindowDays: numberArg(args, "view-window"),
|
|
60
|
+
events: reportCsvArg(args, "events"),
|
|
61
|
+
withEvents: args["with-events"] === true ? true : void 0
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function reportHints(report) {
|
|
65
|
+
const nothing = report.rows.every((row) => row.conversions === 0 && (row.events ?? []).length === 0);
|
|
66
|
+
return nothing ? [
|
|
67
|
+
"No attributed conversions in this window. Before concluding the ads do not convert: `conversions events` shows whether the site's events arrive at all, and `campaigns` whether anything served."
|
|
68
|
+
] : [
|
|
69
|
+
`Counted with a ${report.clickWindowDays}-day click and ${report.viewWindowDays}-day view window; a conversion eligible for both counts once, as a click. The latest days are still filling in.`
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
registerSchema({
|
|
73
|
+
command: "ads.chatgpt.conversions.report",
|
|
74
|
+
description: "Conversions ChatGPT Ads attributes to campaigns, ad groups or ads: goal conversions split into click-through and view-through, purchase value, and optionally every attributed event (goal or not), per day and by device or country, with the click (7/14/30) and view (0/1) windows chosen. At most 365 days.",
|
|
75
|
+
args: {
|
|
76
|
+
level: { type: "string", description: ARGS.level.description, required: false },
|
|
77
|
+
ids: { type: "string", description: ARGS.ids.description, required: false },
|
|
78
|
+
days: { type: "string", description: ARGS.days.description, required: false },
|
|
79
|
+
since: { type: "string", description: ARGS.since.description, required: false },
|
|
80
|
+
until: { type: "string", description: ARGS.until.description, required: false },
|
|
81
|
+
granularity: { type: "string", description: ARGS.granularity.description, required: false },
|
|
82
|
+
segment: { type: "string", description: ARGS.segment.description, required: false },
|
|
83
|
+
"click-window": { type: "string", description: ARGS["click-window"].description, required: false },
|
|
84
|
+
"view-window": { type: "string", description: ARGS["view-window"].description, required: false },
|
|
85
|
+
events: { type: "string", description: ARGS.events.description, required: false },
|
|
86
|
+
"with-events": { type: "boolean", description: ARGS["with-events"].description, required: false }
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
var conversionsReportCommand = defineCommand({
|
|
90
|
+
meta: {
|
|
91
|
+
name: "report",
|
|
92
|
+
description: `Conversions ChatGPT Ads attributes, click-through beside view-through.
|
|
93
|
+
|
|
94
|
+
Examples:
|
|
95
|
+
baker ads chatgpt conversions report # account total, last 7 days
|
|
96
|
+
baker ads chatgpt conversions report --ids cmpn_1,cmpn_2 --days 30 --segment device
|
|
97
|
+
baker ads chatgpt conversions report --view-window 0 --click-window 7 # clicks only, 7-day window
|
|
98
|
+
baker ads chatgpt conversions report --events quote_requested --granularity daily`
|
|
99
|
+
},
|
|
100
|
+
args: ARGS,
|
|
101
|
+
run: async ({ args }) => {
|
|
102
|
+
const parsed = chatgptAdsConversionReportRequestSchema.safeParse(conversionReportRequestFromArgs(args));
|
|
103
|
+
if (!parsed.success) {
|
|
104
|
+
const message = parsed.error.issues[0]?.message ?? "Invalid conversion report request";
|
|
105
|
+
writeJsonEnvelope({
|
|
106
|
+
ok: false,
|
|
107
|
+
error: {
|
|
108
|
+
code: "VALIDATION_ERROR",
|
|
109
|
+
message,
|
|
110
|
+
fix: { action: "retry_with_modified_query", explanation: message },
|
|
111
|
+
retryable: false
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
await runChatgptRead(
|
|
117
|
+
CHATGPT_ADS_REFERENCE.conversions,
|
|
118
|
+
() => apiPost("/api/ads/chatgpt/conversions/report", parsed.data),
|
|
119
|
+
reportHints
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
export {
|
|
124
|
+
conversionReportRequestFromArgs,
|
|
125
|
+
conversionsReportCommand
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=conversion-report-E35RCZU7.js.map
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
import {
|
|
2
|
+
failWriteValidation,
|
|
3
|
+
requireCustomerId,
|
|
4
|
+
stageGoogleOps
|
|
5
|
+
} from "./chunk-5I6XOSNI.js";
|
|
6
|
+
import "./chunk-ERSX3MKH.js";
|
|
7
|
+
import "./chunk-LZR7LSYO.js";
|
|
8
|
+
import "./chunk-55AX6DOP.js";
|
|
9
|
+
import "./chunk-MX5NQAK6.js";
|
|
10
|
+
import "./chunk-D5FY4FAK.js";
|
|
11
|
+
import "./chunk-4H6XLX7E.js";
|
|
12
|
+
import "./chunk-QALAJNBG.js";
|
|
13
|
+
import "./chunk-WZXMZFVB.js";
|
|
14
|
+
import "./chunk-MK4HCMEA.js";
|
|
15
|
+
import "./chunk-Y5PNLB24.js";
|
|
16
|
+
import "./chunk-N3PASNUA.js";
|
|
17
|
+
import "./chunk-E56V3RFO.js";
|
|
18
|
+
import "./chunk-EL3TDR5S.js";
|
|
19
|
+
import "./chunk-G6U45QD3.js";
|
|
20
|
+
import "./chunk-X6U3B6YK.js";
|
|
21
|
+
import "./chunk-R7XDGNZD.js";
|
|
22
|
+
import {
|
|
23
|
+
CONVERSION_UPLOAD_MAX_ROWS
|
|
24
|
+
} from "./chunk-IMS53EQU.js";
|
|
25
|
+
import "./chunk-QEREDRZO.js";
|
|
26
|
+
import "./chunk-JXTNP3B5.js";
|
|
27
|
+
import "./chunk-45D6WRCJ.js";
|
|
28
|
+
import "./chunk-CCYZJMZ7.js";
|
|
29
|
+
import "./chunk-YQSBHWOI.js";
|
|
30
|
+
|
|
31
|
+
// src/commands/ads/google/conversion-upload-command.ts
|
|
32
|
+
import { readFileSync } from "fs";
|
|
33
|
+
import { defineCommand } from "citty";
|
|
34
|
+
|
|
35
|
+
// src/commands/ads/google/conversion-rows.ts
|
|
36
|
+
var COLUMN_ALIASES = {
|
|
37
|
+
orderId: ["orderid", "order", "ordernumber", "transactionid", "transaction", "submissionid", "conversionid", "id"],
|
|
38
|
+
conversionDateTime: [
|
|
39
|
+
"conversiondatetime",
|
|
40
|
+
"conversiontime",
|
|
41
|
+
"conversiondate",
|
|
42
|
+
"datetime",
|
|
43
|
+
"date",
|
|
44
|
+
"time",
|
|
45
|
+
"timestamp",
|
|
46
|
+
"occurredat",
|
|
47
|
+
"createdat"
|
|
48
|
+
],
|
|
49
|
+
gclid: ["gclid"],
|
|
50
|
+
gbraid: ["gbraid"],
|
|
51
|
+
wbraid: ["wbraid"],
|
|
52
|
+
email: ["email", "emailaddress", "useremail", "mail"],
|
|
53
|
+
phone: ["phone", "phonenumber", "telephone", "mobile", "tel"],
|
|
54
|
+
value: ["value", "conversionvalue", "amount", "revenue", "price", "total"],
|
|
55
|
+
currency: ["currency", "currencycode", "conversioncurrency"],
|
|
56
|
+
conversionCount: ["conversioncount", "quantity", "count", "units"],
|
|
57
|
+
// Deliberately only the exact spelling: a `Source` or `Channel` column in a CRM export almost
|
|
58
|
+
// always holds an attribution channel, not one of Google's five event sources, and mapping it
|
|
59
|
+
// would refuse the whole file on a column an upload has no use for. Unmapped, it is dropped and
|
|
60
|
+
// named back in the hints, which is what those columns should get.
|
|
61
|
+
eventSource: ["eventsource"],
|
|
62
|
+
// Advanced matching. Each maps to one part of Google's address identifier; a row that carries the
|
|
63
|
+
// four required parts is matched on name + address as well as on whatever else it has.
|
|
64
|
+
// `name` is left out for the same reason: alone it produces a one-part `address`, and the
|
|
65
|
+
// contract requires all four parts, so a lone `Name` column would refuse the file.
|
|
66
|
+
givenName: ["givenname", "firstname", "forename"],
|
|
67
|
+
familyName: ["familyname", "lastname", "surname"],
|
|
68
|
+
regionCode: ["regioncode", "country", "countrycode"],
|
|
69
|
+
postalCode: ["postalcode", "postcode", "zip", "zipcode"],
|
|
70
|
+
addressLine: ["addressline", "address", "street", "streetaddress", "addressline1"],
|
|
71
|
+
city: ["city", "town", "locality"],
|
|
72
|
+
administrativeArea: ["administrativearea", "state", "province", "region"]
|
|
73
|
+
};
|
|
74
|
+
var NUMERIC_KEYS = /* @__PURE__ */ new Set(["value", "conversionCount"]);
|
|
75
|
+
function normalizeColumn(raw) {
|
|
76
|
+
return raw.trim().toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
77
|
+
}
|
|
78
|
+
function payloadKeyForColumn(column) {
|
|
79
|
+
const normalized = normalizeColumn(column);
|
|
80
|
+
for (const [key, aliases] of Object.entries(COLUMN_ALIASES)) {
|
|
81
|
+
if (normalizeColumn(key) === normalized || aliases.includes(normalized)) {
|
|
82
|
+
return key;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return void 0;
|
|
86
|
+
}
|
|
87
|
+
var ADDRESS_KEYS = [
|
|
88
|
+
"givenName",
|
|
89
|
+
"familyName",
|
|
90
|
+
"regionCode",
|
|
91
|
+
"postalCode",
|
|
92
|
+
"addressLine",
|
|
93
|
+
"city",
|
|
94
|
+
"administrativeArea"
|
|
95
|
+
];
|
|
96
|
+
function nestAddress(row) {
|
|
97
|
+
const address = {};
|
|
98
|
+
for (const key of ADDRESS_KEYS) {
|
|
99
|
+
if (row[key] !== void 0) {
|
|
100
|
+
address[key] = row[key];
|
|
101
|
+
delete row[key];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return Object.keys(address).length > 0 ? { ...row, address } : row;
|
|
105
|
+
}
|
|
106
|
+
function toRow(record) {
|
|
107
|
+
const row = {};
|
|
108
|
+
const ignored = [];
|
|
109
|
+
for (const [column, raw] of Object.entries(record)) {
|
|
110
|
+
const key = payloadKeyForColumn(column);
|
|
111
|
+
if (!key) {
|
|
112
|
+
if (column.trim() !== "") {
|
|
113
|
+
ignored.push(column.trim());
|
|
114
|
+
}
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const value = cellValue(key, raw);
|
|
118
|
+
if (value !== void 0) {
|
|
119
|
+
row[key] = value;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { row: nestAddress(row), ignored };
|
|
123
|
+
}
|
|
124
|
+
function cellValue(key, raw) {
|
|
125
|
+
const value = typeof raw === "string" ? raw.trim() : raw;
|
|
126
|
+
if (value === "" || value === null || value === void 0) {
|
|
127
|
+
return void 0;
|
|
128
|
+
}
|
|
129
|
+
if (!NUMERIC_KEYS.has(key)) {
|
|
130
|
+
return typeof value === "number" ? String(value) : value;
|
|
131
|
+
}
|
|
132
|
+
const numeric = typeof value === "number" ? value : Number(String(value).replace(/[^\d.-]/g, ""));
|
|
133
|
+
return Number.isFinite(numeric) ? numeric : value;
|
|
134
|
+
}
|
|
135
|
+
var CSV_SEPARATORS = /* @__PURE__ */ new Set([",", ";", " "]);
|
|
136
|
+
function splitCsvLine(line) {
|
|
137
|
+
const fields = [];
|
|
138
|
+
let current = "";
|
|
139
|
+
let quoted = false;
|
|
140
|
+
for (let i = 0; i < line.length; i++) {
|
|
141
|
+
const char = line[i];
|
|
142
|
+
if (quoted && char !== '"') {
|
|
143
|
+
current += char;
|
|
144
|
+
} else if (quoted) {
|
|
145
|
+
quoted = line[i + 1] === '"';
|
|
146
|
+
if (quoted) {
|
|
147
|
+
current += '"';
|
|
148
|
+
i += 1;
|
|
149
|
+
}
|
|
150
|
+
} else if (char === '"') {
|
|
151
|
+
quoted = true;
|
|
152
|
+
} else if (CSV_SEPARATORS.has(char ?? "")) {
|
|
153
|
+
fields.push(current);
|
|
154
|
+
current = "";
|
|
155
|
+
} else {
|
|
156
|
+
current += char;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
fields.push(current);
|
|
160
|
+
return fields.map((field) => field.trim());
|
|
161
|
+
}
|
|
162
|
+
function parseCsv(text) {
|
|
163
|
+
const lines = text.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0);
|
|
164
|
+
const header = lines.shift();
|
|
165
|
+
if (!header) {
|
|
166
|
+
return { ok: false, error: "the file is empty" };
|
|
167
|
+
}
|
|
168
|
+
const columns = splitCsvLine(header);
|
|
169
|
+
if (!columns.some((column) => payloadKeyForColumn(column))) {
|
|
170
|
+
return {
|
|
171
|
+
ok: false,
|
|
172
|
+
error: `no column in "${columns.join(", ")}" is a conversion field \u2014 the file needs at least an order id, a date and something to match on (gclid / email / phone)`
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const rows = [];
|
|
176
|
+
const ignored = /* @__PURE__ */ new Set();
|
|
177
|
+
for (const line of lines) {
|
|
178
|
+
const fields = splitCsvLine(line);
|
|
179
|
+
const record = {};
|
|
180
|
+
columns.forEach((column, index) => {
|
|
181
|
+
record[column] = fields[index] ?? "";
|
|
182
|
+
});
|
|
183
|
+
const parsed = toRow(record);
|
|
184
|
+
for (const column of parsed.ignored) {
|
|
185
|
+
ignored.add(column);
|
|
186
|
+
}
|
|
187
|
+
rows.push(parsed.row);
|
|
188
|
+
}
|
|
189
|
+
return { ok: true, rows, ignoredColumns: [...ignored] };
|
|
190
|
+
}
|
|
191
|
+
function isRecord(value) {
|
|
192
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
193
|
+
}
|
|
194
|
+
function recordsOfJson(parsed) {
|
|
195
|
+
if (Array.isArray(parsed)) {
|
|
196
|
+
return parsed;
|
|
197
|
+
}
|
|
198
|
+
if (!isRecord(parsed)) {
|
|
199
|
+
return void 0;
|
|
200
|
+
}
|
|
201
|
+
for (const key of ["conversions", "rows", "data", "results"]) {
|
|
202
|
+
const value = parsed[key];
|
|
203
|
+
if (Array.isArray(value)) {
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return void 0;
|
|
208
|
+
}
|
|
209
|
+
function parseJsonRecords(records) {
|
|
210
|
+
const rows = [];
|
|
211
|
+
const ignored = /* @__PURE__ */ new Set();
|
|
212
|
+
for (const [index, record] of records.entries()) {
|
|
213
|
+
if (!isRecord(record)) {
|
|
214
|
+
return { ok: false, error: `conversion ${index + 1} is not an object` };
|
|
215
|
+
}
|
|
216
|
+
const parsed = toRow(record);
|
|
217
|
+
for (const column of parsed.ignored) {
|
|
218
|
+
ignored.add(column);
|
|
219
|
+
}
|
|
220
|
+
rows.push(parsed.row);
|
|
221
|
+
}
|
|
222
|
+
return { ok: true, rows, ignoredColumns: [...ignored] };
|
|
223
|
+
}
|
|
224
|
+
function parseJsonText(trimmed) {
|
|
225
|
+
const lines = trimmed.split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
226
|
+
if (lines.length > 1 && lines.every((line) => line.trim().startsWith("{"))) {
|
|
227
|
+
const records2 = [];
|
|
228
|
+
for (const [index, line] of lines.entries()) {
|
|
229
|
+
try {
|
|
230
|
+
records2.push(JSON.parse(line));
|
|
231
|
+
} catch {
|
|
232
|
+
return { ok: false, error: `line ${index + 1} is not valid JSON` };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return parseJsonRecords(records2);
|
|
236
|
+
}
|
|
237
|
+
let parsed;
|
|
238
|
+
try {
|
|
239
|
+
parsed = JSON.parse(trimmed);
|
|
240
|
+
} catch (err) {
|
|
241
|
+
return { ok: false, error: `not valid JSON: ${err instanceof Error ? err.message : String(err)}` };
|
|
242
|
+
}
|
|
243
|
+
const records = recordsOfJson(parsed);
|
|
244
|
+
if (!records) {
|
|
245
|
+
return { ok: false, error: "expected a JSON array of conversions, or an object with a `conversions` array" };
|
|
246
|
+
}
|
|
247
|
+
return parseJsonRecords(records);
|
|
248
|
+
}
|
|
249
|
+
function parseConversionRowsText(text) {
|
|
250
|
+
const trimmed = text.trim();
|
|
251
|
+
if (trimmed === "") {
|
|
252
|
+
return { ok: false, error: "the file is empty" };
|
|
253
|
+
}
|
|
254
|
+
if (trimmed.startsWith("[") || trimmed.startsWith("{")) {
|
|
255
|
+
return parseJsonText(trimmed);
|
|
256
|
+
}
|
|
257
|
+
return parseCsv(trimmed);
|
|
258
|
+
}
|
|
259
|
+
function chunkConversionRows(rows, size) {
|
|
260
|
+
const chunks = [];
|
|
261
|
+
for (let i = 0; i < rows.length; i += size) {
|
|
262
|
+
chunks.push(rows.slice(i, i + size));
|
|
263
|
+
}
|
|
264
|
+
return chunks;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// src/commands/ads/google/conversion-upload-command.ts
|
|
268
|
+
var UPLOAD_HINTS = [
|
|
269
|
+
"Nothing has been uploaded yet \u2014 the conversions are staged and go to Google when this chat is published.",
|
|
270
|
+
"Reuse each conversion's ORIGINAL order id (the Form submission id, the order number the site issued). Google recognises an upload it already holds by that id, which is what makes a re-send a correction instead of a second conversion \u2014 a made-up id cannot be taken back.",
|
|
271
|
+
"Say plainly what was uploaded and what it was for. A conversion upload changes what automated bidding optimises toward, so the client should hear the count and the action, not just that it worked."
|
|
272
|
+
];
|
|
273
|
+
function ignoredColumnHints(columns) {
|
|
274
|
+
if (columns.length === 0) {
|
|
275
|
+
return [];
|
|
276
|
+
}
|
|
277
|
+
return [
|
|
278
|
+
`Ignored ${columns.length} column(s) that are not part of a conversion: ${columns.join(", ")}. A conversion carries an order id, a date, and something to match on: a click id (gclid / gbraid / wbraid), an email, a phone, or all four of givenName + familyName + country + postalCode. Optionally a value + currency, conversionCount, and eventSource (WEB / APP / IN_STORE / PHONE / OTHER). A column named just \`Name\` is ignored on purpose \u2014 Google needs the first and last name separately, so split it before re-running.`
|
|
279
|
+
];
|
|
280
|
+
}
|
|
281
|
+
function readRowsFile(path) {
|
|
282
|
+
const inline = path.trimStart().startsWith("[") || path.trimStart().startsWith("{");
|
|
283
|
+
let text;
|
|
284
|
+
try {
|
|
285
|
+
text = inline ? path : readFileSync(path, "utf8");
|
|
286
|
+
} catch (err) {
|
|
287
|
+
failWriteValidation(`could not read ${path}: ${err instanceof Error ? err.message : String(err)}`);
|
|
288
|
+
}
|
|
289
|
+
const parsed = parseConversionRowsText(text);
|
|
290
|
+
if (!parsed.ok) {
|
|
291
|
+
failWriteValidation(`${inline ? "the conversions passed inline" : path}: ${parsed.error}`);
|
|
292
|
+
}
|
|
293
|
+
return { rows: parsed.rows, ignoredColumns: parsed.ignoredColumns };
|
|
294
|
+
}
|
|
295
|
+
function rowFromFlags(args) {
|
|
296
|
+
const entries = [
|
|
297
|
+
["orderId", args["order-id"]],
|
|
298
|
+
["conversionDateTime", args.date],
|
|
299
|
+
["gclid", args.gclid],
|
|
300
|
+
["gbraid", args.gbraid],
|
|
301
|
+
["wbraid", args.wbraid],
|
|
302
|
+
["email", args.email],
|
|
303
|
+
["phone", args.phone],
|
|
304
|
+
["currency", args.currency],
|
|
305
|
+
["eventSource", args["event-source"]],
|
|
306
|
+
["givenName", args["given-name"]],
|
|
307
|
+
["familyName", args["family-name"]],
|
|
308
|
+
["regionCode", args.country],
|
|
309
|
+
["postalCode", args["postal-code"]]
|
|
310
|
+
];
|
|
311
|
+
const row = {};
|
|
312
|
+
for (const [key, value] of entries) {
|
|
313
|
+
if (typeof value === "string" && value.trim() !== "") {
|
|
314
|
+
row[key] = value.trim();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
nestAddressFlags(row);
|
|
318
|
+
readNumericFlags(args, row);
|
|
319
|
+
return Object.keys(row).length > 0 ? row : void 0;
|
|
320
|
+
}
|
|
321
|
+
function nestAddressFlags(row) {
|
|
322
|
+
const address = {};
|
|
323
|
+
for (const key of ["givenName", "familyName", "regionCode", "postalCode"]) {
|
|
324
|
+
if (row[key] !== void 0) {
|
|
325
|
+
address[key] = row[key];
|
|
326
|
+
delete row[key];
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (Object.keys(address).length > 0) {
|
|
330
|
+
row.address = address;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function readNumericFlags(args, row) {
|
|
334
|
+
if (args["conversion-count"] !== void 0 && args["conversion-count"] !== "") {
|
|
335
|
+
const count = Number(args["conversion-count"]);
|
|
336
|
+
if (!Number.isInteger(count) || count < 1) {
|
|
337
|
+
failWriteValidation("--conversion-count must be a whole number of conversions, e.g. 3");
|
|
338
|
+
}
|
|
339
|
+
row.conversionCount = count;
|
|
340
|
+
}
|
|
341
|
+
if (args.value !== void 0 && args.value !== "") {
|
|
342
|
+
const numeric = Number(args.value);
|
|
343
|
+
if (!Number.isFinite(numeric)) {
|
|
344
|
+
failWriteValidation("--value must be a number in major currency units, e.g. 49.90");
|
|
345
|
+
}
|
|
346
|
+
row.value = numeric;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
var conversionsUploadCommand = defineCommand({
|
|
350
|
+
meta: {
|
|
351
|
+
name: "upload",
|
|
352
|
+
description: "Upload conversions Google never received \u2014 a backfill for a period where the tracking was broken. Start here: `conversions upload --customer-id 1234567890 --conversion-action 987654321 --file missing.csv`, where the file carries one conversion per row with an order id, a date, and a gclid and/or an email. Nothing reaches Google until the chat is published. Reuse each conversion's ORIGINAL order id so a re-send is treated as a correction rather than a second conversion. Read the account's actions first with: baker ads google query \"SELECT conversion_action.id, conversion_action.name, conversion_action.status FROM conversion_action\""
|
|
353
|
+
},
|
|
354
|
+
args: {
|
|
355
|
+
"customer-id": { type: "string", description: "10-digit Google Ads customer id" },
|
|
356
|
+
"conversion-action": {
|
|
357
|
+
type: "string",
|
|
358
|
+
description: "The conversion action to record these against \u2014 its numeric id or resource name"
|
|
359
|
+
},
|
|
360
|
+
file: {
|
|
361
|
+
type: "string",
|
|
362
|
+
description: "The conversions: a path to a CSV / JSON / JSONL file, or the JSON array written inline. Columns: orderId, conversionDateTime, gclid | gbraid | wbraid, email, phone, givenName + familyName + country + postalCode (advanced matching), value, currency, conversionCount, eventSource"
|
|
363
|
+
},
|
|
364
|
+
"order-id": { type: "string", description: "Single conversion: its original order / submission id" },
|
|
365
|
+
date: {
|
|
366
|
+
type: "string",
|
|
367
|
+
description: "Single conversion: when it happened, as an ISO-8601 instant WITH a timezone (2026-08-01T10:00:00Z or 2026-08-01T12:00:00+02:00)"
|
|
368
|
+
},
|
|
369
|
+
gclid: { type: "string", description: "Single conversion: the Google click id it came from" },
|
|
370
|
+
gbraid: { type: "string", description: "Single conversion: the gbraid click id (app-to-web)" },
|
|
371
|
+
wbraid: { type: "string", description: "Single conversion: the wbraid click id (web-to-app)" },
|
|
372
|
+
email: { type: "string", description: "Single conversion: the customer's email \u2014 hashed before it is stored" },
|
|
373
|
+
phone: {
|
|
374
|
+
type: "string",
|
|
375
|
+
description: "Single conversion: the customer's phone in E.164 \u2014 hashed before it is stored"
|
|
376
|
+
},
|
|
377
|
+
value: { type: "string", description: "Single conversion: what it was worth, in major currency units" },
|
|
378
|
+
currency: { type: "string", description: "Single conversion: the value's 3-letter currency code, e.g. EUR" },
|
|
379
|
+
"conversion-count": {
|
|
380
|
+
type: "string",
|
|
381
|
+
description: "Single conversion: how many conversions this row stands for. Only read on an EVERY-counting conversion action; defaults to 1"
|
|
382
|
+
},
|
|
383
|
+
"event-source": {
|
|
384
|
+
type: "string",
|
|
385
|
+
description: "Single conversion: where it happened \u2014 WEB (default), APP, IN_STORE, PHONE or OTHER"
|
|
386
|
+
},
|
|
387
|
+
"given-name": {
|
|
388
|
+
type: "string",
|
|
389
|
+
description: "Single conversion: the customer's first name \u2014 advanced matching, hashed before it is stored"
|
|
390
|
+
},
|
|
391
|
+
"family-name": {
|
|
392
|
+
type: "string",
|
|
393
|
+
description: "Single conversion: the customer's last name \u2014 advanced matching, hashed before it is stored"
|
|
394
|
+
},
|
|
395
|
+
country: {
|
|
396
|
+
type: "string",
|
|
397
|
+
description: "Single conversion: the customer's 2-letter country code, e.g. ES \u2014 required with a name/address match"
|
|
398
|
+
},
|
|
399
|
+
"postal-code": {
|
|
400
|
+
type: "string",
|
|
401
|
+
description: "Single conversion: the customer's postcode \u2014 required with a name/address match"
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
run: async ({ args }) => {
|
|
405
|
+
const customerId = requireCustomerId(args);
|
|
406
|
+
const conversionAction = typeof args["conversion-action"] === "string" ? args["conversion-action"].trim() : "";
|
|
407
|
+
if (conversionAction === "") {
|
|
408
|
+
failWriteValidation(
|
|
409
|
+
'--conversion-action is required: the action these conversions are recorded against. List them with: baker ads google query "SELECT conversion_action.id, conversion_action.name, conversion_action.status FROM conversion_action"'
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
const fromFile = typeof args.file === "string" && args.file.length > 0 ? readRowsFile(args.file) : void 0;
|
|
413
|
+
const fromFlags = rowFromFlags(args);
|
|
414
|
+
if (fromFile && fromFlags) {
|
|
415
|
+
failWriteValidation(
|
|
416
|
+
"pass either --file (a list of conversions) or the single-conversion flags, not both \u2014 otherwise it is ambiguous which row the flags belong to"
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
const rows = fromFile?.rows ?? (fromFlags ? [fromFlags] : []);
|
|
420
|
+
if (rows.length === 0) {
|
|
421
|
+
failWriteValidation(
|
|
422
|
+
"no conversions to upload \u2014 pass --file with the conversions, or describe one with --order-id, --date and a --gclid / --email"
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
const chunks = chunkConversionRows(rows, CONVERSION_UPLOAD_MAX_ROWS);
|
|
426
|
+
const ops = chunks.map((conversions) => ({
|
|
427
|
+
kind: "google.conversion.upload",
|
|
428
|
+
customerId,
|
|
429
|
+
payload: { conversionAction, conversions }
|
|
430
|
+
}));
|
|
431
|
+
const chunkHint = chunks.length > 1 ? [
|
|
432
|
+
`${rows.length} conversions staged as ${chunks.length} uploads of up to ${CONVERSION_UPLOAD_MAX_ROWS} each. They publish independently \u2014 report the result of all ${chunks.length}, not just the first.`
|
|
433
|
+
] : [];
|
|
434
|
+
await stageGoogleOps(ops, [...chunkHint, ...ignoredColumnHints(fromFile?.ignoredColumns ?? []), ...UPLOAD_HINTS]);
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
export {
|
|
438
|
+
conversionsUploadCommand
|
|
439
|
+
};
|
|
440
|
+
//# sourceMappingURL=conversion-upload-command-QN33HEVV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/ads/google/conversion-upload-command.ts","../src/commands/ads/google/conversion-rows.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { CONVERSION_UPLOAD_MAX_ROWS } from \"@baker/api/ads-google\";\nimport { defineCommand } from \"citty\";\nimport { chunkConversionRows, parseConversionRowsText } from \"./conversion-rows.ts\";\nimport { failWriteValidation, requireCustomerId, stageGoogleOps } from \"./write-shared.ts\";\n\n/**\n * `baker ads google conversions upload` — file conversions Google never received.\n *\n * This is a repair command, not a measurement one. The normal path for a conversion is the tag on\n * the page and the server-side send behind it; this exists for the days that path was broken — a\n * Google connection that had lost its permission, an outage, a tag pointed at the wrong action —\n * where the conversions really happened and the account has no record of them.\n *\n * It stages like every other Google change: nothing reaches Google until the chat is published, and\n * the change list shows how many conversions, into which action, worth how much, and how many of\n * them can be matched by click id rather than by customer details.\n */\n\nconst UPLOAD_HINTS = [\n \"Nothing has been uploaded yet — the conversions are staged and go to Google when this chat is published.\",\n \"Reuse each conversion's ORIGINAL order id (the Form submission id, the order number the site issued). Google recognises an upload it already holds by that id, which is what makes a re-send a correction instead of a second conversion — a made-up id cannot be taken back.\",\n \"Say plainly what was uploaded and what it was for. A conversion upload changes what automated bidding optimises toward, so the client should hear the count and the action, not just that it worked.\",\n];\n\n/**\n * The command's own hints about what did not make it into the staged rows. A dropped column is\n * stated because the alternative — a value the user believed they sent, silently absent — is\n * indistinguishable from a working upload right up until the numbers are wrong.\n */\nfunction ignoredColumnHints(columns: readonly string[]): string[] {\n if (columns.length === 0) {\n return [];\n }\n return [\n `Ignored ${columns.length} column(s) that are not part of a conversion: ${columns.join(\", \")}. A conversion carries an order id, a date, and something to match on: a click id (gclid / gbraid / wbraid), an email, a phone, or all four of givenName + familyName + country + postalCode. Optionally a value + currency, conversionCount, and eventSource (WEB / APP / IN_STORE / PHONE / OTHER). A column named just \\`Name\\` is ignored on purpose — Google needs the first and last name separately, so split it before re-running.`,\n ];\n}\n\nfunction readRowsFile(path: string): { rows: Record<string, unknown>[]; ignoredColumns: string[] } {\n // Inline content is read the same way `--file` is everywhere else on this surface: a leading `[`\n // or `{` is the data itself, anything else is a path.\n const inline = path.trimStart().startsWith(\"[\") || path.trimStart().startsWith(\"{\");\n let text: string;\n try {\n text = inline ? path : readFileSync(path, \"utf8\");\n } catch (err) {\n failWriteValidation(`could not read ${path}: ${err instanceof Error ? err.message : String(err)}`);\n }\n const parsed = parseConversionRowsText(text);\n if (!parsed.ok) {\n failWriteValidation(`${inline ? \"the conversions passed inline\" : path}: ${parsed.error}`);\n }\n return { rows: parsed.rows, ignoredColumns: parsed.ignoredColumns };\n}\n\n/** The single conversion described by flags, or undefined when none of them were used. */\nfunction rowFromFlags(args: Record<string, unknown>): Record<string, unknown> | undefined {\n const entries: Array<[string, unknown]> = [\n [\"orderId\", args[\"order-id\"]],\n [\"conversionDateTime\", args.date],\n [\"gclid\", args.gclid],\n [\"gbraid\", args.gbraid],\n [\"wbraid\", args.wbraid],\n [\"email\", args.email],\n [\"phone\", args.phone],\n [\"currency\", args.currency],\n [\"eventSource\", args[\"event-source\"]],\n [\"givenName\", args[\"given-name\"]],\n [\"familyName\", args[\"family-name\"]],\n [\"regionCode\", args.country],\n [\"postalCode\", args[\"postal-code\"]],\n ];\n const row: Record<string, unknown> = {};\n for (const [key, value] of entries) {\n if (typeof value === \"string\" && value.trim() !== \"\") {\n row[key] = value.trim();\n }\n }\n nestAddressFlags(row);\n readNumericFlags(args, row);\n return Object.keys(row).length > 0 ? row : undefined;\n}\n\n/**\n * The four address parts travel together into the nested identifier. A partial one is kept nested so\n * the contract refuses it by name — dropping it here would turn a fixable mistake into conversions\n * that match nobody.\n */\nfunction nestAddressFlags(row: Record<string, unknown>): void {\n const address: Record<string, unknown> = {};\n for (const key of [\"givenName\", \"familyName\", \"regionCode\", \"postalCode\"]) {\n if (row[key] !== undefined) {\n address[key] = row[key];\n delete row[key];\n }\n }\n if (Object.keys(address).length > 0) {\n row.address = address;\n }\n}\n\nfunction readNumericFlags(args: Record<string, unknown>, row: Record<string, unknown>): void {\n if (args[\"conversion-count\"] !== undefined && args[\"conversion-count\"] !== \"\") {\n const count = Number(args[\"conversion-count\"]);\n if (!Number.isInteger(count) || count < 1) {\n failWriteValidation(\"--conversion-count must be a whole number of conversions, e.g. 3\");\n }\n row.conversionCount = count;\n }\n if (args.value !== undefined && args.value !== \"\") {\n const numeric = Number(args.value);\n if (!Number.isFinite(numeric)) {\n failWriteValidation(\"--value must be a number in major currency units, e.g. 49.90\");\n }\n row.value = numeric;\n }\n}\n\nexport const conversionsUploadCommand = defineCommand({\n meta: {\n name: \"upload\",\n description:\n \"Upload conversions Google never received — a backfill for a period where the tracking was broken. Start here: `conversions upload --customer-id 1234567890 --conversion-action 987654321 --file missing.csv`, where the file carries one conversion per row with an order id, a date, and a gclid and/or an email. Nothing reaches Google until the chat is published. Reuse each conversion's ORIGINAL order id so a re-send is treated as a correction rather than a second conversion. Read the account's actions first with: baker ads google query \\\"SELECT conversion_action.id, conversion_action.name, conversion_action.status FROM conversion_action\\\"\",\n },\n args: {\n \"customer-id\": { type: \"string\", description: \"10-digit Google Ads customer id\" },\n \"conversion-action\": {\n type: \"string\",\n description: \"The conversion action to record these against — its numeric id or resource name\",\n },\n file: {\n type: \"string\",\n description:\n \"The conversions: a path to a CSV / JSON / JSONL file, or the JSON array written inline. Columns: orderId, conversionDateTime, gclid | gbraid | wbraid, email, phone, givenName + familyName + country + postalCode (advanced matching), value, currency, conversionCount, eventSource\",\n },\n \"order-id\": { type: \"string\", description: \"Single conversion: its original order / submission id\" },\n date: {\n type: \"string\",\n description:\n \"Single conversion: when it happened, as an ISO-8601 instant WITH a timezone (2026-08-01T10:00:00Z or 2026-08-01T12:00:00+02:00)\",\n },\n gclid: { type: \"string\", description: \"Single conversion: the Google click id it came from\" },\n gbraid: { type: \"string\", description: \"Single conversion: the gbraid click id (app-to-web)\" },\n wbraid: { type: \"string\", description: \"Single conversion: the wbraid click id (web-to-app)\" },\n email: { type: \"string\", description: \"Single conversion: the customer's email — hashed before it is stored\" },\n phone: {\n type: \"string\",\n description: \"Single conversion: the customer's phone in E.164 — hashed before it is stored\",\n },\n value: { type: \"string\", description: \"Single conversion: what it was worth, in major currency units\" },\n currency: { type: \"string\", description: \"Single conversion: the value's 3-letter currency code, e.g. EUR\" },\n \"conversion-count\": {\n type: \"string\",\n description:\n \"Single conversion: how many conversions this row stands for. Only read on an EVERY-counting conversion action; defaults to 1\",\n },\n \"event-source\": {\n type: \"string\",\n description: \"Single conversion: where it happened — WEB (default), APP, IN_STORE, PHONE or OTHER\",\n },\n \"given-name\": {\n type: \"string\",\n description: \"Single conversion: the customer's first name — advanced matching, hashed before it is stored\",\n },\n \"family-name\": {\n type: \"string\",\n description: \"Single conversion: the customer's last name — advanced matching, hashed before it is stored\",\n },\n country: {\n type: \"string\",\n description:\n \"Single conversion: the customer's 2-letter country code, e.g. ES — required with a name/address match\",\n },\n \"postal-code\": {\n type: \"string\",\n description: \"Single conversion: the customer's postcode — required with a name/address match\",\n },\n },\n run: async ({ args }) => {\n const customerId = requireCustomerId(args);\n const conversionAction = typeof args[\"conversion-action\"] === \"string\" ? args[\"conversion-action\"].trim() : \"\";\n if (conversionAction === \"\") {\n failWriteValidation(\n '--conversion-action is required: the action these conversions are recorded against. List them with: baker ads google query \"SELECT conversion_action.id, conversion_action.name, conversion_action.status FROM conversion_action\"',\n );\n }\n\n const fromFile = typeof args.file === \"string\" && args.file.length > 0 ? readRowsFile(args.file) : undefined;\n const fromFlags = rowFromFlags(args);\n if (fromFile && fromFlags) {\n failWriteValidation(\n \"pass either --file (a list of conversions) or the single-conversion flags, not both — otherwise it is ambiguous which row the flags belong to\",\n );\n }\n const rows = fromFile?.rows ?? (fromFlags ? [fromFlags] : []);\n if (rows.length === 0) {\n failWriteValidation(\n \"no conversions to upload — pass --file with the conversions, or describe one with --order-id, --date and a --gclid / --email\",\n );\n }\n\n // Chunked rather than refused: a month of lost conversions is routinely more rows than one\n // staged change should carry, and splitting it here means the reviewer sees several readable\n // cards instead of one they cannot check. Each chunk stages as its own op and succeeds or fails\n // on its own at publish.\n const chunks = chunkConversionRows(rows, CONVERSION_UPLOAD_MAX_ROWS);\n const ops = chunks.map((conversions) => ({\n kind: \"google.conversion.upload\",\n customerId,\n payload: { conversionAction, conversions },\n }));\n const chunkHint =\n chunks.length > 1\n ? [\n `${rows.length} conversions staged as ${chunks.length} uploads of up to ${CONVERSION_UPLOAD_MAX_ROWS} each. They publish independently — report the result of all ${chunks.length}, not just the first.`,\n ]\n : [];\n await stageGoogleOps(ops, [...chunkHint, ...ignoredColumnHints(fromFile?.ignoredColumns ?? []), ...UPLOAD_HINTS]);\n },\n});\n","/**\n * Reading the conversions a manual upload is built from.\n *\n * A backfill arrives as whatever the client could export — a CSV out of a spreadsheet or their CRM,\n * a JSON dump, one row pasted on the command line. All three land here and leave as the same row\n * shape the `@baker/api` contract validates, so the schema stays the single source of truth about\n * what a conversion is and this module only has to answer \"which column was that\".\n *\n * Two decisions worth keeping:\n *\n * - **Column names are matched loosely, values never are.** `Order ID`, `order_id` and\n * `transaction_id` are the same column; what is inside it is passed through untouched, because a\n * click id that has been \"helpfully\" trimmed is a click id that matches nothing.\n * - **Unknown columns are dropped and named.** A real CRM export carries twenty columns we have no\n * use for, so refusing the file would make the command unusable — but a column that vanishes\n * without being mentioned is how a value the user believed they sent turns out never to have\n * been sent. They are dropped and listed back.\n */\n\n/** Payload keys a row can carry, and the column names each is recognised by. */\nconst COLUMN_ALIASES: Record<string, readonly string[]> = {\n orderId: [\"orderid\", \"order\", \"ordernumber\", \"transactionid\", \"transaction\", \"submissionid\", \"conversionid\", \"id\"],\n conversionDateTime: [\n \"conversiondatetime\",\n \"conversiontime\",\n \"conversiondate\",\n \"datetime\",\n \"date\",\n \"time\",\n \"timestamp\",\n \"occurredat\",\n \"createdat\",\n ],\n gclid: [\"gclid\"],\n gbraid: [\"gbraid\"],\n wbraid: [\"wbraid\"],\n email: [\"email\", \"emailaddress\", \"useremail\", \"mail\"],\n phone: [\"phone\", \"phonenumber\", \"telephone\", \"mobile\", \"tel\"],\n value: [\"value\", \"conversionvalue\", \"amount\", \"revenue\", \"price\", \"total\"],\n currency: [\"currency\", \"currencycode\", \"conversioncurrency\"],\n conversionCount: [\"conversioncount\", \"quantity\", \"count\", \"units\"],\n // Deliberately only the exact spelling: a `Source` or `Channel` column in a CRM export almost\n // always holds an attribution channel, not one of Google's five event sources, and mapping it\n // would refuse the whole file on a column an upload has no use for. Unmapped, it is dropped and\n // named back in the hints, which is what those columns should get.\n eventSource: [\"eventsource\"],\n // Advanced matching. Each maps to one part of Google's address identifier; a row that carries the\n // four required parts is matched on name + address as well as on whatever else it has.\n // `name` is left out for the same reason: alone it produces a one-part `address`, and the\n // contract requires all four parts, so a lone `Name` column would refuse the file.\n givenName: [\"givenname\", \"firstname\", \"forename\"],\n familyName: [\"familyname\", \"lastname\", \"surname\"],\n regionCode: [\"regioncode\", \"country\", \"countrycode\"],\n postalCode: [\"postalcode\", \"postcode\", \"zip\", \"zipcode\"],\n addressLine: [\"addressline\", \"address\", \"street\", \"streetaddress\", \"addressline1\"],\n city: [\"city\", \"town\", \"locality\"],\n administrativeArea: [\"administrativearea\", \"state\", \"province\", \"region\"],\n};\n\n/** Numeric payload keys — everything else stays the string it arrived as. */\nconst NUMERIC_KEYS = new Set([\"value\", \"conversionCount\"]);\n\nfunction normalizeColumn(raw: string): string {\n return raw\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]/g, \"\");\n}\n\n/** The payload key a column name means, or undefined when it means nothing to an upload. */\nexport function payloadKeyForColumn(column: string): string | undefined {\n const normalized = normalizeColumn(column);\n for (const [key, aliases] of Object.entries(COLUMN_ALIASES)) {\n if (normalizeColumn(key) === normalized || aliases.includes(normalized)) {\n return key;\n }\n }\n return undefined;\n}\n\nexport interface ParsedConversionRows {\n rows: Record<string, unknown>[];\n /** Column names that were present and carried nothing an upload uses. */\n ignoredColumns: string[];\n}\n\nexport type ParseConversionRowsResult = ({ ok: true } & ParsedConversionRows) | { ok: false; error: string };\n\n/**\n * One raw record → the payload row shape. A blank cell is dropped rather than sent as `\"\"`: an empty\n * `gclid` column on a row matched by email would otherwise fail validation for carrying a click id\n * that is not one, which describes the spreadsheet rather than the conversion.\n */\n/** The address parts, in the flat column names a spreadsheet uses. */\nconst ADDRESS_KEYS = [\n \"givenName\",\n \"familyName\",\n \"regionCode\",\n \"postalCode\",\n \"addressLine\",\n \"city\",\n \"administrativeArea\",\n] as const;\n\n/**\n * Fold the flat address columns into the nested `address` the contract takes.\n *\n * A row with none of them is left alone. A row with SOME of them keeps them nested and lets the\n * contract refuse it by name — Google needs all four of given name, family name, country and postal\n * code together, and quietly dropping a half-filled address would turn a fixable export mistake into\n * conversions that match nobody.\n */\nfunction nestAddress(row: Record<string, unknown>): Record<string, unknown> {\n const address: Record<string, unknown> = {};\n for (const key of ADDRESS_KEYS) {\n if (row[key] !== undefined) {\n address[key] = row[key];\n delete row[key];\n }\n }\n return Object.keys(address).length > 0 ? { ...row, address } : row;\n}\n\nfunction toRow(record: Record<string, unknown>): { row: Record<string, unknown>; ignored: string[] } {\n const row: Record<string, unknown> = {};\n const ignored: string[] = [];\n for (const [column, raw] of Object.entries(record)) {\n const key = payloadKeyForColumn(column);\n if (!key) {\n if (column.trim() !== \"\") {\n ignored.push(column.trim());\n }\n continue;\n }\n const value = cellValue(key, raw);\n if (value !== undefined) {\n row[key] = value;\n }\n }\n return { row: nestAddress(row), ignored };\n}\n\n/** One cell's payload value, or undefined when the cell is blank and the key should stay absent. */\nfunction cellValue(key: string, raw: unknown): unknown {\n const value = typeof raw === \"string\" ? raw.trim() : raw;\n if (value === \"\" || value === null || value === undefined) {\n return undefined;\n }\n if (!NUMERIC_KEYS.has(key)) {\n return typeof value === \"number\" ? String(value) : value;\n }\n // A spreadsheet writes money as \"€ 1234.50\" as readily as 1234.5, and a NaN here would reach the\n // contract as \"expected a number\" with no hint of which cell. Read what is parseable and leave the\n // rest for validation to name.\n const numeric = typeof value === \"number\" ? value : Number(String(value).replace(/[^\\d.-]/g, \"\"));\n return Number.isFinite(numeric) ? numeric : value;\n}\n\n/**\n * RFC-4180 fields of one CSV line, honouring `\"\"` escapes inside quotes. Deliberately line-based:\n * an embedded newline inside a quoted field is not something a conversion export produces, and\n * supporting it would mean a parser nobody can read for a case nobody has.\n */\nconst CSV_SEPARATORS = new Set([\",\", \";\", \"\\t\"]);\n\nfunction splitCsvLine(line: string): string[] {\n const fields: string[] = [];\n let current = \"\";\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n if (quoted && char !== '\"') {\n current += char;\n } else if (quoted) {\n // A doubled quote inside a quoted field is one literal quote; a single one closes the field.\n quoted = line[i + 1] === '\"';\n if (quoted) {\n current += '\"';\n i += 1;\n }\n } else if (char === '\"') {\n quoted = true;\n } else if (CSV_SEPARATORS.has(char ?? \"\")) {\n fields.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n fields.push(current);\n return fields.map((field) => field.trim());\n}\n\nfunction parseCsv(text: string): ParseConversionRowsResult {\n const lines = text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n const header = lines.shift();\n if (!header) {\n return { ok: false, error: \"the file is empty\" };\n }\n const columns = splitCsvLine(header);\n if (!columns.some((column) => payloadKeyForColumn(column))) {\n return {\n ok: false,\n error: `no column in \"${columns.join(\", \")}\" is a conversion field — the file needs at least an order id, a date and something to match on (gclid / email / phone)`,\n };\n }\n const rows: Record<string, unknown>[] = [];\n const ignored = new Set<string>();\n for (const line of lines) {\n const fields = splitCsvLine(line);\n const record: Record<string, unknown> = {};\n columns.forEach((column, index) => {\n record[column] = fields[index] ?? \"\";\n });\n const parsed = toRow(record);\n for (const column of parsed.ignored) {\n ignored.add(column);\n }\n rows.push(parsed.row);\n }\n return { ok: true, rows, ignoredColumns: [...ignored] };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** The record list inside a JSON document: a bare array, or the `conversions` / `rows` / `data` key of an object. */\nfunction recordsOfJson(parsed: unknown): unknown[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed;\n }\n if (!isRecord(parsed)) {\n return undefined;\n }\n for (const key of [\"conversions\", \"rows\", \"data\", \"results\"]) {\n const value = parsed[key];\n if (Array.isArray(value)) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction parseJsonRecords(records: unknown[]): ParseConversionRowsResult {\n const rows: Record<string, unknown>[] = [];\n const ignored = new Set<string>();\n for (const [index, record] of records.entries()) {\n if (!isRecord(record)) {\n return { ok: false, error: `conversion ${index + 1} is not an object` };\n }\n const parsed = toRow(record);\n for (const column of parsed.ignored) {\n ignored.add(column);\n }\n rows.push(parsed.row);\n }\n return { ok: true, rows, ignoredColumns: [...ignored] };\n}\n\n/**\n * A JSON document's conversions. JSONL is tried first: a file of one object per line also starts\n * with `{`, and `JSON.parse` over the whole of it fails with a message that says nothing about what\n * the file actually is.\n */\nfunction parseJsonText(trimmed: string): ParseConversionRowsResult {\n const lines = trimmed.split(/\\r?\\n/).filter((line) => line.trim().length > 0);\n if (lines.length > 1 && lines.every((line) => line.trim().startsWith(\"{\"))) {\n const records: unknown[] = [];\n for (const [index, line] of lines.entries()) {\n try {\n records.push(JSON.parse(line));\n } catch {\n return { ok: false, error: `line ${index + 1} is not valid JSON` };\n }\n }\n return parseJsonRecords(records);\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch (err) {\n return { ok: false, error: `not valid JSON: ${err instanceof Error ? err.message : String(err)}` };\n }\n const records = recordsOfJson(parsed);\n if (!records) {\n return { ok: false, error: \"expected a JSON array of conversions, or an object with a `conversions` array\" };\n }\n return parseJsonRecords(records);\n}\n\n/**\n * The conversions in a file's text, whatever shape it arrived in: JSON (an array or an object with a\n * `conversions` key), newline-delimited JSON, or CSV / TSV / semicolon-separated with a header row.\n * The format is read off the content, not off the extension — an export saved as `.txt` is the same\n * data.\n */\nexport function parseConversionRowsText(text: string): ParseConversionRowsResult {\n const trimmed = text.trim();\n if (trimmed === \"\") {\n return { ok: false, error: \"the file is empty\" };\n }\n if (trimmed.startsWith(\"[\") || trimmed.startsWith(\"{\")) {\n return parseJsonText(trimmed);\n }\n return parseCsv(trimmed);\n}\n\n/** Split a row list into staging-sized batches — one staged op per chunk. */\nexport function chunkConversionRows<T>(rows: readonly T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < rows.length; i += size) {\n chunks.push(rows.slice(i, i + size));\n }\n return chunks;\n}\n"],"mappings":"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","names":["records"]}
|