@koda-sl/baker-cli 0.523.0 → 0.524.0-dev.3eb5500a1

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.
Files changed (882) hide show
  1. package/README.md +19 -0
  2. package/dist/account-D56ET6IW.js +82 -0
  3. package/dist/account-R536H7IZ.js +82 -0
  4. package/dist/account-reads-7ZOFEQWM.js +219 -0
  5. package/dist/account-users-SLFD5EF6.js +64 -0
  6. package/dist/account-writes-SWMDBVH4.js +68 -0
  7. package/dist/accounts-5AIU2BII.js +80 -0
  8. package/dist/accounts-X25YHBAH.js +701 -0
  9. package/dist/actions-WL47GZOU.js +55 -0
  10. package/dist/activecampaign-J36ZLRDG.js +938 -0
  11. package/dist/ad-group-writes-INFBYL3B.js +172 -0
  12. package/dist/ad-groups-HTVKYBPX.js +70 -0
  13. package/dist/ad-writes-62JZYKJ4.js +176 -0
  14. package/dist/add-6IU3SWQI.js +305 -0
  15. package/dist/add-HBZMWXRJ.js +107 -0
  16. package/dist/ads-JKD6VMCE.js +48 -0
  17. package/dist/ads-ZWNY3UY4.js +79 -0
  18. package/dist/advertisers-N2XLRZE6.js +123 -0
  19. package/dist/analytics-KUJVUDY6.js +2437 -0
  20. package/dist/analytics-QFZEVFVQ.js +447 -0
  21. package/dist/animate-ZS24SJGN.js +480 -0
  22. package/dist/assign-PURBKGQY.js +80 -0
  23. package/dist/audience-size-A5FPKEUM.js +76 -0
  24. package/dist/audiences-5FNTEENV.js +280 -0
  25. package/dist/audit-7ZGDFGET.js +154 -0
  26. package/dist/autocomplete-3HJBPKLV.js +114 -0
  27. package/dist/avatars-6BBL6L5K.js +38 -0
  28. package/dist/bid-pricing-GIM7LJRR.js +103 -0
  29. package/dist/brand-CXEH7YYF.js +22 -0
  30. package/dist/brief-FL6G3NTB.js +543 -0
  31. package/dist/campaign-groups-BNBS7QBX.js +99 -0
  32. package/dist/campaign-writes-MWA2FPKC.js +168 -0
  33. package/dist/campaign-writes-QQGI3U2P.js +176 -0
  34. package/dist/campaigns-42OP3HPV.js +78 -0
  35. package/dist/campaigns-LYIG74TQ.js +113 -0
  36. package/dist/campaigns-QKSDJAWD.js +111 -0
  37. package/dist/canvas-7SX3ZDKZ.js +46 -0
  38. package/dist/capabilities-FGLYVSW5.js +147 -0
  39. package/dist/catalog-7S3ZR3JP.js +65 -0
  40. package/dist/catalogs-RWAZMJHF.js +130 -0
  41. package/dist/changes-PMDRPRK7.js +135 -0
  42. package/dist/chatgpt-J2LK4NK4.js +47 -0
  43. package/dist/chats-EG6UCN45.js +279 -0
  44. package/dist/check-BC2KFBQM.js +107 -0
  45. package/dist/chunk-24E77GI6.js +91 -0
  46. package/dist/chunk-2FL7NBPT.js +45 -0
  47. package/dist/chunk-2PRRXTV3.js +197 -0
  48. package/dist/chunk-32GFGVW2.js +131 -0
  49. package/dist/chunk-347GRWQN.js +831 -0
  50. package/dist/chunk-45EERHDB.js +783 -0
  51. package/dist/chunk-56UWXQEN.js +392 -0
  52. package/dist/chunk-5N2CSLY6.js +1646 -0
  53. package/dist/chunk-5YN53OAA.js +61 -0
  54. package/dist/chunk-6K73DWA5.js +275 -0
  55. package/dist/chunk-6OIKNJ7G.js +26 -0
  56. package/dist/chunk-6TQTKC4M.js +64 -0
  57. package/dist/chunk-76TUVLAJ.js +942 -0
  58. package/dist/chunk-7EOD7RV4.js +103 -0
  59. package/dist/chunk-7R5WC5PM.js +98 -0
  60. package/dist/chunk-A5SPK37E.js +19 -0
  61. package/dist/chunk-AIG53YWM.js +429 -0
  62. package/dist/chunk-AOLRE5JO.js +5368 -0
  63. package/dist/chunk-BDAXBOGT.js +66 -0
  64. package/dist/chunk-BEHOW6DU.js +169 -0
  65. package/dist/chunk-BM3HTMD6.js +363 -0
  66. package/dist/chunk-BPUVBVKK.js +122 -0
  67. package/dist/chunk-CK6UMOYN.js +23 -0
  68. package/dist/chunk-CONB42F3.js +170 -0
  69. package/dist/chunk-CWZ2ODJQ.js +57 -0
  70. package/dist/chunk-D4U72EIE.js +638 -0
  71. package/dist/chunk-DJXE3M5R.js +24026 -0
  72. package/dist/chunk-DJXE3M5R.js.map +1 -0
  73. package/dist/chunk-DYOUJERF.js +7234 -0
  74. package/dist/chunk-EIBWWYBK.js +89 -0
  75. package/dist/chunk-EJHYK54S.js +910 -0
  76. package/dist/chunk-ETLGTUQI.js +676 -0
  77. package/dist/chunk-F3CZFUXZ.js +3187 -0
  78. package/dist/chunk-F3CZFUXZ.js.map +1 -0
  79. package/dist/chunk-GLUXBB6C.js +156 -0
  80. package/dist/chunk-GXDFLDFK.js +843 -0
  81. package/dist/chunk-GXSYGI77.js +592 -0
  82. package/dist/chunk-IAK7AB22.js +46 -0
  83. package/dist/chunk-IHZUSAUX.js +179 -0
  84. package/dist/chunk-ISDOF6KZ.js +148 -0
  85. package/dist/chunk-IZABTTW5.js +228 -0
  86. package/dist/chunk-JMQ3F5VX.js +207 -0
  87. package/dist/chunk-KAAYVKBH.js +479 -0
  88. package/dist/chunk-KZ55NULP.js +494 -0
  89. package/dist/chunk-LOLB3YJR.js +8914 -0
  90. package/dist/chunk-LP2KYY5Z.js +547 -0
  91. package/dist/chunk-MTV2RSGY.js +63 -0
  92. package/dist/chunk-MUS2UTWU.js +4254 -0
  93. package/dist/chunk-MUS2UTWU.js.map +1 -0
  94. package/dist/chunk-MZE6PLV3.js +297 -0
  95. package/dist/chunk-OW27W5X4.js +712 -0
  96. package/dist/chunk-OW27W5X4.js.map +1 -0
  97. package/dist/chunk-OXOC6TJC.js +8954 -0
  98. package/dist/chunk-PCIMC7VX.js +163 -0
  99. package/dist/chunk-PILLZPNC.js +3020 -0
  100. package/dist/chunk-PILLZPNC.js.map +1 -0
  101. package/dist/chunk-RESQPBSC.js +455 -0
  102. package/dist/chunk-RIA5RXPL.js +387 -0
  103. package/dist/chunk-SIKCVWM3.js +76 -0
  104. package/dist/chunk-SPQ7IVTJ.js +225 -0
  105. package/dist/chunk-TG2DC6CO.js +274 -0
  106. package/dist/chunk-TIYFDFLN.js +191 -0
  107. package/dist/chunk-TVSHBUPA.js +377 -0
  108. package/dist/chunk-U4BPW7ZO.js +167 -0
  109. package/dist/chunk-UK6AYD3V.js +224 -0
  110. package/dist/chunk-UMTGF43H.js +249 -0
  111. package/dist/chunk-URMAEVZO.js +150 -0
  112. package/dist/chunk-VGKDX7LP.js +846 -0
  113. package/dist/chunk-WEQZ563U.js +319 -0
  114. package/dist/chunk-XC3DYN2N.js +1518 -0
  115. package/dist/chunk-XGQ4XMCS.js +3868 -0
  116. package/dist/chunk-XH7TGLJC.js +344 -0
  117. package/dist/chunk-XKRCO3JC.js +203 -0
  118. package/dist/chunk-XL7X37UC.js +188 -0
  119. package/dist/chunk-XXCMIS2V.js +285 -0
  120. package/dist/chunk-ZLEHD3ZT.js +604 -0
  121. package/dist/chunk-ZQW6UZQC.js +142 -0
  122. package/dist/chunk-ZRAZBHTG.js +1919 -0
  123. package/dist/chunk-ZUXXUHZY.js +91 -0
  124. package/dist/chunk-ZV7I2U4T.js +51 -0
  125. package/dist/claim-HDRBJL5Q.js +200 -0
  126. package/dist/cli.js +34 -33
  127. package/dist/cli.js.map +1 -1
  128. package/dist/companies-A7BFDYCP.js +198 -0
  129. package/dist/company-7MUAN5HT.js +308 -0
  130. package/dist/complete-2QWJE5JP.js +84 -0
  131. package/dist/connect-7JCP2CAX.js +45 -0
  132. package/dist/conversation-FKUZLUGV.js +96 -0
  133. package/dist/conversion-report-IHKQKNBM.js +127 -0
  134. package/dist/conversion-upload-command-5MOGWC26.js +439 -0
  135. package/dist/conversion-writes-NAJVO3WP.js +122 -0
  136. package/dist/conversions-5BBFXRRS.js +140 -0
  137. package/dist/conversions-KBFMVTII.js +78 -0
  138. package/dist/create-KMGTMXQE.js +135 -0
  139. package/dist/create-SSQ2R7Z4.js +62 -0
  140. package/dist/create-V7T4SFNP.js +239 -0
  141. package/dist/create-YUMBZ4MQ.js +210 -0
  142. package/dist/creatives-KPI7CSZ5.js +223 -0
  143. package/dist/creatives-OIEYLRXB.js +58 -0
  144. package/dist/credentials-4DSXDO63.js +290 -0
  145. package/dist/critique-AO3YXLGU.js +1451 -0
  146. package/dist/critique-R3D2I2O6.js +232 -0
  147. package/dist/crm-JSXAYQWL.js +323 -0
  148. package/dist/crm-VXNDN5KA.js +227 -0
  149. package/dist/currency-RKTYXSNH.js +88 -0
  150. package/dist/customers-MZWGBY4J.js +59 -0
  151. package/dist/delete-GQUWHFPZ.js +57 -0
  152. package/dist/delete-K4X4MXMC.js +69 -0
  153. package/dist/delete-LC6BMULH.js +67 -0
  154. package/dist/demographics-236FSE3G.js +141 -0
  155. package/dist/discard-NPSWHJZH.js +69 -0
  156. package/dist/discover-VL3BDJOO.js +172 -0
  157. package/dist/domain-JQFCOVCS.js +101 -0
  158. package/dist/download-H2ISXHDF.js +172 -0
  159. package/dist/draft-N752W2ZE.js +220 -0
  160. package/dist/draft-RXJVZ5WR.js +310 -0
  161. package/dist/draft-SOFVVDSV.js +335 -0
  162. package/dist/draft-UGUB35WQ.js +283 -0
  163. package/dist/draft-W2S6Z7ZZ.js +308 -0
  164. package/dist/engine/index.js +7 -7
  165. package/dist/experiments-5IC4YWGK.js +236 -0
  166. package/dist/facets-RCPT4627.js +117 -0
  167. package/dist/feedback-RH53D4TY.js +111 -0
  168. package/dist/feedback-record-35VOENY5.js +265 -0
  169. package/dist/fetch-MT4EANEF.js +179 -0
  170. package/dist/fit-U37JJGM5.js +65 -0
  171. package/dist/flows-6IY6WH42.js +250 -0
  172. package/dist/fonts-36GCZLVE.js +39 -0
  173. package/dist/forecast-KRKT6KFH.js +121 -0
  174. package/dist/forecast-SS4ZN3KP.js +169 -0
  175. package/dist/funnel-Z6LGT4CT.js +397 -0
  176. package/dist/generate-NWUTMT3G.js +263 -0
  177. package/dist/get-DWCTJFGR.js +82 -0
  178. package/dist/get-X4CQVJQZ.js +59 -0
  179. package/dist/google-6H4QGAKT.js +3267 -0
  180. package/dist/google-ads-7XRMT53M.js +198 -0
  181. package/dist/history-EIRUGQHZ.js +136 -0
  182. package/dist/history-HYX6YWI4.js +69 -0
  183. package/dist/history-JCYWRY2E.js +102 -0
  184. package/dist/hubspot-VLA6PKI2.js +782 -0
  185. package/dist/ideas-27P4HQZI.js +45 -0
  186. package/dist/images-YOZ3YLL2.js +92 -0
  187. package/dist/ingest-6Q54EZ2Y.js +110 -0
  188. package/dist/ingest-DW2TG6OK.js +26 -0
  189. package/dist/insights-7CS63UUJ.js +132 -0
  190. package/dist/inspect-ZOPVVXXE.js +192 -0
  191. package/dist/intent-XNGEMHFD.js +95 -0
  192. package/dist/keyword-gap-TK2BMMB3.js +130 -0
  193. package/dist/keyword-metrics-XJKDE25Z.js +200 -0
  194. package/dist/keywords-for-site-SWCA75X3.js +131 -0
  195. package/dist/landing-GMAUCDYC.js +28 -0
  196. package/dist/languages-PDXVOG5V.js +40 -0
  197. package/dist/lead-routes-NIAWLKYM.js +733 -0
  198. package/dist/lead-routes-NIAWLKYM.js.map +1 -0
  199. package/dist/leads-MA2PDGLB.js +115 -0
  200. package/dist/learn-77RDRZHO.js +207 -0
  201. package/dist/line-item-writes-DKRS6ANU.js +211 -0
  202. package/dist/line-items-R5EID7EC.js +107 -0
  203. package/dist/link-MK67UR6N.js +67 -0
  204. package/dist/linkedin-4X57MIAN.js +1328 -0
  205. package/dist/linkedin-person-XXVK3DJW.js +139 -0
  206. package/dist/list-45MXHBTK.js +154 -0
  207. package/dist/list-PQ3CQV74.js +67 -0
  208. package/dist/list-VWWJOAGX.js +306 -0
  209. package/dist/locations-7T4U5RDB.js +40 -0
  210. package/dist/locations-E4XIZVAB.js +69 -0
  211. package/dist/log-RHF535KO.js +95 -0
  212. package/dist/lookup-Q6TLACOT.js +23 -0
  213. package/dist/make-RSNKIYPN.js +1366 -0
  214. package/dist/map-GM3MZLPC.js +436 -0
  215. package/dist/mcp-XT7EIY77.js +729 -0
  216. package/dist/media-sources-A4BDXKCY.js +35 -0
  217. package/dist/members-FJFYPWOC.js +47 -0
  218. package/dist/metrics-MQ4H74R7.js +152 -0
  219. package/dist/models-64UHXEON.js +155 -0
  220. package/dist/normalize-ATKIWTZN.js +144 -0
  221. package/dist/options-Q5VYCXVZ.js +125 -0
  222. package/dist/organization-TX736WKT.js +949 -0
  223. package/dist/performance-3YY4YWX5.js +27 -0
  224. package/dist/performance-GIYI3N4X.js +5556 -0
  225. package/dist/pixels-UBKSXMN3.js +62 -0
  226. package/dist/plan-T3MJKFAM.js +208 -0
  227. package/dist/promoted-tweet-writes-2AO5GRUC.js +183 -0
  228. package/dist/promoted-tweets-XF7FL3J4.js +119 -0
  229. package/dist/publish-H54LNDCJ.js +344 -0
  230. package/dist/query-TPKGR2UQ.js +62 -0
  231. package/dist/questionnaire-BFYEO57P.js +94 -0
  232. package/dist/reddit-TPEGEBHQ.js +29 -0
  233. package/dist/refresh-WZFQMCBO.js +97 -0
  234. package/dist/release-M4XTMFXE.js +63 -0
  235. package/dist/relevant-pages-HMYBVWNR.js +99 -0
  236. package/dist/remove-XS6BH7RQ.js +53 -0
  237. package/dist/reopen-K4BRTGEJ.js +66 -0
  238. package/dist/rerun-PE6GNTCI.js +95 -0
  239. package/dist/research-IWSBNIFT.js +72 -0
  240. package/dist/research-XWQUJMBR.js +265 -0
  241. package/dist/reset-FMZ3R6Y4.js +57 -0
  242. package/dist/reset-JQO7EK5G.js +57 -0
  243. package/dist/resolve-Y4CMZU35.js +124 -0
  244. package/dist/retry-H64XQ4NC.js +63 -0
  245. package/dist/retry-OR2YQOZT.js +65 -0
  246. package/dist/revenue-W7AXXQ7K.js +91 -0
  247. package/dist/rules-PMLZKICG.js +99 -0
  248. package/dist/rules-add-263D2LQY.js +465 -0
  249. package/dist/run-A2MJEURT.js +69 -0
  250. package/dist/run-MKZMTMRT.js +70 -0
  251. package/dist/scaffold-ad-HISG6L46.js +1512 -0
  252. package/dist/scaffold-static-ad-MW3JMMDU.js +1010 -0
  253. package/dist/scaffold-video-QYXBYFTQ.js +884 -0
  254. package/dist/schedule-UA5RXNZ2.js +64 -0
  255. package/dist/scheduled-agents-YIKWS5CO.js +55 -0
  256. package/dist/schema-IKSQHB3S.js +135 -0
  257. package/dist/schema-M44S4TPF.js +69 -0
  258. package/dist/search-ZQV7SM7W.js +177 -0
  259. package/dist/select-VTWL2NMR.js +106 -0
  260. package/dist/sends-CAQ42KOR.js +349 -0
  261. package/dist/set-prompt-2V4UPUKW.js +198 -0
  262. package/dist/setup-links-PBWJYOD2.js +144 -0
  263. package/dist/shopify-VQYRSXVS.js +3958 -0
  264. package/dist/site-GYJYYMYH.js +180 -0
  265. package/dist/sources-3NA3ZB75.js +457 -0
  266. package/dist/sources-UMYCW35T.js +30 -0
  267. package/dist/stale-54NIICZG.js +76 -0
  268. package/dist/status-CRZCFN5W.js +65 -0
  269. package/dist/studio-2VGYFGS4.js +49 -0
  270. package/dist/sync-K4KLGMJR.js +57 -0
  271. package/dist/sync-definition-TK5Z3ISW.js +69 -0
  272. package/dist/tags-7SNORKEL.js +23 -0
  273. package/dist/tags-HCTVWQI7.js +23 -0
  274. package/dist/tags-HD4NPLTY.js +23 -0
  275. package/dist/tags-HOIYE6JK.js +26 -0
  276. package/dist/tags-XUJPIGIE.js +227 -0
  277. package/dist/targeting-criteria-EN6MZR7O.js +113 -0
  278. package/dist/targets-XIZJSYCM.js +106 -0
  279. package/dist/testimonials-UOSKSII2.js +32 -0
  280. package/dist/themes-3TW3WDLZ.js +95 -0
  281. package/dist/top-companies-2PZH6RG3.js +111 -0
  282. package/dist/transcript-M6J4MYXK.js +165 -0
  283. package/dist/translate-V5RCXHB3.js +600 -0
  284. package/dist/triggers-E3XWB4EZ.js +144 -0
  285. package/dist/unlink-OIMMKPRN.js +70 -0
  286. package/dist/unstage-SP32LXDY.js +88 -0
  287. package/dist/unstage-XN3VC7LZ.js +96 -0
  288. package/dist/update-2GAPIRWU.js +192 -0
  289. package/dist/update-H7SAAZ3Z.js +155 -0
  290. package/dist/update-LXIHAKQ5.js +66 -0
  291. package/dist/update-NKNWGXFC.js +101 -0
  292. package/dist/upload-7RPI4DLV.js +129 -0
  293. package/dist/url-options-TUU37JHG.js +131 -0
  294. package/dist/url-params-RJSXPKA3.js +101 -0
  295. package/dist/validate-6SZ4B3QA.js +122 -0
  296. package/dist/videos-PUOP3G23.js +41 -0
  297. package/dist/viewer-check-BLM3ZLLH.js +83 -0
  298. package/dist/web-YUBTKG6V.js +143 -0
  299. package/dist/winning-ads-MVSHJFYV.js +86 -0
  300. package/dist/write-commands-ZXTABQKK.js +1525 -0
  301. package/dist/x-7K2VKYXQ.js +47 -0
  302. package/package.json +1 -1
  303. package/dist/account-HDSDPK4L.js +0 -82
  304. package/dist/account-YDA4MRIK.js +0 -82
  305. package/dist/account-reads-5VPDX6NF.js +0 -219
  306. package/dist/account-users-KWVYRT2M.js +0 -64
  307. package/dist/account-writes-D3ELXDOF.js +0 -68
  308. package/dist/accounts-6WPNPMFP.js +0 -701
  309. package/dist/accounts-GY7HP6ER.js +0 -80
  310. package/dist/actions-HRAXJHLG.js +0 -55
  311. package/dist/activecampaign-A7AMIRYU.js +0 -938
  312. package/dist/ad-group-writes-QMLGO62B.js +0 -172
  313. package/dist/ad-groups-5KQWUB7J.js +0 -70
  314. package/dist/ad-writes-Y6BNCZGK.js +0 -176
  315. package/dist/add-OHYKPUG7.js +0 -107
  316. package/dist/add-ZEPO6CVT.js +0 -305
  317. package/dist/ads-F7ARRWCB.js +0 -79
  318. package/dist/ads-PNSXXDHI.js +0 -48
  319. package/dist/advertisers-523UPXDM.js +0 -123
  320. package/dist/analytics-4KUANCID.js +0 -2437
  321. package/dist/analytics-TRUVVR6I.js +0 -447
  322. package/dist/animate-S4KGFV36.js +0 -480
  323. package/dist/assign-2AW5GY3T.js +0 -80
  324. package/dist/audience-size-VHFMQEMF.js +0 -76
  325. package/dist/audiences-N6DE6EAV.js +0 -280
  326. package/dist/audit-WG6M3CXB.js +0 -154
  327. package/dist/autocomplete-WHNI5BQM.js +0 -114
  328. package/dist/avatars-WECPBQ4T.js +0 -38
  329. package/dist/bid-pricing-WVHPUM74.js +0 -103
  330. package/dist/brand-TNZRFKI4.js +0 -22
  331. package/dist/brief-F56MVJHA.js +0 -543
  332. package/dist/campaign-groups-OLJ5567X.js +0 -99
  333. package/dist/campaign-writes-2DVIWSWU.js +0 -168
  334. package/dist/campaign-writes-6LU3LDDY.js +0 -176
  335. package/dist/campaigns-7YE5UYPS.js +0 -78
  336. package/dist/campaigns-MJ64UJTS.js +0 -113
  337. package/dist/campaigns-PHSRKXVZ.js +0 -111
  338. package/dist/canvas-FUHHYUO7.js +0 -46
  339. package/dist/capabilities-5MXUVZJV.js +0 -147
  340. package/dist/catalog-PKYW67IO.js +0 -65
  341. package/dist/catalogs-2GNJYFSF.js +0 -130
  342. package/dist/changes-UQYFPZWO.js +0 -135
  343. package/dist/chatgpt-6PP4HANG.js +0 -47
  344. package/dist/chats-FVR35ZQ3.js +0 -279
  345. package/dist/check-4P2IVABH.js +0 -107
  346. package/dist/chunk-2BW4P45O.js +0 -203
  347. package/dist/chunk-3U4T4CKO.js +0 -249
  348. package/dist/chunk-44ZRCSR7.js +0 -228
  349. package/dist/chunk-46YLDIQG.js +0 -4254
  350. package/dist/chunk-46YLDIQG.js.map +0 -1
  351. package/dist/chunk-47RFRYEP.js +0 -197
  352. package/dist/chunk-4LV5JE4Z.js +0 -188
  353. package/dist/chunk-56OEYUJU.js +0 -61
  354. package/dist/chunk-5OQKC5AV.js +0 -592
  355. package/dist/chunk-65QGMY3C.js +0 -51
  356. package/dist/chunk-7EHBCACP.js +0 -156
  357. package/dist/chunk-ABK536AV.js +0 -148
  358. package/dist/chunk-ALTTFAER.js +0 -377
  359. package/dist/chunk-ARXNQRKT.js +0 -275
  360. package/dist/chunk-AYAVYXSL.js +0 -638
  361. package/dist/chunk-B65WCT6M.js +0 -2984
  362. package/dist/chunk-B65WCT6M.js.map +0 -1
  363. package/dist/chunk-BKIE7DBG.js +0 -103
  364. package/dist/chunk-BYNBZIHS.js +0 -98
  365. package/dist/chunk-CK2SDG7U.js +0 -64
  366. package/dist/chunk-DMGLSVZF.js +0 -547
  367. package/dist/chunk-EIDJCUMM.js +0 -479
  368. package/dist/chunk-ENGKUMTR.js +0 -1518
  369. package/dist/chunk-FBTECDEZ.js +0 -163
  370. package/dist/chunk-FLSWMHI2.js +0 -910
  371. package/dist/chunk-FMMSQIVK.js +0 -122
  372. package/dist/chunk-FZSJFSDC.js +0 -19
  373. package/dist/chunk-GOTPUACV.js +0 -846
  374. package/dist/chunk-GS4MMLXY.js +0 -191
  375. package/dist/chunk-GSVG7XT3.js +0 -297
  376. package/dist/chunk-HQYXRF7E.js +0 -604
  377. package/dist/chunk-HVJJEQDQ.js +0 -7234
  378. package/dist/chunk-HXALY3VB.js +0 -45
  379. package/dist/chunk-I6QJJ7OY.js +0 -1646
  380. package/dist/chunk-I7AYMJZA.js +0 -783
  381. package/dist/chunk-ICHXD4IB.js +0 -344
  382. package/dist/chunk-IQ3MYXCJ.js +0 -676
  383. package/dist/chunk-IRDKHNKO.js +0 -142
  384. package/dist/chunk-IXPYC4D2.js +0 -170
  385. package/dist/chunk-JAC6JVCI.js +0 -26
  386. package/dist/chunk-JWMPFTEF.js +0 -8954
  387. package/dist/chunk-KNSUNB2Z.js +0 -207
  388. package/dist/chunk-L5RAYYEF.js +0 -225
  389. package/dist/chunk-MCJ5I5LR.js +0 -3187
  390. package/dist/chunk-MCJ5I5LR.js.map +0 -1
  391. package/dist/chunk-MF3BTAT6.js +0 -843
  392. package/dist/chunk-MJ4MJZV3.js +0 -710
  393. package/dist/chunk-MJ4MJZV3.js.map +0 -1
  394. package/dist/chunk-MZPS46OR.js +0 -76
  395. package/dist/chunk-NHQIGCFL.js +0 -274
  396. package/dist/chunk-NZ42DEU7.js +0 -3868
  397. package/dist/chunk-OVBZ26PE.js +0 -89
  398. package/dist/chunk-PESH2VF7.js +0 -494
  399. package/dist/chunk-PWYGIUNB.js +0 -91
  400. package/dist/chunk-QDGDA2YD.js +0 -66
  401. package/dist/chunk-QKMMQPAJ.js +0 -224
  402. package/dist/chunk-QOOOYHMN.js +0 -91
  403. package/dist/chunk-R2QZBA7P.js +0 -8914
  404. package/dist/chunk-RL6UQXX7.js +0 -23
  405. package/dist/chunk-S6VFDNSQ.js +0 -63
  406. package/dist/chunk-SBQQHP5H.js +0 -46
  407. package/dist/chunk-SG2TDQEE.js +0 -150
  408. package/dist/chunk-SXML3LQN.js +0 -179
  409. package/dist/chunk-SZJKURRJ.js +0 -5368
  410. package/dist/chunk-UBDY5RE4.js +0 -387
  411. package/dist/chunk-UHQ2H3NQ.js +0 -363
  412. package/dist/chunk-VJINC2Q3.js +0 -131
  413. package/dist/chunk-VP4PO7FW.js +0 -392
  414. package/dist/chunk-VXXVPUBA.js +0 -169
  415. package/dist/chunk-W4NFBCCR.js +0 -167
  416. package/dist/chunk-W52LH3J3.js +0 -429
  417. package/dist/chunk-W5WKPVCJ.js +0 -831
  418. package/dist/chunk-WWLZ5RRU.js +0 -319
  419. package/dist/chunk-X3BOXZVP.js +0 -1919
  420. package/dist/chunk-Z4ZYFIDQ.js +0 -57
  421. package/dist/chunk-Z5PSSFN7.js +0 -455
  422. package/dist/chunk-ZKIWDT6R.js +0 -942
  423. package/dist/chunk-ZN5CI4CP.js +0 -285
  424. package/dist/chunk-ZRXFY2JM.js +0 -24026
  425. package/dist/chunk-ZRXFY2JM.js.map +0 -1
  426. package/dist/claim-B6IX5MUB.js +0 -200
  427. package/dist/companies-U4APTF2Z.js +0 -198
  428. package/dist/company-WFVBYXKK.js +0 -308
  429. package/dist/complete-KFV5NU52.js +0 -84
  430. package/dist/connect-2TWKL3DQ.js +0 -45
  431. package/dist/conversation-7VQ7CGVT.js +0 -96
  432. package/dist/conversion-report-6IQKXWFU.js +0 -127
  433. package/dist/conversion-upload-command-TYGIB7XJ.js +0 -439
  434. package/dist/conversion-writes-UQU3QJTF.js +0 -122
  435. package/dist/conversions-P2A6R4FG.js +0 -140
  436. package/dist/conversions-ZP2SKL36.js +0 -78
  437. package/dist/create-KE3GM4W6.js +0 -62
  438. package/dist/create-KKURENQ7.js +0 -210
  439. package/dist/create-M7OTWZ2W.js +0 -135
  440. package/dist/create-XLQEQYVN.js +0 -239
  441. package/dist/creatives-AXMG777O.js +0 -223
  442. package/dist/creatives-VR3N5A3X.js +0 -58
  443. package/dist/credentials-HTPDDOYP.js +0 -290
  444. package/dist/critique-EZJMYQLC.js +0 -1451
  445. package/dist/critique-Q5ZZ6PKB.js +0 -232
  446. package/dist/crm-5QOSCQWL.js +0 -227
  447. package/dist/crm-YLSUKW6N.js +0 -323
  448. package/dist/currency-SVEUNKHP.js +0 -88
  449. package/dist/customers-OGKISQAS.js +0 -59
  450. package/dist/delete-23FUCSTE.js +0 -67
  451. package/dist/delete-MD6QBKGM.js +0 -69
  452. package/dist/delete-OPIN5KCK.js +0 -57
  453. package/dist/demographics-AFNPWEZP.js +0 -141
  454. package/dist/discard-UKPRZTQT.js +0 -69
  455. package/dist/discover-2ZX3DYSF.js +0 -172
  456. package/dist/domain-6TJPO4WO.js +0 -101
  457. package/dist/download-TBPG3ZIH.js +0 -172
  458. package/dist/draft-2EO63W4K.js +0 -308
  459. package/dist/draft-ALSOCILF.js +0 -310
  460. package/dist/draft-BAWIN2IN.js +0 -335
  461. package/dist/draft-KYO43IJD.js +0 -220
  462. package/dist/draft-QUXRJRNY.js +0 -283
  463. package/dist/experiments-QXAC5BPW.js +0 -236
  464. package/dist/facets-7IDDCZIY.js +0 -117
  465. package/dist/feedback-ZWFOBIGU.js +0 -111
  466. package/dist/feedback-record-ZZRR4LUM.js +0 -265
  467. package/dist/fetch-HYGMTCHK.js +0 -179
  468. package/dist/fit-KDY7PZFL.js +0 -65
  469. package/dist/flows-U646JOQN.js +0 -250
  470. package/dist/fonts-6RIJJ222.js +0 -39
  471. package/dist/forecast-4NJXBMZV.js +0 -121
  472. package/dist/forecast-IECMUBL2.js +0 -169
  473. package/dist/funnel-OFJ5XMOU.js +0 -397
  474. package/dist/generate-VQTLPEYW.js +0 -263
  475. package/dist/get-KUOCL3IX.js +0 -82
  476. package/dist/get-MINQPB73.js +0 -59
  477. package/dist/google-LVOGKNDV.js +0 -3267
  478. package/dist/google-ads-RIIV4EJI.js +0 -198
  479. package/dist/history-7OLO7HIP.js +0 -136
  480. package/dist/history-JK6S5KWG.js +0 -69
  481. package/dist/history-VFA6IVKN.js +0 -102
  482. package/dist/hubspot-IMLZUTT3.js +0 -782
  483. package/dist/ideas-ZUXLYR6Y.js +0 -45
  484. package/dist/images-WNMQFAC3.js +0 -92
  485. package/dist/ingest-FKC5PBBE.js +0 -110
  486. package/dist/ingest-L5YC6U2N.js +0 -26
  487. package/dist/insights-7CCOJ4G6.js +0 -132
  488. package/dist/inspect-2XJ6LLSJ.js +0 -192
  489. package/dist/intent-VGQHKKNW.js +0 -95
  490. package/dist/keyword-gap-JKC3U3OS.js +0 -130
  491. package/dist/keyword-metrics-OYHBOWA3.js +0 -200
  492. package/dist/keywords-for-site-EUTBLXRT.js +0 -131
  493. package/dist/landing-PRG5PT7J.js +0 -28
  494. package/dist/languages-JR3RSGUP.js +0 -40
  495. package/dist/leads-KXCGAJ34.js +0 -115
  496. package/dist/learn-N2XDH4XA.js +0 -207
  497. package/dist/line-item-writes-4YZNT3VI.js +0 -211
  498. package/dist/line-items-FSQPXOKE.js +0 -107
  499. package/dist/link-ITXPWVMH.js +0 -67
  500. package/dist/linkedin-Z6M3YEAQ.js +0 -1328
  501. package/dist/linkedin-person-IK2MWL7Y.js +0 -139
  502. package/dist/list-EVIRF2CY.js +0 -154
  503. package/dist/list-VJRTBW6A.js +0 -306
  504. package/dist/list-WA3PQEWJ.js +0 -67
  505. package/dist/locations-N5TZTS5F.js +0 -40
  506. package/dist/locations-QRISCNMR.js +0 -69
  507. package/dist/log-VFGFY5PT.js +0 -95
  508. package/dist/lookup-SX6GZMO5.js +0 -23
  509. package/dist/make-DRWMUES6.js +0 -1366
  510. package/dist/map-3YMLKUNL.js +0 -436
  511. package/dist/mcp-MIZR2NFZ.js +0 -729
  512. package/dist/media-sources-RKIBHCTU.js +0 -35
  513. package/dist/members-XMHVOMNT.js +0 -47
  514. package/dist/metrics-NCSG7SLD.js +0 -152
  515. package/dist/models-2NPHMHN7.js +0 -155
  516. package/dist/normalize-PSPLM7OO.js +0 -144
  517. package/dist/options-5KONPMEL.js +0 -125
  518. package/dist/organization-BU6WIFXV.js +0 -949
  519. package/dist/performance-74OQO2QQ.js +0 -27
  520. package/dist/performance-TIA3O7YO.js +0 -5556
  521. package/dist/pixels-COONSHMC.js +0 -62
  522. package/dist/plan-RNDLIOZY.js +0 -208
  523. package/dist/promoted-tweet-writes-IYDFXFVR.js +0 -183
  524. package/dist/promoted-tweets-A42JISSP.js +0 -119
  525. package/dist/publish-C3NUBIID.js +0 -344
  526. package/dist/query-G4L42FHT.js +0 -62
  527. package/dist/questionnaire-7YHG733R.js +0 -94
  528. package/dist/reddit-VMNGERE6.js +0 -29
  529. package/dist/refresh-EBRMXZAC.js +0 -97
  530. package/dist/release-MKGBYUKY.js +0 -63
  531. package/dist/relevant-pages-IVHAKIOI.js +0 -99
  532. package/dist/remove-EHHTOC7T.js +0 -53
  533. package/dist/reopen-ILUWK3W3.js +0 -66
  534. package/dist/rerun-367PVEIF.js +0 -95
  535. package/dist/research-7BWH4VVV.js +0 -72
  536. package/dist/research-VDSOAQ77.js +0 -265
  537. package/dist/reset-VAKJGC3Q.js +0 -57
  538. package/dist/reset-X2JMHREN.js +0 -57
  539. package/dist/resolve-7OXBK4CU.js +0 -124
  540. package/dist/retry-2L2B3FOJ.js +0 -65
  541. package/dist/retry-GJBALRAZ.js +0 -63
  542. package/dist/revenue-H66XC7JC.js +0 -91
  543. package/dist/rules-PJJSIQWM.js +0 -99
  544. package/dist/rules-add-UFY7TAO3.js +0 -465
  545. package/dist/run-6PDML7YJ.js +0 -70
  546. package/dist/run-QBXFCGML.js +0 -69
  547. package/dist/scaffold-ad-KOBSZMKJ.js +0 -1512
  548. package/dist/scaffold-static-ad-2I7TXF7L.js +0 -1010
  549. package/dist/scaffold-video-P5UOTXWT.js +0 -884
  550. package/dist/schedule-JNBK267N.js +0 -64
  551. package/dist/scheduled-agents-274ZTTUZ.js +0 -55
  552. package/dist/schema-7HR57YTC.js +0 -135
  553. package/dist/schema-YO5VLVDS.js +0 -69
  554. package/dist/search-33EMRTMI.js +0 -177
  555. package/dist/select-3ZRWAYT7.js +0 -106
  556. package/dist/sends-2BR7A434.js +0 -349
  557. package/dist/set-prompt-SCSC7BRO.js +0 -198
  558. package/dist/setup-links-BEIHAXVR.js +0 -144
  559. package/dist/shopify-XDDDUQTQ.js +0 -3958
  560. package/dist/site-DWVWM3HD.js +0 -180
  561. package/dist/sources-74OM3T4V.js +0 -457
  562. package/dist/sources-O7ZOL5YR.js +0 -30
  563. package/dist/stale-WAKIZSQS.js +0 -76
  564. package/dist/status-JOIUSIE7.js +0 -65
  565. package/dist/studio-FJL2TIZK.js +0 -49
  566. package/dist/sync-XBCQXUD7.js +0 -57
  567. package/dist/sync-definition-2BQUWH3Y.js +0 -69
  568. package/dist/tags-3YUICYEG.js +0 -227
  569. package/dist/tags-AQ2JGXPQ.js +0 -23
  570. package/dist/tags-AXIDVYMK.js +0 -23
  571. package/dist/tags-HISOVNNV.js +0 -23
  572. package/dist/tags-NSCLNPLU.js +0 -26
  573. package/dist/targeting-criteria-DFJQKQV4.js +0 -113
  574. package/dist/targets-NQKCNVQ7.js +0 -106
  575. package/dist/testimonials-K5D2KRYK.js +0 -32
  576. package/dist/themes-CIXQPTFX.js +0 -95
  577. package/dist/top-companies-3M7H5NPQ.js +0 -111
  578. package/dist/transcript-CQTAZJK4.js +0 -165
  579. package/dist/translate-D2SJCT7D.js +0 -600
  580. package/dist/triggers-THBRMWM6.js +0 -144
  581. package/dist/unlink-WWPY4336.js +0 -70
  582. package/dist/unstage-HTYFDR33.js +0 -88
  583. package/dist/unstage-VLEPSA6I.js +0 -96
  584. package/dist/update-AMTTYSZP.js +0 -66
  585. package/dist/update-FMK63TCD.js +0 -192
  586. package/dist/update-HCQFGRDE.js +0 -101
  587. package/dist/update-N3DTFTQE.js +0 -155
  588. package/dist/upload-BCUR7GMG.js +0 -129
  589. package/dist/url-options-BSU46PR2.js +0 -131
  590. package/dist/url-params-YWPEV5V5.js +0 -101
  591. package/dist/validate-GZYVVNHQ.js +0 -122
  592. package/dist/videos-L5BDS2M4.js +0 -41
  593. package/dist/viewer-check-DBQ6T3R5.js +0 -83
  594. package/dist/web-62AJC2EU.js +0 -143
  595. package/dist/winning-ads-OHVZERTH.js +0 -86
  596. package/dist/write-commands-BWWXFT2R.js +0 -1525
  597. package/dist/x-ACDJXCOY.js +0 -47
  598. /package/dist/{account-HDSDPK4L.js.map → account-D56ET6IW.js.map} +0 -0
  599. /package/dist/{account-YDA4MRIK.js.map → account-R536H7IZ.js.map} +0 -0
  600. /package/dist/{account-reads-5VPDX6NF.js.map → account-reads-7ZOFEQWM.js.map} +0 -0
  601. /package/dist/{account-users-KWVYRT2M.js.map → account-users-SLFD5EF6.js.map} +0 -0
  602. /package/dist/{account-writes-D3ELXDOF.js.map → account-writes-SWMDBVH4.js.map} +0 -0
  603. /package/dist/{accounts-GY7HP6ER.js.map → accounts-5AIU2BII.js.map} +0 -0
  604. /package/dist/{accounts-6WPNPMFP.js.map → accounts-X25YHBAH.js.map} +0 -0
  605. /package/dist/{actions-HRAXJHLG.js.map → actions-WL47GZOU.js.map} +0 -0
  606. /package/dist/{activecampaign-A7AMIRYU.js.map → activecampaign-J36ZLRDG.js.map} +0 -0
  607. /package/dist/{ad-group-writes-QMLGO62B.js.map → ad-group-writes-INFBYL3B.js.map} +0 -0
  608. /package/dist/{ad-groups-5KQWUB7J.js.map → ad-groups-HTVKYBPX.js.map} +0 -0
  609. /package/dist/{ad-writes-Y6BNCZGK.js.map → ad-writes-62JZYKJ4.js.map} +0 -0
  610. /package/dist/{add-ZEPO6CVT.js.map → add-6IU3SWQI.js.map} +0 -0
  611. /package/dist/{add-OHYKPUG7.js.map → add-HBZMWXRJ.js.map} +0 -0
  612. /package/dist/{ads-PNSXXDHI.js.map → ads-JKD6VMCE.js.map} +0 -0
  613. /package/dist/{ads-F7ARRWCB.js.map → ads-ZWNY3UY4.js.map} +0 -0
  614. /package/dist/{advertisers-523UPXDM.js.map → advertisers-N2XLRZE6.js.map} +0 -0
  615. /package/dist/{analytics-4KUANCID.js.map → analytics-KUJVUDY6.js.map} +0 -0
  616. /package/dist/{analytics-TRUVVR6I.js.map → analytics-QFZEVFVQ.js.map} +0 -0
  617. /package/dist/{animate-S4KGFV36.js.map → animate-ZS24SJGN.js.map} +0 -0
  618. /package/dist/{assign-2AW5GY3T.js.map → assign-PURBKGQY.js.map} +0 -0
  619. /package/dist/{audience-size-VHFMQEMF.js.map → audience-size-A5FPKEUM.js.map} +0 -0
  620. /package/dist/{audiences-N6DE6EAV.js.map → audiences-5FNTEENV.js.map} +0 -0
  621. /package/dist/{audit-WG6M3CXB.js.map → audit-7ZGDFGET.js.map} +0 -0
  622. /package/dist/{autocomplete-WHNI5BQM.js.map → autocomplete-3HJBPKLV.js.map} +0 -0
  623. /package/dist/{avatars-WECPBQ4T.js.map → avatars-6BBL6L5K.js.map} +0 -0
  624. /package/dist/{bid-pricing-WVHPUM74.js.map → bid-pricing-GIM7LJRR.js.map} +0 -0
  625. /package/dist/{brand-TNZRFKI4.js.map → brand-CXEH7YYF.js.map} +0 -0
  626. /package/dist/{brief-F56MVJHA.js.map → brief-FL6G3NTB.js.map} +0 -0
  627. /package/dist/{campaign-groups-OLJ5567X.js.map → campaign-groups-BNBS7QBX.js.map} +0 -0
  628. /package/dist/{campaign-writes-2DVIWSWU.js.map → campaign-writes-MWA2FPKC.js.map} +0 -0
  629. /package/dist/{campaign-writes-6LU3LDDY.js.map → campaign-writes-QQGI3U2P.js.map} +0 -0
  630. /package/dist/{campaigns-7YE5UYPS.js.map → campaigns-42OP3HPV.js.map} +0 -0
  631. /package/dist/{campaigns-MJ64UJTS.js.map → campaigns-LYIG74TQ.js.map} +0 -0
  632. /package/dist/{campaigns-PHSRKXVZ.js.map → campaigns-QKSDJAWD.js.map} +0 -0
  633. /package/dist/{canvas-FUHHYUO7.js.map → canvas-7SX3ZDKZ.js.map} +0 -0
  634. /package/dist/{capabilities-5MXUVZJV.js.map → capabilities-FGLYVSW5.js.map} +0 -0
  635. /package/dist/{catalog-PKYW67IO.js.map → catalog-7S3ZR3JP.js.map} +0 -0
  636. /package/dist/{catalogs-2GNJYFSF.js.map → catalogs-RWAZMJHF.js.map} +0 -0
  637. /package/dist/{changes-UQYFPZWO.js.map → changes-PMDRPRK7.js.map} +0 -0
  638. /package/dist/{chatgpt-6PP4HANG.js.map → chatgpt-J2LK4NK4.js.map} +0 -0
  639. /package/dist/{chats-FVR35ZQ3.js.map → chats-EG6UCN45.js.map} +0 -0
  640. /package/dist/{check-4P2IVABH.js.map → check-BC2KFBQM.js.map} +0 -0
  641. /package/dist/{chunk-QOOOYHMN.js.map → chunk-24E77GI6.js.map} +0 -0
  642. /package/dist/{chunk-HXALY3VB.js.map → chunk-2FL7NBPT.js.map} +0 -0
  643. /package/dist/{chunk-47RFRYEP.js.map → chunk-2PRRXTV3.js.map} +0 -0
  644. /package/dist/{chunk-VJINC2Q3.js.map → chunk-32GFGVW2.js.map} +0 -0
  645. /package/dist/{chunk-W5WKPVCJ.js.map → chunk-347GRWQN.js.map} +0 -0
  646. /package/dist/{chunk-I7AYMJZA.js.map → chunk-45EERHDB.js.map} +0 -0
  647. /package/dist/{chunk-VP4PO7FW.js.map → chunk-56UWXQEN.js.map} +0 -0
  648. /package/dist/{chunk-I6QJJ7OY.js.map → chunk-5N2CSLY6.js.map} +0 -0
  649. /package/dist/{chunk-56OEYUJU.js.map → chunk-5YN53OAA.js.map} +0 -0
  650. /package/dist/{chunk-ARXNQRKT.js.map → chunk-6K73DWA5.js.map} +0 -0
  651. /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
  652. /package/dist/{chunk-CK2SDG7U.js.map → chunk-6TQTKC4M.js.map} +0 -0
  653. /package/dist/{chunk-ZKIWDT6R.js.map → chunk-76TUVLAJ.js.map} +0 -0
  654. /package/dist/{chunk-BKIE7DBG.js.map → chunk-7EOD7RV4.js.map} +0 -0
  655. /package/dist/{chunk-BYNBZIHS.js.map → chunk-7R5WC5PM.js.map} +0 -0
  656. /package/dist/{chunk-FZSJFSDC.js.map → chunk-A5SPK37E.js.map} +0 -0
  657. /package/dist/{chunk-W52LH3J3.js.map → chunk-AIG53YWM.js.map} +0 -0
  658. /package/dist/{chunk-SZJKURRJ.js.map → chunk-AOLRE5JO.js.map} +0 -0
  659. /package/dist/{chunk-QDGDA2YD.js.map → chunk-BDAXBOGT.js.map} +0 -0
  660. /package/dist/{chunk-VXXVPUBA.js.map → chunk-BEHOW6DU.js.map} +0 -0
  661. /package/dist/{chunk-UHQ2H3NQ.js.map → chunk-BM3HTMD6.js.map} +0 -0
  662. /package/dist/{chunk-FMMSQIVK.js.map → chunk-BPUVBVKK.js.map} +0 -0
  663. /package/dist/{chunk-RL6UQXX7.js.map → chunk-CK6UMOYN.js.map} +0 -0
  664. /package/dist/{chunk-IXPYC4D2.js.map → chunk-CONB42F3.js.map} +0 -0
  665. /package/dist/{chunk-Z4ZYFIDQ.js.map → chunk-CWZ2ODJQ.js.map} +0 -0
  666. /package/dist/{chunk-AYAVYXSL.js.map → chunk-D4U72EIE.js.map} +0 -0
  667. /package/dist/{chunk-HVJJEQDQ.js.map → chunk-DYOUJERF.js.map} +0 -0
  668. /package/dist/{chunk-OVBZ26PE.js.map → chunk-EIBWWYBK.js.map} +0 -0
  669. /package/dist/{chunk-FLSWMHI2.js.map → chunk-EJHYK54S.js.map} +0 -0
  670. /package/dist/{chunk-IQ3MYXCJ.js.map → chunk-ETLGTUQI.js.map} +0 -0
  671. /package/dist/{chunk-7EHBCACP.js.map → chunk-GLUXBB6C.js.map} +0 -0
  672. /package/dist/{chunk-MF3BTAT6.js.map → chunk-GXDFLDFK.js.map} +0 -0
  673. /package/dist/{chunk-5OQKC5AV.js.map → chunk-GXSYGI77.js.map} +0 -0
  674. /package/dist/{chunk-SBQQHP5H.js.map → chunk-IAK7AB22.js.map} +0 -0
  675. /package/dist/{chunk-SXML3LQN.js.map → chunk-IHZUSAUX.js.map} +0 -0
  676. /package/dist/{chunk-ABK536AV.js.map → chunk-ISDOF6KZ.js.map} +0 -0
  677. /package/dist/{chunk-44ZRCSR7.js.map → chunk-IZABTTW5.js.map} +0 -0
  678. /package/dist/{chunk-KNSUNB2Z.js.map → chunk-JMQ3F5VX.js.map} +0 -0
  679. /package/dist/{chunk-EIDJCUMM.js.map → chunk-KAAYVKBH.js.map} +0 -0
  680. /package/dist/{chunk-PESH2VF7.js.map → chunk-KZ55NULP.js.map} +0 -0
  681. /package/dist/{chunk-R2QZBA7P.js.map → chunk-LOLB3YJR.js.map} +0 -0
  682. /package/dist/{chunk-DMGLSVZF.js.map → chunk-LP2KYY5Z.js.map} +0 -0
  683. /package/dist/{chunk-S6VFDNSQ.js.map → chunk-MTV2RSGY.js.map} +0 -0
  684. /package/dist/{chunk-GSVG7XT3.js.map → chunk-MZE6PLV3.js.map} +0 -0
  685. /package/dist/{chunk-JWMPFTEF.js.map → chunk-OXOC6TJC.js.map} +0 -0
  686. /package/dist/{chunk-FBTECDEZ.js.map → chunk-PCIMC7VX.js.map} +0 -0
  687. /package/dist/{chunk-Z5PSSFN7.js.map → chunk-RESQPBSC.js.map} +0 -0
  688. /package/dist/{chunk-UBDY5RE4.js.map → chunk-RIA5RXPL.js.map} +0 -0
  689. /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
  690. /package/dist/{chunk-L5RAYYEF.js.map → chunk-SPQ7IVTJ.js.map} +0 -0
  691. /package/dist/{chunk-NHQIGCFL.js.map → chunk-TG2DC6CO.js.map} +0 -0
  692. /package/dist/{chunk-GS4MMLXY.js.map → chunk-TIYFDFLN.js.map} +0 -0
  693. /package/dist/{chunk-ALTTFAER.js.map → chunk-TVSHBUPA.js.map} +0 -0
  694. /package/dist/{chunk-W4NFBCCR.js.map → chunk-U4BPW7ZO.js.map} +0 -0
  695. /package/dist/{chunk-QKMMQPAJ.js.map → chunk-UK6AYD3V.js.map} +0 -0
  696. /package/dist/{chunk-3U4T4CKO.js.map → chunk-UMTGF43H.js.map} +0 -0
  697. /package/dist/{chunk-SG2TDQEE.js.map → chunk-URMAEVZO.js.map} +0 -0
  698. /package/dist/{chunk-GOTPUACV.js.map → chunk-VGKDX7LP.js.map} +0 -0
  699. /package/dist/{chunk-WWLZ5RRU.js.map → chunk-WEQZ563U.js.map} +0 -0
  700. /package/dist/{chunk-ENGKUMTR.js.map → chunk-XC3DYN2N.js.map} +0 -0
  701. /package/dist/{chunk-NZ42DEU7.js.map → chunk-XGQ4XMCS.js.map} +0 -0
  702. /package/dist/{chunk-ICHXD4IB.js.map → chunk-XH7TGLJC.js.map} +0 -0
  703. /package/dist/{chunk-2BW4P45O.js.map → chunk-XKRCO3JC.js.map} +0 -0
  704. /package/dist/{chunk-4LV5JE4Z.js.map → chunk-XL7X37UC.js.map} +0 -0
  705. /package/dist/{chunk-ZN5CI4CP.js.map → chunk-XXCMIS2V.js.map} +0 -0
  706. /package/dist/{chunk-HQYXRF7E.js.map → chunk-ZLEHD3ZT.js.map} +0 -0
  707. /package/dist/{chunk-IRDKHNKO.js.map → chunk-ZQW6UZQC.js.map} +0 -0
  708. /package/dist/{chunk-X3BOXZVP.js.map → chunk-ZRAZBHTG.js.map} +0 -0
  709. /package/dist/{chunk-PWYGIUNB.js.map → chunk-ZUXXUHZY.js.map} +0 -0
  710. /package/dist/{chunk-65QGMY3C.js.map → chunk-ZV7I2U4T.js.map} +0 -0
  711. /package/dist/{claim-B6IX5MUB.js.map → claim-HDRBJL5Q.js.map} +0 -0
  712. /package/dist/{companies-U4APTF2Z.js.map → companies-A7BFDYCP.js.map} +0 -0
  713. /package/dist/{company-WFVBYXKK.js.map → company-7MUAN5HT.js.map} +0 -0
  714. /package/dist/{complete-KFV5NU52.js.map → complete-2QWJE5JP.js.map} +0 -0
  715. /package/dist/{connect-2TWKL3DQ.js.map → connect-7JCP2CAX.js.map} +0 -0
  716. /package/dist/{conversation-7VQ7CGVT.js.map → conversation-FKUZLUGV.js.map} +0 -0
  717. /package/dist/{conversion-report-6IQKXWFU.js.map → conversion-report-IHKQKNBM.js.map} +0 -0
  718. /package/dist/{conversion-upload-command-TYGIB7XJ.js.map → conversion-upload-command-5MOGWC26.js.map} +0 -0
  719. /package/dist/{conversion-writes-UQU3QJTF.js.map → conversion-writes-NAJVO3WP.js.map} +0 -0
  720. /package/dist/{conversions-P2A6R4FG.js.map → conversions-5BBFXRRS.js.map} +0 -0
  721. /package/dist/{conversions-ZP2SKL36.js.map → conversions-KBFMVTII.js.map} +0 -0
  722. /package/dist/{create-M7OTWZ2W.js.map → create-KMGTMXQE.js.map} +0 -0
  723. /package/dist/{create-KE3GM4W6.js.map → create-SSQ2R7Z4.js.map} +0 -0
  724. /package/dist/{create-XLQEQYVN.js.map → create-V7T4SFNP.js.map} +0 -0
  725. /package/dist/{create-KKURENQ7.js.map → create-YUMBZ4MQ.js.map} +0 -0
  726. /package/dist/{creatives-AXMG777O.js.map → creatives-KPI7CSZ5.js.map} +0 -0
  727. /package/dist/{creatives-VR3N5A3X.js.map → creatives-OIEYLRXB.js.map} +0 -0
  728. /package/dist/{credentials-HTPDDOYP.js.map → credentials-4DSXDO63.js.map} +0 -0
  729. /package/dist/{critique-EZJMYQLC.js.map → critique-AO3YXLGU.js.map} +0 -0
  730. /package/dist/{critique-Q5ZZ6PKB.js.map → critique-R3D2I2O6.js.map} +0 -0
  731. /package/dist/{crm-YLSUKW6N.js.map → crm-JSXAYQWL.js.map} +0 -0
  732. /package/dist/{crm-5QOSCQWL.js.map → crm-VXNDN5KA.js.map} +0 -0
  733. /package/dist/{currency-SVEUNKHP.js.map → currency-RKTYXSNH.js.map} +0 -0
  734. /package/dist/{customers-OGKISQAS.js.map → customers-MZWGBY4J.js.map} +0 -0
  735. /package/dist/{delete-OPIN5KCK.js.map → delete-GQUWHFPZ.js.map} +0 -0
  736. /package/dist/{delete-MD6QBKGM.js.map → delete-K4X4MXMC.js.map} +0 -0
  737. /package/dist/{delete-23FUCSTE.js.map → delete-LC6BMULH.js.map} +0 -0
  738. /package/dist/{demographics-AFNPWEZP.js.map → demographics-236FSE3G.js.map} +0 -0
  739. /package/dist/{discard-UKPRZTQT.js.map → discard-NPSWHJZH.js.map} +0 -0
  740. /package/dist/{discover-2ZX3DYSF.js.map → discover-VL3BDJOO.js.map} +0 -0
  741. /package/dist/{domain-6TJPO4WO.js.map → domain-JQFCOVCS.js.map} +0 -0
  742. /package/dist/{download-TBPG3ZIH.js.map → download-H2ISXHDF.js.map} +0 -0
  743. /package/dist/{draft-KYO43IJD.js.map → draft-N752W2ZE.js.map} +0 -0
  744. /package/dist/{draft-ALSOCILF.js.map → draft-RXJVZ5WR.js.map} +0 -0
  745. /package/dist/{draft-BAWIN2IN.js.map → draft-SOFVVDSV.js.map} +0 -0
  746. /package/dist/{draft-QUXRJRNY.js.map → draft-UGUB35WQ.js.map} +0 -0
  747. /package/dist/{draft-2EO63W4K.js.map → draft-W2S6Z7ZZ.js.map} +0 -0
  748. /package/dist/{experiments-QXAC5BPW.js.map → experiments-5IC4YWGK.js.map} +0 -0
  749. /package/dist/{facets-7IDDCZIY.js.map → facets-RCPT4627.js.map} +0 -0
  750. /package/dist/{feedback-ZWFOBIGU.js.map → feedback-RH53D4TY.js.map} +0 -0
  751. /package/dist/{feedback-record-ZZRR4LUM.js.map → feedback-record-35VOENY5.js.map} +0 -0
  752. /package/dist/{fetch-HYGMTCHK.js.map → fetch-MT4EANEF.js.map} +0 -0
  753. /package/dist/{fit-KDY7PZFL.js.map → fit-U37JJGM5.js.map} +0 -0
  754. /package/dist/{flows-U646JOQN.js.map → flows-6IY6WH42.js.map} +0 -0
  755. /package/dist/{fonts-6RIJJ222.js.map → fonts-36GCZLVE.js.map} +0 -0
  756. /package/dist/{forecast-4NJXBMZV.js.map → forecast-KRKT6KFH.js.map} +0 -0
  757. /package/dist/{forecast-IECMUBL2.js.map → forecast-SS4ZN3KP.js.map} +0 -0
  758. /package/dist/{funnel-OFJ5XMOU.js.map → funnel-Z6LGT4CT.js.map} +0 -0
  759. /package/dist/{generate-VQTLPEYW.js.map → generate-NWUTMT3G.js.map} +0 -0
  760. /package/dist/{get-KUOCL3IX.js.map → get-DWCTJFGR.js.map} +0 -0
  761. /package/dist/{get-MINQPB73.js.map → get-X4CQVJQZ.js.map} +0 -0
  762. /package/dist/{google-LVOGKNDV.js.map → google-6H4QGAKT.js.map} +0 -0
  763. /package/dist/{google-ads-RIIV4EJI.js.map → google-ads-7XRMT53M.js.map} +0 -0
  764. /package/dist/{history-7OLO7HIP.js.map → history-EIRUGQHZ.js.map} +0 -0
  765. /package/dist/{history-JK6S5KWG.js.map → history-HYX6YWI4.js.map} +0 -0
  766. /package/dist/{history-VFA6IVKN.js.map → history-JCYWRY2E.js.map} +0 -0
  767. /package/dist/{hubspot-IMLZUTT3.js.map → hubspot-VLA6PKI2.js.map} +0 -0
  768. /package/dist/{ideas-ZUXLYR6Y.js.map → ideas-27P4HQZI.js.map} +0 -0
  769. /package/dist/{images-WNMQFAC3.js.map → images-YOZ3YLL2.js.map} +0 -0
  770. /package/dist/{ingest-FKC5PBBE.js.map → ingest-6Q54EZ2Y.js.map} +0 -0
  771. /package/dist/{ingest-L5YC6U2N.js.map → ingest-DW2TG6OK.js.map} +0 -0
  772. /package/dist/{insights-7CCOJ4G6.js.map → insights-7CS63UUJ.js.map} +0 -0
  773. /package/dist/{inspect-2XJ6LLSJ.js.map → inspect-ZOPVVXXE.js.map} +0 -0
  774. /package/dist/{intent-VGQHKKNW.js.map → intent-XNGEMHFD.js.map} +0 -0
  775. /package/dist/{keyword-gap-JKC3U3OS.js.map → keyword-gap-TK2BMMB3.js.map} +0 -0
  776. /package/dist/{keyword-metrics-OYHBOWA3.js.map → keyword-metrics-XJKDE25Z.js.map} +0 -0
  777. /package/dist/{keywords-for-site-EUTBLXRT.js.map → keywords-for-site-SWCA75X3.js.map} +0 -0
  778. /package/dist/{landing-PRG5PT7J.js.map → landing-GMAUCDYC.js.map} +0 -0
  779. /package/dist/{languages-JR3RSGUP.js.map → languages-PDXVOG5V.js.map} +0 -0
  780. /package/dist/{leads-KXCGAJ34.js.map → leads-MA2PDGLB.js.map} +0 -0
  781. /package/dist/{learn-N2XDH4XA.js.map → learn-77RDRZHO.js.map} +0 -0
  782. /package/dist/{line-item-writes-4YZNT3VI.js.map → line-item-writes-DKRS6ANU.js.map} +0 -0
  783. /package/dist/{line-items-FSQPXOKE.js.map → line-items-R5EID7EC.js.map} +0 -0
  784. /package/dist/{link-ITXPWVMH.js.map → link-MK67UR6N.js.map} +0 -0
  785. /package/dist/{linkedin-Z6M3YEAQ.js.map → linkedin-4X57MIAN.js.map} +0 -0
  786. /package/dist/{linkedin-person-IK2MWL7Y.js.map → linkedin-person-XXVK3DJW.js.map} +0 -0
  787. /package/dist/{list-EVIRF2CY.js.map → list-45MXHBTK.js.map} +0 -0
  788. /package/dist/{list-WA3PQEWJ.js.map → list-PQ3CQV74.js.map} +0 -0
  789. /package/dist/{list-VJRTBW6A.js.map → list-VWWJOAGX.js.map} +0 -0
  790. /package/dist/{locations-N5TZTS5F.js.map → locations-7T4U5RDB.js.map} +0 -0
  791. /package/dist/{locations-QRISCNMR.js.map → locations-E4XIZVAB.js.map} +0 -0
  792. /package/dist/{log-VFGFY5PT.js.map → log-RHF535KO.js.map} +0 -0
  793. /package/dist/{lookup-SX6GZMO5.js.map → lookup-Q6TLACOT.js.map} +0 -0
  794. /package/dist/{make-DRWMUES6.js.map → make-RSNKIYPN.js.map} +0 -0
  795. /package/dist/{map-3YMLKUNL.js.map → map-GM3MZLPC.js.map} +0 -0
  796. /package/dist/{mcp-MIZR2NFZ.js.map → mcp-XT7EIY77.js.map} +0 -0
  797. /package/dist/{media-sources-RKIBHCTU.js.map → media-sources-A4BDXKCY.js.map} +0 -0
  798. /package/dist/{members-XMHVOMNT.js.map → members-FJFYPWOC.js.map} +0 -0
  799. /package/dist/{metrics-NCSG7SLD.js.map → metrics-MQ4H74R7.js.map} +0 -0
  800. /package/dist/{models-2NPHMHN7.js.map → models-64UHXEON.js.map} +0 -0
  801. /package/dist/{normalize-PSPLM7OO.js.map → normalize-ATKIWTZN.js.map} +0 -0
  802. /package/dist/{options-5KONPMEL.js.map → options-Q5VYCXVZ.js.map} +0 -0
  803. /package/dist/{organization-BU6WIFXV.js.map → organization-TX736WKT.js.map} +0 -0
  804. /package/dist/{performance-74OQO2QQ.js.map → performance-3YY4YWX5.js.map} +0 -0
  805. /package/dist/{performance-TIA3O7YO.js.map → performance-GIYI3N4X.js.map} +0 -0
  806. /package/dist/{pixels-COONSHMC.js.map → pixels-UBKSXMN3.js.map} +0 -0
  807. /package/dist/{plan-RNDLIOZY.js.map → plan-T3MJKFAM.js.map} +0 -0
  808. /package/dist/{promoted-tweet-writes-IYDFXFVR.js.map → promoted-tweet-writes-2AO5GRUC.js.map} +0 -0
  809. /package/dist/{promoted-tweets-A42JISSP.js.map → promoted-tweets-XF7FL3J4.js.map} +0 -0
  810. /package/dist/{publish-C3NUBIID.js.map → publish-H54LNDCJ.js.map} +0 -0
  811. /package/dist/{query-G4L42FHT.js.map → query-TPKGR2UQ.js.map} +0 -0
  812. /package/dist/{questionnaire-7YHG733R.js.map → questionnaire-BFYEO57P.js.map} +0 -0
  813. /package/dist/{reddit-VMNGERE6.js.map → reddit-TPEGEBHQ.js.map} +0 -0
  814. /package/dist/{refresh-EBRMXZAC.js.map → refresh-WZFQMCBO.js.map} +0 -0
  815. /package/dist/{release-MKGBYUKY.js.map → release-M4XTMFXE.js.map} +0 -0
  816. /package/dist/{relevant-pages-IVHAKIOI.js.map → relevant-pages-HMYBVWNR.js.map} +0 -0
  817. /package/dist/{remove-EHHTOC7T.js.map → remove-XS6BH7RQ.js.map} +0 -0
  818. /package/dist/{reopen-ILUWK3W3.js.map → reopen-K4BRTGEJ.js.map} +0 -0
  819. /package/dist/{rerun-367PVEIF.js.map → rerun-PE6GNTCI.js.map} +0 -0
  820. /package/dist/{research-7BWH4VVV.js.map → research-IWSBNIFT.js.map} +0 -0
  821. /package/dist/{research-VDSOAQ77.js.map → research-XWQUJMBR.js.map} +0 -0
  822. /package/dist/{reset-VAKJGC3Q.js.map → reset-FMZ3R6Y4.js.map} +0 -0
  823. /package/dist/{reset-X2JMHREN.js.map → reset-JQO7EK5G.js.map} +0 -0
  824. /package/dist/{resolve-7OXBK4CU.js.map → resolve-Y4CMZU35.js.map} +0 -0
  825. /package/dist/{retry-GJBALRAZ.js.map → retry-H64XQ4NC.js.map} +0 -0
  826. /package/dist/{retry-2L2B3FOJ.js.map → retry-OR2YQOZT.js.map} +0 -0
  827. /package/dist/{revenue-H66XC7JC.js.map → revenue-W7AXXQ7K.js.map} +0 -0
  828. /package/dist/{rules-PJJSIQWM.js.map → rules-PMLZKICG.js.map} +0 -0
  829. /package/dist/{rules-add-UFY7TAO3.js.map → rules-add-263D2LQY.js.map} +0 -0
  830. /package/dist/{run-QBXFCGML.js.map → run-A2MJEURT.js.map} +0 -0
  831. /package/dist/{run-6PDML7YJ.js.map → run-MKZMTMRT.js.map} +0 -0
  832. /package/dist/{scaffold-ad-KOBSZMKJ.js.map → scaffold-ad-HISG6L46.js.map} +0 -0
  833. /package/dist/{scaffold-static-ad-2I7TXF7L.js.map → scaffold-static-ad-MW3JMMDU.js.map} +0 -0
  834. /package/dist/{scaffold-video-P5UOTXWT.js.map → scaffold-video-QYXBYFTQ.js.map} +0 -0
  835. /package/dist/{schedule-JNBK267N.js.map → schedule-UA5RXNZ2.js.map} +0 -0
  836. /package/dist/{scheduled-agents-274ZTTUZ.js.map → scheduled-agents-YIKWS5CO.js.map} +0 -0
  837. /package/dist/{schema-7HR57YTC.js.map → schema-IKSQHB3S.js.map} +0 -0
  838. /package/dist/{schema-YO5VLVDS.js.map → schema-M44S4TPF.js.map} +0 -0
  839. /package/dist/{search-33EMRTMI.js.map → search-ZQV7SM7W.js.map} +0 -0
  840. /package/dist/{select-3ZRWAYT7.js.map → select-VTWL2NMR.js.map} +0 -0
  841. /package/dist/{sends-2BR7A434.js.map → sends-CAQ42KOR.js.map} +0 -0
  842. /package/dist/{set-prompt-SCSC7BRO.js.map → set-prompt-2V4UPUKW.js.map} +0 -0
  843. /package/dist/{setup-links-BEIHAXVR.js.map → setup-links-PBWJYOD2.js.map} +0 -0
  844. /package/dist/{shopify-XDDDUQTQ.js.map → shopify-VQYRSXVS.js.map} +0 -0
  845. /package/dist/{site-DWVWM3HD.js.map → site-GYJYYMYH.js.map} +0 -0
  846. /package/dist/{sources-74OM3T4V.js.map → sources-3NA3ZB75.js.map} +0 -0
  847. /package/dist/{sources-O7ZOL5YR.js.map → sources-UMYCW35T.js.map} +0 -0
  848. /package/dist/{stale-WAKIZSQS.js.map → stale-54NIICZG.js.map} +0 -0
  849. /package/dist/{status-JOIUSIE7.js.map → status-CRZCFN5W.js.map} +0 -0
  850. /package/dist/{studio-FJL2TIZK.js.map → studio-2VGYFGS4.js.map} +0 -0
  851. /package/dist/{sync-XBCQXUD7.js.map → sync-K4KLGMJR.js.map} +0 -0
  852. /package/dist/{sync-definition-2BQUWH3Y.js.map → sync-definition-TK5Z3ISW.js.map} +0 -0
  853. /package/dist/{tags-HISOVNNV.js.map → tags-7SNORKEL.js.map} +0 -0
  854. /package/dist/{tags-AQ2JGXPQ.js.map → tags-HCTVWQI7.js.map} +0 -0
  855. /package/dist/{tags-AXIDVYMK.js.map → tags-HD4NPLTY.js.map} +0 -0
  856. /package/dist/{tags-NSCLNPLU.js.map → tags-HOIYE6JK.js.map} +0 -0
  857. /package/dist/{tags-3YUICYEG.js.map → tags-XUJPIGIE.js.map} +0 -0
  858. /package/dist/{targeting-criteria-DFJQKQV4.js.map → targeting-criteria-EN6MZR7O.js.map} +0 -0
  859. /package/dist/{targets-NQKCNVQ7.js.map → targets-XIZJSYCM.js.map} +0 -0
  860. /package/dist/{testimonials-K5D2KRYK.js.map → testimonials-UOSKSII2.js.map} +0 -0
  861. /package/dist/{themes-CIXQPTFX.js.map → themes-3TW3WDLZ.js.map} +0 -0
  862. /package/dist/{top-companies-3M7H5NPQ.js.map → top-companies-2PZH6RG3.js.map} +0 -0
  863. /package/dist/{transcript-CQTAZJK4.js.map → transcript-M6J4MYXK.js.map} +0 -0
  864. /package/dist/{translate-D2SJCT7D.js.map → translate-V5RCXHB3.js.map} +0 -0
  865. /package/dist/{triggers-THBRMWM6.js.map → triggers-E3XWB4EZ.js.map} +0 -0
  866. /package/dist/{unlink-WWPY4336.js.map → unlink-OIMMKPRN.js.map} +0 -0
  867. /package/dist/{unstage-HTYFDR33.js.map → unstage-SP32LXDY.js.map} +0 -0
  868. /package/dist/{unstage-VLEPSA6I.js.map → unstage-XN3VC7LZ.js.map} +0 -0
  869. /package/dist/{update-FMK63TCD.js.map → update-2GAPIRWU.js.map} +0 -0
  870. /package/dist/{update-N3DTFTQE.js.map → update-H7SAAZ3Z.js.map} +0 -0
  871. /package/dist/{update-AMTTYSZP.js.map → update-LXIHAKQ5.js.map} +0 -0
  872. /package/dist/{update-HCQFGRDE.js.map → update-NKNWGXFC.js.map} +0 -0
  873. /package/dist/{upload-BCUR7GMG.js.map → upload-7RPI4DLV.js.map} +0 -0
  874. /package/dist/{url-options-BSU46PR2.js.map → url-options-TUU37JHG.js.map} +0 -0
  875. /package/dist/{url-params-YWPEV5V5.js.map → url-params-RJSXPKA3.js.map} +0 -0
  876. /package/dist/{validate-GZYVVNHQ.js.map → validate-6SZ4B3QA.js.map} +0 -0
  877. /package/dist/{videos-L5BDS2M4.js.map → videos-PUOP3G23.js.map} +0 -0
  878. /package/dist/{viewer-check-DBQ6T3R5.js.map → viewer-check-BLM3ZLLH.js.map} +0 -0
  879. /package/dist/{web-62AJC2EU.js.map → web-YUBTKG6V.js.map} +0 -0
  880. /package/dist/{winning-ads-OHVZERTH.js.map → winning-ads-MVSHJFYV.js.map} +0 -0
  881. /package/dist/{write-commands-BWWXFT2R.js.map → write-commands-ZXTABQKK.js.map} +0 -0
  882. /package/dist/{x-ACDJXCOY.js.map → x-7K2VKYXQ.js.map} +0 -0
@@ -1,1525 +0,0 @@
1
- import {
2
- TOTAL_BUDGET_HELP,
3
- bareAccountId,
4
- failWriteValidation,
5
- loadJsonFileArg,
6
- loadTargetingFileArg,
7
- mergePayload,
8
- parseDateFlag,
9
- parseListFileArg,
10
- parseLocaleFlag,
11
- parseMoneyFlag,
12
- parseOnOffFlag,
13
- requireTarget,
14
- requireTargets,
15
- stageLinkedinOps,
16
- stageOp,
17
- stageStatusChange
18
- } from "./chunk-ALTTFAER.js";
19
- import {
20
- handleLinkedinError
21
- } from "./chunk-KNSUNB2Z.js";
22
- import {
23
- repeatedValues
24
- } from "./chunk-ERSX3MKH.js";
25
- import "./chunk-QBFJGCWA.js";
26
- import "./chunk-4NZ47VXO.js";
27
- import "./chunk-D5FY4FAK.js";
28
- import "./chunk-JRQI6EVP.js";
29
- import {
30
- writeJsonEnvelope
31
- } from "./chunk-X7DMNLDD.js";
32
- import "./chunk-K6HH2KF3.js";
33
- import "./chunk-M7MLFR2S.js";
34
- import "./chunk-H4DBWD3O.js";
35
- import "./chunk-WTLNH34U.js";
36
- import "./chunk-AQ2XSUIG.js";
37
- import "./chunk-WCJ3JTLF.js";
38
- import {
39
- CONVERSION_UPLOAD_MAX_EVENTS,
40
- LEADGEN_CTA_LABELS,
41
- TEMP_REF_PREFIX,
42
- TRACKING_PARAM_DYNAMIC_VALUES,
43
- campaignExcludeCompaniesSchema,
44
- sponsoredPostUrn
45
- } from "./chunk-HVJJEQDQ.js";
46
- import "./chunk-QV6AST5T.js";
47
- import "./chunk-WCU362Z6.js";
48
- import "./chunk-GIWHHCD6.js";
49
- import "./chunk-SOPVIIUW.js";
50
- import "./chunk-G4FG5EQO.js";
51
- import "./chunk-NSBNIPIW.js";
52
- import "./chunk-46YLDIQG.js";
53
- import {
54
- apiGet,
55
- apiPost
56
- } from "./chunk-4U7HXXSA.js";
57
- import "./chunk-V6AAOAMM.js";
58
- import {
59
- requireChatId
60
- } from "./chunk-GGUQP6KI.js";
61
- import "./chunk-L55PHMSR.js";
62
- import "./chunk-YQSBHWOI.js";
63
-
64
- // src/commands/ads/linkedin/write-commands.ts
65
- import { readFileSync } from "fs";
66
- import { defineCommand } from "citty";
67
-
68
- // src/commands/ads/linkedin/conversion-upload-rows.ts
69
- import { createHash } from "crypto";
70
- var SHA256_HEX = /^[0-9a-f]{64}$/i;
71
- var COLUMN_FIELDS = {
72
- eventid: "eventId",
73
- id: "eventId",
74
- dealid: "eventId",
75
- orderid: "eventId",
76
- happenedat: "happenedAt",
77
- date: "happenedAt",
78
- closedat: "happenedAt",
79
- closedate: "happenedAt",
80
- conversiondatetime: "happenedAt",
81
- email: "email",
82
- emailaddress: "email",
83
- firstname: "firstName",
84
- lastname: "lastName",
85
- lifatid: "liFatId",
86
- companyname: "companyName",
87
- company: "companyName",
88
- title: "title",
89
- jobtitle: "title",
90
- countrycode: "countryCode",
91
- country: "countryCode",
92
- value: "value",
93
- amount: "value",
94
- currency: "currency"
95
- };
96
- function sha256(value) {
97
- return createHash("sha256").update(value).digest("hex");
98
- }
99
- function hashedEmail(raw) {
100
- const value = raw.trim();
101
- return SHA256_HEX.test(value) ? value.toLowerCase() : sha256(value.toLowerCase());
102
- }
103
- function hashedName(raw) {
104
- const value = raw.trim();
105
- return SHA256_HEX.test(value) ? value.toLowerCase() : sha256(value.toLowerCase().replace(/[\s\p{P}]/gu, ""));
106
- }
107
- function fieldValue(field, raw) {
108
- switch (field) {
109
- case "email":
110
- return hashedEmail(raw);
111
- case "firstName":
112
- case "lastName":
113
- return hashedName(raw);
114
- case "value":
115
- return Number(raw);
116
- case "currency":
117
- return raw.trim().toUpperCase();
118
- default:
119
- return raw.trim();
120
- }
121
- }
122
- function conversionUploadEvents(rows) {
123
- const ignored = /* @__PURE__ */ new Set();
124
- const events = rows.map((row) => {
125
- const event = {};
126
- for (const [column, raw] of Object.entries(row)) {
127
- const field = COLUMN_FIELDS[column.toLowerCase().replace(/[\s_-]/g, "")];
128
- if (!field) {
129
- ignored.add(column);
130
- continue;
131
- }
132
- if (raw === void 0 || raw === null || String(raw).trim() === "") {
133
- continue;
134
- }
135
- event[field] = fieldValue(field, String(raw));
136
- }
137
- return event;
138
- });
139
- return { events, ignored: [...ignored] };
140
- }
141
-
142
- // src/commands/ads/linkedin/write-commands.ts
143
- var STAGED_NOTE = "Staged until publish \u2014 review with `baker ads linkedin draft`.";
144
- var accountArgs = {
145
- "account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
146
- "account-urn": { type: "string", description: "Alias for --account-id" }
147
- };
148
- function runScheduleFromFlags(args) {
149
- const start = parseDateFlag(args.start, "--start");
150
- const end = parseDateFlag(args.end, "--end");
151
- if (start === void 0 && end === void 0) {
152
- return void 0;
153
- }
154
- return { ...start !== void 0 ? { start } : {}, ...end !== void 0 ? { end } : {} };
155
- }
156
- function groupBudgetFlags(args) {
157
- return {
158
- objectiveType: args.objective ? String(args.objective).toUpperCase() : void 0,
159
- budgetOptimization: args["shared-budget"] ? { bidStrategy: String(args["shared-budget"]).toUpperCase() } : void 0
160
- };
161
- }
162
- function campaignGroupCreatePayload(args, file) {
163
- const payload = mergePayload(file, {
164
- name: args.name,
165
- runSchedule: runScheduleFromFlags(args),
166
- totalBudget: parseMoneyFlag(args["total-budget"], args.currency, "--total-budget"),
167
- status: args.status ? String(args.status).toUpperCase() : void 0,
168
- ...groupBudgetFlags(args)
169
- });
170
- return { ...payload, runSchedule: startingNowUnlessSet(payload.runSchedule ?? {}) };
171
- }
172
- function startingNowUnlessSet(schedule) {
173
- const fields = schedule;
174
- return fields.start === void 0 ? { ...fields, start: Date.now() } : fields;
175
- }
176
- var campaignGroupsCreateCommand = defineCommand({
177
- meta: {
178
- name: "create",
179
- description: `Stage a new campaign group. ${STAGED_NOTE}
180
- A group can't be created PAUSED, and a --total-budget needs an --end.
181
- Start now: leave out --start (or pass --start now) and add --status ACTIVE \u2014 it starts the moment the chat publishes. A start that has already passed by then also moves to that moment.
182
- Example: baker ads linkedin campaign-groups create --name "Q3 ABM" --start 2026-07-10 --end 2026-09-30 --total-budget 5000 --currency EUR
183
- Shared budget: --shared-budget COST_CAP --total-budget 3000 --end 2026-12-31 lets LinkedIn move one budget between the ad sets; each ad set must then bid that way (cost cap: --optimization CAP_COST_AND_MAXIMIZE_LEADS --cost-type CPM --bid <cap>).`
184
- },
185
- args: {
186
- ...accountArgs,
187
- name: { type: "string", description: "Campaign group name (\u2264100 chars)" },
188
- start: { type: "string", description: "Run schedule start: now (default), ISO date or epoch ms" },
189
- end: { type: "string", description: "Run schedule end" },
190
- "total-budget": { type: "string", description: TOTAL_BUDGET_HELP },
191
- currency: { type: "string", description: "3-letter currency code (defaults to the ad account currency)" },
192
- objective: {
193
- type: "string",
194
- description: "Objective every ad set in it takes (LEAD_GENERATION|WEBSITE_VISIT|\u2026), create-only"
195
- },
196
- "shared-budget": {
197
- type: "string",
198
- description: "Share the --total-budget across its ad sets, bidding one way for all: MAXIMUM_DELIVERY|MANUAL|COST_CAP (LinkedIn's budget optimization; needs --total-budget and --end)"
199
- },
200
- status: {
201
- type: "string",
202
- description: "DRAFT|ACTIVE (default DRAFT) \u2014 LinkedIn refuses a new group created PAUSED; pause it once it exists"
203
- },
204
- file: { type: "string", description: "JSON file with the full payload; flags override file keys" }
205
- },
206
- run: async ({ args }) => {
207
- const accountId = bareAccountId(args);
208
- const payload = campaignGroupCreatePayload(args, loadJsonFileArg(args.file));
209
- await stageOp({ kind: "campaignGroup.create", accountId, payload });
210
- }
211
- });
212
- var campaignGroupsUpdateCommand = defineCommand({
213
- meta: {
214
- name: "update",
215
- description: `Stage changes to an existing campaign group. ${STAGED_NOTE}
216
- Pass a li_temp_* ref to amend a group staged in this chat \u2014 fields merge into the staged create.
217
- Example: baker ads linkedin campaign-groups update 635137195 --total-budget 8000 --currency EUR`
218
- },
219
- args: {
220
- id: { type: "positional", description: "Campaign group id or URN", required: true },
221
- ...accountArgs,
222
- name: { type: "string", description: "New name" },
223
- start: { type: "string", description: "New run schedule start" },
224
- end: { type: "string", description: "New run schedule end" },
225
- "total-budget": { type: "string", description: TOTAL_BUDGET_HELP },
226
- currency: { type: "string", description: "3-letter currency code (defaults to the ad account currency)" },
227
- "shared-budget": {
228
- type: "string",
229
- description: "Share the budget across its ad sets: MAXIMUM_DELIVERY|MANUAL|COST_CAP"
230
- },
231
- status: { type: "string", description: "ACTIVE|PAUSED|ARCHIVED|\u2026" },
232
- file: { type: "string", description: "JSON file with fields to change" }
233
- },
234
- run: async ({ args }) => {
235
- const accountId = bareAccountId(args);
236
- const payload = mergePayload(loadJsonFileArg(args.file), {
237
- name: args.name,
238
- runSchedule: runScheduleFromFlags(args),
239
- totalBudget: parseMoneyFlag(args["total-budget"], args.currency, "--total-budget"),
240
- status: args.status ? String(args.status).toUpperCase() : void 0,
241
- budgetOptimization: args["shared-budget"] ? { bidStrategy: String(args["shared-budget"]).toUpperCase() } : void 0
242
- });
243
- await stageOp({
244
- kind: "campaignGroup.update",
245
- accountId,
246
- target: requireTarget(args, "campaign group"),
247
- payload
248
- });
249
- }
250
- });
251
- function campaignPayloadFromFlags(args) {
252
- return {
253
- name: args.name,
254
- campaignGroup: args.group,
255
- type: args.type ? String(args.type).toUpperCase() : void 0,
256
- objectiveType: args.objective ? String(args.objective).toUpperCase() : void 0,
257
- costType: args["cost-type"] ? String(args["cost-type"]).toUpperCase() : void 0,
258
- unitCost: parseMoneyFlag(args.bid, args.currency, "--bid"),
259
- dailyBudget: parseMoneyFlag(args["daily-budget"], args.currency, "--daily-budget"),
260
- totalBudget: parseMoneyFlag(args["total-budget"], args.currency, "--total-budget"),
261
- runSchedule: runScheduleFromFlags(args),
262
- locale: parseLocaleFlag(args.locale),
263
- targetingCriteria: loadTargetingFileArg(args["targeting-file"]),
264
- audienceExpansionEnabled: parseOnOffFlag(args["audience-expansion"], "--audience-expansion"),
265
- offsiteDeliveryEnabled: parseOnOffFlag(args.lan, "--lan"),
266
- connectedTelevisionOnly: parseOnOffFlag(args.ctv, "--ctv"),
267
- creativeSelection: args["creative-selection"] ? String(args["creative-selection"]).toUpperCase() : void 0,
268
- associatedEntity: args["associated-entity"],
269
- politicalIntent: args["political-intent"] ? String(args["political-intent"]).toUpperCase() : void 0,
270
- status: args.status ? String(args.status).toUpperCase() : void 0,
271
- format: args.format ? String(args.format).toUpperCase() : void 0,
272
- optimizationTargetType: args.optimization ? String(args.optimization).toUpperCase() : void 0,
273
- pacingStrategy: args.pacing ? String(args.pacing).toUpperCase() : void 0,
274
- weeklyFrequencyCap: args["frequency-cap"] !== void 0 ? Number(args["frequency-cap"]) : void 0
275
- };
276
- }
277
- var POLITICAL_INTENT_HELP = "NOT_POLITICAL (default)|POLITICAL|NOT_DECLARED \u2014 the advertiser's declaration. New ad sets are declared not political, as Google and Meta campaigns are; pass POLITICAL only when the ads are political advertising (elections, referendums, legislation), and say so to the user.";
278
- var campaignFlagArgs = {
279
- ...accountArgs,
280
- name: { type: "string", description: "Campaign name (\u2264255 chars)" },
281
- group: { type: "string", description: "Campaign group id/URN, or li_temp_* ref staged in this chat" },
282
- type: { type: "string", description: "SPONSORED_UPDATES|TEXT_AD|SPONSORED_INMAILS|DYNAMIC" },
283
- objective: { type: "string", description: "e.g. LEAD_GENERATION, WEBSITE_VISIT, BRAND_AWARENESS" },
284
- "cost-type": { type: "string", description: "CPC|CPM|CPV" },
285
- bid: {
286
- type: "string",
287
- description: "unitCost: the manual bid, or with --optimization TARGET_COST_*/CAP_COST_* the target cost or cost cap (required there)"
288
- },
289
- optimization: {
290
- type: "string",
291
- description: "How it bids (optimizationTargetType). Manual: NONE (default)|ENHANCED_CONVERSION. Maximum delivery, billed CPM: MAX_LEAD|MAX_QUALIFIED_LEAD|MAX_CONVERSION|MAX_CLICK|MAX_IMPRESSION|MAX_REACH|MAX_VIDEO_VIEW. Target cost: TARGET_COST_PER_CLICK (CPC)|TARGET_COST_PER_IMPRESSION (CPM)|TARGET_COST_PER_VIDEO_VIEW (CPV). Cost cap, billed CPM: CAP_COST_AND_MAXIMIZE_LEADS|\u2026_CLICKS|\u2026_IMPRESSIONS|\u2026_VIDEO_VIEWS"
292
- },
293
- format: {
294
- type: "string",
295
- description: "Ad format, create-only: STANDARD_UPDATE|SINGLE_VIDEO|CAROUSEL|TEXT_AD|SPOTLIGHT|FOLLOW_COMPANY|JOBS|SPONSORED_INMAIL|SPONSORED_MESSAGE|SPONSORED_UPDATE_EVENT|SPONSORED_UPDATE_NATIVE_DOCUMENT. Required for carousel and video ad sets"
296
- },
297
- pacing: {
298
- type: "string",
299
- description: "LIFETIME (spread a total budget over the schedule)|ACCELERATED \u2014 create-only"
300
- },
301
- "frequency-cap": {
302
- type: "string",
303
- description: "At most N impressions per member a week (3\u201330), Brand awareness only"
304
- },
305
- "daily-budget": { type: "string", description: "Daily budget amount" },
306
- "total-budget": { type: "string", description: TOTAL_BUDGET_HELP },
307
- currency: { type: "string", description: "3-letter currency code (defaults to the ad account currency)" },
308
- start: {
309
- type: "string",
310
- description: "Run schedule start: now (default \u2014 when the chat publishes), ISO date or epoch ms"
311
- },
312
- end: { type: "string", description: "Run schedule end" },
313
- locale: { type: "string", description: "Profile locale like en_US" },
314
- "targeting-file": { type: "string", description: "JSON file with targetingCriteria (include.and[].or facets)" },
315
- "audience-expansion": { type: "string", description: "on|off (playbook: off)" },
316
- lan: { type: "string", description: "LinkedIn Audience Network on|off (playbook: off)" },
317
- ctv: { type: "string", description: "Connected TV on|off" },
318
- "creative-selection": { type: "string", description: "OPTIMIZED|ROUND_ROBIN" },
319
- "associated-entity": { type: "string", description: "Organization URN" },
320
- "political-intent": { type: "string", description: POLITICAL_INTENT_HELP },
321
- status: { type: "string", description: "DRAFT|ACTIVE|PAUSED \u2014 PAUSED needs a group that is not DRAFT" },
322
- file: { type: "string", description: "JSON file with the full payload; flags override file keys" }
323
- };
324
- function campaignCreatePayload(args, file) {
325
- const payload = mergePayload(file, campaignPayloadFromFlags(args));
326
- return {
327
- ...payload,
328
- locale: payload.locale ?? { country: "US", language: "en" },
329
- ...payload.runSchedule ? { runSchedule: startingNowUnlessSet(payload.runSchedule) } : {}
330
- };
331
- }
332
- var campaignsCreateCommand = defineCommand({
333
- meta: {
334
- name: "create",
335
- description: `Stage a new campaign. ${STAGED_NOTE}
336
- Targeting goes in --targeting-file (facet URNs). --group accepts a li_temp_* ref from a campaign group staged in this chat.
337
- Start now: --status ACTIVE with no --start \u2014 it starts the moment the chat publishes, in an ACTIVE group. --bid can't be above --daily-budget.
338
- Example: baker ads linkedin campaigns create --name "ABM Tier-1" --group li_temp_x1 --objective WEBSITE_VISIT --type SPONSORED_UPDATES --cost-type CPC --bid 8.50 --daily-budget 75 --currency EUR --locale en_US --targeting-file targeting.json
339
- Lead gen with a cost cap: --objective LEAD_GENERATION --cost-type CPM --optimization CAP_COST_AND_MAXIMIZE_LEADS --bid 80 (at most 80 per lead). Carousel: --format CAROUSEL.`
340
- },
341
- args: campaignFlagArgs,
342
- run: async ({ args }) => {
343
- const accountId = bareAccountId(args);
344
- const payload = campaignCreatePayload(args, loadJsonFileArg(args.file));
345
- await stageOp({ kind: "campaign.create", accountId, payload });
346
- }
347
- });
348
- function campaignUpdatePayloadFromFlags(args, target, file) {
349
- const flags = campaignPayloadFromFlags(args);
350
- if (!target.startsWith(TEMP_REF_PREFIX)) {
351
- flags.campaignGroup = void 0;
352
- flags.type = void 0;
353
- flags.locale = void 0;
354
- flags.associatedEntity = void 0;
355
- flags.format = void 0;
356
- flags.pacingStrategy = void 0;
357
- }
358
- return mergePayload(file, flags);
359
- }
360
- var campaignsUpdateCommand = defineCommand({
361
- meta: {
362
- name: "update",
363
- description: `Stage changes to an existing campaign (budget, bid, targeting, flags, schedule, status). ${STAGED_NOTE}
364
- Pass a li_temp_* ref to amend a campaign staged in this chat \u2014 fields merge into the staged create, and --group/--type/--locale/--associated-entity carry through too (they're create-only on a LIVE campaign, but fair game while it's still staged).
365
- Example: baker ads linkedin campaigns update 123456 --daily-budget 100 --currency EUR --audience-expansion off`
366
- },
367
- args: {
368
- id: { type: "positional", description: "Campaign id or URN", required: true },
369
- ...campaignFlagArgs
370
- },
371
- run: async ({ args }) => {
372
- const accountId = bareAccountId(args);
373
- const target = requireTarget(args, "campaign");
374
- const payload = campaignUpdatePayloadFromFlags(args, target, loadJsonFileArg(args.file));
375
- await stageOp({
376
- kind: "campaign.update",
377
- accountId,
378
- target,
379
- payload
380
- });
381
- }
382
- });
383
- function commaList(value) {
384
- return typeof value === "string" ? value.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0) : [];
385
- }
386
- function excludeCompaniesPayload(args) {
387
- const employers = commaList(args.org).map((org) => org.startsWith("urn:") ? org : `urn:li:organization:${org}`);
388
- const segments = commaList(args.segment);
389
- return {
390
- add: {
391
- ...employers.length > 0 ? { employers } : {},
392
- ...segments.length > 0 ? { segments } : {}
393
- }
394
- };
395
- }
396
- var EXCLUSION_FLAG_BY_FIELD = { employers: "--org", segments: "--segment" };
397
- function excludeCompaniesRefusal(args) {
398
- const payload = excludeCompaniesPayload(args);
399
- if (!payload.add.employers && !payload.add.segments) {
400
- return "pass --org and/or --segment \u2014 the companies or audiences this ad set should stop reaching";
401
- }
402
- const parsed = campaignExcludeCompaniesSchema.safeParse(payload);
403
- if (parsed.success) {
404
- return void 0;
405
- }
406
- return parsed.error.issues.map((issue) => {
407
- const flag = EXCLUSION_FLAG_BY_FIELD[String(issue.path[1])];
408
- return flag ? `${flag}: ${issue.message}` : issue.message;
409
- }).join("; ");
410
- }
411
- var campaignsExcludeCompaniesCommand = defineCommand({
412
- meta: {
413
- name: "exclude-companies",
414
- description: `Stop an ad set reaching some companies \u2014 customers, open deals, competitors. ${STAGED_NOTE}
415
- Add-only: adds to the ad set's exclusions and never removes one. At publish Baker re-reads the ad set and merges into its targeting as it stands then, so audience, locations and existing exclusions are kept.
416
- --org takes company ids (as \`companies\` / \`top-companies\` print them) or urn:li:organization URNs, comma-separated, up to 200 per call. For a longer list, upload it as a company-list audience and pass it to --segment (an urn:li:dmpSegment/adSegment URN, or a li_temp_* audience staged in this chat).
417
- Example: baker ads linkedin campaigns exclude-companies 123456 --org 1035,1441`
418
- },
419
- args: {
420
- id: {
421
- type: "positional",
422
- description: "Ad set (campaign) id or URN \u2014 must already be on LinkedIn",
423
- required: true
424
- },
425
- ...accountArgs,
426
- org: { type: "string", description: "Company ids or urn:li:organization URNs to exclude, comma-separated" },
427
- segment: {
428
- type: "string",
429
- description: "Matched audiences to exclude, comma-separated: urn:li:dmpSegment:N / urn:li:adSegment:N or a li_temp_* ref"
430
- }
431
- },
432
- run: async ({ args }) => {
433
- const accountId = bareAccountId(args);
434
- const target = requireTarget(args, "campaign");
435
- const refusal = excludeCompaniesRefusal(args);
436
- if (refusal) {
437
- failWriteValidation(refusal);
438
- }
439
- const payload = excludeCompaniesPayload(args);
440
- await stageOp({ kind: "campaign.excludeCompanies", accountId, target, payload });
441
- }
442
- });
443
- function statusSugarCommand(entity, kind, name) {
444
- const status = name === "pause" ? "PAUSED" : name === "resume" ? "ACTIVE" : "ARCHIVED";
445
- return defineCommand({
446
- meta: {
447
- name,
448
- description: `Stage a status change to ${status}, for one id or many. ${STAGED_NOTE}
449
- Examples:
450
- baker ads linkedin ${entity} ${name} 123456
451
- baker ads linkedin ${entity} ${name} 123456,123457,123458
452
- baker ads linkedin ${entity} ${name} --ids-file ids.txt`
453
- },
454
- args: {
455
- id: { type: "positional", description: "Entity id or URN \u2014 comma-separate several", required: false },
456
- "ids-file": { type: "string", description: "File of ids, one per line or comma-separated" },
457
- ...accountArgs
458
- },
459
- run: async ({ args }) => {
460
- await stageStatusChange({
461
- kind,
462
- accountId: bareAccountId(args),
463
- targets: requireTargets(args, entity.replace(/-/g, " ").replace(/s$/, "")),
464
- status
465
- });
466
- }
467
- });
468
- }
469
- function deleteDraftCommand(entity, kind, what) {
470
- return defineCommand({
471
- meta: {
472
- name: "delete",
473
- description: `Stage deleting a ${what} that is still a DRAFT on LinkedIn, for one id or many \u2014 it disappears from Campaign Manager. ${STAGED_NOTE}
474
- Only a DRAFT can be deleted: anything that has been active, paused or archived stays, so pause or archive it instead. A ${what} staged in this chat is dropped with \`draft remove\`. At publish every delete runs last, ads before ad sets before campaigns.
475
- Examples:
476
- baker ads linkedin ${entity} delete 896802423
477
- baker ads linkedin ${entity} delete 896802423,896812053`
478
- },
479
- args: {
480
- id: { type: "positional", description: "Id or URN \u2014 comma-separate several", required: false },
481
- "ids-file": { type: "string", description: "File of ids, one per line or comma-separated" },
482
- ...accountArgs
483
- },
484
- run: async ({ args }) => {
485
- const accountId = bareAccountId(args);
486
- await stageLinkedinOps(
487
- requireTargets(args, what).map((target) => ({
488
- kind,
489
- accountId,
490
- target,
491
- payload: {}
492
- }))
493
- );
494
- }
495
- });
496
- }
497
- var campaignGroupsDeleteCommand = deleteDraftCommand("campaign-groups", "campaignGroup.delete", "campaign");
498
- var campaignsDeleteCommand = deleteDraftCommand("campaigns", "campaign.delete", "ad set");
499
- var creativesDeleteCommand = deleteDraftCommand("creatives", "creative.delete", "ad");
500
- function trackingPairs(value, flag) {
501
- const raw = value === void 0 ? [] : Array.isArray(value) ? value : [value];
502
- return raw.flatMap(
503
- (entry) => String(entry).split("&").filter((pair) => pair.length > 0).map((pair) => {
504
- const at = pair.indexOf("=");
505
- if (at < 1 || at === pair.length - 1) {
506
- failWriteValidation(`${flag} expects key=value pairs \u2014 got "${pair}"`);
507
- }
508
- return [pair.slice(0, at).trim(), pair.slice(at + 1).trim()];
509
- })
510
- );
511
- }
512
- function asDynamicValue(value) {
513
- const bare = value.replace(/^\{+|\}+$/g, "").toUpperCase();
514
- return TRACKING_PARAM_DYNAMIC_VALUES.includes(bare) ? bare : void 0;
515
- }
516
- function trackingParamsPayload(args, rawArgs) {
517
- if (args.clear) {
518
- return { dynamicValueParameters: {}, customValueParameters: {} };
519
- }
520
- const customValueParameters = {};
521
- for (const [key, value] of trackingPairs(repeatedValues(rawArgs, "param", args.param), "--param")) {
522
- if (asDynamicValue(value)) {
523
- failWriteValidation(
524
- `--param ${key}=${value} names a value LinkedIn fills in per ad \u2014 pass it as --dynamic ${key}=${value.replace(/^\{+|\}+$/g, "").toUpperCase()}`
525
- );
526
- }
527
- customValueParameters[key] = value;
528
- }
529
- const dynamicValueParameters = {};
530
- for (const [key, value] of trackingPairs(repeatedValues(rawArgs, "dynamic", args.dynamic), "--dynamic")) {
531
- const resolved = asDynamicValue(value);
532
- if (!resolved) {
533
- failWriteValidation(
534
- `--dynamic ${key}=${value} is not a value LinkedIn can fill in \u2014 use one of ${TRACKING_PARAM_DYNAMIC_VALUES.join(", ")}, or pass a fixed value with --param`
535
- );
536
- }
537
- dynamicValueParameters[key] = resolved;
538
- }
539
- return mergePayload(loadJsonFileArg(args.file), {
540
- customValueParameters: Object.keys(customValueParameters).length > 0 ? customValueParameters : void 0,
541
- dynamicValueParameters: Object.keys(dynamicValueParameters).length > 0 ? dynamicValueParameters : void 0
542
- });
543
- }
544
- var campaignsUrlParamsCommand = defineCommand({
545
- meta: {
546
- name: "url-params",
547
- description: `Stage the URL tracking parameters on an ad set \u2014 LinkedIn appends them to the link of EVERY ad in it, including ads already running. ${STAGED_NOTE}
548
-
549
- Start here: set UTMs at this level, not per ad. A per-ad landing URL is only for a genuinely different destination \u2014 LinkedIn appends the ad set's parameters on top of whatever the ad's own URL carries, so the same key set in both places lands twice.
550
-
551
- This REPLACES the ad set's whole parameter set \u2014 LinkedIn does not merge. Read what it carries first (\`baker ads linkedin url-params --campaign-ids <ad-set-id>\`) and re-send every pair that should survive; the drop is otherwise silent until traffic stops being attributable.
552
-
553
- Values LinkedIn fills in per ad (--dynamic): ACCOUNT_ID, ACCOUNT_NAME, CAMPAIGN_GROUP_ID, CAMPAIGN_GROUP_NAME, CAMPAIGN_ID, CAMPAIGN_NAME, CREATIVE_ID, CREATIVE_NAME.
554
-
555
- Examples:
556
- baker ads linkedin campaigns url-params 123456 --param "utm_source=linkedin&utm_medium=paid-social" --dynamic utm_campaign=CAMPAIGN_NAME --dynamic utm_content=CREATIVE_ID
557
- baker ads linkedin campaigns url-params 123456 --param utm_agency=baker
558
- baker ads linkedin campaigns url-params 123456 --clear`
559
- },
560
- args: {
561
- id: { type: "positional", description: "Ad set (campaign) id or URN", required: true },
562
- ...accountArgs,
563
- param: {
564
- type: "string",
565
- description: 'Fixed key=value, repeatable or &-joined (e.g. --param "utm_source=linkedin&utm_medium=paid")'
566
- },
567
- dynamic: {
568
- type: "string",
569
- description: "key=PLACEHOLDER LinkedIn fills in per ad, repeatable (e.g. --dynamic utm_campaign=CAMPAIGN_NAME)"
570
- },
571
- clear: { type: "boolean", description: "Remove every tracking parameter from this ad set" },
572
- file: { type: "string", description: "JSON file with the full payload; flags override file keys" }
573
- },
574
- run: async ({ args, rawArgs }) => {
575
- const accountId = bareAccountId(args);
576
- await stageOp({
577
- kind: "trackingParams.set",
578
- accountId,
579
- target: requireTarget(args, "ad set"),
580
- payload: trackingParamsPayload(args, rawArgs)
581
- });
582
- }
583
- });
584
- function accountTrackingTarget(args) {
585
- const accountId = bareAccountId(args);
586
- return { accountId, target: `urn:li:sponsoredAccount:${accountId}` };
587
- }
588
- var accountUrlParamsCommand = defineCommand({
589
- meta: {
590
- name: "url-params",
591
- description: `Stage the URL tracking parameters on the whole AD ACCOUNT \u2014 LinkedIn appends them to the link of every ad in every ad set, including ads already running. ${STAGED_NOTE}
592
-
593
- Use this for the parameters that never vary across the account (utm_source, utm_medium, an agency tag). Anything that identifies a specific ad set belongs on the ad set (\`campaigns url-params\`) \u2014 LinkedIn appends BOTH levels, so a key set in both places lands in the URL twice.
594
-
595
- This REPLACES the account's whole parameter set \u2014 LinkedIn does not merge. Read what it carries first with \`baker ads linkedin url-params\` and re-send every pair that should survive.
596
-
597
- Values LinkedIn fills in per ad (--dynamic): ACCOUNT_ID, ACCOUNT_NAME, CAMPAIGN_GROUP_ID, CAMPAIGN_GROUP_NAME, CAMPAIGN_ID, CAMPAIGN_NAME, CREATIVE_ID, CREATIVE_NAME.
598
-
599
- Examples:
600
- baker ads linkedin account url-params --param "utm_source=linkedin&utm_medium=paid_social"
601
- baker ads linkedin account url-params --param utm_source=linkedin --dynamic utm_campaign=CAMPAIGN_NAME
602
- baker ads linkedin account url-params --clear`
603
- },
604
- args: {
605
- ...accountArgs,
606
- param: {
607
- type: "string",
608
- description: 'Fixed key=value, repeatable or &-joined (e.g. --param "utm_source=linkedin&utm_medium=paid")'
609
- },
610
- dynamic: {
611
- type: "string",
612
- description: "key=PLACEHOLDER LinkedIn fills in per ad, repeatable (e.g. --dynamic utm_campaign=CAMPAIGN_NAME)"
613
- },
614
- clear: { type: "boolean", description: "Remove every tracking parameter set on the ad account" },
615
- file: { type: "string", description: "JSON file with the full payload; flags override file keys" }
616
- },
617
- run: async ({ args, rawArgs }) => {
618
- const { accountId, target } = accountTrackingTarget(args);
619
- await stageOp({
620
- kind: "trackingParams.set",
621
- accountId,
622
- target,
623
- payload: trackingParamsPayload(args, rawArgs)
624
- });
625
- }
626
- });
627
- var campaignsPauseCommand = statusSugarCommand("campaigns", "campaign.update", "pause");
628
- var campaignsResumeCommand = statusSugarCommand("campaigns", "campaign.update", "resume");
629
- var campaignsArchiveCommand = statusSugarCommand("campaigns", "campaign.update", "archive");
630
- var campaignGroupsPauseCommand = statusSugarCommand("campaign-groups", "campaignGroup.update", "pause");
631
- var campaignGroupsResumeCommand = statusSugarCommand("campaign-groups", "campaignGroup.update", "resume");
632
- var creativesPauseCommand = statusSugarCommand("creatives", "creative.update", "pause");
633
- var creativesResumeCommand = statusSugarCommand("creatives", "creative.update", "resume");
634
- function duplicateCommand(entity, cliGroup) {
635
- return defineCommand({
636
- meta: {
637
- name: "duplicate",
638
- description: `Stage a copy of an existing ${entity} as a new DRAFT create (playbook: duplicate, never link-to-original). ${STAGED_NOTE}
639
- Example: baker ads linkedin ${cliGroup} duplicate 123456 --name "New variant"`
640
- },
641
- args: {
642
- id: { type: "positional", description: "Source id or URN", required: true },
643
- ...accountArgs,
644
- name: { type: "string", description: "Name for the copy" },
645
- file: { type: "string", description: "JSON file with field overrides for the copy" }
646
- },
647
- run: async ({ args }) => {
648
- try {
649
- const chatId = requireChatId();
650
- const overrides = mergePayload(loadJsonFileArg(args.file), { name: args.name });
651
- const response = await apiPost(
652
- "/api/ads/linkedin/draft/duplicate",
653
- {
654
- chatId,
655
- accountId: bareAccountId(args),
656
- entity,
657
- sourceId: requireTarget(args, entity),
658
- ...Object.keys(overrides).length > 0 ? { overrides } : {}
659
- }
660
- );
661
- writeJsonEnvelope(response);
662
- } catch (err) {
663
- handleLinkedinError(err);
664
- }
665
- }
666
- });
667
- }
668
- var campaignsDuplicateCommand = duplicateCommand("campaign", "campaigns");
669
- var campaignGroupsDuplicateCommand = duplicateCommand("campaignGroup", "campaign-groups");
670
- var creativesDuplicateCommand = defineCommand({
671
- meta: {
672
- name: "duplicate",
673
- description: `Stage a copy of an existing ad, optionally with new content. ${STAGED_NOTE}
674
- Content flags only apply to direct-content ads (text|spotlight|follower|jobs) \u2014 LinkedIn makes their content immutable, so a copy is how their copy/media/URL changes. Post-based ads (image|video|carousel|document|article|event|tla) sponsor a post that owns the copy, media and destination: a copy re-sponsors the SAME post, so content flags are rejected \u2014 stage \`creatives create\` with the new content instead, then pause the old ad.
675
- --replace also pauses the original once the new ad publishes (skipped if the new ad fails).
676
- Examples:
677
- baker ads linkedin creatives duplicate 1458413484 --headline "10x Demos, Same Team" --description "AI handles every demo request." --replace
678
- baker ads linkedin creatives duplicate urn:li:sponsoredCreative:789 --campaign 799305464`
679
- },
680
- args: {
681
- id: { type: "positional", description: "Source creative id or URN", required: true },
682
- ...accountArgs,
683
- campaign: { type: "string", description: "Stage the copy under a different ad set (id/URN or li_temp_*)" },
684
- "intended-status": {
685
- type: "string",
686
- description: "Status for the copy (default DRAFT; with --replace, the source's status)"
687
- },
688
- replace: {
689
- type: "boolean",
690
- description: "Also pause the original once the new ad publishes; the copy inherits the source's status"
691
- },
692
- intro: { type: "string", description: "New commentary / intro text" },
693
- headline: { type: "string", description: "New headline" },
694
- description: { type: "string", description: "New description (text/spotlight ads)" },
695
- "landing-url": {
696
- type: "string",
697
- description: "New https destination URL (direct-content ads only \u2014 a post-based ad's URL lives in its post)"
698
- },
699
- cta: { type: "string", description: "New CTA (LEARN_MORE|REQUEST_DEMO|\u2026)" },
700
- "cta-label": { type: "string", description: "Spotlight custom CTA label" },
701
- "image-id": { type: "string", description: "Baker image library id" },
702
- "image-urn": { type: "string", description: "Existing urn:li:image:*" },
703
- "video-id": {
704
- type: "string",
705
- description: "Baker video library id (`baker videos`) \u2014 uploaded to LinkedIn at publish; a first publish may ask to retry while the full-quality copy is prepared"
706
- },
707
- "video-urn": { type: "string", description: "Existing urn:li:video:*" },
708
- "logo-image-id": { type: "string", description: "Baker image id for the logo" },
709
- title: { type: "string", description: "Media title" },
710
- file: { type: "string", description: "JSON file with field overrides for the copy" }
711
- },
712
- run: async ({ args }) => {
713
- try {
714
- const chatId = requireChatId();
715
- const file = loadJsonFileArg(args.file);
716
- const fileContent = file.content !== null && typeof file.content === "object" && !Array.isArray(file.content) ? file.content : {};
717
- const content = { ...fileContent, ...creativeContentPatch(args) };
718
- const overrides = mergePayload(file, {
719
- campaign: args.campaign,
720
- intendedStatus: args["intended-status"] ? String(args["intended-status"]).toUpperCase() : void 0,
721
- content: Object.keys(content).length > 0 ? content : void 0
722
- });
723
- const response = await apiPost(
724
- "/api/ads/linkedin/draft/duplicate",
725
- {
726
- chatId,
727
- accountId: bareAccountId(args),
728
- entity: "creative",
729
- sourceId: requireTarget(args, "creative"),
730
- ...Object.keys(overrides).length > 0 ? { overrides } : {},
731
- ...args.replace ? { replace: true } : {}
732
- }
733
- );
734
- writeJsonEnvelope(response);
735
- } catch (err) {
736
- handleLinkedinError(err);
737
- }
738
- }
739
- });
740
- var CREATIVE_FORMATS = [
741
- "image",
742
- "video",
743
- "text",
744
- "spotlight",
745
- "follower",
746
- "document",
747
- "carousel",
748
- "conversation",
749
- "tla",
750
- "jobs",
751
- "event",
752
- "article"
753
- ];
754
- var creativesCreateCommand = defineCommand({
755
- meta: {
756
- name: "create",
757
- description: `Stage a new creative (ad). ${STAGED_NOTE}
758
- Formats: ${CREATIVE_FORMATS.join("|")}. Media comes from the Baker library (--image-id / --video-id from \`baker images\`/\`baker videos\`) or as LinkedIn URNs. Complex formats (carousel, jobs) take --file with the full content object. Conversation ads take --file with the message flow ({message: {subject, body, buttons[]}} \u2014 buttons NESTED|LANDING_PAGE|LEAD_FORM (LEAD_FORM takes leadForm: li_temp_* or form id and opens the form in the thread), nested messages recurse).
759
- Examples:
760
- baker ads linkedin creatives create --campaign li_temp_x2 --format image --image-id <bakerImageId> --intro "Meet the platform\u2026" --headline "Book a demo" --landing-url https://example.com/demo --cta REQUEST_DEMO
761
- baker ads linkedin creatives create --campaign 123456 --format tla --post <post id from \`baker posts list\`>
762
- Boosting a post (Thought Leader ad): --format tla sponsors a post that already exists \u2014 the company page's own (not a reshare) or a person's (the CEO's\u2026) once they approve it in Campaign Manager. Name it with --post <Baker post id> (\`baker posts list --usable usable\` or \`--usable needs_approval\`), or --post-url with any link to the post (a normal "copy link" works: Baker reads the post and adds it to Posts). Staging refuses a post that can't run as an ad, with the reason. A video post goes in a SINGLE_VIDEO ad set, any other in STANDARD_UPDATE.
763
- Document ads run in a SPONSORED_UPDATE_NATIVE_DOCUMENT ad set: --document <Baker document name> or --document-url <PDF link>, plus --title. Gate it (lead gen ad set) with --lead-form and --preview-pages N \u2014 the first N pages show, the form unlocks the rest:
764
- baker ads linkedin creatives create --campaign li_temp_x2 --format document --document solar-report --title "2026 solar report" --intro "\u2026" --lead-form li_temp_f1 --lead-form-button UNLOCK_FULL_DOCUMENT --preview-pages 3
765
- Lead gen ads (an ad set with objective LEAD_GENERATION) open a form instead of a landing page \u2014 every ad in one needs --lead-form, and staging refuses it without:
766
- baker ads linkedin lead-forms create --file form.json # \u2192 li_temp_f1
767
- baker ads linkedin creatives create --campaign li_temp_x2 --format image --image-id <id> --intro "\u2026" --headline "Get the report" --lead-form li_temp_f1 --lead-form-button DOWNLOAD`
768
- },
769
- args: {
770
- ...accountArgs,
771
- campaign: { type: "string", description: "Campaign id/URN, or li_temp_* ref staged in this chat" },
772
- format: { type: "string", description: CREATIVE_FORMATS.join("|") },
773
- "image-id": { type: "string", description: "Baker image library id (uploaded to LinkedIn at publish)" },
774
- "image-urn": { type: "string", description: "Existing urn:li:image:*" },
775
- "video-id": {
776
- type: "string",
777
- description: "Baker video library id (`baker videos`) \u2014 uploaded to LinkedIn at publish; a first publish may ask to retry while the full-quality copy is prepared"
778
- },
779
- "video-urn": { type: "string", description: "Existing urn:li:video:*" },
780
- "logo-image-id": { type: "string", description: "Baker image id for logo (text/spotlight/follower/jobs)" },
781
- intro: { type: "string", description: "Commentary / intro text (\u2264600 chars before feed truncation)" },
782
- headline: { type: "string", description: "Headline (\u226470; text ads \u226425)" },
783
- description: { type: "string", description: "Description (text ads \u226475, spotlight \u226470)" },
784
- "landing-url": { type: "string", description: "https destination URL" },
785
- cta: { type: "string", description: "LEARN_MORE|REQUEST_DEMO|SIGN_UP|REGISTER|DOWNLOAD|\u2026" },
786
- "cta-label": { type: "string", description: "Spotlight custom CTA label (\u226418 chars)" },
787
- post: {
788
- type: "string",
789
- description: "TLA: the post to sponsor, by its Baker post id (`baker posts list`) \u2014 the simplest way"
790
- },
791
- "post-urn": {
792
- type: "string",
793
- description: "TLA: the post to sponsor by its URN \u2014 urn:li:share|ugcPost:*"
794
- },
795
- "post-url": {
796
- type: "string",
797
- description: "TLA: any link to the post (normal or embed); Baker reads it and adds it to Posts"
798
- },
799
- sender: {
800
- type: "string",
801
- description: "Conversation ads: urn:li:person:* the conversation arrives from (from `account-users`; default: whoever connected LinkedIn)"
802
- },
803
- "lead-form": {
804
- type: "string",
805
- description: "Lead gen form the ad opens (image|video|carousel|document|tla): li_temp_* ref from `lead-forms create`, or a form id from `lead-forms`. Required in a LEAD_GENERATION ad set; replaces --landing-url"
806
- },
807
- "lead-form-button": {
808
- type: "string",
809
- description: `Button that opens the form: ${LEADGEN_CTA_LABELS.join("|")} (default SIGN_UP)`
810
- },
811
- document: {
812
- type: "string",
813
- description: "Document ads: a Baker document's folder name (src/documents/<name>) \u2014 its PDF goes to LinkedIn at publish, after the document itself is published"
814
- },
815
- "document-url": {
816
- type: "string",
817
- description: "Document ads: https link to a PDF, PowerPoint or Word file (\u2264100 MB, \u2264300 pages)"
818
- },
819
- "document-urn": { type: "string", description: "Document ads: existing urn:li:document:*" },
820
- "preview-pages": {
821
- type: "string",
822
- description: "Gated document ads: pages shown before the lead gen form (needs --lead-form; fewer than the document has, which must be 2+ pages)"
823
- },
824
- "event-urn": { type: "string", description: "Event ads: the LinkedIn event to sponsor (urn:li:event:*)" },
825
- "article-url": { type: "string", description: "Article ads: https URL of the article/newsletter to sponsor" },
826
- "thumbnail-image-id": { type: "string", description: "Article ads: Baker image id for the link thumbnail" },
827
- "thumbnail-urn": { type: "string", description: "Article ads: existing urn:li:image:* thumbnail" },
828
- "intended-status": {
829
- type: "string",
830
- description: "DRAFT|ACTIVE (default DRAFT) \u2014 a new ad can't start PAUSED; DRAFT holds it back"
831
- },
832
- title: { type: "string", description: "Media title (image/video), article title, or document title" },
833
- file: { type: "string", description: "JSON file with the full content object; flags override" }
834
- },
835
- run: async ({ args }) => {
836
- const accountId = bareAccountId(args);
837
- if (!args.campaign) {
838
- failWriteValidation("--campaign is required (id, URN, or li_temp_* ref)");
839
- }
840
- const format = args.format ? String(args.format) : void 0;
841
- if (!format || !CREATIVE_FORMATS.includes(format)) {
842
- failWriteValidation(`--format must be one of ${CREATIVE_FORMATS.join("|")}`);
843
- }
844
- const content = mergePayload(loadJsonFileArg(args.file), {
845
- format,
846
- commentary: args.intro,
847
- imageId: args["image-id"],
848
- imageUrn: args["image-urn"],
849
- videoId: args["video-id"],
850
- videoUrn: args["video-urn"],
851
- logoImageId: args["logo-image-id"],
852
- headline: args.headline,
853
- description: args.description,
854
- landingUrl: args["landing-url"],
855
- cta: args.cta ? String(args.cta).toUpperCase() : void 0,
856
- ctaLabel: args["cta-label"],
857
- ...sponsoredPostArgs(args),
858
- sender: args.sender,
859
- eventUrn: args["event-urn"],
860
- source: args["article-url"],
861
- thumbnailImageId: args["thumbnail-image-id"],
862
- thumbnailUrn: args["thumbnail-urn"],
863
- mediaTitle: args.title,
864
- title: args.title,
865
- ...documentContentArgs(format, args)
866
- });
867
- const leadgenCallToAction = leadgenCallToActionArg(args);
868
- await stageOp({
869
- kind: "creative.create",
870
- accountId,
871
- payload: {
872
- campaign: args.campaign,
873
- intendedStatus: args["intended-status"] ? String(args["intended-status"]).toUpperCase() : void 0,
874
- content,
875
- ...leadgenCallToAction ? { leadgenCallToAction } : {}
876
- }
877
- });
878
- }
879
- });
880
- function documentContentArgs(format, args) {
881
- if (format !== "document") {
882
- return {};
883
- }
884
- const previewPages = args["preview-pages"] === void 0 ? void 0 : Number(args["preview-pages"]);
885
- if (previewPages !== void 0 && !(Number.isInteger(previewPages) && previewPages >= 1)) {
886
- failWriteValidation("--preview-pages must be a whole number of pages, e.g. 3");
887
- }
888
- return {
889
- documentId: args.document,
890
- documentUrl: args["document-url"],
891
- documentUrn: args["document-urn"],
892
- documentTitle: args.title,
893
- previewPages
894
- };
895
- }
896
- function sponsoredPostArgs(args) {
897
- const named = ["post", "post-urn", "post-url"].filter((flag) => args[flag] !== void 0);
898
- if (named.length > 1) {
899
- failWriteValidation(`name the post once: ${named.map((flag) => `--${flag}`).join(" and ")} were both passed`);
900
- }
901
- if (args.post !== void 0) {
902
- return { bakerPostId: String(args.post) };
903
- }
904
- const value = args["post-urn"] ?? args["post-url"];
905
- if (value === void 0) {
906
- return {};
907
- }
908
- const post = sponsoredPostUrn(String(value));
909
- if ("urn" in post) {
910
- return { postUrn: post.urn };
911
- }
912
- if (/^https?:\/\//i.test(String(value).trim())) {
913
- return { postLink: String(value).trim() };
914
- }
915
- failWriteValidation(`--post-urn: ${post.error}`);
916
- }
917
- function leadgenCallToActionArg(args) {
918
- const destination = args["lead-form"] !== void 0 ? String(args["lead-form"]) : void 0;
919
- const label = args["lead-form-button"] !== void 0 ? String(args["lead-form-button"]).toUpperCase() : void 0;
920
- if (destination === void 0) {
921
- if (label !== void 0) {
922
- failWriteValidation("--lead-form-button needs --lead-form (the form the button opens)");
923
- }
924
- return void 0;
925
- }
926
- return { destination, label: label ?? "SIGN_UP" };
927
- }
928
- var CREATIVE_AMEND_CONTENT_FLAGS = [
929
- ["intro", "commentary"],
930
- ["headline", "headline"],
931
- ["description", "description"],
932
- ["landing-url", "landingUrl"],
933
- ["cta-label", "ctaLabel"],
934
- ["image-id", "imageId"],
935
- ["image-urn", "imageUrn"],
936
- ["video-id", "videoId"],
937
- ["video-urn", "videoUrn"],
938
- ["logo-image-id", "logoImageId"],
939
- ["thumbnail-image-id", "thumbnailImageId"],
940
- ["thumbnail-urn", "thumbnailUrn"],
941
- ["title", "title"]
942
- ];
943
- function creativeContentPatch(args) {
944
- const patch = {};
945
- for (const [flag, key] of CREATIVE_AMEND_CONTENT_FLAGS) {
946
- if (args[flag] !== void 0) {
947
- patch[key] = args[flag];
948
- }
949
- }
950
- if (args.cta !== void 0) {
951
- patch.cta = String(args.cta).toUpperCase();
952
- }
953
- return patch;
954
- }
955
- var creativesUpdateCommand = defineCommand({
956
- meta: {
957
- name: "update",
958
- description: `Stage changes to an existing creative, or amend a creative staged in this chat by passing its li_temp_* ref. ${STAGED_NOTE}
959
- Direct-content ads (text/spotlight/follower/jobs) update copy/media/URL IN PLACE \u2014 changed fields merge into the ad's current content. Post-based ads (image/video/carousel/\u2026) sponsor a post that owns the copy, media and destination: neither this command nor \`creatives duplicate\` can change it \u2014 stage \`creatives create\` with the new content, then pause the old ad. Staged creatives (li_temp_*) accept all content flags and re-validate.
960
- Applies the same change to several ads at once: comma-separate the ids, or pass --ids-file. All of them stage together or none does. Live ids only \u2014 a li_temp_* amend has to be its own call.
961
- --campaign re-parents the ad to a different ad set \u2014 LinkedIn has no in-place move API, so this only works while the creative is still staged (li_temp_*); passing it against a live creative id/URN is rejected at stage time.
962
- Examples:
963
- baker ads linkedin creatives update 1458423674 --headline "Sharper headline" --description "New copy."
964
- baker ads linkedin creatives update urn:li:sponsoredCreative:789 --intended-status PAUSED
965
- baker ads linkedin creatives update 1458423674,1458423675,1458423676 --intended-status PAUSED
966
- baker ads linkedin creatives update --ids-file ads.txt --intended-status PAUSED
967
- baker ads linkedin creatives update li_temp_x3 --campaign li_temp_x2
968
- baker ads linkedin creatives update li_temp_x3 --lead-form li_temp_f1 --lead-form-button REQUEST_DEMO
969
- --lead-form on a live ad works only while that ad is DRAFT \u2014 LinkedIn locks the form once it leaves DRAFT.`
970
- },
971
- args: {
972
- id: {
973
- type: "positional",
974
- description: "Creative id/URN \u2014 comma-separate several. A li_temp_* ref amends what this chat staged and must be passed on its own.",
975
- required: false
976
- },
977
- "ids-file": { type: "string", description: "File of creative ids, one per line or comma-separated" },
978
- ...accountArgs,
979
- "intended-status": { type: "string", description: "ACTIVE|PAUSED|ARCHIVED|DRAFT" },
980
- name: { type: "string", description: "New creative name" },
981
- campaign: {
982
- type: "string",
983
- description: "Re-parent to a different ad set (id/URN or li_temp_*) \u2014 staged creatives only"
984
- },
985
- intro: { type: "string", description: "Commentary / intro text" },
986
- headline: { type: "string", description: "New headline" },
987
- description: { type: "string", description: "Description (text/spotlight ads)" },
988
- "landing-url": { type: "string", description: "New https destination URL" },
989
- cta: { type: "string", description: "New CTA (LEARN_MORE|REQUEST_DEMO|\u2026)" },
990
- "cta-label": { type: "string", description: "Spotlight custom CTA label" },
991
- "lead-form": {
992
- type: "string",
993
- description: "Lead gen form the ad opens: li_temp_* or form id (live ads: DRAFT only)"
994
- },
995
- "lead-form-button": {
996
- type: "string",
997
- description: `Button that opens the form: ${LEADGEN_CTA_LABELS.join("|")} (default SIGN_UP); needs --lead-form`
998
- },
999
- "image-id": { type: "string", description: "Baker image library id" },
1000
- "image-urn": { type: "string", description: "Existing urn:li:image:*" },
1001
- "video-id": {
1002
- type: "string",
1003
- description: "Baker video library id (`baker videos`) \u2014 uploaded to LinkedIn at publish; a first publish may ask to retry while the full-quality copy is prepared"
1004
- },
1005
- "video-urn": { type: "string", description: "Existing urn:li:video:*" },
1006
- "logo-image-id": { type: "string", description: "Baker image id for the logo" },
1007
- "thumbnail-image-id": { type: "string", description: "Baker image id for the article thumbnail" },
1008
- "thumbnail-urn": { type: "string", description: "Existing urn:li:image:* thumbnail" },
1009
- title: { type: "string", description: "Media or article title" },
1010
- file: { type: "string", description: "JSON file with fields to change; flags override file keys" }
1011
- },
1012
- run: async ({ args }) => {
1013
- const accountId = bareAccountId(args);
1014
- const targets = requireTargets(args, "creative");
1015
- const file = loadJsonFileArg(args.file);
1016
- const contentPatch = creativeContentPatch(args);
1017
- const intendedStatus = args["intended-status"] ? String(args["intended-status"]).toUpperCase() : void 0;
1018
- const fileContent = file.content !== null && typeof file.content === "object" && !Array.isArray(file.content) ? file.content : {};
1019
- const content = { ...fileContent, ...contentPatch };
1020
- const payload = mergePayload(file, {
1021
- intendedStatus,
1022
- name: args.name,
1023
- campaign: args.campaign,
1024
- content: Object.keys(content).length > 0 ? content : void 0,
1025
- leadgenCallToAction: leadgenCallToActionArg(args)
1026
- });
1027
- await stageLinkedinOps(targets.map((target) => ({ kind: "creative.update", accountId, target, payload })));
1028
- }
1029
- });
1030
- var AUDIENCE_TYPES = ["company-list", "user-list", "retargeting", "engagement"];
1031
- var INLINE_ROWS_MAX = 1e4;
1032
- var audiencesCreateCommand = defineCommand({
1033
- meta: {
1034
- name: "create",
1035
- description: `Stage a new matched audience. ${STAGED_NOTE}
1036
- List audiences take --list-file (CSV: companies by companyName, domain and the LinkedIn page \u2014 a linkedinCompanyPageUrl column (LinkedIn's own template; https://www.linkedin.com/company/<slug>) or organizationUrn \u2014 which matches the company exactly, so keep it, never drop it; email,\u2026 for contacts \u2014 emails are SHA-256 hashed locally). LinkedIn needs 300+ MATCHED members to serve: a contact list needs well above 300 rows; a company list counts every employee of its companies.
1037
- Example: baker ads linkedin audiences create --name "ABM Tier-1" --type company-list --list-file accounts.csv`
1038
- },
1039
- args: {
1040
- ...accountArgs,
1041
- name: { type: "string", description: "Audience name (\u2264100 chars)" },
1042
- type: { type: "string", description: AUDIENCE_TYPES.join("|") },
1043
- "list-file": { type: "string", description: "CSV file with the list rows (header row required)" },
1044
- file: {
1045
- type: "string",
1046
- description: 'JSON file with a raw source config (retargeting/engagement) \u2014 sourcePlatform, type USER and at least one engagementRules entry, e.g. {"sourcePlatform":"VIDEO_ADS","type":"USER","engagementRules":[{"engagementSource":"urn:li:sponsoredCampaign:123","engagementTrigger":"urn:li:dmpEngagementTrigger:(urn:li:dmpEngagementSourceType:VIDEO_ADS,FIRST_QUARTILE)","timeFrame":{"timeSpan":{"duration":90,"unit":"DAY"}}}]}'
1047
- }
1048
- },
1049
- run: async ({ args }) => {
1050
- const accountId = bareAccountId(args);
1051
- const list = parseListFileArg(args["list-file"], INLINE_ROWS_MAX);
1052
- const raw = args.file ? loadJsonFileArg(args.file) : void 0;
1053
- await stageOp({
1054
- kind: "audience.create",
1055
- accountId,
1056
- payload: {
1057
- name: args.name,
1058
- audienceType: args.type,
1059
- ...list ? { listColumns: list.columns, listRows: list.rows } : {},
1060
- ...list?.emailPreviews ? { listEmailPreviews: list.emailPreviews } : {},
1061
- ...raw ? { raw } : {}
1062
- }
1063
- });
1064
- }
1065
- });
1066
- var audiencesUploadCommand = defineCommand({
1067
- meta: {
1068
- name: "upload",
1069
- description: `Stage replacing an audience's list with a new file. ${STAGED_NOTE}
1070
- LinkedIn keeps ONE list per audience and gives this app no row-level add or remove, so the file is the whole list the audience should hold: to add people, send the old rows plus the new; to remove people (a customer who closed, someone who opted out), send the list without them. Rematching takes up to 48h.
1071
- Example: baker ads linkedin audiences upload urn:li:dmpSegment:42 --list-file all-target-accounts.csv`
1072
- },
1073
- args: {
1074
- id: { type: "positional", description: "Segment URN/id, or li_temp_* ref staged in this chat", required: true },
1075
- ...accountArgs,
1076
- "list-file": {
1077
- type: "string",
1078
- description: "CSV file with the WHOLE list the audience should hold",
1079
- required: true
1080
- }
1081
- },
1082
- run: async ({ args }) => {
1083
- const accountId = bareAccountId(args);
1084
- const list = parseListFileArg(args["list-file"], INLINE_ROWS_MAX);
1085
- if (!list) {
1086
- failWriteValidation("--list-file is required");
1087
- }
1088
- await stageOp({
1089
- kind: "audience.uploadList",
1090
- accountId,
1091
- payload: {
1092
- segment: requireTarget(args, "audience segment"),
1093
- listColumns: list.columns,
1094
- listRows: list.rows,
1095
- ...list.emailPreviews ? { listEmailPreviews: list.emailPreviews } : {}
1096
- }
1097
- });
1098
- }
1099
- });
1100
- var audiencesDeleteCommand = defineCommand({
1101
- meta: {
1102
- name: "delete",
1103
- description: `Stage deleting a matched audience \u2014 its list and its targetable twin go too. ${STAGED_NOTE}
1104
- LinkedIn keeps at most 1,000 audiences per ad account and refuses to delete one a live ad set still targets. An audience staged in this chat is dropped with \`draft remove\` instead.
1105
- Example: baker ads linkedin audiences delete urn:li:dmpSegment:77530978`
1106
- },
1107
- args: {
1108
- id: {
1109
- type: "positional",
1110
- description: "Audience URN (urn:li:dmpSegment:\u2026) or id from `audiences`",
1111
- required: true
1112
- },
1113
- ...accountArgs
1114
- },
1115
- run: async ({ args }) => {
1116
- await stageOp({
1117
- kind: "audience.delete",
1118
- accountId: bareAccountId(args),
1119
- target: requireTarget(args, "audience"),
1120
- payload: {}
1121
- });
1122
- }
1123
- });
1124
- var audiencesListCommand = defineCommand({
1125
- meta: {
1126
- name: "list",
1127
- description: "List the ad account's matched audiences: status (BUILDING until LinkedIn has matched it, READY to serve), rows uploaded vs matched, and targetingUrn \u2014 the urn:li:adSegment:\u2026 targeting and exclusions take. Runs by default."
1128
- },
1129
- args: { ...accountArgs },
1130
- run: async ({ args }) => {
1131
- try {
1132
- const data = await apiGet("/api/ads/linkedin/audiences", {
1133
- "account-id": bareAccountId(args)
1134
- });
1135
- writeJsonEnvelope({ ok: true, data });
1136
- } catch (err) {
1137
- handleLinkedinError(err);
1138
- }
1139
- }
1140
- });
1141
- var audiencesCommand = defineCommand({
1142
- meta: {
1143
- name: "audiences",
1144
- description: `List the ad account's matched audiences, or stage changes to them (create lists, upload rows \u2014 staged until publish).
1145
- Examples:
1146
- baker ads linkedin audiences # status, uploaded vs matched, targetingUrn
1147
- baker ads linkedin audiences create --name "ABM Tier-1" --type company-list --list-file accounts.csv`
1148
- },
1149
- // A parent must never declare `run` — see `creativesCommand`.
1150
- args: { ...accountArgs },
1151
- default: "list",
1152
- subCommands: {
1153
- list: audiencesListCommand,
1154
- create: audiencesCreateCommand,
1155
- upload: audiencesUploadCommand,
1156
- delete: audiencesDeleteCommand
1157
- }
1158
- });
1159
- var conversionsCreateCommand = defineCommand({
1160
- meta: {
1161
- name: "create",
1162
- description: `Stage a new conversion rule. ${STAGED_NOTE}
1163
- Example: baker ads linkedin conversions create --name "Demo booked" --type LEAD --method INSIGHT_TAG --post-click-window 30 --view-window 7`
1164
- },
1165
- args: {
1166
- ...accountArgs,
1167
- name: { type: "string", description: "Conversion rule name" },
1168
- type: {
1169
- type: "string",
1170
- description: "Conversion type. Common: LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, SIGN_UP, DOWNLOAD, PURCHASE, KEY_PAGE_VIEW, ADD_TO_CART, BOOK_APPOINTMENT, SUBMIT_APPLICATION, OTHER \u2014 `baker schema ads.linkedin.conversions.create` lists all 34"
1171
- },
1172
- method: { type: "string", description: "INSIGHT_TAG|CONVERSIONS_API" },
1173
- "post-click-window": {
1174
- type: "string",
1175
- description: "1|7|30|90 days (playbook default 30); 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION"
1176
- },
1177
- "view-window": {
1178
- type: "string",
1179
- description: "1|7|30|90 days (playbook default 7); 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION"
1180
- },
1181
- "attribution-type": { type: "string", description: "LAST_TOUCH_BY_CAMPAIGN|LAST_TOUCH_BY_CONVERSION" },
1182
- "associate-all-campaigns": { type: "boolean", description: "Auto-associate with active campaigns" },
1183
- file: { type: "string", description: "JSON file with the full payload (e.g. urlMatchRuleExpression)" }
1184
- },
1185
- run: async ({ args }) => {
1186
- const accountId = bareAccountId(args);
1187
- const payload = mergePayload(loadJsonFileArg(args.file), {
1188
- name: args.name,
1189
- type: args.type ? String(args.type).toUpperCase() : void 0,
1190
- conversionMethod: args.method ? String(args.method).toUpperCase() : void 0,
1191
- postClickAttributionWindowSize: args["post-click-window"] ? Number(args["post-click-window"]) : void 0,
1192
- viewThroughAttributionWindowSize: args["view-window"] ? Number(args["view-window"]) : void 0,
1193
- attributionType: args["attribution-type"] ? String(args["attribution-type"]).toUpperCase() : void 0,
1194
- associateAllCampaigns: args["associate-all-campaigns"] === true ? true : void 0
1195
- });
1196
- await stageOp({ kind: "conversion.create", accountId, payload });
1197
- }
1198
- });
1199
- var conversionsUpdateCommand = defineCommand({
1200
- meta: {
1201
- name: "update",
1202
- description: `Stage changes to a conversion rule (windows, name, enabled). ${STAGED_NOTE}
1203
- Example: baker ads linkedin conversions update 104988516 --post-click-window 30 --view-window 7`
1204
- },
1205
- args: {
1206
- id: { type: "positional", description: "Conversion rule id or URN", required: true },
1207
- ...accountArgs,
1208
- name: { type: "string", description: "New name" },
1209
- "post-click-window": {
1210
- type: "string",
1211
- description: "1|7|30|90 days; 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION"
1212
- },
1213
- "view-window": {
1214
- type: "string",
1215
- description: "1|7|30|90 days; 180|365 only for LEAD, QUALIFIED_LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, PURCHASE, ADD_TO_CART, SUBMIT_APPLICATION"
1216
- },
1217
- "attribution-type": { type: "string", description: "LAST_TOUCH_BY_CAMPAIGN|LAST_TOUCH_BY_CONVERSION" },
1218
- enabled: { type: "string", description: "on|off" },
1219
- file: { type: "string", description: "JSON file with fields to change" }
1220
- },
1221
- run: async ({ args }) => {
1222
- const accountId = bareAccountId(args);
1223
- const payload = mergePayload(loadJsonFileArg(args.file), {
1224
- name: args.name,
1225
- postClickAttributionWindowSize: args["post-click-window"] ? Number(args["post-click-window"]) : void 0,
1226
- viewThroughAttributionWindowSize: args["view-window"] ? Number(args["view-window"]) : void 0,
1227
- attributionType: args["attribution-type"] ? String(args["attribution-type"]).toUpperCase() : void 0,
1228
- enabled: parseOnOffFlag(args.enabled, "--enabled")
1229
- });
1230
- await stageOp({
1231
- kind: "conversion.update",
1232
- accountId,
1233
- target: requireTarget(args, "conversion rule"),
1234
- payload
1235
- });
1236
- }
1237
- });
1238
- var conversionsUploadCommand = defineCommand({
1239
- meta: {
1240
- name: "upload",
1241
- description: `Stage sending conversions that happened off LinkedIn's tag \u2014 deals a CRM closed, leads qualified on a call \u2014 to a Conversions API rule, so LinkedIn credits the ads that drove them and bids toward them. ${STAGED_NOTE}
1242
- Start here: \`conversions\` lists the rules \u2014 pick one whose conversionMethod is CONVERSIONS_API (or stage one with \`conversions create --method CONVERSIONS_API\`). Ongoing sends from Baker's own conversions already reach LinkedIn on their own; this is for a backfill or a CRM export.
1243
- The file (CSV with a header row, or a JSON array) carries one conversion per row: eventId (the CRM deal or order id \u2014 LinkedIn counts a re-sent id once), happenedAt (ISO time WITH timezone, last 90 days), and something to match the person on: email, or firstName + lastName (with companyName, title, countryCode to sharpen it), or liFatId. Optional value + currency. Emails and names are hashed here; nothing readable is stored. Up to 2,000 per upload; staging again for the same rule replaces the rows.
1244
- Example: baker ads linkedin conversions upload 19997433 --file closed-won.csv`
1245
- },
1246
- args: {
1247
- id: { type: "positional", description: "Conversions API rule id (from `conversions`)", required: true },
1248
- ...accountArgs,
1249
- file: { type: "string", description: "CSV or JSON file of conversions", required: true }
1250
- },
1251
- run: async ({ args }) => {
1252
- const path = String(args.file);
1253
- const rows = path.toLowerCase().endsWith(".json") ? jsonRowsArg(path) : parseListFileArg(path, CONVERSION_UPLOAD_MAX_EVENTS)?.rows ?? [];
1254
- const { events, ignored } = conversionUploadEvents(rows);
1255
- if (ignored.length > 0) {
1256
- process.stderr.write(
1257
- `Ignored column(s) that are not part of a conversion: ${ignored.join(", ")}. Used: eventId, happenedAt, email, firstName, lastName, companyName, title, countryCode, liFatId, value, currency.
1258
- `
1259
- );
1260
- }
1261
- await stageOp({
1262
- kind: "conversion.upload",
1263
- accountId: bareAccountId(args),
1264
- target: requireTarget(args, "conversion rule"),
1265
- payload: { events }
1266
- });
1267
- }
1268
- });
1269
- function jsonRowsArg(path) {
1270
- const parsed = JSON.parse(readFileSync(path, "utf8"));
1271
- if (!Array.isArray(parsed)) {
1272
- failWriteValidation(`${path} must hold a JSON array, one conversion per element`);
1273
- }
1274
- return parsed;
1275
- }
1276
- var CONVERSION_CAMPAIGN_EXPLAINER = `Which ad sets a conversion rule counts for is a separate LinkedIn record, not a field on the rule \u2014 \`conversions update\` cannot change it, and \`--associate-all-campaigns\` only exists on create.`;
1277
- function conversionCampaignArgs() {
1278
- return {
1279
- id: { type: "positional", description: "Conversion rule id or URN", required: true },
1280
- ...accountArgs,
1281
- campaign: { type: "string", description: "Ad set (campaign) id or URN", required: true }
1282
- };
1283
- }
1284
- function requireCampaignArg(args) {
1285
- const campaign = args.campaign;
1286
- if (typeof campaign !== "string" || campaign.length === 0) {
1287
- failWriteValidation("--campaign is required \u2014 pass the ad set id or URN this conversion should count for");
1288
- }
1289
- return campaign;
1290
- }
1291
- var conversionsAssociateCommand = defineCommand({
1292
- meta: {
1293
- name: "associate-campaign",
1294
- description: `Count an existing conversion rule for one ad set. ${STAGED_NOTE}
1295
- ${CONVERSION_CAMPAIGN_EXPLAINER}
1296
- Example: baker ads linkedin conversions associate-campaign 104988516 --campaign 337643194`
1297
- },
1298
- args: conversionCampaignArgs(),
1299
- run: async ({ args }) => {
1300
- const accountId = bareAccountId(args);
1301
- await stageOp({
1302
- kind: "conversion.associateCampaign",
1303
- accountId,
1304
- target: requireTarget(args, "conversion rule"),
1305
- payload: { campaign: requireCampaignArg(args) }
1306
- });
1307
- }
1308
- });
1309
- var conversionsDissociateCommand = defineCommand({
1310
- meta: {
1311
- name: "dissociate-campaign",
1312
- description: `Stop counting an existing conversion rule for one ad set. ${STAGED_NOTE}
1313
- ${CONVERSION_CAMPAIGN_EXPLAINER}
1314
- Example: baker ads linkedin conversions dissociate-campaign 104988516 --campaign 337643194`
1315
- },
1316
- args: conversionCampaignArgs(),
1317
- run: async ({ args }) => {
1318
- const accountId = bareAccountId(args);
1319
- await stageOp({
1320
- kind: "conversion.dissociateCampaign",
1321
- accountId,
1322
- target: requireTarget(args, "conversion rule"),
1323
- payload: { campaign: requireCampaignArg(args) }
1324
- });
1325
- }
1326
- });
1327
- var leadFormsCreateCommand = defineCommand({
1328
- meta: {
1329
- name: "create",
1330
- description: `Stage a new Lead Gen Form from a JSON file. ${STAGED_NOTE}
1331
- Required: name, headline (\u226460), privacyPolicyUrl, questions[] (\u226412; playbook: \u22644 for completion).
1332
- Each question is a predefined profile field ({ name, predefinedField: "EMAIL" }) or a custom question ({ name, questionType: "MULTIPLE_CHOICE", options: [...] }; \u22643 custom).
1333
- Best-practice fields the preview will nudge for if missing: 1-3 qualifying questions, consents[] (disclosure checkboxes), thankYou.message + thankYou.landingUrl|appointmentUrl.
1334
- Also supported: locale, formImageId|formImageUrn, hiddenFields[], legalDisclaimer, thankYou.cta. Example: baker ads linkedin lead-forms create --file form.json`
1335
- },
1336
- args: {
1337
- ...accountArgs,
1338
- file: { type: "string", description: "JSON file with the form definition", required: true },
1339
- name: { type: "string", description: "Override the form name" }
1340
- },
1341
- run: async ({ args }) => {
1342
- const accountId = bareAccountId(args);
1343
- const payload = mergePayload(loadJsonFileArg(args.file), { name: args.name });
1344
- await stageOp({ kind: "leadForm.create", accountId, payload });
1345
- }
1346
- });
1347
- function leadFormUpdatePayload(args) {
1348
- const file = args.file ? loadJsonFileArg(args.file) : {};
1349
- const thankYou = mergePayload(
1350
- file.thankYou !== null && typeof file.thankYou === "object" ? file.thankYou : {},
1351
- { message: args["thank-you-message"], landingUrl: args["thank-you-url"] }
1352
- );
1353
- return mergePayload(file, {
1354
- name: args.name,
1355
- state: args.state ? String(args.state).toUpperCase() : void 0,
1356
- headline: args.headline,
1357
- description: args.description,
1358
- privacyPolicyUrl: args["privacy-policy-url"],
1359
- legalDisclaimer: args["legal-disclaimer"],
1360
- thankYou: Object.keys(thankYou).length > 0 ? thankYou : void 0
1361
- });
1362
- }
1363
- var leadFormsUpdateCommand = defineCommand({
1364
- meta: {
1365
- name: "update",
1366
- description: `Stage changes to a Lead Gen Form. ${STAGED_NOTE}
1367
- Once a form's ads are live LinkedIn keeps only its copy editable: name, headline, description, privacy policy URL, legal disclaimer, thank-you message and link, and state. Copy is written in the form's own language.
1368
- Examples:
1369
- baker ads linkedin lead-forms update 1028403421 --headline "Get the 2026 report" --thank-you-message "Check your inbox"
1370
- baker ads linkedin lead-forms update 1028403421 --state PUBLISHED`
1371
- },
1372
- args: {
1373
- id: { type: "positional", description: "Lead form id or URN", required: true },
1374
- ...accountArgs,
1375
- name: { type: "string", description: "New form name (internal)" },
1376
- state: { type: "string", description: "PUBLISHED (make a DRAFT form usable) | ARCHIVED (stop its ads)" },
1377
- headline: { type: "string", description: "Form headline (\u226460)" },
1378
- description: { type: "string", description: "Form details text" },
1379
- "privacy-policy-url": { type: "string", description: "https privacy policy URL" },
1380
- "legal-disclaimer": { type: "string", description: "Custom legal disclaimer" },
1381
- "thank-you-message": { type: "string", description: "Confirmation message after submitting" },
1382
- "thank-you-url": { type: "string", description: "https link on the confirmation screen" },
1383
- file: {
1384
- type: "string",
1385
- description: "JSON file with any of the fields above (thankYou as an object); flags override"
1386
- }
1387
- },
1388
- run: async ({ args }) => {
1389
- const accountId = bareAccountId(args);
1390
- await stageOp({
1391
- kind: "leadForm.update",
1392
- accountId,
1393
- target: requireTarget(args, "lead form"),
1394
- payload: leadFormUpdatePayload(args)
1395
- });
1396
- }
1397
- });
1398
- function leadFormStateCommand(name, state, what) {
1399
- return defineCommand({
1400
- meta: { name, description: `${what} ${STAGED_NOTE}
1401
- Example: baker ads linkedin lead-forms ${name} 1028403421` },
1402
- args: {
1403
- id: { type: "positional", description: "Lead form id or URN", required: true },
1404
- ...accountArgs
1405
- },
1406
- run: async ({ args }) => {
1407
- await stageOp({
1408
- kind: "leadForm.update",
1409
- accountId: bareAccountId(args),
1410
- target: requireTarget(args, "lead form"),
1411
- payload: { state }
1412
- });
1413
- }
1414
- });
1415
- }
1416
- var leadFormsPublishCommand = leadFormStateCommand(
1417
- "publish",
1418
- "PUBLISHED",
1419
- "Stage publishing a DRAFT lead gen form, so ads that open it can serve."
1420
- );
1421
- var leadFormsArchiveCommand = leadFormStateCommand(
1422
- "archive",
1423
- "ARCHIVED",
1424
- "Stage archiving a lead gen form \u2014 every ad that opens it stops serving."
1425
- );
1426
- var leadFormsListArgs = {
1427
- ...accountArgs,
1428
- "form-id": { type: "string", description: "Read one form (id or urn:li:leadGenForm:N), questions included" },
1429
- full: { type: "boolean", description: "Every form's questions and options, not just how many it has" }
1430
- };
1431
- function leadFormsListing(forms, opts) {
1432
- if (opts.full || opts.oneForm) {
1433
- return [...forms];
1434
- }
1435
- return forms.map((form) => ({
1436
- id: form.id,
1437
- name: form.name,
1438
- state: form.state,
1439
- version: form.version,
1440
- questions: form.questions?.length ?? 0
1441
- }));
1442
- }
1443
- var leadFormsListCommand = defineCommand({
1444
- meta: {
1445
- name: "list",
1446
- description: "List the ad account's lead gen forms: id, name, state (DRAFT forms can't serve), version, how many questions. --full (or --form-id) spells out each question and its options. Runs by default."
1447
- },
1448
- args: leadFormsListArgs,
1449
- run: async ({ args }) => {
1450
- const accountId = bareAccountId(args);
1451
- try {
1452
- const params = { "account-id": accountId };
1453
- if (args["form-id"]) params["form-id"] = String(args["form-id"]);
1454
- const forms = await apiGet("/api/ads/linkedin/lead-forms", params);
1455
- const data = leadFormsListing(forms, { full: Boolean(args.full), oneForm: Boolean(args["form-id"]) });
1456
- writeJsonEnvelope({ ok: true, data });
1457
- } catch (err) {
1458
- handleLinkedinError(err);
1459
- }
1460
- }
1461
- });
1462
- var leadFormsCommand = defineCommand({
1463
- meta: {
1464
- name: "lead-forms",
1465
- description: `List the ad account's lead gen forms, or stage changes to them (staged until publish).
1466
- Examples:
1467
- baker ads linkedin lead-forms # every form: id, name, state, question count
1468
- baker ads linkedin lead-forms --form-id 1028403421 # one form, every question and option
1469
- baker ads linkedin lead-forms create --file form.json # \u2192 li_temp ref; pass it to \`creatives create --lead-form\`
1470
- baker ads linkedin lead-forms publish 1028403421 # a DRAFT form can't serve
1471
- baker ads linkedin lead-forms archive 1028403421 # its ads stop serving`
1472
- },
1473
- // A parent must never declare `run` — see `creativesCommand`.
1474
- args: leadFormsListArgs,
1475
- default: "list",
1476
- subCommands: {
1477
- list: leadFormsListCommand,
1478
- create: leadFormsCreateCommand,
1479
- update: leadFormsUpdateCommand,
1480
- publish: leadFormsPublishCommand,
1481
- archive: leadFormsArchiveCommand
1482
- }
1483
- });
1484
- export {
1485
- accountTrackingTarget,
1486
- accountUrlParamsCommand,
1487
- audiencesCommand,
1488
- campaignCreatePayload,
1489
- campaignGroupCreatePayload,
1490
- campaignGroupsCreateCommand,
1491
- campaignGroupsDeleteCommand,
1492
- campaignGroupsDuplicateCommand,
1493
- campaignGroupsPauseCommand,
1494
- campaignGroupsResumeCommand,
1495
- campaignGroupsUpdateCommand,
1496
- campaignUpdatePayloadFromFlags,
1497
- campaignsArchiveCommand,
1498
- campaignsCreateCommand,
1499
- campaignsDeleteCommand,
1500
- campaignsDuplicateCommand,
1501
- campaignsExcludeCompaniesCommand,
1502
- campaignsPauseCommand,
1503
- campaignsResumeCommand,
1504
- campaignsUpdateCommand,
1505
- campaignsUrlParamsCommand,
1506
- conversionsAssociateCommand,
1507
- conversionsCreateCommand,
1508
- conversionsDissociateCommand,
1509
- conversionsUpdateCommand,
1510
- conversionsUploadCommand,
1511
- creativesCreateCommand,
1512
- creativesDeleteCommand,
1513
- creativesDuplicateCommand,
1514
- creativesPauseCommand,
1515
- creativesResumeCommand,
1516
- creativesUpdateCommand,
1517
- excludeCompaniesPayload,
1518
- excludeCompaniesRefusal,
1519
- leadFormsCommand,
1520
- leadFormsListing,
1521
- leadgenCallToActionArg,
1522
- sponsoredPostArgs,
1523
- trackingParamsPayload
1524
- };
1525
- //# sourceMappingURL=write-commands-BWWXFT2R.js.map