@koda-sl/baker-cli 0.489.0-dev.63e618e80 → 0.490.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (991) hide show
  1. package/README.md +170 -8
  2. package/dist/account-3H6BZO5H.js +80 -0
  3. package/dist/account-IKFDY52P.js +138 -0
  4. package/dist/account-IKFDY52P.js.map +1 -0
  5. package/dist/account-KNRDOUJP.js +79 -0
  6. package/dist/account-assets-LKZVWZAR.js +289 -0
  7. package/dist/account-assets-LKZVWZAR.js.map +1 -0
  8. package/dist/account-level-UJOZDVXY.js +608 -0
  9. package/dist/account-level-UJOZDVXY.js.map +1 -0
  10. package/dist/account-reads-GA6FVKLE.js +218 -0
  11. package/dist/account-writes-AE5IJGGW.js +66 -0
  12. package/dist/accounts-K4INATCW.js +75 -0
  13. package/dist/accounts-RTN5ZGTU.js +611 -0
  14. package/dist/accounts-RW6KXBOQ.js +77 -0
  15. package/dist/actions-HNLISA7T.js +55 -0
  16. package/dist/activecampaign-I5CILZPU.js +935 -0
  17. package/dist/activities-T253KK4Q.js +74 -0
  18. package/dist/ad-group-writes-VRSBI2Z2.js +170 -0
  19. package/dist/ad-groups-IEBVEAMS.js +68 -0
  20. package/dist/ad-writes-ALV4KFPZ.js +174 -0
  21. package/dist/add-6WKPFMLG.js +302 -0
  22. package/dist/add-XF5COUAS.js +104 -0
  23. package/dist/ads-CQZHD7FC.js +77 -0
  24. package/dist/ads-QIKZ6O2N.js +40 -0
  25. package/dist/ads-ZEY72UBN.js +114 -0
  26. package/dist/ads-ZEY72UBN.js.map +1 -0
  27. package/dist/adsets-5H3MOT3D.js +177 -0
  28. package/dist/adsets-5H3MOT3D.js.map +1 -0
  29. package/dist/advertisers-6NUM2Q3A.js +120 -0
  30. package/dist/analytics-ALOZ7ZZ4.js +1976 -0
  31. package/dist/analytics-VLHE5A2M.js +433 -0
  32. package/dist/animate-SVEPM267.js +480 -0
  33. package/dist/asset-writes-L5TMKIZC.js +47 -0
  34. package/dist/assign-6HI6TNLP.js +77 -0
  35. package/dist/audience-size-25LP2OBF.js +73 -0
  36. package/dist/audience-writes-X52VG35Y.js +324 -0
  37. package/dist/audience-writes-X52VG35Y.js.map +1 -0
  38. package/dist/audiences-AAZH56WD.js +268 -0
  39. package/dist/audiences-X3RLGOVM.js +84 -0
  40. package/dist/audiences-X3RLGOVM.js.map +1 -0
  41. package/dist/audit-YY6X2MPA.js +151 -0
  42. package/dist/autocomplete-SAWJK4NF.js +111 -0
  43. package/dist/avatars-YSFFRHDK.js +38 -0
  44. package/dist/bid-pricing-HZ74SLEB.js +100 -0
  45. package/dist/brand-T3OACVQX.js +22 -0
  46. package/dist/brief-7S6XCJIA.js +538 -0
  47. package/dist/businesses-H3HIDQX6.js +53 -0
  48. package/dist/campaign-groups-YJK767AP.js +95 -0
  49. package/dist/campaign-writes-7ZF57KLH.js +165 -0
  50. package/dist/campaign-writes-7ZF57KLH.js.map +1 -0
  51. package/dist/campaign-writes-U5PUVSMT.js +170 -0
  52. package/dist/campaigns-AV6G3AUU.js +127 -0
  53. package/dist/campaigns-AV6G3AUU.js.map +1 -0
  54. package/dist/campaigns-GALDR5KK.js +109 -0
  55. package/dist/campaigns-JEIKY2M4.js +76 -0
  56. package/dist/campaigns-VTRMKSAT.js +107 -0
  57. package/dist/canvas-SVJEQO4V.js +46 -0
  58. package/dist/capabilities-2KT6TCGZ.js +144 -0
  59. package/dist/catalog-S32MX453.js +65 -0
  60. package/dist/catalogs-OCVXZLIF.js +128 -0
  61. package/dist/catalogs-RXJTZTVX.js +778 -0
  62. package/dist/catalogs-RXJTZTVX.js.map +1 -0
  63. package/dist/changes-5TOYRKZR.js +135 -0
  64. package/dist/chatgpt-QVF2FD3E.js +47 -0
  65. package/dist/chats-QG72JB6Y.js +276 -0
  66. package/dist/chats-QG72JB6Y.js.map +1 -0
  67. package/dist/check-SLNHVYGS.js +104 -0
  68. package/dist/chunk-2C7AHPM4.js +191 -0
  69. package/dist/chunk-2C7AHPM4.js.map +1 -0
  70. package/dist/chunk-2LI6746F.js +103 -0
  71. package/dist/chunk-2PWNIEW4.js +197 -0
  72. package/dist/chunk-2WZI36D3.js +317 -0
  73. package/dist/chunk-3W6G6ARX.js +122 -0
  74. package/dist/chunk-45UK4KYJ.js +1606 -0
  75. package/dist/chunk-46GWHUKN.js +225 -0
  76. package/dist/chunk-4AMIHNNP.js +1919 -0
  77. package/dist/chunk-4KJMLYCD.js +224 -0
  78. package/dist/chunk-5C35OW7L.js +205 -0
  79. package/dist/chunk-5C35OW7L.js.map +1 -0
  80. package/dist/chunk-5GQCN2QZ.js +391 -0
  81. package/dist/chunk-5GQCN2QZ.js.map +1 -0
  82. package/dist/chunk-5HJRZFMW.js +207 -0
  83. package/dist/chunk-65Y3RCWP.js +68 -0
  84. package/dist/chunk-65Y3RCWP.js.map +1 -0
  85. package/dist/chunk-66QHX566.js +6306 -0
  86. package/dist/chunk-6NCJGU6I.js +191 -0
  87. package/dist/chunk-6WCAV27H.js +494 -0
  88. package/dist/chunk-A4MVVPJ2.js +4204 -0
  89. package/dist/chunk-A4MVVPJ2.js.map +1 -0
  90. package/dist/chunk-AO45BX6Q.js +66 -0
  91. package/dist/chunk-AQM4JH62.js +274 -0
  92. package/dist/chunk-AQM4JH62.js.map +1 -0
  93. package/dist/chunk-BDYLILMW.js +150 -0
  94. package/dist/chunk-BL2MX6CR.js +249 -0
  95. package/dist/chunk-BOPC3D6I.js +604 -0
  96. package/dist/chunk-BTY4LZBG.js +46 -0
  97. package/dist/chunk-C7NWUCLQ.js +64 -0
  98. package/dist/chunk-CP4P6YKM.js +287 -0
  99. package/dist/chunk-CP4P6YKM.js.map +1 -0
  100. package/dist/chunk-D4CKCNGW.js +547 -0
  101. package/dist/chunk-D5CUAOQX.js +297 -0
  102. package/dist/chunk-D5UXWKLQ.js +903 -0
  103. package/dist/chunk-DCBZ5CHZ.js +139 -0
  104. package/dist/chunk-E2RFM6R2.js +1518 -0
  105. package/dist/chunk-EOY6BK4C.js +148 -0
  106. package/dist/chunk-FA4YZFRV.js +392 -0
  107. package/dist/chunk-FVHJCERJ.js +942 -0
  108. package/dist/chunk-G2LGMWNG.js +627 -0
  109. package/dist/chunk-G4STCTY3.js +399 -0
  110. package/dist/chunk-G6XKD7QE.js +77 -0
  111. package/dist/chunk-GSZZLW5Q.js +831 -0
  112. package/dist/chunk-HLVRHBKL.js +1078 -0
  113. package/dist/chunk-HLVRHBKL.js.map +1 -0
  114. package/dist/chunk-HSPMBLKE.js +363 -0
  115. package/dist/chunk-IG627WWY.js +23992 -0
  116. package/dist/chunk-IG627WWY.js.map +1 -0
  117. package/dist/chunk-IJ22WP3G.js +275 -0
  118. package/dist/chunk-IKCP5NCE.js +843 -0
  119. package/dist/chunk-ILSKYRDR.js +169 -0
  120. package/dist/chunk-JAC6JVCI.js +26 -0
  121. package/dist/chunk-JKJQWRLO.js +91 -0
  122. package/dist/chunk-JQH5VG6F.js +5368 -0
  123. package/dist/chunk-JQU2LUZG.js +57 -0
  124. package/dist/chunk-JVH5A3XC.js +8914 -0
  125. package/dist/chunk-JYALBYN7.js +131 -0
  126. package/dist/chunk-KOXDXSKN.js +8939 -0
  127. package/dist/chunk-LOMH4TTC.js +1079 -0
  128. package/dist/chunk-LXQB4ZGE.js +142 -0
  129. package/dist/chunk-M6PN3VH6.js +19 -0
  130. package/dist/chunk-M7IJU77B.js +665 -0
  131. package/dist/chunk-MCJ5I5LR.js +3187 -0
  132. package/dist/chunk-MCJ5I5LR.js.map +1 -0
  133. package/dist/chunk-MVB32GPI.js +592 -0
  134. package/dist/chunk-MXH35PJ5.js +51 -0
  135. package/dist/chunk-MZPS46OR.js +76 -0
  136. package/dist/chunk-NEIUVSDK.js +206 -0
  137. package/dist/chunk-NEOUY3Q7.js +285 -0
  138. package/dist/chunk-NXZCCGES.js +159 -0
  139. package/dist/chunk-P3W6SRSQ.js +455 -0
  140. package/dist/chunk-P5FRWPG7.js +160 -0
  141. package/dist/chunk-PA4W7BCQ.js +23 -0
  142. package/dist/chunk-PQJXIY64.js +97 -0
  143. package/dist/chunk-PTGYM4J6.js +89 -0
  144. package/dist/chunk-QNLJ3GNZ.js +433 -0
  145. package/dist/chunk-QTOZ32SU.js +163 -0
  146. package/dist/chunk-QTOZ32SU.js.map +1 -0
  147. package/dist/chunk-SISA4HQR.js +61 -0
  148. package/dist/chunk-SVAB6KV5.js +219 -0
  149. package/dist/chunk-SVAB6KV5.js.map +1 -0
  150. package/dist/chunk-SVM3DGAQ.js +228 -0
  151. package/dist/chunk-TP7HKSBX.js +172 -0
  152. package/dist/chunk-TRPJJMCS.js +346 -0
  153. package/dist/chunk-UNX6BS4U.js +3868 -0
  154. package/dist/chunk-VD73V44J.js +344 -0
  155. package/dist/chunk-VL65H6YM.js +846 -0
  156. package/dist/chunk-WTJSMYY2.js +4249 -0
  157. package/dist/chunk-WTJSMYY2.js.map +1 -0
  158. package/dist/chunk-X7F4Z6UM.js +156 -0
  159. package/dist/chunk-YW7VMU5L.js +654 -0
  160. package/dist/chunk-YW7VMU5L.js.map +1 -0
  161. package/dist/chunk-ZCQVKDHV.js +98 -0
  162. package/dist/chunk-ZJSGGJ5R.js +167 -0
  163. package/dist/claim-SLGYOOWD.js +197 -0
  164. package/dist/cli.js +36 -36
  165. package/dist/companies-IVMH6YII.js +195 -0
  166. package/dist/complete-45L2FI2X.js +81 -0
  167. package/dist/connect-S54TJ6OV.js +42 -0
  168. package/dist/conversation-RIOL3OJ7.js +93 -0
  169. package/dist/conversion-report-REOHVLCI.js +125 -0
  170. package/dist/conversion-upload-command-W4GELHIQ.js +438 -0
  171. package/dist/conversion-writes-ECZBVY7D.js +120 -0
  172. package/dist/conversions-5QCSCRLI.js +76 -0
  173. package/dist/conversions-TKIXNSYR.js +135 -0
  174. package/dist/copy-writes-D2RTHAL6.js +167 -0
  175. package/dist/copy-writes-D2RTHAL6.js.map +1 -0
  176. package/dist/create-7JY2PTIZ.js +132 -0
  177. package/dist/create-ACLCRXQP.js +59 -0
  178. package/dist/create-KYBMFD32.js +207 -0
  179. package/dist/create-VAPJ52GJ.js +235 -0
  180. package/dist/creatives-5I3G5YP3.js +182 -0
  181. package/dist/creatives-MZ6ICNSY.js +88 -0
  182. package/dist/creatives-MZ6ICNSY.js.map +1 -0
  183. package/dist/creatives-PCAGWPW3.js +58 -0
  184. package/dist/credentials-YTQ6BHWV.js +287 -0
  185. package/dist/critique-BHYJYZDV.js +1458 -0
  186. package/dist/critique-NRHUPIWF.js +227 -0
  187. package/dist/crm-IKTWHWEB.js +318 -0
  188. package/dist/crm-N7K57LZJ.js +224 -0
  189. package/dist/currency-PW7HIBZ6.js +88 -0
  190. package/dist/custom-conversions-FIP6ZS34.js +127 -0
  191. package/dist/custom-conversions-FIP6ZS34.js.map +1 -0
  192. package/dist/customers-NLU7NYDC.js +56 -0
  193. package/dist/delete-26J3X3ZH.js +64 -0
  194. package/dist/delete-A4F5Z54J.js +66 -0
  195. package/dist/delete-EVXOFT2H.js +54 -0
  196. package/dist/demographics-VZKFMM4X.js +138 -0
  197. package/dist/discard-ULRVUJDV.js +66 -0
  198. package/dist/discover-PVXWX2WL.js +172 -0
  199. package/dist/domain-L4WCCX7R.js +98 -0
  200. package/dist/draft-34CGWUVA.js +281 -0
  201. package/dist/draft-4P3YO67N.js +332 -0
  202. package/dist/draft-4P3YO67N.js.map +1 -0
  203. package/dist/draft-57OQKHZI.js +306 -0
  204. package/dist/draft-L45PGCYZ.js +237 -0
  205. package/dist/draft-L45PGCYZ.js.map +1 -0
  206. package/dist/draft-O4S5RKWK.js +217 -0
  207. package/dist/draft-PAYD6GIM.js +307 -0
  208. package/dist/engine/index.js +9 -9
  209. package/dist/experiment-7N4QFRWV.js +1397 -0
  210. package/dist/facets-EHQKGGJ2.js +114 -0
  211. package/dist/feedback-O3H42V4I.js +106 -0
  212. package/dist/feedback-record-FAPN2GBS.js +260 -0
  213. package/dist/fetch-ETKT2RBC.js +176 -0
  214. package/dist/find-FSQAEGGF.js +134 -0
  215. package/dist/fit-UJQ47C4A.js +62 -0
  216. package/dist/flows-T22B77J3.js +247 -0
  217. package/dist/fonts-7VWBQPJF.js +36 -0
  218. package/dist/forecast-HB3RDBQN.js +168 -0
  219. package/dist/forecast-OI7YWZ6F.js +118 -0
  220. package/dist/funnel-7OA33VRP.js +394 -0
  221. package/dist/ga4-LPDIBNYP.js +55 -0
  222. package/dist/generate-OMXBFGGR.js +263 -0
  223. package/dist/get-2RSN4N3J.js +56 -0
  224. package/dist/get-6N7QJMIP.js +79 -0
  225. package/dist/google-5ESVO76E.js +136 -0
  226. package/dist/google-6JZBJ2ZQ.js +3265 -0
  227. package/dist/google-ads-G7REKD4A.js +195 -0
  228. package/dist/gsc-FIZTQX3N.js +30 -0
  229. package/dist/history-QKDYBSYM.js +67 -0
  230. package/dist/history-YMK2JNZU.js +133 -0
  231. package/dist/hubspot-BUFS7S33.js +779 -0
  232. package/dist/icon-CSVAZ7NE.js +137 -0
  233. package/dist/ideas-JQT422P7.js +40 -0
  234. package/dist/images-WBNWK2ZH.js +92 -0
  235. package/dist/ingest-RQUJGS7K.js +107 -0
  236. package/dist/ingest-XLTRLCDV.js +23 -0
  237. package/dist/insights-SQLE5NOJ.js +122 -0
  238. package/dist/insights-YWVJMATY.js +424 -0
  239. package/dist/insights-YWVJMATY.js.map +1 -0
  240. package/dist/inspect-KFVAMD4N.js +189 -0
  241. package/dist/inspiration-IX5N724J.js +53 -0
  242. package/dist/instant-experiences-NQ2GWIWL.js +257 -0
  243. package/dist/instant-experiences-NQ2GWIWL.js.map +1 -0
  244. package/dist/intent-4KJGYYHL.js +95 -0
  245. package/dist/keyword-gap-U64KXDR4.js +130 -0
  246. package/dist/keyword-metrics-WYF3QMCW.js +197 -0
  247. package/dist/keywords-for-site-G5L5EP3T.js +128 -0
  248. package/dist/landing-Y6QCTXCZ.js +28 -0
  249. package/dist/languages-7IPVGGW5.js +40 -0
  250. package/dist/leads-4SJ4NJOI.js +90 -0
  251. package/dist/leads-THI37ZMD.js +537 -0
  252. package/dist/leads-THI37ZMD.js.map +1 -0
  253. package/dist/learn-3BDZUWDT.js +204 -0
  254. package/dist/line-item-writes-YXKYR25W.js +208 -0
  255. package/dist/line-items-CKUD2UU4.js +103 -0
  256. package/dist/link-VBYFI7AM.js +64 -0
  257. package/dist/linkedin-UGMAFSGO.js +1057 -0
  258. package/dist/list-6ZNZGRRK.js +151 -0
  259. package/dist/list-ENYDGT3F.js +64 -0
  260. package/dist/list-VSUF2IWT.js +303 -0
  261. package/dist/locations-HM56X2MK.js +67 -0
  262. package/dist/locations-HM56X2MK.js.map +1 -0
  263. package/dist/locations-QJBYWRCN.js +40 -0
  264. package/dist/log-AACKGBDW.js +92 -0
  265. package/dist/logo-VHXH4J6A.js +18 -0
  266. package/dist/make-W2PYZXYF.js +1353 -0
  267. package/dist/map-63CQHWPI.js +433 -0
  268. package/dist/mcp-RKAXC6IP.js +714 -0
  269. package/dist/media-H6B7VDON.js +18 -0
  270. package/dist/media-H6B7VDON.js.map +1 -0
  271. package/dist/media-sources-EZKAJNVD.js +32 -0
  272. package/dist/members-SELIA674.js +44 -0
  273. package/dist/meta-YHDTGJQ6.js +122 -0
  274. package/dist/meta-YHDTGJQ6.js.map +1 -0
  275. package/dist/metrics-V6SKOVNH.js +152 -0
  276. package/dist/models-2XRYXSRA.js +155 -0
  277. package/dist/normalize-VAZPTBDX.js +141 -0
  278. package/dist/options-NSCZSQ5P.js +122 -0
  279. package/dist/organization-SHREKDST.js +881 -0
  280. package/dist/organization-SHREKDST.js.map +1 -0
  281. package/dist/page-photos-CXRG4AXV.js +115 -0
  282. package/dist/page-photos-CXRG4AXV.js.map +1 -0
  283. package/dist/pages-PTWRXAZT.js +66 -0
  284. package/dist/performance-K7E5KAZW.js +24 -0
  285. package/dist/pixels-MYT3TCHZ.js +60 -0
  286. package/dist/pixels-ZZCQUS3J.js +108 -0
  287. package/dist/preview-XOXAAPMQ.js +215 -0
  288. package/dist/preview-XOXAAPMQ.js.map +1 -0
  289. package/dist/promoted-tweet-writes-PKEO6WUK.js +180 -0
  290. package/dist/promoted-tweets-7MXVZRBI.js +119 -0
  291. package/dist/publish-MPMGRV72.js +341 -0
  292. package/dist/query-UD4OIZ3A.js +61 -0
  293. package/dist/reddit-XIHRI3CN.js +26 -0
  294. package/dist/refresh-A27N75NH.js +94 -0
  295. package/dist/release-UKRB5IUN.js +60 -0
  296. package/dist/relevant-pages-VXSHEOU2.js +99 -0
  297. package/dist/remove-AFNFVPZY.js +50 -0
  298. package/dist/reopen-M5HE6J3G.js +63 -0
  299. package/dist/rerun-5THJLQQJ.js +90 -0
  300. package/dist/research-JHDWWFL7.js +62 -0
  301. package/dist/research-U7RQXMYH.js +262 -0
  302. package/dist/reset-4CCWB2RT.js +54 -0
  303. package/dist/reset-J3KCWFMZ.js +54 -0
  304. package/dist/resolve-HEK27ANI.js +121 -0
  305. package/dist/retry-HPZIUG2S.js +62 -0
  306. package/dist/retry-VVI6N6UR.js +60 -0
  307. package/dist/rule-writes-6ZCAJDYZ.js +522 -0
  308. package/dist/rule-writes-6ZCAJDYZ.js.map +1 -0
  309. package/dist/rules-BMYOY2BM.js +216 -0
  310. package/dist/rules-BMYOY2BM.js.map +1 -0
  311. package/dist/rules-YLLFDZEM.js +96 -0
  312. package/dist/rules-add-U2GU4AGP.js +462 -0
  313. package/dist/run-M7ZDE6IA.js +66 -0
  314. package/dist/run-V5YQB6TH.js +65 -0
  315. package/dist/scaffold-ad-H4GJOKAW.js +1511 -0
  316. package/dist/scaffold-static-ad-2YIFHCTL.js +1005 -0
  317. package/dist/scaffold-video-3EJLKR2O.js +883 -0
  318. package/dist/schedule-QMOKWTJ3.js +61 -0
  319. package/dist/scheduled-agents-FCQHQ6KR.js +50 -0
  320. package/dist/schema-THFLCMBN.js +132 -0
  321. package/dist/schema-XKEEAUXP.js +69 -0
  322. package/dist/search-XIUYSWO6.js +174 -0
  323. package/dist/select-I22NPSIW.js +101 -0
  324. package/dist/set-prompt-S75OMQ7L.js +193 -0
  325. package/dist/setup-links-QVI6NAOK.js +141 -0
  326. package/dist/shared-3IBNDEFL.js +31 -0
  327. package/dist/site-PZPJY33N.js +177 -0
  328. package/dist/sources-ER7ANNG3.js +454 -0
  329. package/dist/sources-VA23PDND.js +30 -0
  330. package/dist/stale-MHTU2NQJ.js +71 -0
  331. package/dist/stats-ZAGJH4AD.js +34 -0
  332. package/dist/status-ABMJBCPJ.js +62 -0
  333. package/dist/stock-6SHHLSKG.js +179 -0
  334. package/dist/studies-4NIV4D5Y.js +249 -0
  335. package/dist/studies-4NIV4D5Y.js.map +1 -0
  336. package/dist/studio-ZLCGXFAN.js +49 -0
  337. package/dist/study-writes-L2AA2PGL.js +467 -0
  338. package/dist/study-writes-L2AA2PGL.js.map +1 -0
  339. package/dist/sync-QDD3MRJ6.js +54 -0
  340. package/dist/sync-definition-2EBSQA6A.js +64 -0
  341. package/dist/tag-manager-3CJ66GKJ.js +43 -0
  342. package/dist/tags-5JYOEYIT.js +20 -0
  343. package/dist/tags-B473RWAA.js +224 -0
  344. package/dist/tags-EWHPUM2V.js +20 -0
  345. package/dist/tags-KBCX6BDU.js +26 -0
  346. package/dist/tags-PEWN6GNZ.js +20 -0
  347. package/dist/targeting-LNDQV4EK.js +759 -0
  348. package/dist/targeting-LNDQV4EK.js.map +1 -0
  349. package/dist/targeting-criteria-EU65WUUF.js +113 -0
  350. package/dist/targets-KVXS5QKM.js +103 -0
  351. package/dist/testimonials-GR6TIS5S.js +32 -0
  352. package/dist/themes-JWWTOR3I.js +94 -0
  353. package/dist/top-companies-OOX3DITI.js +108 -0
  354. package/dist/translate-GEFUP6KQ.js +604 -0
  355. package/dist/triggers-OX2GKG4Y.js +142 -0
  356. package/dist/unlink-3USEPJSA.js +67 -0
  357. package/dist/unstage-VSCNPTAC.js +85 -0
  358. package/dist/update-6JKTH65B.js +152 -0
  359. package/dist/update-FG4ELXYJ.js +98 -0
  360. package/dist/update-GZFKHA3A.js +188 -0
  361. package/dist/update-HZHG67N6.js +63 -0
  362. package/dist/upload-BKCQ6FRW.js +126 -0
  363. package/dist/url-options-HCVRPZYU.js +130 -0
  364. package/dist/url-params-UN4DRN2H.js +98 -0
  365. package/dist/validate-NOWIOAHE.js +117 -0
  366. package/dist/videos-XMTDEHEJ.js +39 -0
  367. package/dist/viewer-check-U4XZMMS7.js +80 -0
  368. package/dist/viewer-check-U4XZMMS7.js.map +1 -0
  369. package/dist/web-UGU7YMII.js +140 -0
  370. package/dist/winning-ads-QOAYIR5U.js +84 -0
  371. package/dist/write-commands-6VR2UD3T.js +1024 -0
  372. package/dist/write-commands-PEJBTME6.js +1165 -0
  373. package/dist/write-commands-PEJBTME6.js.map +1 -0
  374. package/dist/x-VCSMV7T5.js +47 -0
  375. package/package.json +1 -1
  376. package/dist/account-7LUQWY6Q.js +0 -49
  377. package/dist/account-7LUQWY6Q.js.map +0 -1
  378. package/dist/account-ELL7ZZLM.js +0 -80
  379. package/dist/account-YVQGH2GB.js +0 -79
  380. package/dist/account-reads-5B4FFOZU.js +0 -218
  381. package/dist/account-writes-CEPERFD6.js +0 -66
  382. package/dist/accounts-6WNFCGUW.js +0 -611
  383. package/dist/accounts-UA2ZWRN4.js +0 -75
  384. package/dist/accounts-ZIE7J6RR.js +0 -77
  385. package/dist/actions-QZQTB3KR.js +0 -55
  386. package/dist/activecampaign-LIXWDX74.js +0 -935
  387. package/dist/activities-IQPJPP4B.js +0 -74
  388. package/dist/ad-group-writes-XGSCEQTW.js +0 -170
  389. package/dist/ad-groups-GKOLDGET.js +0 -68
  390. package/dist/ad-writes-VVD36JKH.js +0 -174
  391. package/dist/add-HQFI5UVS.js +0 -302
  392. package/dist/add-JWJP4CQY.js +0 -104
  393. package/dist/ads-EKZVHKPN.js +0 -77
  394. package/dist/ads-F365TPXO.js +0 -40
  395. package/dist/ads-HXX2IAFF.js +0 -113
  396. package/dist/ads-HXX2IAFF.js.map +0 -1
  397. package/dist/adsets-LPN6WFGF.js +0 -176
  398. package/dist/adsets-LPN6WFGF.js.map +0 -1
  399. package/dist/advertisers-TPIS4R73.js +0 -120
  400. package/dist/analytics-AFW7ESJW.js +0 -1976
  401. package/dist/analytics-QG7TBGMC.js +0 -433
  402. package/dist/animate-G4P3OEJE.js +0 -480
  403. package/dist/assign-VKINQVCJ.js +0 -77
  404. package/dist/audience-size-6ZEWCPX6.js +0 -73
  405. package/dist/audiences-BU4JZJT7.js +0 -268
  406. package/dist/audiences-XEZHACKH.js +0 -78
  407. package/dist/audiences-XEZHACKH.js.map +0 -1
  408. package/dist/audit-5US7TTUF.js +0 -151
  409. package/dist/autocomplete-XBVLHJ4R.js +0 -111
  410. package/dist/avatars-5IBVOF63.js +0 -38
  411. package/dist/bid-pricing-EFYUHTWP.js +0 -100
  412. package/dist/brand-Z5KRGJX4.js +0 -22
  413. package/dist/brief-DGAZ6NJG.js +0 -538
  414. package/dist/businesses-PRRYPR7H.js +0 -53
  415. package/dist/campaign-groups-AOMTKPUY.js +0 -95
  416. package/dist/campaign-writes-NSEJCINS.js +0 -170
  417. package/dist/campaign-writes-NXVLFVZ6.js +0 -165
  418. package/dist/campaign-writes-NXVLFVZ6.js.map +0 -1
  419. package/dist/campaigns-4SOLY7OR.js +0 -110
  420. package/dist/campaigns-4SOLY7OR.js.map +0 -1
  421. package/dist/campaigns-UELLCVI2.js +0 -109
  422. package/dist/campaigns-VWN2XPK2.js +0 -76
  423. package/dist/campaigns-WE42FQKM.js +0 -107
  424. package/dist/canvas-DG3CJ7FA.js +0 -46
  425. package/dist/capabilities-FDCILMJK.js +0 -144
  426. package/dist/catalog-KZNB2YJS.js +0 -65
  427. package/dist/catalogs-XH5NHH4C.js +0 -128
  428. package/dist/changes-DKP263OZ.js +0 -135
  429. package/dist/chatgpt-K6KNTME4.js +0 -47
  430. package/dist/chats-NFSZEF5L.js +0 -262
  431. package/dist/chats-NFSZEF5L.js.map +0 -1
  432. package/dist/check-6UVMPPNH.js +0 -104
  433. package/dist/chunk-2GT76KEX.js +0 -285
  434. package/dist/chunk-33XFNSBM.js +0 -433
  435. package/dist/chunk-36SU43V2.js +0 -6306
  436. package/dist/chunk-3BKNGXCL.js +0 -23992
  437. package/dist/chunk-3BKNGXCL.js.map +0 -1
  438. package/dist/chunk-3VCHJN2B.js +0 -627
  439. package/dist/chunk-5562QFVB.js +0 -275
  440. package/dist/chunk-5QW4OQM4.js +0 -831
  441. package/dist/chunk-5SRHACZW.js +0 -274
  442. package/dist/chunk-5SRHACZW.js.map +0 -1
  443. package/dist/chunk-6JWEGFM5.js +0 -174
  444. package/dist/chunk-6JWEGFM5.js.map +0 -1
  445. package/dist/chunk-6KULDLLR.js +0 -547
  446. package/dist/chunk-6OIKNJ7G.js +0 -26
  447. package/dist/chunk-6TG4CAYD.js +0 -19
  448. package/dist/chunk-6VZHOXP6.js +0 -172
  449. package/dist/chunk-7RBJ2Z7Z.js +0 -172
  450. package/dist/chunk-7RBJ2Z7Z.js.map +0 -1
  451. package/dist/chunk-7RKUHTS6.js +0 -224
  452. package/dist/chunk-AGVCQHQK.js +0 -344
  453. package/dist/chunk-AJ45PER5.js +0 -57
  454. package/dist/chunk-AL3VGEG5.js +0 -665
  455. package/dist/chunk-AQMMAB2N.js +0 -197
  456. package/dist/chunk-B6VCTXSD.js +0 -97
  457. package/dist/chunk-B7FVPHCW.js +0 -843
  458. package/dist/chunk-BITS62MF.js +0 -77
  459. package/dist/chunk-C4MJ3WPQ.js +0 -592
  460. package/dist/chunk-C6BFE4X2.js +0 -51
  461. package/dist/chunk-D2YHDDKW.js +0 -23
  462. package/dist/chunk-E4GWQFTL.js +0 -66
  463. package/dist/chunk-EIDTAHUC.js +0 -191
  464. package/dist/chunk-ERRMJ7AZ.js +0 -169
  465. package/dist/chunk-EZ5KY6I2.js +0 -1079
  466. package/dist/chunk-F3CZFUXZ.js +0 -3187
  467. package/dist/chunk-F3CZFUXZ.js.map +0 -1
  468. package/dist/chunk-F5IH7G2F.js +0 -1919
  469. package/dist/chunk-GFTDR3Z2.js +0 -604
  470. package/dist/chunk-GGY2KH3K.js +0 -249
  471. package/dist/chunk-GOJXKIFQ.js +0 -1605
  472. package/dist/chunk-GOJXKIFQ.js.map +0 -1
  473. package/dist/chunk-GYJQV3IX.js +0 -225
  474. package/dist/chunk-H5HDZ7IC.js +0 -139
  475. package/dist/chunk-HVI4DNZL.js +0 -103
  476. package/dist/chunk-HY4G44UC.js +0 -156
  477. package/dist/chunk-I2WRZJAC.js +0 -46
  478. package/dist/chunk-IHUIXQBP.js +0 -206
  479. package/dist/chunk-IMWXYSCP.js +0 -392
  480. package/dist/chunk-KIGGMKAE.js +0 -66
  481. package/dist/chunk-KIGGMKAE.js.map +0 -1
  482. package/dist/chunk-KPYDTIAI.js +0 -317
  483. package/dist/chunk-L63JZLCX.js +0 -647
  484. package/dist/chunk-L63JZLCX.js.map +0 -1
  485. package/dist/chunk-M2D7ZWEU.js +0 -150
  486. package/dist/chunk-MP5IMGKF.js +0 -148
  487. package/dist/chunk-NA2KOPW6.js +0 -363
  488. package/dist/chunk-NAA4CKZZ.js +0 -4249
  489. package/dist/chunk-NAA4CKZZ.js.map +0 -1
  490. package/dist/chunk-NDVAOHMY.js +0 -903
  491. package/dist/chunk-NLUFREI6.js +0 -160
  492. package/dist/chunk-OKLYOMQ3.js +0 -1606
  493. package/dist/chunk-ONVPV23E.js +0 -122
  494. package/dist/chunk-OP7DNHD2.js +0 -137
  495. package/dist/chunk-OP7DNHD2.js.map +0 -1
  496. package/dist/chunk-OWRFIAW2.js +0 -91
  497. package/dist/chunk-P5ENZXC2.js +0 -64
  498. package/dist/chunk-QK76OM22.js +0 -297
  499. package/dist/chunk-R5IZ6P3E.js +0 -3868
  500. package/dist/chunk-RBIWYPJQ.js +0 -159
  501. package/dist/chunk-RESDRJRP.js +0 -399
  502. package/dist/chunk-RGX7AQ2K.js +0 -131
  503. package/dist/chunk-RWLQYW2L.js +0 -8939
  504. package/dist/chunk-S7B2TOOU.js +0 -98
  505. package/dist/chunk-SIKCVWM3.js +0 -76
  506. package/dist/chunk-TBZPXGEW.js +0 -142
  507. package/dist/chunk-TFJW5CXD.js +0 -5368
  508. package/dist/chunk-TPS3X5DI.js +0 -89
  509. package/dist/chunk-UM7ESCIN.js +0 -846
  510. package/dist/chunk-UWDYGSJF.js +0 -61
  511. package/dist/chunk-V57TZQPI.js +0 -228
  512. package/dist/chunk-VLKYUZF7.js +0 -346
  513. package/dist/chunk-VYZ4KQ3C.js +0 -942
  514. package/dist/chunk-WRMMJUNJ.js +0 -494
  515. package/dist/chunk-WY5H3XYC.js +0 -167
  516. package/dist/chunk-XLJVJ5TK.js +0 -1518
  517. package/dist/chunk-Y2GH4YWA.js +0 -207
  518. package/dist/chunk-YSB26POP.js +0 -8914
  519. package/dist/chunk-YT2ZSPWF.js +0 -455
  520. package/dist/claim-7CB6TVEW.js +0 -197
  521. package/dist/companies-CACKHSY5.js +0 -195
  522. package/dist/complete-IHLTYFT2.js +0 -81
  523. package/dist/connect-J722BTO4.js +0 -42
  524. package/dist/conversation-HRNJJJW5.js +0 -93
  525. package/dist/conversion-report-KL4LIVY5.js +0 -125
  526. package/dist/conversion-upload-command-WT6C35QL.js +0 -438
  527. package/dist/conversion-writes-MPBCTVSP.js +0 -120
  528. package/dist/conversions-ACYT6K7H.js +0 -76
  529. package/dist/conversions-DE7W5T4Z.js +0 -135
  530. package/dist/create-6ZDLKC4F.js +0 -59
  531. package/dist/create-7YO6DAAT.js +0 -207
  532. package/dist/create-W7OTXLCZ.js +0 -132
  533. package/dist/create-ZU7AHBYM.js +0 -235
  534. package/dist/creatives-6UYAAC5E.js +0 -58
  535. package/dist/creatives-XUIY3MQI.js +0 -182
  536. package/dist/creatives-YJ3CXZQC.js +0 -87
  537. package/dist/creatives-YJ3CXZQC.js.map +0 -1
  538. package/dist/credentials-ADGJKYA7.js +0 -287
  539. package/dist/critique-BBHPASRE.js +0 -227
  540. package/dist/critique-T7QGPPEX.js +0 -1458
  541. package/dist/crm-EKDV2SET.js +0 -224
  542. package/dist/crm-MXT2HUKU.js +0 -318
  543. package/dist/currency-TBBXPWXU.js +0 -88
  544. package/dist/custom-conversions-YRYE65PU.js +0 -125
  545. package/dist/custom-conversions-YRYE65PU.js.map +0 -1
  546. package/dist/customers-EZEVYT4Z.js +0 -56
  547. package/dist/delete-3UDIH2ZD.js +0 -66
  548. package/dist/delete-4L3HO5B6.js +0 -54
  549. package/dist/delete-SRU4GRDT.js +0 -64
  550. package/dist/demographics-3OWQDW7B.js +0 -138
  551. package/dist/discard-UEMA5UHL.js +0 -66
  552. package/dist/discover-RTV5XWRI.js +0 -172
  553. package/dist/domain-6324IS6I.js +0 -98
  554. package/dist/draft-2KS56KCT.js +0 -307
  555. package/dist/draft-777O2UIX.js +0 -217
  556. package/dist/draft-EWDOIXSH.js +0 -233
  557. package/dist/draft-EWDOIXSH.js.map +0 -1
  558. package/dist/draft-GRL7577L.js +0 -306
  559. package/dist/draft-VOFJXUOC.js +0 -328
  560. package/dist/draft-VOFJXUOC.js.map +0 -1
  561. package/dist/draft-VXGZDBC7.js +0 -281
  562. package/dist/experiment-G3FQVAJU.js +0 -1397
  563. package/dist/facets-YV6NORA6.js +0 -114
  564. package/dist/feedback-YITFVOHX.js +0 -106
  565. package/dist/feedback-record-FW2QWFYQ.js +0 -260
  566. package/dist/fetch-EYXLTSKW.js +0 -176
  567. package/dist/find-EVY4XEIQ.js +0 -134
  568. package/dist/fit-KEFUU7QA.js +0 -62
  569. package/dist/flows-EJV7WMGD.js +0 -247
  570. package/dist/fonts-DMIBVZ6D.js +0 -36
  571. package/dist/forecast-5YKQZSE7.js +0 -118
  572. package/dist/forecast-G43FKEZE.js +0 -168
  573. package/dist/funnel-ND7OXIKT.js +0 -394
  574. package/dist/ga4-2BL5YAYN.js +0 -55
  575. package/dist/generate-D3LUXFJT.js +0 -263
  576. package/dist/get-GB6SPWCA.js +0 -79
  577. package/dist/get-PU3YHQWN.js +0 -56
  578. package/dist/google-7STODZQR.js +0 -136
  579. package/dist/google-MHB5TOFN.js +0 -3265
  580. package/dist/google-ads-XGEGKEL6.js +0 -195
  581. package/dist/gsc-UU3T2C6B.js +0 -30
  582. package/dist/history-NYWAMWAY.js +0 -133
  583. package/dist/history-OQAOTEO3.js +0 -67
  584. package/dist/hubspot-LMIVY7FR.js +0 -779
  585. package/dist/icon-GB7UH5RF.js +0 -137
  586. package/dist/ideas-W4IIVOZ4.js +0 -40
  587. package/dist/images-PPMIMPTS.js +0 -92
  588. package/dist/ingest-2YGWBWAB.js +0 -107
  589. package/dist/ingest-FRDTTPYD.js +0 -23
  590. package/dist/insights-4HT2NAYP.js +0 -423
  591. package/dist/insights-4HT2NAYP.js.map +0 -1
  592. package/dist/insights-PZXFCMX2.js +0 -122
  593. package/dist/inspect-QF2S3U2E.js +0 -189
  594. package/dist/inspiration-XQYHBJY2.js +0 -53
  595. package/dist/intent-JJTDJ732.js +0 -95
  596. package/dist/keyword-gap-4NQN56JP.js +0 -130
  597. package/dist/keyword-metrics-QCIOBMTW.js +0 -197
  598. package/dist/keywords-for-site-FS635JXM.js +0 -128
  599. package/dist/landing-6H5QEHOW.js +0 -28
  600. package/dist/languages-FNE45NXJ.js +0 -40
  601. package/dist/leads-2XOSAYP4.js +0 -293
  602. package/dist/leads-2XOSAYP4.js.map +0 -1
  603. package/dist/leads-MKLSWZO6.js +0 -90
  604. package/dist/learn-C564OA7W.js +0 -204
  605. package/dist/line-item-writes-K7QNWRQ3.js +0 -208
  606. package/dist/line-items-TBTHVKCZ.js +0 -103
  607. package/dist/link-CPJJ6T4M.js +0 -64
  608. package/dist/linkedin-HGUK624E.js +0 -1057
  609. package/dist/list-AAT5CWDA.js +0 -303
  610. package/dist/list-N5SJXLYF.js +0 -64
  611. package/dist/list-OKDU5W4D.js +0 -151
  612. package/dist/locations-FTDI4FBI.js +0 -40
  613. package/dist/locations-VL2G22Y5.js +0 -67
  614. package/dist/locations-VL2G22Y5.js.map +0 -1
  615. package/dist/log-KVRWIJS5.js +0 -92
  616. package/dist/logo-YSNUUT33.js +0 -18
  617. package/dist/make-4NTHJ4TG.js +0 -1353
  618. package/dist/map-HQ43MKEC.js +0 -433
  619. package/dist/mcp-MFLUHPL5.js +0 -714
  620. package/dist/media-ES2UBGYW.js +0 -15
  621. package/dist/media-ES2UBGYW.js.map +0 -1
  622. package/dist/media-sources-A4ICRSKB.js +0 -32
  623. package/dist/members-NRKQSSVS.js +0 -44
  624. package/dist/meta-AOIPEDV5.js +0 -69
  625. package/dist/meta-AOIPEDV5.js.map +0 -1
  626. package/dist/metrics-3BRTJNGW.js +0 -152
  627. package/dist/models-IH6KE6OH.js +0 -155
  628. package/dist/normalize-EH6BTBOB.js +0 -141
  629. package/dist/options-YEPQXXRY.js +0 -122
  630. package/dist/organization-XSWT7S5S.js +0 -836
  631. package/dist/organization-XSWT7S5S.js.map +0 -1
  632. package/dist/pages-FTI44OSH.js +0 -66
  633. package/dist/performance-YJVMM6DL.js +0 -24
  634. package/dist/pixels-DWW2TDY2.js +0 -60
  635. package/dist/pixels-MBKR4XPX.js +0 -108
  636. package/dist/preview-V4YBD45S.js +0 -169
  637. package/dist/preview-V4YBD45S.js.map +0 -1
  638. package/dist/promoted-tweet-writes-M5OVEBC5.js +0 -180
  639. package/dist/promoted-tweets-2MOIERNB.js +0 -119
  640. package/dist/publish-NPENZIHV.js +0 -341
  641. package/dist/query-3OMCFGLU.js +0 -61
  642. package/dist/reddit-LI37G5LS.js +0 -26
  643. package/dist/refresh-4BBV5SPL.js +0 -94
  644. package/dist/release-4X3TLMQT.js +0 -60
  645. package/dist/relevant-pages-DIYZM6FJ.js +0 -99
  646. package/dist/remove-Q4AES5UH.js +0 -50
  647. package/dist/reopen-SDTPL3BN.js +0 -63
  648. package/dist/rerun-NA3MH4HG.js +0 -90
  649. package/dist/research-5H265UV7.js +0 -262
  650. package/dist/research-LXQRNAQ2.js +0 -62
  651. package/dist/reset-42M5IKDI.js +0 -54
  652. package/dist/reset-52PU3CVD.js +0 -54
  653. package/dist/resolve-R4IACKIZ.js +0 -121
  654. package/dist/retry-FPF42ZNG.js +0 -62
  655. package/dist/retry-RTQGAH6G.js +0 -60
  656. package/dist/rules-CGNYJYVC.js +0 -96
  657. package/dist/rules-add-EO5476BF.js +0 -462
  658. package/dist/run-3AZJ3UQU.js +0 -66
  659. package/dist/run-AFMTXJTU.js +0 -65
  660. package/dist/scaffold-ad-OGU2IINY.js +0 -1511
  661. package/dist/scaffold-static-ad-HO4BJW4H.js +0 -1005
  662. package/dist/scaffold-video-TLQ4WSDK.js +0 -883
  663. package/dist/schedule-AWWMI5FO.js +0 -61
  664. package/dist/scheduled-agents-ELLU7BSE.js +0 -50
  665. package/dist/schema-BOOZEJPA.js +0 -69
  666. package/dist/schema-QNVLKMKG.js +0 -132
  667. package/dist/search-BZNIB2XF.js +0 -174
  668. package/dist/select-NLWZIQ7L.js +0 -101
  669. package/dist/set-prompt-QKW2L553.js +0 -193
  670. package/dist/setup-links-NMSQ4BG7.js +0 -141
  671. package/dist/shared-NDRFKAH7.js +0 -31
  672. package/dist/site-GGYFBZT5.js +0 -177
  673. package/dist/sources-KTGDMUV4.js +0 -30
  674. package/dist/sources-LPQZDTIU.js +0 -454
  675. package/dist/stale-C5JLQ4D2.js +0 -71
  676. package/dist/stats-RCLQE4HJ.js +0 -34
  677. package/dist/status-6PS3HDS5.js +0 -62
  678. package/dist/stock-ECRBD7RP.js +0 -179
  679. package/dist/studio-LMDDQWRY.js +0 -49
  680. package/dist/sync-XSATDLE6.js +0 -54
  681. package/dist/sync-definition-LSGDHMHV.js +0 -64
  682. package/dist/tag-manager-G3LBQZUL.js +0 -43
  683. package/dist/tags-5Y7TPJNZ.js +0 -20
  684. package/dist/tags-6TT5ZJVX.js +0 -26
  685. package/dist/tags-BQLIOWS4.js +0 -20
  686. package/dist/tags-EXWKO6Q6.js +0 -224
  687. package/dist/tags-OK34UGSM.js +0 -20
  688. package/dist/targeting-criteria-AWPMOX4V.js +0 -113
  689. package/dist/targets-EXYCOHEX.js +0 -103
  690. package/dist/testimonials-BTYMR3U4.js +0 -32
  691. package/dist/themes-AOU4ZZXL.js +0 -94
  692. package/dist/top-companies-FRPAURAH.js +0 -108
  693. package/dist/translate-SF234KLG.js +0 -604
  694. package/dist/triggers-SJUXDU3X.js +0 -142
  695. package/dist/unlink-RIZD3XTI.js +0 -67
  696. package/dist/unstage-MKTIVI3I.js +0 -85
  697. package/dist/update-COHXM25C.js +0 -152
  698. package/dist/update-NKX2GXAR.js +0 -63
  699. package/dist/update-OXVZXDYH.js +0 -98
  700. package/dist/update-SZLYEEU4.js +0 -188
  701. package/dist/upload-LEDO3IRC.js +0 -126
  702. package/dist/url-options-Q5SL42CV.js +0 -130
  703. package/dist/url-params-KP6D7BF3.js +0 -98
  704. package/dist/validate-7QWQZ2OL.js +0 -117
  705. package/dist/videos-VABK4KHJ.js +0 -39
  706. package/dist/viewer-check-I45HHWSW.js +0 -80
  707. package/dist/web-DZGUPZYQ.js +0 -140
  708. package/dist/winning-ads-6MDLRSKM.js +0 -84
  709. package/dist/write-commands-3VIK3VC4.js +0 -1024
  710. package/dist/write-commands-HCQI4Y27.js +0 -737
  711. package/dist/write-commands-HCQI4Y27.js.map +0 -1
  712. package/dist/x-GRDU7QC2.js +0 -47
  713. /package/dist/{account-ELL7ZZLM.js.map → account-3H6BZO5H.js.map} +0 -0
  714. /package/dist/{account-YVQGH2GB.js.map → account-KNRDOUJP.js.map} +0 -0
  715. /package/dist/{account-reads-5B4FFOZU.js.map → account-reads-GA6FVKLE.js.map} +0 -0
  716. /package/dist/{account-writes-CEPERFD6.js.map → account-writes-AE5IJGGW.js.map} +0 -0
  717. /package/dist/{accounts-UA2ZWRN4.js.map → accounts-K4INATCW.js.map} +0 -0
  718. /package/dist/{accounts-6WNFCGUW.js.map → accounts-RTN5ZGTU.js.map} +0 -0
  719. /package/dist/{accounts-ZIE7J6RR.js.map → accounts-RW6KXBOQ.js.map} +0 -0
  720. /package/dist/{actions-QZQTB3KR.js.map → actions-HNLISA7T.js.map} +0 -0
  721. /package/dist/{activecampaign-LIXWDX74.js.map → activecampaign-I5CILZPU.js.map} +0 -0
  722. /package/dist/{activities-IQPJPP4B.js.map → activities-T253KK4Q.js.map} +0 -0
  723. /package/dist/{ad-group-writes-XGSCEQTW.js.map → ad-group-writes-VRSBI2Z2.js.map} +0 -0
  724. /package/dist/{ad-groups-GKOLDGET.js.map → ad-groups-IEBVEAMS.js.map} +0 -0
  725. /package/dist/{ad-writes-VVD36JKH.js.map → ad-writes-ALV4KFPZ.js.map} +0 -0
  726. /package/dist/{add-HQFI5UVS.js.map → add-6WKPFMLG.js.map} +0 -0
  727. /package/dist/{add-JWJP4CQY.js.map → add-XF5COUAS.js.map} +0 -0
  728. /package/dist/{ads-EKZVHKPN.js.map → ads-CQZHD7FC.js.map} +0 -0
  729. /package/dist/{ads-F365TPXO.js.map → ads-QIKZ6O2N.js.map} +0 -0
  730. /package/dist/{advertisers-TPIS4R73.js.map → advertisers-6NUM2Q3A.js.map} +0 -0
  731. /package/dist/{analytics-AFW7ESJW.js.map → analytics-ALOZ7ZZ4.js.map} +0 -0
  732. /package/dist/{analytics-QG7TBGMC.js.map → analytics-VLHE5A2M.js.map} +0 -0
  733. /package/dist/{animate-G4P3OEJE.js.map → animate-SVEPM267.js.map} +0 -0
  734. /package/dist/{connect-J722BTO4.js.map → asset-writes-L5TMKIZC.js.map} +0 -0
  735. /package/dist/{assign-VKINQVCJ.js.map → assign-6HI6TNLP.js.map} +0 -0
  736. /package/dist/{audience-size-6ZEWCPX6.js.map → audience-size-25LP2OBF.js.map} +0 -0
  737. /package/dist/{audiences-BU4JZJT7.js.map → audiences-AAZH56WD.js.map} +0 -0
  738. /package/dist/{audit-5US7TTUF.js.map → audit-YY6X2MPA.js.map} +0 -0
  739. /package/dist/{autocomplete-XBVLHJ4R.js.map → autocomplete-SAWJK4NF.js.map} +0 -0
  740. /package/dist/{avatars-5IBVOF63.js.map → avatars-YSFFRHDK.js.map} +0 -0
  741. /package/dist/{bid-pricing-EFYUHTWP.js.map → bid-pricing-HZ74SLEB.js.map} +0 -0
  742. /package/dist/{brand-Z5KRGJX4.js.map → brand-T3OACVQX.js.map} +0 -0
  743. /package/dist/{brief-DGAZ6NJG.js.map → brief-7S6XCJIA.js.map} +0 -0
  744. /package/dist/{businesses-PRRYPR7H.js.map → businesses-H3HIDQX6.js.map} +0 -0
  745. /package/dist/{campaign-groups-AOMTKPUY.js.map → campaign-groups-YJK767AP.js.map} +0 -0
  746. /package/dist/{campaign-writes-NSEJCINS.js.map → campaign-writes-U5PUVSMT.js.map} +0 -0
  747. /package/dist/{campaigns-UELLCVI2.js.map → campaigns-GALDR5KK.js.map} +0 -0
  748. /package/dist/{campaigns-VWN2XPK2.js.map → campaigns-JEIKY2M4.js.map} +0 -0
  749. /package/dist/{campaigns-WE42FQKM.js.map → campaigns-VTRMKSAT.js.map} +0 -0
  750. /package/dist/{canvas-DG3CJ7FA.js.map → canvas-SVJEQO4V.js.map} +0 -0
  751. /package/dist/{capabilities-FDCILMJK.js.map → capabilities-2KT6TCGZ.js.map} +0 -0
  752. /package/dist/{catalog-KZNB2YJS.js.map → catalog-S32MX453.js.map} +0 -0
  753. /package/dist/{catalogs-XH5NHH4C.js.map → catalogs-OCVXZLIF.js.map} +0 -0
  754. /package/dist/{changes-DKP263OZ.js.map → changes-5TOYRKZR.js.map} +0 -0
  755. /package/dist/{chatgpt-K6KNTME4.js.map → chatgpt-QVF2FD3E.js.map} +0 -0
  756. /package/dist/{check-6UVMPPNH.js.map → check-SLNHVYGS.js.map} +0 -0
  757. /package/dist/{chunk-HVI4DNZL.js.map → chunk-2LI6746F.js.map} +0 -0
  758. /package/dist/{chunk-AQMMAB2N.js.map → chunk-2PWNIEW4.js.map} +0 -0
  759. /package/dist/{chunk-KPYDTIAI.js.map → chunk-2WZI36D3.js.map} +0 -0
  760. /package/dist/{chunk-ONVPV23E.js.map → chunk-3W6G6ARX.js.map} +0 -0
  761. /package/dist/{chunk-OKLYOMQ3.js.map → chunk-45UK4KYJ.js.map} +0 -0
  762. /package/dist/{chunk-GYJQV3IX.js.map → chunk-46GWHUKN.js.map} +0 -0
  763. /package/dist/{chunk-F5IH7G2F.js.map → chunk-4AMIHNNP.js.map} +0 -0
  764. /package/dist/{chunk-7RKUHTS6.js.map → chunk-4KJMLYCD.js.map} +0 -0
  765. /package/dist/{chunk-Y2GH4YWA.js.map → chunk-5HJRZFMW.js.map} +0 -0
  766. /package/dist/{chunk-36SU43V2.js.map → chunk-66QHX566.js.map} +0 -0
  767. /package/dist/{chunk-EIDTAHUC.js.map → chunk-6NCJGU6I.js.map} +0 -0
  768. /package/dist/{chunk-WRMMJUNJ.js.map → chunk-6WCAV27H.js.map} +0 -0
  769. /package/dist/{chunk-E4GWQFTL.js.map → chunk-AO45BX6Q.js.map} +0 -0
  770. /package/dist/{chunk-M2D7ZWEU.js.map → chunk-BDYLILMW.js.map} +0 -0
  771. /package/dist/{chunk-GGY2KH3K.js.map → chunk-BL2MX6CR.js.map} +0 -0
  772. /package/dist/{chunk-GFTDR3Z2.js.map → chunk-BOPC3D6I.js.map} +0 -0
  773. /package/dist/{chunk-I2WRZJAC.js.map → chunk-BTY4LZBG.js.map} +0 -0
  774. /package/dist/{chunk-P5ENZXC2.js.map → chunk-C7NWUCLQ.js.map} +0 -0
  775. /package/dist/{chunk-6KULDLLR.js.map → chunk-D4CKCNGW.js.map} +0 -0
  776. /package/dist/{chunk-QK76OM22.js.map → chunk-D5CUAOQX.js.map} +0 -0
  777. /package/dist/{chunk-NDVAOHMY.js.map → chunk-D5UXWKLQ.js.map} +0 -0
  778. /package/dist/{chunk-H5HDZ7IC.js.map → chunk-DCBZ5CHZ.js.map} +0 -0
  779. /package/dist/{chunk-XLJVJ5TK.js.map → chunk-E2RFM6R2.js.map} +0 -0
  780. /package/dist/{chunk-MP5IMGKF.js.map → chunk-EOY6BK4C.js.map} +0 -0
  781. /package/dist/{chunk-IMWXYSCP.js.map → chunk-FA4YZFRV.js.map} +0 -0
  782. /package/dist/{chunk-VYZ4KQ3C.js.map → chunk-FVHJCERJ.js.map} +0 -0
  783. /package/dist/{chunk-3VCHJN2B.js.map → chunk-G2LGMWNG.js.map} +0 -0
  784. /package/dist/{chunk-RESDRJRP.js.map → chunk-G4STCTY3.js.map} +0 -0
  785. /package/dist/{chunk-BITS62MF.js.map → chunk-G6XKD7QE.js.map} +0 -0
  786. /package/dist/{chunk-5QW4OQM4.js.map → chunk-GSZZLW5Q.js.map} +0 -0
  787. /package/dist/{chunk-NA2KOPW6.js.map → chunk-HSPMBLKE.js.map} +0 -0
  788. /package/dist/{chunk-5562QFVB.js.map → chunk-IJ22WP3G.js.map} +0 -0
  789. /package/dist/{chunk-B7FVPHCW.js.map → chunk-IKCP5NCE.js.map} +0 -0
  790. /package/dist/{chunk-ERRMJ7AZ.js.map → chunk-ILSKYRDR.js.map} +0 -0
  791. /package/dist/{chunk-6OIKNJ7G.js.map → chunk-JAC6JVCI.js.map} +0 -0
  792. /package/dist/{chunk-OWRFIAW2.js.map → chunk-JKJQWRLO.js.map} +0 -0
  793. /package/dist/{chunk-TFJW5CXD.js.map → chunk-JQH5VG6F.js.map} +0 -0
  794. /package/dist/{chunk-AJ45PER5.js.map → chunk-JQU2LUZG.js.map} +0 -0
  795. /package/dist/{chunk-YSB26POP.js.map → chunk-JVH5A3XC.js.map} +0 -0
  796. /package/dist/{chunk-RGX7AQ2K.js.map → chunk-JYALBYN7.js.map} +0 -0
  797. /package/dist/{chunk-RWLQYW2L.js.map → chunk-KOXDXSKN.js.map} +0 -0
  798. /package/dist/{chunk-EZ5KY6I2.js.map → chunk-LOMH4TTC.js.map} +0 -0
  799. /package/dist/{chunk-TBZPXGEW.js.map → chunk-LXQB4ZGE.js.map} +0 -0
  800. /package/dist/{chunk-6TG4CAYD.js.map → chunk-M6PN3VH6.js.map} +0 -0
  801. /package/dist/{chunk-AL3VGEG5.js.map → chunk-M7IJU77B.js.map} +0 -0
  802. /package/dist/{chunk-C4MJ3WPQ.js.map → chunk-MVB32GPI.js.map} +0 -0
  803. /package/dist/{chunk-C6BFE4X2.js.map → chunk-MXH35PJ5.js.map} +0 -0
  804. /package/dist/{chunk-SIKCVWM3.js.map → chunk-MZPS46OR.js.map} +0 -0
  805. /package/dist/{chunk-IHUIXQBP.js.map → chunk-NEIUVSDK.js.map} +0 -0
  806. /package/dist/{chunk-2GT76KEX.js.map → chunk-NEOUY3Q7.js.map} +0 -0
  807. /package/dist/{chunk-RBIWYPJQ.js.map → chunk-NXZCCGES.js.map} +0 -0
  808. /package/dist/{chunk-YT2ZSPWF.js.map → chunk-P3W6SRSQ.js.map} +0 -0
  809. /package/dist/{chunk-NLUFREI6.js.map → chunk-P5FRWPG7.js.map} +0 -0
  810. /package/dist/{chunk-D2YHDDKW.js.map → chunk-PA4W7BCQ.js.map} +0 -0
  811. /package/dist/{chunk-B6VCTXSD.js.map → chunk-PQJXIY64.js.map} +0 -0
  812. /package/dist/{chunk-TPS3X5DI.js.map → chunk-PTGYM4J6.js.map} +0 -0
  813. /package/dist/{chunk-33XFNSBM.js.map → chunk-QNLJ3GNZ.js.map} +0 -0
  814. /package/dist/{chunk-UWDYGSJF.js.map → chunk-SISA4HQR.js.map} +0 -0
  815. /package/dist/{chunk-V57TZQPI.js.map → chunk-SVM3DGAQ.js.map} +0 -0
  816. /package/dist/{chunk-6VZHOXP6.js.map → chunk-TP7HKSBX.js.map} +0 -0
  817. /package/dist/{chunk-VLKYUZF7.js.map → chunk-TRPJJMCS.js.map} +0 -0
  818. /package/dist/{chunk-R5IZ6P3E.js.map → chunk-UNX6BS4U.js.map} +0 -0
  819. /package/dist/{chunk-AGVCQHQK.js.map → chunk-VD73V44J.js.map} +0 -0
  820. /package/dist/{chunk-UM7ESCIN.js.map → chunk-VL65H6YM.js.map} +0 -0
  821. /package/dist/{chunk-HY4G44UC.js.map → chunk-X7F4Z6UM.js.map} +0 -0
  822. /package/dist/{chunk-S7B2TOOU.js.map → chunk-ZCQVKDHV.js.map} +0 -0
  823. /package/dist/{chunk-WY5H3XYC.js.map → chunk-ZJSGGJ5R.js.map} +0 -0
  824. /package/dist/{claim-7CB6TVEW.js.map → claim-SLGYOOWD.js.map} +0 -0
  825. /package/dist/{companies-CACKHSY5.js.map → companies-IVMH6YII.js.map} +0 -0
  826. /package/dist/{complete-IHLTYFT2.js.map → complete-45L2FI2X.js.map} +0 -0
  827. /package/dist/{customers-EZEVYT4Z.js.map → connect-S54TJ6OV.js.map} +0 -0
  828. /package/dist/{conversation-HRNJJJW5.js.map → conversation-RIOL3OJ7.js.map} +0 -0
  829. /package/dist/{conversion-report-KL4LIVY5.js.map → conversion-report-REOHVLCI.js.map} +0 -0
  830. /package/dist/{conversion-upload-command-WT6C35QL.js.map → conversion-upload-command-W4GELHIQ.js.map} +0 -0
  831. /package/dist/{conversion-writes-MPBCTVSP.js.map → conversion-writes-ECZBVY7D.js.map} +0 -0
  832. /package/dist/{conversions-ACYT6K7H.js.map → conversions-5QCSCRLI.js.map} +0 -0
  833. /package/dist/{conversions-DE7W5T4Z.js.map → conversions-TKIXNSYR.js.map} +0 -0
  834. /package/dist/{create-W7OTXLCZ.js.map → create-7JY2PTIZ.js.map} +0 -0
  835. /package/dist/{create-6ZDLKC4F.js.map → create-ACLCRXQP.js.map} +0 -0
  836. /package/dist/{create-7YO6DAAT.js.map → create-KYBMFD32.js.map} +0 -0
  837. /package/dist/{create-ZU7AHBYM.js.map → create-VAPJ52GJ.js.map} +0 -0
  838. /package/dist/{creatives-XUIY3MQI.js.map → creatives-5I3G5YP3.js.map} +0 -0
  839. /package/dist/{creatives-6UYAAC5E.js.map → creatives-PCAGWPW3.js.map} +0 -0
  840. /package/dist/{credentials-ADGJKYA7.js.map → credentials-YTQ6BHWV.js.map} +0 -0
  841. /package/dist/{critique-T7QGPPEX.js.map → critique-BHYJYZDV.js.map} +0 -0
  842. /package/dist/{critique-BBHPASRE.js.map → critique-NRHUPIWF.js.map} +0 -0
  843. /package/dist/{crm-MXT2HUKU.js.map → crm-IKTWHWEB.js.map} +0 -0
  844. /package/dist/{crm-EKDV2SET.js.map → crm-N7K57LZJ.js.map} +0 -0
  845. /package/dist/{currency-TBBXPWXU.js.map → currency-PW7HIBZ6.js.map} +0 -0
  846. /package/dist/{fit-KEFUU7QA.js.map → customers-NLU7NYDC.js.map} +0 -0
  847. /package/dist/{delete-SRU4GRDT.js.map → delete-26J3X3ZH.js.map} +0 -0
  848. /package/dist/{delete-3UDIH2ZD.js.map → delete-A4F5Z54J.js.map} +0 -0
  849. /package/dist/{delete-4L3HO5B6.js.map → delete-EVXOFT2H.js.map} +0 -0
  850. /package/dist/{demographics-3OWQDW7B.js.map → demographics-VZKFMM4X.js.map} +0 -0
  851. /package/dist/{discard-UEMA5UHL.js.map → discard-ULRVUJDV.js.map} +0 -0
  852. /package/dist/{discover-RTV5XWRI.js.map → discover-PVXWX2WL.js.map} +0 -0
  853. /package/dist/{domain-6324IS6I.js.map → domain-L4WCCX7R.js.map} +0 -0
  854. /package/dist/{draft-VXGZDBC7.js.map → draft-34CGWUVA.js.map} +0 -0
  855. /package/dist/{draft-GRL7577L.js.map → draft-57OQKHZI.js.map} +0 -0
  856. /package/dist/{draft-777O2UIX.js.map → draft-O4S5RKWK.js.map} +0 -0
  857. /package/dist/{draft-2KS56KCT.js.map → draft-PAYD6GIM.js.map} +0 -0
  858. /package/dist/{experiment-G3FQVAJU.js.map → experiment-7N4QFRWV.js.map} +0 -0
  859. /package/dist/{facets-YV6NORA6.js.map → facets-EHQKGGJ2.js.map} +0 -0
  860. /package/dist/{feedback-YITFVOHX.js.map → feedback-O3H42V4I.js.map} +0 -0
  861. /package/dist/{feedback-record-FW2QWFYQ.js.map → feedback-record-FAPN2GBS.js.map} +0 -0
  862. /package/dist/{fetch-EYXLTSKW.js.map → fetch-ETKT2RBC.js.map} +0 -0
  863. /package/dist/{find-EVY4XEIQ.js.map → find-FSQAEGGF.js.map} +0 -0
  864. /package/dist/{fonts-DMIBVZ6D.js.map → fit-UJQ47C4A.js.map} +0 -0
  865. /package/dist/{flows-EJV7WMGD.js.map → flows-T22B77J3.js.map} +0 -0
  866. /package/dist/{ideas-W4IIVOZ4.js.map → fonts-7VWBQPJF.js.map} +0 -0
  867. /package/dist/{forecast-G43FKEZE.js.map → forecast-HB3RDBQN.js.map} +0 -0
  868. /package/dist/{forecast-5YKQZSE7.js.map → forecast-OI7YWZ6F.js.map} +0 -0
  869. /package/dist/{funnel-ND7OXIKT.js.map → funnel-7OA33VRP.js.map} +0 -0
  870. /package/dist/{ga4-2BL5YAYN.js.map → ga4-LPDIBNYP.js.map} +0 -0
  871. /package/dist/{generate-D3LUXFJT.js.map → generate-OMXBFGGR.js.map} +0 -0
  872. /package/dist/{get-PU3YHQWN.js.map → get-2RSN4N3J.js.map} +0 -0
  873. /package/dist/{get-GB6SPWCA.js.map → get-6N7QJMIP.js.map} +0 -0
  874. /package/dist/{google-7STODZQR.js.map → google-5ESVO76E.js.map} +0 -0
  875. /package/dist/{google-MHB5TOFN.js.map → google-6JZBJ2ZQ.js.map} +0 -0
  876. /package/dist/{google-ads-XGEGKEL6.js.map → google-ads-G7REKD4A.js.map} +0 -0
  877. /package/dist/{gsc-UU3T2C6B.js.map → gsc-FIZTQX3N.js.map} +0 -0
  878. /package/dist/{history-OQAOTEO3.js.map → history-QKDYBSYM.js.map} +0 -0
  879. /package/dist/{history-NYWAMWAY.js.map → history-YMK2JNZU.js.map} +0 -0
  880. /package/dist/{hubspot-LMIVY7FR.js.map → hubspot-BUFS7S33.js.map} +0 -0
  881. /package/dist/{icon-GB7UH5RF.js.map → icon-CSVAZ7NE.js.map} +0 -0
  882. /package/dist/{ingest-FRDTTPYD.js.map → ideas-JQT422P7.js.map} +0 -0
  883. /package/dist/{images-PPMIMPTS.js.map → images-WBNWK2ZH.js.map} +0 -0
  884. /package/dist/{ingest-2YGWBWAB.js.map → ingest-RQUJGS7K.js.map} +0 -0
  885. /package/dist/{logo-YSNUUT33.js.map → ingest-XLTRLCDV.js.map} +0 -0
  886. /package/dist/{insights-PZXFCMX2.js.map → insights-SQLE5NOJ.js.map} +0 -0
  887. /package/dist/{inspect-QF2S3U2E.js.map → inspect-KFVAMD4N.js.map} +0 -0
  888. /package/dist/{inspiration-XQYHBJY2.js.map → inspiration-IX5N724J.js.map} +0 -0
  889. /package/dist/{intent-JJTDJ732.js.map → intent-4KJGYYHL.js.map} +0 -0
  890. /package/dist/{keyword-gap-4NQN56JP.js.map → keyword-gap-U64KXDR4.js.map} +0 -0
  891. /package/dist/{keyword-metrics-QCIOBMTW.js.map → keyword-metrics-WYF3QMCW.js.map} +0 -0
  892. /package/dist/{keywords-for-site-FS635JXM.js.map → keywords-for-site-G5L5EP3T.js.map} +0 -0
  893. /package/dist/{landing-6H5QEHOW.js.map → landing-Y6QCTXCZ.js.map} +0 -0
  894. /package/dist/{languages-FNE45NXJ.js.map → languages-7IPVGGW5.js.map} +0 -0
  895. /package/dist/{leads-MKLSWZO6.js.map → leads-4SJ4NJOI.js.map} +0 -0
  896. /package/dist/{learn-C564OA7W.js.map → learn-3BDZUWDT.js.map} +0 -0
  897. /package/dist/{line-item-writes-K7QNWRQ3.js.map → line-item-writes-YXKYR25W.js.map} +0 -0
  898. /package/dist/{line-items-TBTHVKCZ.js.map → line-items-CKUD2UU4.js.map} +0 -0
  899. /package/dist/{link-CPJJ6T4M.js.map → link-VBYFI7AM.js.map} +0 -0
  900. /package/dist/{linkedin-HGUK624E.js.map → linkedin-UGMAFSGO.js.map} +0 -0
  901. /package/dist/{list-OKDU5W4D.js.map → list-6ZNZGRRK.js.map} +0 -0
  902. /package/dist/{list-N5SJXLYF.js.map → list-ENYDGT3F.js.map} +0 -0
  903. /package/dist/{list-AAT5CWDA.js.map → list-VSUF2IWT.js.map} +0 -0
  904. /package/dist/{locations-FTDI4FBI.js.map → locations-QJBYWRCN.js.map} +0 -0
  905. /package/dist/{log-KVRWIJS5.js.map → log-AACKGBDW.js.map} +0 -0
  906. /package/dist/{performance-YJVMM6DL.js.map → logo-VHXH4J6A.js.map} +0 -0
  907. /package/dist/{make-4NTHJ4TG.js.map → make-W2PYZXYF.js.map} +0 -0
  908. /package/dist/{map-HQ43MKEC.js.map → map-63CQHWPI.js.map} +0 -0
  909. /package/dist/{mcp-MFLUHPL5.js.map → mcp-RKAXC6IP.js.map} +0 -0
  910. /package/dist/{media-sources-A4ICRSKB.js.map → media-sources-EZKAJNVD.js.map} +0 -0
  911. /package/dist/{members-NRKQSSVS.js.map → members-SELIA674.js.map} +0 -0
  912. /package/dist/{metrics-3BRTJNGW.js.map → metrics-V6SKOVNH.js.map} +0 -0
  913. /package/dist/{models-IH6KE6OH.js.map → models-2XRYXSRA.js.map} +0 -0
  914. /package/dist/{normalize-EH6BTBOB.js.map → normalize-VAZPTBDX.js.map} +0 -0
  915. /package/dist/{options-YEPQXXRY.js.map → options-NSCZSQ5P.js.map} +0 -0
  916. /package/dist/{pages-FTI44OSH.js.map → pages-PTWRXAZT.js.map} +0 -0
  917. /package/dist/{query-3OMCFGLU.js.map → performance-K7E5KAZW.js.map} +0 -0
  918. /package/dist/{pixels-DWW2TDY2.js.map → pixels-MYT3TCHZ.js.map} +0 -0
  919. /package/dist/{pixels-MBKR4XPX.js.map → pixels-ZZCQUS3J.js.map} +0 -0
  920. /package/dist/{promoted-tweet-writes-M5OVEBC5.js.map → promoted-tweet-writes-PKEO6WUK.js.map} +0 -0
  921. /package/dist/{promoted-tweets-2MOIERNB.js.map → promoted-tweets-7MXVZRBI.js.map} +0 -0
  922. /package/dist/{publish-NPENZIHV.js.map → publish-MPMGRV72.js.map} +0 -0
  923. /package/dist/{reddit-LI37G5LS.js.map → query-UD4OIZ3A.js.map} +0 -0
  924. /package/dist/{run-AFMTXJTU.js.map → reddit-XIHRI3CN.js.map} +0 -0
  925. /package/dist/{refresh-4BBV5SPL.js.map → refresh-A27N75NH.js.map} +0 -0
  926. /package/dist/{release-4X3TLMQT.js.map → release-UKRB5IUN.js.map} +0 -0
  927. /package/dist/{relevant-pages-DIYZM6FJ.js.map → relevant-pages-VXSHEOU2.js.map} +0 -0
  928. /package/dist/{remove-Q4AES5UH.js.map → remove-AFNFVPZY.js.map} +0 -0
  929. /package/dist/{reopen-SDTPL3BN.js.map → reopen-M5HE6J3G.js.map} +0 -0
  930. /package/dist/{rerun-NA3MH4HG.js.map → rerun-5THJLQQJ.js.map} +0 -0
  931. /package/dist/{research-LXQRNAQ2.js.map → research-JHDWWFL7.js.map} +0 -0
  932. /package/dist/{research-5H265UV7.js.map → research-U7RQXMYH.js.map} +0 -0
  933. /package/dist/{reset-52PU3CVD.js.map → reset-4CCWB2RT.js.map} +0 -0
  934. /package/dist/{reset-42M5IKDI.js.map → reset-J3KCWFMZ.js.map} +0 -0
  935. /package/dist/{resolve-R4IACKIZ.js.map → resolve-HEK27ANI.js.map} +0 -0
  936. /package/dist/{retry-FPF42ZNG.js.map → retry-HPZIUG2S.js.map} +0 -0
  937. /package/dist/{retry-RTQGAH6G.js.map → retry-VVI6N6UR.js.map} +0 -0
  938. /package/dist/{rules-CGNYJYVC.js.map → rules-YLLFDZEM.js.map} +0 -0
  939. /package/dist/{rules-add-EO5476BF.js.map → rules-add-U2GU4AGP.js.map} +0 -0
  940. /package/dist/{run-3AZJ3UQU.js.map → run-M7ZDE6IA.js.map} +0 -0
  941. /package/dist/{shared-NDRFKAH7.js.map → run-V5YQB6TH.js.map} +0 -0
  942. /package/dist/{scaffold-ad-OGU2IINY.js.map → scaffold-ad-H4GJOKAW.js.map} +0 -0
  943. /package/dist/{scaffold-static-ad-HO4BJW4H.js.map → scaffold-static-ad-2YIFHCTL.js.map} +0 -0
  944. /package/dist/{scaffold-video-TLQ4WSDK.js.map → scaffold-video-3EJLKR2O.js.map} +0 -0
  945. /package/dist/{schedule-AWWMI5FO.js.map → schedule-QMOKWTJ3.js.map} +0 -0
  946. /package/dist/{scheduled-agents-ELLU7BSE.js.map → scheduled-agents-FCQHQ6KR.js.map} +0 -0
  947. /package/dist/{schema-QNVLKMKG.js.map → schema-THFLCMBN.js.map} +0 -0
  948. /package/dist/{schema-BOOZEJPA.js.map → schema-XKEEAUXP.js.map} +0 -0
  949. /package/dist/{search-BZNIB2XF.js.map → search-XIUYSWO6.js.map} +0 -0
  950. /package/dist/{select-NLWZIQ7L.js.map → select-I22NPSIW.js.map} +0 -0
  951. /package/dist/{set-prompt-QKW2L553.js.map → set-prompt-S75OMQ7L.js.map} +0 -0
  952. /package/dist/{setup-links-NMSQ4BG7.js.map → setup-links-QVI6NAOK.js.map} +0 -0
  953. /package/dist/{sync-definition-LSGDHMHV.js.map → shared-3IBNDEFL.js.map} +0 -0
  954. /package/dist/{site-GGYFBZT5.js.map → site-PZPJY33N.js.map} +0 -0
  955. /package/dist/{sources-LPQZDTIU.js.map → sources-ER7ANNG3.js.map} +0 -0
  956. /package/dist/{sources-KTGDMUV4.js.map → sources-VA23PDND.js.map} +0 -0
  957. /package/dist/{stale-C5JLQ4D2.js.map → stale-MHTU2NQJ.js.map} +0 -0
  958. /package/dist/{stats-RCLQE4HJ.js.map → stats-ZAGJH4AD.js.map} +0 -0
  959. /package/dist/{status-6PS3HDS5.js.map → status-ABMJBCPJ.js.map} +0 -0
  960. /package/dist/{stock-ECRBD7RP.js.map → stock-6SHHLSKG.js.map} +0 -0
  961. /package/dist/{studio-LMDDQWRY.js.map → studio-ZLCGXFAN.js.map} +0 -0
  962. /package/dist/{sync-XSATDLE6.js.map → sync-QDD3MRJ6.js.map} +0 -0
  963. /package/dist/{viewer-check-I45HHWSW.js.map → sync-definition-2EBSQA6A.js.map} +0 -0
  964. /package/dist/{tag-manager-G3LBQZUL.js.map → tag-manager-3CJ66GKJ.js.map} +0 -0
  965. /package/dist/{tags-OK34UGSM.js.map → tags-5JYOEYIT.js.map} +0 -0
  966. /package/dist/{tags-EXWKO6Q6.js.map → tags-B473RWAA.js.map} +0 -0
  967. /package/dist/{tags-5Y7TPJNZ.js.map → tags-EWHPUM2V.js.map} +0 -0
  968. /package/dist/{tags-6TT5ZJVX.js.map → tags-KBCX6BDU.js.map} +0 -0
  969. /package/dist/{tags-BQLIOWS4.js.map → tags-PEWN6GNZ.js.map} +0 -0
  970. /package/dist/{targeting-criteria-AWPMOX4V.js.map → targeting-criteria-EU65WUUF.js.map} +0 -0
  971. /package/dist/{targets-EXYCOHEX.js.map → targets-KVXS5QKM.js.map} +0 -0
  972. /package/dist/{testimonials-BTYMR3U4.js.map → testimonials-GR6TIS5S.js.map} +0 -0
  973. /package/dist/{themes-AOU4ZZXL.js.map → themes-JWWTOR3I.js.map} +0 -0
  974. /package/dist/{top-companies-FRPAURAH.js.map → top-companies-OOX3DITI.js.map} +0 -0
  975. /package/dist/{translate-SF234KLG.js.map → translate-GEFUP6KQ.js.map} +0 -0
  976. /package/dist/{triggers-SJUXDU3X.js.map → triggers-OX2GKG4Y.js.map} +0 -0
  977. /package/dist/{unlink-RIZD3XTI.js.map → unlink-3USEPJSA.js.map} +0 -0
  978. /package/dist/{unstage-MKTIVI3I.js.map → unstage-VSCNPTAC.js.map} +0 -0
  979. /package/dist/{update-COHXM25C.js.map → update-6JKTH65B.js.map} +0 -0
  980. /package/dist/{update-OXVZXDYH.js.map → update-FG4ELXYJ.js.map} +0 -0
  981. /package/dist/{update-SZLYEEU4.js.map → update-GZFKHA3A.js.map} +0 -0
  982. /package/dist/{update-NKX2GXAR.js.map → update-HZHG67N6.js.map} +0 -0
  983. /package/dist/{upload-LEDO3IRC.js.map → upload-BKCQ6FRW.js.map} +0 -0
  984. /package/dist/{url-options-Q5SL42CV.js.map → url-options-HCVRPZYU.js.map} +0 -0
  985. /package/dist/{url-params-KP6D7BF3.js.map → url-params-UN4DRN2H.js.map} +0 -0
  986. /package/dist/{validate-7QWQZ2OL.js.map → validate-NOWIOAHE.js.map} +0 -0
  987. /package/dist/{videos-VABK4KHJ.js.map → videos-XMTDEHEJ.js.map} +0 -0
  988. /package/dist/{web-DZGUPZYQ.js.map → web-UGU7YMII.js.map} +0 -0
  989. /package/dist/{winning-ads-6MDLRSKM.js.map → winning-ads-QOAYIR5U.js.map} +0 -0
  990. /package/dist/{write-commands-3VIK3VC4.js.map → write-commands-6VR2UD3T.js.map} +0 -0
  991. /package/dist/{x-GRDU7QC2.js.map → x-VCSMV7T5.js.map} +0 -0
@@ -1,1605 +0,0 @@
1
- // ../api/src/ads-meta/customConversions.ts
2
- var RULE_OPERATORS = {
3
- eq: "is",
4
- neq: "is not",
5
- contains: "contains",
6
- i_contains: "contains",
7
- not_contains: "does not contain",
8
- i_not_contains: "does not contain",
9
- starts_with: "starts with",
10
- i_starts_with: "starts with",
11
- ends_with: "ends with",
12
- i_ends_with: "ends with",
13
- gt: "is more than",
14
- gte: "is at least",
15
- lt: "is less than",
16
- lte: "is at most",
17
- regex_match: "matches",
18
- exists: "exists"
19
- };
20
- function isRecord(value) {
21
- return typeof value === "object" && value !== null && !Array.isArray(value);
22
- }
23
- var DEFAULT_CUSTOM_CONVERSION_EVENT = "PageView";
24
- function buildCustomConversionRule(input) {
25
- return {
26
- and: [
27
- { event: { eq: input.event ?? DEFAULT_CUSTOM_CONVERSION_EVENT } },
28
- { URL: { i_contains: input.urlContains } }
29
- ]
30
- };
31
- }
32
- function customConversionRuleRefusal(rule) {
33
- const refusal = ruleNodeRefusal(rule, "rule");
34
- if (refusal) {
35
- return refusal;
36
- }
37
- if (!ruleFields(rule).some((field) => field !== "event")) {
38
- return 'rule only names the event, and Meta refuses a custom conversion with no condition beyond it \u2014 narrow it with a URL, referrer or event parameter the event carries, e.g. {"and":[{"event":{"eq":"Lead"}},{"URL":{"i_contains":"/gracias"}}]}';
39
- }
40
- return void 0;
41
- }
42
- function ruleFields(node) {
43
- if (!isRecord(node)) {
44
- return [];
45
- }
46
- return Object.entries(node).flatMap(
47
- ([key, value]) => (key === "and" || key === "or") && Array.isArray(value) ? value.flatMap(ruleFields) : [key]
48
- );
49
- }
50
- function branchRefusal(key, value, path) {
51
- if (!Array.isArray(value) || value.length === 0) {
52
- return `${path}.${key} must be a non-empty array of conditions \u2014 an empty one counts every event the pixel sends`;
53
- }
54
- for (const [index, child] of value.entries()) {
55
- const refusal = ruleNodeRefusal(child, `${path}.${key}[${index}]`);
56
- if (refusal) {
57
- return refusal;
58
- }
59
- }
60
- return void 0;
61
- }
62
- function conditionRefusal(key, value, path) {
63
- return key === "and" || key === "or" ? branchRefusal(key, value, path) : leafRefusal(key, value, path);
64
- }
65
- function ruleNodeRefusal(node, path) {
66
- if (!isRecord(node)) {
67
- return `${path} must be an object like {"URL":{"i_contains":"/thank-you"}}`;
68
- }
69
- const entries = Object.entries(node);
70
- if (entries.length === 0) {
71
- return `${path} is empty \u2014 a rule with no condition counts every event the pixel sends`;
72
- }
73
- if (entries.length > 1) {
74
- return `${path} names ${entries.length} conditions side by side (${entries.map(([key]) => key).join(", ")}) \u2014 Meta reads one branch or one field test per object, so combine them with {"and":[\u2026]}`;
75
- }
76
- for (const [key, value] of entries) {
77
- const refusal = conditionRefusal(key, value, path);
78
- if (refusal) {
79
- return refusal;
80
- }
81
- }
82
- return void 0;
83
- }
84
- function leafRefusal(field, condition, path) {
85
- if (!isRecord(condition)) {
86
- return `${path}.${field} must be a test like {"i_contains":"/thank-you"}, not a bare value`;
87
- }
88
- const tests = Object.entries(condition);
89
- if (tests.length === 0) {
90
- return `${path}.${field} names no test \u2014 use one of ${Object.keys(RULE_OPERATORS).join(", ")}`;
91
- }
92
- if (tests.length > 1) {
93
- return `${path}.${field} names ${tests.length} operators at once (${tests.map(([operator]) => operator).join(", ")}) \u2014 test a field once per condition and combine them with {"and":[\u2026]}`;
94
- }
95
- for (const [operator] of tests) {
96
- if (!RULE_OPERATORS[operator]) {
97
- return `${path}.${field} uses "${operator}", which is not a Meta rule operator \u2014 use one of ${Object.keys(RULE_OPERATORS).join(", ")} (URL matching is i_contains, not contains or includes)`;
98
- }
99
- }
100
- return void 0;
101
- }
102
-
103
- // ../api/src/ads-meta/leadAds.ts
104
- var META_LEAD_ADS_NOT_ENABLED_MESSAGE = "Using Meta instant forms and their leads is not switched on for this company. Everything else on Meta keeps working. Tell the user this needs switching on by the Baker team, and carry on with the rest of the job.";
105
- var META_LEAD_ADS_RECONNECT_MESSAGE = "This Meta connection was made before lead ads were switched on for this company, so it cannot work with instant forms or read their leads. Ask the user to reconnect Meta in the dashboard \u2014 that grants the extra permissions \u2014 then ask for this again. Everything else on Meta keeps working meanwhile.";
106
- function isMetaLeadAdsRefusal(message) {
107
- return message === META_LEAD_ADS_NOT_ENABLED_MESSAGE || message === META_LEAD_ADS_RECONNECT_MESSAGE;
108
- }
109
-
110
- // ../api/src/ads-meta/placements.ts
111
- var FACEBOOK_POSITIONS_REQUIRING_FEED = ["marketplace", "search", "profile_feed", "notification"];
112
- var PLACEMENT_TARGETING_DOC = "https://developers.facebook.com/docs/marketing-api/audiences/reference/placement-targeting/";
113
- var PUBLISHER_PLATFORMS = ["facebook", "instagram", "threads", "messenger", "audience_network"];
114
- var FACEBOOK_POSITIONS = [
115
- "feed",
116
- "right_hand_column",
117
- "marketplace",
118
- "story",
119
- "search",
120
- "instream_video",
121
- "facebook_reels",
122
- "facebook_reels_overlay",
123
- "profile_feed",
124
- "notification"
125
- ];
126
- var INSTAGRAM_POSITIONS = [
127
- "stream",
128
- "story",
129
- "explore",
130
- "explore_home",
131
- "reels",
132
- "profile_feed",
133
- "ig_search",
134
- "profile_reels"
135
- ];
136
- var AUDIENCE_NETWORK_POSITIONS = ["classic", "rewarded_video"];
137
- var MESSENGER_POSITIONS = ["sponsored_messages", "story"];
138
- var THREADS_POSITIONS = ["threads_stream"];
139
- var DEVICE_PLATFORMS = ["mobile", "desktop", "connected_tv"];
140
- var PLACEMENT_VOCABULARIES = {
141
- publisher_platforms: PUBLISHER_PLATFORMS,
142
- facebook_positions: FACEBOOK_POSITIONS,
143
- instagram_positions: INSTAGRAM_POSITIONS,
144
- audience_network_positions: AUDIENCE_NETWORK_POSITIONS,
145
- messenger_positions: MESSENGER_POSITIONS,
146
- threads_positions: THREADS_POSITIONS,
147
- device_platforms: DEVICE_PLATFORMS
148
- };
149
- var SAME_SURFACE_ON_THIS_PLATFORM = {
150
- facebook_positions: { reels: "facebook_reels", stream: "feed", stories: "story", ig_search: "search" },
151
- instagram_positions: {
152
- feed: "stream",
153
- facebook_reels: "reels",
154
- stories: "story",
155
- search: "ig_search"
156
- }
157
- };
158
- var RETIRED_PLACEMENTS = {
159
- facebook_positions: {
160
- video_feeds: 'Meta retired Facebook video feeds \u2014 use "instream_video" for in-stream video, or "facebook_reels", and drop "video_feeds"'
161
- }
162
- };
163
- function placementFieldsAccepting(value, except) {
164
- return Object.keys(PLACEMENT_VOCABULARIES).filter(
165
- (field) => field !== except && PLACEMENT_VOCABULARIES[field].includes(value)
166
- );
167
- }
168
- function placementValueIssue(field, value) {
169
- const retired = RETIRED_PLACEMENTS[field]?.[value];
170
- if (retired) {
171
- return { field, value, kind: "retired", fix: retired };
172
- }
173
- const renamed = SAME_SURFACE_ON_THIS_PLATFORM[field]?.[value];
174
- if (renamed) {
175
- return {
176
- field,
177
- value,
178
- kind: "wrong-field",
179
- fix: `Meta calls that surface "${renamed}" in ${field} \u2014 use "${renamed}"`
180
- };
181
- }
182
- const elsewhere = placementFieldsAccepting(value, field);
183
- if (elsewhere.length > 0) {
184
- return {
185
- field,
186
- value,
187
- kind: "wrong-field",
188
- fix: `"${value}" belongs to ${elsewhere.join(" / ")}, not ${field} \u2014 move it there or drop it`
189
- };
190
- }
191
- return {
192
- field,
193
- value,
194
- kind: "unknown",
195
- fix: `"${value}" is not a placement Baker knows; ${field} accepts ${PLACEMENT_VOCABULARIES[field].join(", ")}`
196
- };
197
- }
198
- function invalidPlacementValues(targeting) {
199
- const issues = [];
200
- for (const field of Object.keys(PLACEMENT_VOCABULARIES)) {
201
- const allowed = PLACEMENT_VOCABULARIES[field];
202
- const selected = targeting?.[field] ?? [];
203
- for (const value of selected) {
204
- if (!allowed.includes(value)) {
205
- issues.push(placementValueIssue(field, value));
206
- }
207
- }
208
- }
209
- return issues;
210
- }
211
- function placementCoRequirementIssues(targeting) {
212
- const facebook = targeting?.facebook_positions ?? [];
213
- const instagram = targeting?.instagram_positions ?? [];
214
- const threads = targeting?.threads_positions ?? [];
215
- const devices = targeting?.device_platforms;
216
- const issues = [];
217
- if (facebook.includes("story")) {
218
- if (!facebook.includes("feed") && !instagram.includes("story")) {
219
- issues.push(
220
- 'Meta refuses Facebook "story" on its own \u2014 select "feed" in facebook_positions or "story" in instagram_positions alongside it'
221
- );
222
- }
223
- if (devices && !devices.includes("mobile")) {
224
- issues.push(
225
- 'Facebook "story" only runs on mobile \u2014 add "mobile" to device_platforms or drop the story placement'
226
- );
227
- }
228
- }
229
- if (instagram.includes("explore_home") && !instagram.includes("explore")) {
230
- issues.push(
231
- 'Meta refuses Instagram "explore_home" without "explore" \u2014 add "explore" to instagram_positions or drop explore_home'
232
- );
233
- }
234
- if (threads.includes("threads_stream") && !instagram.includes("stream")) {
235
- issues.push('Threads "threads_stream" cannot be selected alone \u2014 add "stream" to instagram_positions');
236
- }
237
- return issues;
238
- }
239
- var CONSTRAINED_PLACEMENTS = [
240
- {
241
- position: "facebook_reels_overlay",
242
- reportedAs: "facebook_reels_overlay",
243
- platform: "facebook",
244
- kind: "constraint",
245
- note: "Ads on Facebook Reels take two shapes and a stock 9:16 video fits neither: overlay ads are 'a single, static image ad' (JPG/PNG, 1:1, 0% ratio tolerance, headline capped at 10 characters), and post-loop ads are 1:1 video of 4-15 seconds. Expect a long-headline 9:16 creative to look wrong here.",
246
- contested: false,
247
- source: "https://www.facebook.com/business/ads-guide/update/image/facebook-facebook-reels-overlay"
248
- },
249
- {
250
- position: "explore_home",
251
- reportedAs: "instagram_explore_grid_home",
252
- platform: "instagram",
253
- kind: "constraint",
254
- note: "Marketing API placement asset customization states 'The explore_home placement only supports the SINGLE_IMAGE format', but Meta's own Ads Guide lists Instagram Explore home under video specs. Check the account's play rate for this position before treating it as image-only.",
255
- contested: true,
256
- source: "https://developers.facebook.com/docs/marketing-api/dynamic-creative/placement-asset-customization/"
257
- },
258
- {
259
- position: "right_hand_column",
260
- reportedAs: "right_hand_column",
261
- platform: "facebook",
262
- kind: "correction",
263
- note: "Facebook right column publishes full video specs (MP4/MOV/GIF, 1:1 at 1440x1440 or mobile-only 4:5 at 1440x1800, 1 second to 241 minutes) \u2014 it is NOT image-only. Its real constraint is that it cannot be the only placement for a video, collection, or canvas ad.",
264
- contested: false,
265
- source: "https://www.facebook.com/business/ads-guide/update/video/facebook-right-hand-column"
266
- }
267
- ];
268
- var FACEBOOK_PREVIEW_FORMATS = {
269
- feed: "MOBILE_FEED_STANDARD",
270
- right_hand_column: "RIGHT_COLUMN_STANDARD",
271
- marketplace: "MARKETPLACE_MOBILE",
272
- facebook_stories: "FACEBOOK_STORY_MOBILE",
273
- facebook_reels: "FACEBOOK_REELS_MOBILE",
274
- facebook_reels_overlay: "FACEBOOK_REELS_BANNER",
275
- instream_video: "INSTREAM_VIDEO_MOBILE",
276
- // Retired for targeting (RETIRED_PLACEMENTS) and still reported by a breakdown
277
- // over any window that predates the retirement — an ad set created before it
278
- // keeps delivering there. Previewing what a historic row measured has to keep
279
- // working, so this stays.
280
- video_feeds: "INSTREAM_VIDEO_MOBILE"
281
- };
282
- var INSTAGRAM_PREVIEW_FORMATS = {
283
- feed: "INSTAGRAM_STANDARD",
284
- instagram_stories: "INSTAGRAM_STORY",
285
- instagram_reels: "INSTAGRAM_REELS",
286
- instagram_explore: "INSTAGRAM_EXPLORE_CONTEXTUAL",
287
- instagram_explore_grid_home: "INSTAGRAM_EXPLORE_GRID_HOME",
288
- instagram_search: "INSTAGRAM_SEARCH_CHAIN",
289
- instagram_profile_feed: "INSTAGRAM_PROFILE_FEED"
290
- };
291
- var PLATFORM_SCOPED_POSITIONS = /* @__PURE__ */ new Set(["feed"]);
292
- function previewFormatForPosition(position, platform) {
293
- if (platform === "facebook") return FACEBOOK_PREVIEW_FORMATS[position];
294
- if (platform === "instagram") return INSTAGRAM_PREVIEW_FORMATS[position];
295
- if (PLATFORM_SCOPED_POSITIONS.has(position)) return void 0;
296
- return FACEBOOK_PREVIEW_FORMATS[position] ?? INSTAGRAM_PREVIEW_FORMATS[position];
297
- }
298
- function placementFormatNote(reportedPosition) {
299
- return CONSTRAINED_PLACEMENTS.find((p) => p.reportedAs === reportedPosition);
300
- }
301
- function positionsMissingRequiredFeed(targeting) {
302
- const positions = targeting?.facebook_positions;
303
- if (!positions?.length || positions.includes("feed")) {
304
- return [];
305
- }
306
- return FACEBOOK_POSITIONS_REQUIRING_FEED.filter((required) => positions.includes(required));
307
- }
308
-
309
- // ../api/src/ads-meta/limits.ts
310
- var META_LIMITS = {
311
- campaign: {
312
- nameMax: 400
313
- },
314
- adSet: {
315
- nameMax: 400
316
- },
317
- ad: {
318
- nameMax: 400
319
- },
320
- creative: {
321
- nameMax: 400,
322
- /** Feed truncates the primary text past this with "… See more". */
323
- messageSoftMax: 125,
324
- messageHardMax: 5e3,
325
- /** Below this, primary text reads as too thin to carry a hook + value + reason to act. */
326
- messageGoodMin: 40,
327
- headlineMax: 255,
328
- descriptionMax: 300,
329
- carouselCardsMin: 2,
330
- carouselCardsMax: 10,
331
- /** Carousels tell a fuller story and give Meta more to optimize at this many cards. */
332
- carouselCardsGoodMin: 3,
333
- dynamicTextsMin: 1,
334
- dynamicTextsMax: 5,
335
- /** Dynamic ads mix and match best with at least this many media assets. */
336
- dynamicAssetsGoodMin: 3
337
- },
338
- audience: {
339
- nameMax: 100,
340
- /** Website/engagement audiences below this rarely serve. */
341
- minLookalikeSourceRows: 100,
342
- retentionDaysMax: 180
343
- },
344
- customConversion: {
345
- nameMax: 100,
346
- descriptionMax: 500,
347
- /**
348
- * Meta's hard cap per ad account. It matters because deleting a custom
349
- * conversion archives it rather than removing it, so a chat that creates
350
- * one per campaign spends slots that only a person, in Events Manager, can
351
- * think about reclaiming.
352
- */
353
- perAccountMax: 100
354
- }
355
- };
356
- var OBJECTIVES = [
357
- "OUTCOME_TRAFFIC",
358
- "OUTCOME_ENGAGEMENT",
359
- "OUTCOME_LEADS",
360
- "OUTCOME_SALES",
361
- "OUTCOME_AWARENESS",
362
- "OUTCOME_APP_PROMOTION"
363
- ];
364
- var SPECIAL_AD_CATEGORIES = [
365
- "NONE",
366
- "HOUSING",
367
- "EMPLOYMENT",
368
- /** Deprecated by Meta on 2025-01-14 — replaced by FINANCIAL_PRODUCTS_SERVICES. Still accepted as input and mapped on the wire. */
369
- "CREDIT",
370
- "ISSUES_ELECTIONS_POLITICS",
371
- "FINANCIAL_PRODUCTS_SERVICES",
372
- "ONLINE_GAMBLING_AND_GAMING"
373
- ];
374
- var SPECIAL_CATEGORIES_REQUIRING_COUNTRY = ["ISSUES_ELECTIONS_POLITICS"];
375
- var BUYING_TYPES = ["AUCTION", "RESERVED"];
376
- var BID_STRATEGIES = [
377
- "LOWEST_COST_WITHOUT_CAP",
378
- "LOWEST_COST_WITH_BID_CAP",
379
- "COST_CAP",
380
- "LOWEST_COST_WITH_MIN_ROAS"
381
- ];
382
- var BID_STRATEGIES_REQUIRING_AMOUNT = ["LOWEST_COST_WITH_BID_CAP", "COST_CAP"];
383
- var BID_STRATEGIES_FORBIDDING_AMOUNT = [
384
- "LOWEST_COST_WITHOUT_CAP",
385
- "LOWEST_COST_WITH_MIN_ROAS"
386
- ];
387
- var BILLING_EVENTS = [
388
- "APP_INSTALLS",
389
- "CLICKS",
390
- "IMPRESSIONS",
391
- "LINK_CLICKS",
392
- "NONE",
393
- "OFFER_CLAIMS",
394
- "PAGE_LIKES",
395
- "POST_ENGAGEMENT",
396
- "THRUPLAY",
397
- "PURCHASE",
398
- "LISTING_INTERACTION"
399
- ];
400
- var OPTIMIZATION_GOALS = [
401
- "NONE",
402
- "APP_INSTALLS",
403
- "AD_RECALL_LIFT",
404
- "ENGAGED_USERS",
405
- "EVENT_RESPONSES",
406
- "IMPRESSIONS",
407
- "LEAD_GENERATION",
408
- "QUALITY_LEAD",
409
- "QUALITY_CALL",
410
- "LINK_CLICKS",
411
- "OFFSITE_CONVERSIONS",
412
- "LANDING_PAGE_VIEWS",
413
- "PAGE_LIKES",
414
- "POST_ENGAGEMENT",
415
- "REACH",
416
- "THRUPLAY",
417
- "VALUE",
418
- "CONVERSATIONS",
419
- "DERIVED_EVENTS",
420
- // Added 2026-09-18 from Meta's own generated enum spec
421
- // (facebook-business-sdk-codegen › AdSet_optimization_goal). Every one of these
422
- // is a goal Meta accepts and Baker used to refuse at stage time — the messaging
423
- // and Instagram-profile goals are the ones that cost real campaigns, because a
424
- // click-to-WhatsApp ad set cannot be expressed without them.
425
- "ADVERTISER_SILOED_VALUE",
426
- "APP_INSTALLS_AND_OFFSITE_CONVERSIONS",
427
- "AUTOMATIC_OBJECTIVE",
428
- "ENGAGED_PAGE_VIEWS",
429
- "IN_APP_VALUE",
430
- "MEANINGFUL_CALL_ATTEMPT",
431
- "MESSAGING_APPOINTMENT_CONVERSION",
432
- "MESSAGING_DEEP_CONVERSATION_AND_FOLLOW",
433
- "MESSAGING_PURCHASE_CONVERSION",
434
- "PROFILE_AND_PAGE_ENGAGEMENT",
435
- "PROFILE_VISIT",
436
- "REMINDERS_SET",
437
- "SUBSCRIBERS",
438
- "VISIT_INSTAGRAM_PROFILE"
439
- ];
440
- var OPTIMIZATION_GOALS_REQUIRING_PAGE = [
441
- "LEAD_GENERATION",
442
- "QUALITY_LEAD",
443
- "PAGE_LIKES"
444
- ];
445
- var OPTIMIZATION_GOALS_REQUIRING_PIXEL = ["OFFSITE_CONVERSIONS"];
446
- var OPTIMIZATION_GOALS_REQUIRING_CONVERSION_SOURCE = ["VALUE"];
447
- var OPTIMIZATION_GOALS_REQUIRING_APP = ["APP_INSTALLS"];
448
- var DESTINATION_TYPES = [
449
- "WEBSITE",
450
- "APP",
451
- "MESSENGER",
452
- "INSTAGRAM_DIRECT",
453
- "ON_AD",
454
- "ON_PAGE",
455
- "ON_POST",
456
- "ON_VIDEO",
457
- "WHATSAPP",
458
- "PHONE_CALL",
459
- "INSTAGRAM_PROFILE",
460
- "SHOP_AUTOMATIC",
461
- // Added 2026-09-18 from adcampaign_destination_type. The four MESSAGING_* values
462
- // are the click-to-message destinations (Messenger / Instagram Direct / WhatsApp
463
- // in every combination Meta ships); without them Baker could not stage a
464
- // click-to-WhatsApp ad set at all.
465
- "APPLINKS_AUTOMATIC",
466
- "FACEBOOK",
467
- "FACEBOOK_LIVE",
468
- "FACEBOOK_PAGE",
469
- "IMAGINE",
470
- "INSTAGRAM_LIVE",
471
- "INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE",
472
- "MESSAGING_INSTAGRAM_DIRECT_MESSENGER",
473
- "MESSAGING_INSTAGRAM_DIRECT_MESSENGER_WHATSAPP",
474
- "MESSAGING_INSTAGRAM_DIRECT_WHATSAPP",
475
- "MESSAGING_MESSENGER_WHATSAPP",
476
- "ON_EVENT"
477
- ];
478
- var CUSTOM_EVENT_TYPES = [
479
- "PURCHASE",
480
- "LEAD",
481
- "COMPLETE_REGISTRATION",
482
- "ADD_TO_CART",
483
- "ADD_PAYMENT_INFO",
484
- "INITIATED_CHECKOUT",
485
- "CONTENT_VIEW",
486
- "SEARCH",
487
- "SUBSCRIBE",
488
- "START_TRIAL",
489
- "CONTACT",
490
- "OTHER",
491
- // Added 2026-09-18 from AdPromotedObject_custom_event_type. SCHEDULE,
492
- // SUBMIT_APPLICATION, SERVICE_BOOKING_REQUEST and
493
- // MESSAGING_CONVERSATION_STARTED_7D are the conversions service businesses and
494
- // click-to-message campaigns actually optimize toward.
495
- "ACHIEVEMENT_UNLOCKED",
496
- "ADD_TO_WISHLIST",
497
- "AD_IMPRESSION",
498
- "CUSTOMIZE_PRODUCT",
499
- "D2_RETENTION",
500
- "D7_RETENTION",
501
- "DONATE",
502
- "FIND_LOCATION",
503
- "LEVEL_ACHIEVED",
504
- "LISTING_INTERACTION",
505
- "MESSAGING_CONVERSATION_STARTED_7D",
506
- "RATE",
507
- "SCHEDULE",
508
- "SERVICE_BOOKING_REQUEST",
509
- "SPENT_CREDITS",
510
- "SUBMIT_APPLICATION",
511
- "TUTORIAL_COMPLETION"
512
- ];
513
- var ATTRIBUTION_EVENT_TYPES = ["CLICK_THROUGH", "VIEW_THROUGH", "ENGAGED_VIDEO_VIEW"];
514
- var ADVANTAGE_AUDIENCE_OPEN_AGE_MAX = 65;
515
- var ADVANTAGE_AUDIENCE_MAX_HARD_AGE_MIN = 25;
516
- var CTA_TYPES = [
517
- "BOOK_TRAVEL",
518
- "CONTACT_US",
519
- "DONATE",
520
- "DONATE_NOW",
521
- "DOWNLOAD",
522
- "GET_DIRECTIONS",
523
- "GO_LIVE",
524
- "INTERESTED",
525
- "LEARN_MORE",
526
- "SEE_DETAILS",
527
- "LIKE_PAGE",
528
- "MESSAGE_PAGE",
529
- "RAISE_MONEY",
530
- "SAVE",
531
- "SEND_TIP",
532
- "SHOP_NOW",
533
- "SIGN_UP",
534
- "VIEW_INSTAGRAM_PROFILE",
535
- "INSTAGRAM_MESSAGE",
536
- "LOYALTY_LEARN_MORE",
537
- "PURCHASE_GIFT_CARDS",
538
- "PAY_TO_ACCESS",
539
- "SEE_MORE",
540
- "TRY_IN_CAMERA",
541
- "WHATSAPP_LINK",
542
- "GET_IN_TOUCH",
543
- "TRY_NOW",
544
- "ASK_A_QUESTION",
545
- "START_A_CHAT",
546
- "CHAT_NOW",
547
- "ASK_US",
548
- "CHAT_WITH_US",
549
- "BOOK_NOW",
550
- "CHECK_AVAILABILITY",
551
- "ORDER_NOW",
552
- "WHATSAPP_MESSAGE",
553
- "GET_MOBILE_APP",
554
- "INSTALL_MOBILE_APP",
555
- "USE_MOBILE_APP",
556
- "INSTALL_APP",
557
- "USE_APP",
558
- "PLAY_GAME",
559
- "TRY_DEMO",
560
- "WATCH_VIDEO",
561
- "WATCH_MORE",
562
- "OPEN_LINK",
563
- "NO_BUTTON",
564
- "LISTEN_MUSIC",
565
- "MOBILE_DOWNLOAD",
566
- "GET_OFFER",
567
- "GET_OFFER_VIEW",
568
- "BUY_NOW",
569
- "BUY_TICKETS",
570
- "UPDATE_APP",
571
- "BET_NOW",
572
- "ADD_TO_CART",
573
- "SELL_NOW",
574
- "GET_SHOWTIMES",
575
- "LISTEN_NOW",
576
- "GET_EVENT_TICKETS",
577
- "REMIND_ME",
578
- "SEARCH_MORE",
579
- "PRE_REGISTER",
580
- "SWIPE_UP_PRODUCT",
581
- "SWIPE_UP_SHOP",
582
- "PLAY_GAME_ON_FACEBOOK",
583
- "VISIT_WORLD",
584
- "OPEN_INSTANT_APP",
585
- "JOIN_GROUP",
586
- "GET_PROMOTIONS",
587
- "SEND_UPDATES",
588
- "INQUIRE_NOW",
589
- "VISIT_PROFILE",
590
- "CHAT_ON_WHATSAPP",
591
- "EXPLORE_MORE",
592
- "CONFIRM",
593
- "JOIN_CHANNEL",
594
- "MAKE_AN_APPOINTMENT",
595
- "ASK_ABOUT_SERVICES",
596
- "BOOK_A_CONSULTATION",
597
- "GET_A_QUOTE",
598
- "BUY_VIA_MESSAGE",
599
- "ASK_FOR_MORE_INFO",
600
- "VIEW_PRODUCT",
601
- "VIEW_CHANNEL",
602
- "WATCH_LIVE_VIDEO",
603
- "JOIN_LIVE_VIDEO",
604
- "IMAGINE",
605
- "CALL",
606
- "MISSED_CALL",
607
- "CALL_NOW",
608
- "CALL_ME",
609
- "APPLY_NOW",
610
- "BUY",
611
- "GET_QUOTE",
612
- "SUBSCRIBE",
613
- "RECORD_NOW",
614
- "VOTE_NOW",
615
- "GIVE_FREE_RIDES",
616
- "REGISTER_NOW",
617
- "OPEN_MESSENGER_EXT",
618
- "EVENT_RSVP",
619
- "CIVIC_ACTION",
620
- "SEND_INVITES",
621
- "REFER_FRIENDS",
622
- "REQUEST_TIME",
623
- "SEE_MENU",
624
- "SEARCH",
625
- "TRY_IT",
626
- "TRY_ON",
627
- "LINK_CARD",
628
- "DIAL_CODE",
629
- "FIND_YOUR_GROUPS",
630
- "START_ORDER",
631
- // Added 2026-09-18 from Meta's generated enum spec
632
- // (AdCreative_call_to_action_type). Additive on purpose: 37 of the values above
633
- // are absent from that spec and present in the live 400, which is the
634
- // disagreement the note above is about — so the spec widens this list and never
635
- // prunes it.
636
- "AUDIO_CALL",
637
- "BROWSE_SHOP",
638
- "CONTACT",
639
- "FIND_A_GROUP",
640
- "FIND_OUT_MORE",
641
- "FOLLOW_NEWS_STORYLINE",
642
- "FOLLOW_PAGE",
643
- "FOLLOW_USER",
644
- "GET_DETAILS",
645
- "GET_STARTED",
646
- "SAY_THANKS",
647
- "SEE_SHOP",
648
- "SEND_A_GIFT",
649
- "SEND_GIFT_MONEY",
650
- "SHARE",
651
- "SHOP_WITH_AI",
652
- "SOTTO_SUBSCRIBE",
653
- "TRY_ON_WITH_AI",
654
- "VIDEO_ANNOTATION",
655
- "VIDEO_CALL",
656
- "VIEW_CART",
657
- "VIEW_IN_CART",
658
- "VISIT_PAGES_FEED",
659
- "VISIT_WEBSITE",
660
- "WOODHENGE_SUPPORT"
661
- ];
662
- var ASSET_FEED_CTA_TYPES = [
663
- "OPEN_LINK",
664
- "LIKE_PAGE",
665
- "SHOP_NOW",
666
- "PLAY_GAME",
667
- "INSTALL_APP",
668
- "USE_APP",
669
- "CALL",
670
- "CALL_ME",
671
- "VIDEO_CALL",
672
- "INSTALL_MOBILE_APP",
673
- "USE_MOBILE_APP",
674
- "MOBILE_DOWNLOAD",
675
- "BOOK_TRAVEL",
676
- "LISTEN_MUSIC",
677
- "WATCH_VIDEO",
678
- "LEARN_MORE",
679
- "SIGN_UP",
680
- "DOWNLOAD",
681
- "WATCH_MORE",
682
- "NO_BUTTON",
683
- "VISIT_PAGES_FEED",
684
- "CALL_NOW",
685
- "APPLY_NOW",
686
- "CONTACT",
687
- "BUY_NOW",
688
- "GET_OFFER",
689
- "GET_OFFER_VIEW",
690
- "BUY_TICKETS",
691
- "UPDATE_APP",
692
- "GET_DIRECTIONS",
693
- "BUY",
694
- "SEND_UPDATES",
695
- "MESSAGE_PAGE",
696
- "DONATE",
697
- "SUBSCRIBE",
698
- "SAY_THANKS",
699
- "SELL_NOW",
700
- "SHARE",
701
- "DONATE_NOW",
702
- "GET_QUOTE",
703
- "CONTACT_US",
704
- "ORDER_NOW",
705
- "START_ORDER",
706
- "ADD_TO_CART",
707
- "VIEW_CART",
708
- "VIEW_IN_CART",
709
- "VIDEO_ANNOTATION",
710
- "RECORD_NOW",
711
- "INQUIRE_NOW",
712
- "CONFIRM",
713
- "REFER_FRIENDS",
714
- "REQUEST_TIME",
715
- "GET_SHOWTIMES",
716
- "LISTEN_NOW",
717
- "TRY_DEMO",
718
- "WOODHENGE_SUPPORT",
719
- "SOTTO_SUBSCRIBE",
720
- "FOLLOW_USER",
721
- "RAISE_MONEY",
722
- "SEE_SHOP",
723
- "GET_DETAILS",
724
- "FIND_OUT_MORE",
725
- "VISIT_WEBSITE",
726
- "BROWSE_SHOP",
727
- "EVENT_RSVP",
728
- "WHATSAPP_MESSAGE",
729
- "FOLLOW_NEWS_STORYLINE",
730
- "SEE_MORE",
731
- "BOOK_NOW",
732
- "FIND_A_GROUP",
733
- "FIND_YOUR_GROUPS",
734
- "PAY_TO_ACCESS",
735
- "PURCHASE_GIFT_CARDS",
736
- "FOLLOW_PAGE",
737
- "SEND_A_GIFT",
738
- "SWIPE_UP_SHOP",
739
- "SWIPE_UP_PRODUCT",
740
- "SEND_GIFT_MONEY",
741
- "PLAY_GAME_ON_FACEBOOK",
742
- "GET_STARTED",
743
- "OPEN_INSTANT_APP",
744
- "AUDIO_CALL",
745
- "GET_PROMOTIONS",
746
- "JOIN_CHANNEL",
747
- "MAKE_AN_APPOINTMENT",
748
- "ASK_ABOUT_SERVICES",
749
- "BOOK_A_CONSULTATION",
750
- "GET_A_QUOTE",
751
- "BUY_VIA_MESSAGE",
752
- "ASK_FOR_MORE_INFO",
753
- "CHAT_WITH_US",
754
- "VIEW_PRODUCT",
755
- "VIEW_CHANNEL",
756
- "GET_IN_TOUCH",
757
- "ASK_A_QUESTION",
758
- "START_A_CHAT",
759
- "CHAT_NOW",
760
- "ASK_US",
761
- "WATCH_LIVE_VIDEO",
762
- "JOIN_LIVE_VIDEO",
763
- "SHOP_WITH_AI",
764
- "TRY_ON_WITH_AI"
765
- ];
766
- var LEAD_FORM_CTA_TYPES = [
767
- "APPLY_NOW",
768
- "DOWNLOAD",
769
- "GET_QUOTE",
770
- "LEARN_MORE",
771
- "SIGN_UP",
772
- "SUBSCRIBE"
773
- ];
774
- var AD_FORMATS = ["SINGLE_IMAGE", "CAROUSEL", "SINGLE_VIDEO"];
775
- var ENROLL_STATUSES = ["OPT_IN", "OPT_OUT"];
776
- var STAGEABLE_CREATE_STATUSES = ["ACTIVE", "PAUSED"];
777
- var UPDATE_STATUSES = ["ACTIVE", "PAUSED", "ARCHIVED", "DELETED"];
778
- var CREATIVE_UPDATE_STATUSES = ["ACTIVE", "PAUSED", "ARCHIVED"];
779
- var CUSTOM_AUDIENCE_SUBTYPES = ["CUSTOM", "WEBSITE", "ENGAGEMENT", "LOOKALIKE"];
780
- var CUSTOMER_FILE_SOURCES = [
781
- "USER_PROVIDED_ONLY",
782
- "PARTNER_PROVIDED_ONLY",
783
- "BOTH_USER_AND_PARTNER_PROVIDED"
784
- ];
785
- var MEDIA_KINDS = ["image", "video"];
786
- var CURRENCY_MINIMUMS = {
787
- USD: { dailyBudgetMin: 1 },
788
- EUR: { dailyBudgetMin: 1 },
789
- GBP: { dailyBudgetMin: 1 }
790
- };
791
- var DEFAULT_CURRENCY_MINIMUM = { dailyBudgetMin: 1 };
792
- var TEMP_REF_REGEX = /^meta_temp_[A-Za-z0-9_-]{4,}$/;
793
- var NUMERIC_ID_REGEX = /^\d+$/;
794
- var IMAGE_HASH_REGEX = /^[A-Fa-f0-9]{16,}$/;
795
-
796
- // ../api/src/ads-meta/ops.ts
797
- import { z } from "zod";
798
- var tempRefSchema = z.string().regex(TEMP_REF_REGEX, "expected a meta_temp_* reference");
799
- var parentRefSchema = z.union([z.string().regex(NUMERIC_ID_REGEX, "expected a numeric id"), tempRefSchema]);
800
- var moneySchema = z.strictObject({
801
- amount: z.string().regex(/^\d+(\.\d{1,3})?$/, "expected a decimal amount like 50 or 50.00").refine((val) => Number(val) > 0, "amount must be greater than zero"),
802
- currencyCode: z.string().length(3).optional()
803
- });
804
- var httpsUrlSchema = z.string().url().refine((u) => u.startsWith("https://"), "destination URLs must be https");
805
- var bakerMediaIdSchema = z.string().min(1);
806
- var stageableStatusSchema = z.enum(STAGEABLE_CREATE_STATUSES);
807
- var updateStatusSchema = z.enum(UPDATE_STATUSES);
808
- function currencyMinimums(currencyCode) {
809
- return CURRENCY_MINIMUMS[currencyCode] ?? DEFAULT_CURRENCY_MINIMUM;
810
- }
811
- function validateDailyBudgetFloor(money, ctx, path) {
812
- if (money?.currencyCode) {
813
- const min = currencyMinimums(money.currencyCode).dailyBudgetMin;
814
- if (Number(money.amount) < min) {
815
- ctx.addIssue({ code: "custom", path, message: `below the ${min} ${money.currencyCode} daily minimum` });
816
- }
817
- }
818
- }
819
- var geoLocationsSchema = z.object({
820
- countries: z.array(z.string().length(2)).optional(),
821
- regions: z.array(z.object({ key: z.string() })).optional(),
822
- cities: z.array(z.object({ key: z.string(), radius: z.number().optional(), distance_unit: z.string().optional() })).optional(),
823
- zips: z.array(z.object({ key: z.string() })).optional(),
824
- location_types: z.array(z.string()).optional()
825
- }).catchall(z.unknown());
826
- var idNameSchema = z.object({ id: z.string(), name: z.string().optional() });
827
- var metaTargetingSchema = z.object({
828
- geo_locations: geoLocationsSchema.optional(),
829
- excluded_geo_locations: geoLocationsSchema.optional(),
830
- age_min: z.number().int().min(13).max(65).optional(),
831
- age_max: z.number().int().min(13).max(65).optional(),
832
- genders: z.array(z.union([z.literal(1), z.literal(2)])).optional(),
833
- locales: z.array(z.number().int()).optional(),
834
- interests: z.array(idNameSchema).optional(),
835
- behaviors: z.array(idNameSchema).optional(),
836
- custom_audiences: z.array(z.object({ id: parentRefSchema })).optional(),
837
- excluded_custom_audiences: z.array(z.object({ id: parentRefSchema })).optional(),
838
- flexible_spec: z.array(z.record(z.string(), z.unknown())).optional(),
839
- exclusions: z.record(z.string(), z.unknown()).optional(),
840
- publisher_platforms: z.array(z.string()).optional(),
841
- facebook_positions: z.array(z.string()).optional(),
842
- instagram_positions: z.array(z.string()).optional(),
843
- audience_network_positions: z.array(z.string()).optional(),
844
- messenger_positions: z.array(z.string()).optional(),
845
- threads_positions: z.array(z.string()).optional(),
846
- device_platforms: z.array(z.string()).optional(),
847
- targeting_automation: z.object({ advantage_audience: z.union([z.literal(0), z.literal(1)]) }).partial().optional()
848
- }).catchall(z.unknown());
849
- var GEO_INCLUSION_KEYS = [
850
- "countries",
851
- "country_groups",
852
- "regions",
853
- "cities",
854
- "zips",
855
- "geo_markets",
856
- "places",
857
- "custom_locations",
858
- "electoral_districts",
859
- "subcities",
860
- "neighborhoods"
861
- ];
862
- function targetingHasGeo(t) {
863
- const geo = t?.geo_locations;
864
- return Boolean(
865
- geo && GEO_INCLUSION_KEYS.some((key) => Array.isArray(geo[key]) && geo[key].length > 0)
866
- );
867
- }
868
- function targetingHasGeoOrAudience(t) {
869
- if (!t) {
870
- return false;
871
- }
872
- return targetingHasGeo(t) || Boolean(t.custom_audiences?.length);
873
- }
874
- function advantageAudienceSetting(t) {
875
- const value = t.targeting_automation?.advantage_audience;
876
- return value === 0 || value === 1 ? value : void 0;
877
- }
878
- function targetingHardLimitsDemographics(t) {
879
- if (!t) {
880
- return false;
881
- }
882
- const narrowsAgeMax = typeof t.age_max === "number" && t.age_max < ADVANTAGE_AUDIENCE_OPEN_AGE_MAX;
883
- const narrowsAgeMin = typeof t.age_min === "number" && t.age_min > ADVANTAGE_AUDIENCE_MAX_HARD_AGE_MIN;
884
- const narrowsGender = Array.isArray(t.genders) && t.genders.length === 1;
885
- return narrowsAgeMax || narrowsAgeMin || narrowsGender;
886
- }
887
- var specialAdCategoriesSchema = z.array(z.enum(SPECIAL_AD_CATEGORIES)).default(["NONE"]);
888
- var campaignCreateSchema = z.strictObject({
889
- name: z.string().min(1).max(META_LIMITS.campaign.nameMax),
890
- objective: z.enum(OBJECTIVES),
891
- status: stageableStatusSchema.default("PAUSED"),
892
- special_ad_categories: specialAdCategoriesSchema,
893
- special_ad_category_country: z.array(z.string().length(2)).optional(),
894
- buying_type: z.enum(BUYING_TYPES).default("AUCTION"),
895
- bid_strategy: z.enum(BID_STRATEGIES).optional(),
896
- /** Campaign Budget Optimization (Advantage campaign budget) — mutually exclusive with ad-set budgets. */
897
- dailyBudget: moneySchema.optional(),
898
- lifetimeBudget: moneySchema.optional(),
899
- spendCap: moneySchema.optional(),
900
- /**
901
- * Ad-set budget sharing: lets ad sets lend up to 20% of their budget to each
902
- * other. Meta requires an explicit true/false on any campaign that carries no
903
- * campaign budget (subcode 4834011); Baker sends false unless asked, because
904
- * turning it on moves real spend between ad sets nobody asked to move.
905
- */
906
- adSetBudgetSharing: z.boolean().optional(),
907
- start_time: z.number().int().positive().optional(),
908
- stop_time: z.number().int().positive().optional()
909
- }).superRefine((p, ctx) => {
910
- if (p.dailyBudget && p.lifetimeBudget) {
911
- ctx.addIssue({ code: "custom", path: ["dailyBudget"], message: "set only one of dailyBudget or lifetimeBudget" });
912
- }
913
- validateDailyBudgetFloor(p.dailyBudget, ctx, ["dailyBudget", "amount"]);
914
- if (p.stop_time && p.start_time && p.stop_time <= p.start_time) {
915
- ctx.addIssue({ code: "custom", path: ["stop_time"], message: "stop_time must be after start_time" });
916
- }
917
- const needsCountry = p.special_ad_categories.some((c) => SPECIAL_CATEGORIES_REQUIRING_COUNTRY.includes(c));
918
- if (needsCountry && !p.special_ad_category_country?.length) {
919
- ctx.addIssue({
920
- code: "custom",
921
- path: ["special_ad_category_country"],
922
- message: "ISSUES_ELECTIONS_POLITICS campaigns need special_ad_category_country \u2014 pass the 2-letter country code(s) the ads run in"
923
- });
924
- }
925
- });
926
- var campaignUpdateSchema = z.strictObject({
927
- name: z.string().min(1).max(META_LIMITS.campaign.nameMax).optional(),
928
- status: updateStatusSchema.optional(),
929
- bid_strategy: z.enum(BID_STRATEGIES).optional(),
930
- dailyBudget: moneySchema.optional(),
931
- lifetimeBudget: moneySchema.optional(),
932
- spendCap: moneySchema.optional(),
933
- start_time: z.number().int().positive().optional(),
934
- stop_time: z.number().int().positive().optional()
935
- }).superRefine((p, ctx) => {
936
- if (!Object.values(p).some((val) => val !== void 0)) {
937
- ctx.addIssue({ code: "custom", message: "update needs at least one field" });
938
- }
939
- if (p.dailyBudget && p.lifetimeBudget) {
940
- ctx.addIssue({ code: "custom", path: ["dailyBudget"], message: "set only one of dailyBudget or lifetimeBudget" });
941
- }
942
- validateDailyBudgetFloor(p.dailyBudget, ctx, ["dailyBudget", "amount"]);
943
- });
944
- var promotedObjectFields = {
945
- page_id: parentRefSchema.optional(),
946
- pixel_id: z.string().regex(NUMERIC_ID_REGEX).optional(),
947
- custom_event_type: z.enum(CUSTOM_EVENT_TYPES).optional(),
948
- /**
949
- * A Custom Conversion to optimize toward, instead of a raw pixel event.
950
- * Named alone by the caller: the stage reads the conversion off Meta and
951
- * fills `pixel_id`, `custom_event_type` and `pixel_rule` from it, so the
952
- * staged payload matches what Ads Manager stores and the review shows the
953
- * event the ad set will actually chase.
954
- */
955
- custom_conversion_id: z.union([z.string().regex(NUMERIC_ID_REGEX), tempRefSchema]).optional(),
956
- /** The custom conversion's own filter, filled by the stage. Never written by hand. */
957
- pixel_rule: z.string().optional(),
958
- application_id: z.string().regex(NUMERIC_ID_REGEX).optional(),
959
- object_store_url: z.string().url().optional(),
960
- product_catalog_id: z.string().regex(NUMERIC_ID_REGEX).optional(),
961
- product_set_id: z.string().regex(NUMERIC_ID_REGEX).optional(),
962
- whatsapp_phone_number: z.string().optional(),
963
- offline_conversion_data_set_id: z.string().regex(NUMERIC_ID_REGEX).optional()
964
- };
965
- var promotedObjectSchema = z.strictObject(promotedObjectFields, {
966
- error: (issue) => issue.code === "unrecognized_keys" ? `promoted_object does not take ${issue.keys.map((key) => `"${key}"`).join(", ")} \u2014 it takes ${Object.keys(promotedObjectFields).join(", ")}` : void 0
967
- });
968
- var attributionSpecSchema = z.array(
969
- z.strictObject({
970
- event_type: z.enum(ATTRIBUTION_EVENT_TYPES),
971
- window_days: z.union([z.literal(1), z.literal(7), z.literal(28)])
972
- })
973
- );
974
- var adSetFields = {
975
- name: z.string().min(1).max(META_LIMITS.adSet.nameMax),
976
- campaign_id: parentRefSchema,
977
- status: stageableStatusSchema.default("PAUSED"),
978
- dailyBudget: moneySchema.optional(),
979
- lifetimeBudget: moneySchema.optional(),
980
- bidAmount: moneySchema.optional(),
981
- bid_strategy: z.enum(BID_STRATEGIES).optional(),
982
- billing_event: z.enum(BILLING_EVENTS),
983
- optimization_goal: z.enum(OPTIMIZATION_GOALS),
984
- destination_type: z.enum(DESTINATION_TYPES).optional(),
985
- promoted_object: promotedObjectSchema.optional(),
986
- attribution_spec: attributionSpecSchema.optional(),
987
- start_time: z.number().int().positive().optional(),
988
- end_time: z.number().int().positive().optional(),
989
- targeting: metaTargetingSchema,
990
- /**
991
- * The live ad set this one was copied from, verbatim, by `duplicate`. Baker
992
- * only — `adSetCommonBody` never sends it to Meta. Set exclusively when the
993
- * targeting IS the source's targeting, because that is what it licenses:
994
- * placement validation is skipped for it (see `validateAdSetPlacements`).
995
- */
996
- clonedFrom: z.string().regex(NUMERIC_ID_REGEX).optional(),
997
- /** EU Digital Services Act: who benefits from / pays for the ad. Auto-filled from the account for EU geo when omitted. */
998
- dsa_beneficiary: z.string().min(1).max(100).optional(),
999
- dsa_payor: z.string().min(1).max(100).optional()
1000
- };
1001
- function validateBidStrategy(p, ctx) {
1002
- const strategy = p.bid_strategy;
1003
- if (!strategy) {
1004
- return;
1005
- }
1006
- if (BID_STRATEGIES_REQUIRING_AMOUNT.includes(strategy) && !p.bidAmount) {
1007
- ctx.addIssue({ code: "custom", path: ["bidAmount"], message: `${strategy} requires a bidAmount` });
1008
- }
1009
- if (BID_STRATEGIES_FORBIDDING_AMOUNT.includes(strategy) && p.bidAmount) {
1010
- ctx.addIssue({
1011
- code: "custom",
1012
- path: ["bidAmount"],
1013
- message: `${strategy} must not set a bidAmount \u2014 Meta rejects one (it bids automatically)`
1014
- });
1015
- }
1016
- if (strategy === "COST_CAP" && p.billing_event && p.billing_event !== "IMPRESSIONS") {
1017
- ctx.addIssue({
1018
- code: "custom",
1019
- path: ["billing_event"],
1020
- message: "COST_CAP requires billing_event IMPRESSIONS"
1021
- });
1022
- }
1023
- if (strategy === "LOWEST_COST_WITH_MIN_ROAS" && p.optimization_goal && p.optimization_goal !== "VALUE") {
1024
- ctx.addIssue({
1025
- code: "custom",
1026
- path: ["bid_strategy"],
1027
- message: "LOWEST_COST_WITH_MIN_ROAS requires optimization_goal VALUE"
1028
- });
1029
- }
1030
- }
1031
- function validateAdSetBudgetAndBid(p, ctx) {
1032
- if (p.dailyBudget && p.lifetimeBudget) {
1033
- ctx.addIssue({ code: "custom", path: ["dailyBudget"], message: "set only one of dailyBudget or lifetimeBudget" });
1034
- }
1035
- validateDailyBudgetFloor(p.dailyBudget, ctx, ["dailyBudget", "amount"]);
1036
- if (p.lifetimeBudget && !p.end_time) {
1037
- ctx.addIssue({ code: "custom", path: ["end_time"], message: "lifetimeBudget ad sets need an end_time" });
1038
- }
1039
- validateBidStrategy(p, ctx);
1040
- if (p.end_time && p.start_time && p.end_time <= p.start_time) {
1041
- ctx.addIssue({ code: "custom", path: ["end_time"], message: "end_time must be after start_time" });
1042
- }
1043
- }
1044
- function validateAdSetPromotedObject(p, ctx) {
1045
- const goal = p.optimization_goal;
1046
- if (!goal) {
1047
- return;
1048
- }
1049
- const po = p.promoted_object;
1050
- const namesConversion = Boolean(po?.custom_conversion_id);
1051
- const hasPixel = Boolean(po?.pixel_id) || namesConversion;
1052
- const hasEventType = Boolean(po?.custom_event_type) || namesConversion;
1053
- if (OPTIMIZATION_GOALS_REQUIRING_PAGE.includes(goal) && !po?.page_id) {
1054
- ctx.addIssue({
1055
- code: "custom",
1056
- path: ["promoted_object", "page_id"],
1057
- message: `optimization_goal ${goal} needs promoted_object.page_id \u2014 pass --page-id with the Facebook Page the leads/likes belong to`
1058
- });
1059
- }
1060
- if (OPTIMIZATION_GOALS_REQUIRING_PIXEL.includes(goal) && !hasPixel) {
1061
- ctx.addIssue({
1062
- code: "custom",
1063
- path: ["promoted_object", "pixel_id"],
1064
- message: `optimization_goal ${goal} needs promoted_object.pixel_id \u2014 pass --pixel-id with the conversion pixel, or --custom-conversion-id to optimize toward a custom conversion`
1065
- });
1066
- }
1067
- if (OPTIMIZATION_GOALS_REQUIRING_CONVERSION_SOURCE.includes(goal) && !hasPixel && !po?.application_id) {
1068
- ctx.addIssue({
1069
- code: "custom",
1070
- path: ["promoted_object", "pixel_id"],
1071
- message: `optimization_goal ${goal} needs a conversion source \u2014 pass promoted_object.pixel_id (web value optimization) or promoted_object.application_id (app value optimization)`
1072
- });
1073
- }
1074
- if ((OPTIMIZATION_GOALS_REQUIRING_PIXEL.includes(goal) || OPTIMIZATION_GOALS_REQUIRING_CONVERSION_SOURCE.includes(goal)) && !hasEventType) {
1075
- ctx.addIssue({
1076
- code: "custom",
1077
- path: ["promoted_object", "custom_event_type"],
1078
- message: `optimization_goal ${goal} needs promoted_object.custom_event_type \u2014 pass --custom-event-type (e.g. PURCHASE, LEAD), or --custom-conversion-id to optimize toward a custom conversion`
1079
- });
1080
- }
1081
- if (OPTIMIZATION_GOALS_REQUIRING_APP.includes(goal) && !po?.application_id) {
1082
- ctx.addIssue({
1083
- code: "custom",
1084
- path: ["promoted_object", "application_id"],
1085
- message: `optimization_goal ${goal} needs promoted_object.application_id`
1086
- });
1087
- }
1088
- }
1089
- function validateAdvantageAudience(p, ctx) {
1090
- const t = p.targeting;
1091
- if (t && targetingHardLimitsDemographics(t) && advantageAudienceSetting(t) === 1) {
1092
- ctx.addIssue({
1093
- code: "custom",
1094
- path: ["targeting", "targeting_automation", "advantage_audience"],
1095
- message: "Advantage+ Audience (advantage_audience: 1) treats age and gender as suggestions, so a hard age/gender limit is rejected \u2014 set advantage_audience: 0 to enforce the limit, or drop the age_max/age_min/gender restriction"
1096
- });
1097
- }
1098
- }
1099
- function validateAdSetPlacements(p, ctx) {
1100
- if (p.clonedFrom) {
1101
- for (const issue of invalidPlacementValues(p.targeting)) {
1102
- if (issue.kind === "retired") {
1103
- ctx.addIssue({
1104
- code: "custom",
1105
- path: ["targeting", issue.field],
1106
- message: `${issue.field} no longer accepts "${issue.value}". ${issue.fix} (${PLACEMENT_TARGETING_DOC})`
1107
- });
1108
- }
1109
- }
1110
- return;
1111
- }
1112
- const missingFeed = positionsMissingRequiredFeed(p.targeting);
1113
- if (missingFeed.length > 0) {
1114
- ctx.addIssue({
1115
- code: "custom",
1116
- path: ["targeting", "facebook_positions"],
1117
- message: `Meta requires "feed" alongside ${missingFeed.join(", ")} \u2014 add "feed" to facebook_positions or drop those positions (${PLACEMENT_TARGETING_DOC})`
1118
- });
1119
- }
1120
- for (const issue of invalidPlacementValues(p.targeting)) {
1121
- if (issue.kind === "unknown") {
1122
- continue;
1123
- }
1124
- ctx.addIssue({
1125
- code: "custom",
1126
- path: ["targeting", issue.field],
1127
- message: issue.kind === "retired" ? `${issue.field} no longer accepts "${issue.value}". ${issue.fix} (${PLACEMENT_TARGETING_DOC})` : `${issue.field} does not accept "${issue.value}". ${issue.fix} (${PLACEMENT_TARGETING_DOC})`
1128
- });
1129
- }
1130
- for (const message of placementCoRequirementIssues(p.targeting)) {
1131
- ctx.addIssue({ code: "custom", path: ["targeting"], message: `${message} (${PLACEMENT_TARGETING_DOC})` });
1132
- }
1133
- }
1134
- var adSetCreateSchema = z.strictObject(adSetFields).superRefine((p, ctx) => {
1135
- validateAdSetBudgetAndBid(p, ctx);
1136
- validateAdSetPromotedObject(p, ctx);
1137
- validateAdvantageAudience(p, ctx);
1138
- validateAdSetPlacements(p, ctx);
1139
- if (!targetingHasGeoOrAudience(p.targeting)) {
1140
- ctx.addIssue({
1141
- code: "custom",
1142
- path: ["targeting", "geo_locations"],
1143
- message: 'targeting needs a location \u2014 set targeting.geo_locations (e.g. countries: ["US"]) or include a custom audience; Meta rejects an ad set with no geo'
1144
- });
1145
- }
1146
- });
1147
- var adSetUpdateSchema = z.strictObject({
1148
- name: adSetFields.name.optional(),
1149
- status: updateStatusSchema.optional(),
1150
- dailyBudget: moneySchema.optional(),
1151
- lifetimeBudget: moneySchema.optional(),
1152
- bidAmount: moneySchema.optional(),
1153
- bid_strategy: z.enum(BID_STRATEGIES).optional(),
1154
- optimization_goal: z.enum(OPTIMIZATION_GOALS).optional(),
1155
- destination_type: z.enum(DESTINATION_TYPES).optional(),
1156
- promoted_object: promotedObjectSchema.optional(),
1157
- attribution_spec: attributionSpecSchema.optional(),
1158
- start_time: z.number().int().positive().optional(),
1159
- end_time: z.number().int().positive().optional(),
1160
- targeting: metaTargetingSchema.optional(),
1161
- dsa_beneficiary: z.string().min(1).max(100).optional(),
1162
- dsa_payor: z.string().min(1).max(100).optional()
1163
- }).superRefine((p, ctx) => {
1164
- if (!Object.values(p).some((val) => val !== void 0)) {
1165
- ctx.addIssue({ code: "custom", message: "update needs at least one field" });
1166
- }
1167
- validateAdSetBudgetAndBid(p, ctx);
1168
- if (p.optimization_goal) {
1169
- validateAdSetPromotedObject(p, ctx);
1170
- }
1171
- validateAdvantageAudience(p, ctx);
1172
- validateAdSetPlacements(p, ctx);
1173
- });
1174
- var messageSchema = z.string().min(1).max(META_LIMITS.creative.messageHardMax);
1175
- var headlineSchema = z.string().min(1).max(META_LIMITS.creative.headlineMax);
1176
- var descriptionSchema = z.string().min(1).max(META_LIMITS.creative.descriptionMax);
1177
- var callToActionSchema = z.strictObject({
1178
- type: z.enum(CTA_TYPES),
1179
- /** Overrides the base link for the CTA button; defaults to the ad's link. */
1180
- link: httpsUrlSchema.optional(),
1181
- /**
1182
- * The instant form the button opens — Meta's `call_to_action.value.lead_gen_form_id`.
1183
- * This is the ONLY place an instant form is named: the ad set says leads open
1184
- * on the ad (`destination_type: ON_AD`), and the creative says which form.
1185
- * Without it Meta refuses every ad in that ad set with subcode 3390001,
1186
- * "Choose or create an instant form for your leads campaign".
1187
- */
1188
- lead_gen_form_id: parentRefSchema.optional()
1189
- }).superRefine((p, ctx) => {
1190
- if (p.lead_gen_form_id && !LEAD_FORM_CTA_TYPES.some((allowed) => allowed === p.type)) {
1191
- ctx.addIssue({
1192
- code: "custom",
1193
- path: ["type"],
1194
- message: `${p.type} cannot open an instant form \u2014 Meta refuses it (subcode 1856030). Use one of ${LEAD_FORM_CTA_TYPES.join(", ")}, or drop lead_gen_form_id if this ad should go to the website.`
1195
- });
1196
- }
1197
- });
1198
- var creativeEnhancementsSchema = z.strictObject({
1199
- standardEnhancements: z.enum(ENROLL_STATUSES).optional(),
1200
- features: z.record(z.string(), z.enum(ENROLL_STATUSES)).optional()
1201
- });
1202
- var creativeSharedFields = {
1203
- name: z.string().max(META_LIMITS.creative.nameMax).optional(),
1204
- /** Facebook Page id backing the ad's identity. */
1205
- page_id: parentRefSchema,
1206
- /** Instagram account id for IG placements (aka instagram_actor_id on read). */
1207
- instagram_user_id: z.string().regex(NUMERIC_ID_REGEX).optional(),
1208
- /** URL tracking parameters appended to the destination, e.g. "utm_source=fb&utm_campaign=x". */
1209
- url_tags: z.string().max(1e3).optional(),
1210
- enhancements: creativeEnhancementsSchema.optional()
1211
- };
1212
- var imageMediaFields = {
1213
- imageHash: z.string().regex(IMAGE_HASH_REGEX).optional(),
1214
- imageRef: tempRefSchema.optional()
1215
- };
1216
- var videoMediaFields = {
1217
- videoId: z.string().regex(NUMERIC_ID_REGEX).optional(),
1218
- videoRef: tempRefSchema.optional(),
1219
- /** Thumbnail for a video creative — image hash, ref, or public url. */
1220
- thumbnailHash: z.string().regex(IMAGE_HASH_REGEX).optional(),
1221
- imageUrl: z.string().url().optional()
1222
- };
1223
- function countImageRefs(p) {
1224
- return [p.imageHash, p.imageRef].filter(Boolean).length;
1225
- }
1226
- function countVideoRefs(p) {
1227
- return [p.videoId, p.videoRef].filter(Boolean).length;
1228
- }
1229
- var singleCreativeSchema = z.strictObject({
1230
- creativeType: z.literal("single"),
1231
- ...creativeSharedFields,
1232
- /** Primary text. */
1233
- message: messageSchema,
1234
- link: httpsUrlSchema,
1235
- /** Headline. */
1236
- headline: headlineSchema.optional(),
1237
- description: descriptionSchema.optional(),
1238
- /** Display URL / caption shown under the headline. */
1239
- caption: z.string().max(255).optional(),
1240
- call_to_action: callToActionSchema.optional(),
1241
- ...imageMediaFields,
1242
- ...videoMediaFields
1243
- }).superRefine((p, ctx) => {
1244
- const images = countImageRefs(p);
1245
- const videos = countVideoRefs(p);
1246
- if (images + videos === 0) {
1247
- ctx.addIssue({ code: "custom", path: ["imageHash"], message: "a single ad needs one image or one video" });
1248
- }
1249
- if (images > 1) {
1250
- ctx.addIssue({ code: "custom", path: ["imageHash"], message: "provide exactly one image reference" });
1251
- }
1252
- if (videos > 1) {
1253
- ctx.addIssue({ code: "custom", path: ["videoId"], message: "provide exactly one video reference" });
1254
- }
1255
- if (images > 0 && videos > 0) {
1256
- ctx.addIssue({
1257
- code: "custom",
1258
- path: ["videoId"],
1259
- message: "a single ad is either an image OR a video, not both"
1260
- });
1261
- }
1262
- });
1263
- var carouselCardSchema = z.strictObject({
1264
- link: httpsUrlSchema,
1265
- headline: z.string().max(META_LIMITS.creative.headlineMax).optional(),
1266
- description: z.string().max(META_LIMITS.creative.descriptionMax).optional(),
1267
- call_to_action: callToActionSchema.optional(),
1268
- ...imageMediaFields,
1269
- ...videoMediaFields
1270
- }).superRefine((p, ctx) => {
1271
- const images = countImageRefs(p);
1272
- const videos = countVideoRefs(p);
1273
- if (images + videos === 0) {
1274
- ctx.addIssue({ code: "custom", path: ["imageHash"], message: "each card needs an image or a video" });
1275
- }
1276
- if (images > 1) {
1277
- ctx.addIssue({ code: "custom", path: ["imageHash"], message: "each card needs exactly one image reference" });
1278
- }
1279
- if (videos > 1) {
1280
- ctx.addIssue({ code: "custom", path: ["videoId"], message: "each card needs exactly one video reference" });
1281
- }
1282
- if (images > 0 && videos > 0) {
1283
- ctx.addIssue({ code: "custom", path: ["videoId"], message: "each card is an image OR a video, not both" });
1284
- }
1285
- });
1286
- var carouselCreativeSchema = z.strictObject({
1287
- creativeType: z.literal("carousel"),
1288
- ...creativeSharedFields,
1289
- message: messageSchema,
1290
- /** Optional "see more" card destination applied when a card has no own link. */
1291
- link: httpsUrlSchema.optional(),
1292
- call_to_action: callToActionSchema.optional(),
1293
- cards: z.array(carouselCardSchema).min(META_LIMITS.creative.carouselCardsMin).max(META_LIMITS.creative.carouselCardsMax)
1294
- }).superRefine((p, ctx) => {
1295
- const forms = new Set(
1296
- [p.call_to_action?.lead_gen_form_id, ...p.cards.map((card) => card.call_to_action?.lead_gen_form_id)].filter(
1297
- Boolean
1298
- )
1299
- );
1300
- if (forms.size > 1) {
1301
- ctx.addIssue({
1302
- code: "custom",
1303
- path: ["cards"],
1304
- message: `every card of a carousel must open the SAME instant form \u2014 this one names ${[...forms].join(" and ")}`
1305
- });
1306
- }
1307
- });
1308
- var dynamicImageSchema = z.strictObject({ ...imageMediaFields }).refine((p) => countImageRefs(p) === 1, "each dynamic image needs exactly one reference");
1309
- var dynamicVideoSchema = z.strictObject({
1310
- videoId: videoMediaFields.videoId,
1311
- videoRef: videoMediaFields.videoRef,
1312
- thumbnailHash: videoMediaFields.thumbnailHash
1313
- }).refine((p) => countVideoRefs(p) === 1, "each dynamic video needs exactly one reference");
1314
- var DYN = META_LIMITS.creative;
1315
- var dynamicCreativeSchema = z.strictObject({
1316
- creativeType: z.literal("dynamic"),
1317
- ...creativeSharedFields,
1318
- bodies: z.array(z.strictObject({ text: messageSchema })).min(DYN.dynamicTextsMin).max(DYN.dynamicTextsMax),
1319
- titles: z.array(z.strictObject({ text: headlineSchema })).min(DYN.dynamicTextsMin).max(DYN.dynamicTextsMax),
1320
- descriptions: z.array(z.strictObject({ text: descriptionSchema })).max(DYN.dynamicTextsMax).optional(),
1321
- images: z.array(dynamicImageSchema).optional(),
1322
- videos: z.array(dynamicVideoSchema).optional(),
1323
- /**
1324
- * Optional: Meta infers the format from the assets when it is omitted, and
1325
- * every flexible creative read back off a live account omits it.
1326
- */
1327
- ad_formats: z.array(z.enum(AD_FORMATS)).min(1).optional(),
1328
- call_to_action_types: z.array(z.string()).optional(),
1329
- /**
1330
- * The button on the creative's own `link_data` — a flexible ad carries both
1331
- * envelopes, and this is the one that takes `SEE_DETAILS`. Kept separate
1332
- * from `call_to_action_types` because Meta validates the two against
1333
- * different enums.
1334
- */
1335
- call_to_action: callToActionSchema.optional(),
1336
- link_urls: z.array(z.strictObject({ website_url: httpsUrlSchema, display_url: z.string().optional() })).min(1),
1337
- /**
1338
- * `asset_feed_spec.optimization_type` — passed through as a free string on
1339
- * purpose. Meta's own 400 enumerates ten values and then accepts
1340
- * `DEGREES_OF_FREEDOM`, which is not among them and is what every
1341
- * Advantage+ flexible creative on a live account reports. An enum here
1342
- * would refuse the value Meta itself hands back.
1343
- */
1344
- optimization_type: z.string().optional(),
1345
- /** Multi-language / placement customization — structural passthrough for v1. */
1346
- asset_customization_rules: z.array(z.record(z.string(), z.unknown())).optional()
1347
- }).superRefine((p, ctx) => {
1348
- if (!(p.images?.length || p.videos?.length)) {
1349
- ctx.addIssue({
1350
- code: "custom",
1351
- path: ["images"],
1352
- message: "a dynamic creative needs at least one image or video"
1353
- });
1354
- }
1355
- p.call_to_action_types?.forEach((type, index) => {
1356
- if (ASSET_FEED_CTA_TYPES.some((allowed) => allowed === type)) {
1357
- return;
1358
- }
1359
- const isLinkButton = CTA_TYPES.some((allowed) => allowed === type);
1360
- ctx.addIssue({
1361
- code: "custom",
1362
- path: ["call_to_action_types", index],
1363
- message: isLinkButton ? `${type} is not one of the buttons Meta accepts in asset_feed_spec.call_to_action_types \u2014 it is a link_data button. Pass it as call_to_action: { type: "${type}" } instead.` : `${type} is not a Meta call-to-action button.`
1364
- });
1365
- });
1366
- });
1367
- var existingPostCreativeSchema = z.strictObject({
1368
- creativeType: z.literal("existing_post"),
1369
- name: creativeSharedFields.name,
1370
- /** "<page_id>_<post_id>" object story id of the post to promote. */
1371
- object_story_id: z.string().regex(/^\d+_\d+$/, 'expected "<page_id>_<post_id>"'),
1372
- instagram_user_id: creativeSharedFields.instagram_user_id,
1373
- url_tags: creativeSharedFields.url_tags,
1374
- enhancements: creativeSharedFields.enhancements
1375
- });
1376
- var specCreativeSchema = z.strictObject({
1377
- creativeType: z.literal("spec"),
1378
- name: creativeSharedFields.name,
1379
- url_tags: creativeSharedFields.url_tags,
1380
- /** Promote the existing post — keeps the ad's likes, comments and shares. */
1381
- object_story_id: z.string().regex(/^\d+_\d+$/, 'expected "<page_id>_<post_id>"').optional(),
1382
- object_story_spec: z.record(z.string(), z.unknown()).optional(),
1383
- asset_feed_spec: z.record(z.string(), z.unknown()).optional(),
1384
- degrees_of_freedom_spec: z.record(z.string(), z.unknown()).optional(),
1385
- instagram_user_id: creativeSharedFields.instagram_user_id,
1386
- /** The creative this spec was cloned from, for the review diff. */
1387
- clonedFrom: z.string().regex(NUMERIC_ID_REGEX).optional()
1388
- }).superRefine((p, ctx) => {
1389
- if (!(p.object_story_id || p.object_story_spec || p.asset_feed_spec)) {
1390
- ctx.addIssue({
1391
- code: "custom",
1392
- path: ["object_story_spec"],
1393
- message: "a spec creative needs object_story_id, object_story_spec or asset_feed_spec"
1394
- });
1395
- }
1396
- });
1397
- var creativeContentSchema = z.discriminatedUnion("creativeType", [
1398
- singleCreativeSchema,
1399
- carouselCreativeSchema,
1400
- dynamicCreativeSchema,
1401
- existingPostCreativeSchema,
1402
- specCreativeSchema
1403
- ]);
1404
- var adCreativeCreateSchema = creativeContentSchema;
1405
- var adCreativeUpdateSchema = z.strictObject({
1406
- name: z.string().max(META_LIMITS.creative.nameMax).optional(),
1407
- status: z.enum(CREATIVE_UPDATE_STATUSES).optional(),
1408
- /** Content patch — only honored when the target is a staged meta_temp_* creative. */
1409
- content: z.record(z.string(), z.unknown()).optional()
1410
- }).refine((p) => Object.values(p).some((val) => val !== void 0), "update needs at least one field");
1411
- var adCreateSchema = z.strictObject({
1412
- name: z.string().min(1).max(META_LIMITS.ad.nameMax),
1413
- adset_id: parentRefSchema,
1414
- status: stageableStatusSchema.default("PAUSED"),
1415
- creative: z.strictObject({ creative_id: parentRefSchema }),
1416
- /** Conversion pixel / offline event set / view tags — structural passthrough. */
1417
- tracking_specs: z.array(z.record(z.string(), z.unknown())).optional()
1418
- });
1419
- var adUpdateSchema = z.strictObject({
1420
- name: z.string().min(1).max(META_LIMITS.ad.nameMax).optional(),
1421
- status: updateStatusSchema.optional(),
1422
- /** Swapping the creative is the Meta way to "edit" an ad's creative. */
1423
- creative: z.strictObject({ creative_id: parentRefSchema }).optional(),
1424
- tracking_specs: z.array(z.record(z.string(), z.unknown())).optional()
1425
- }).refine((p) => Object.values(p).some((val) => val !== void 0), "update needs at least one field");
1426
- var lookalikeSpecSchema = z.strictObject({
1427
- origin: z.array(z.strictObject({ id: parentRefSchema })).min(1),
1428
- ratio: z.number().min(0.01).max(0.2).optional(),
1429
- country: z.string().length(2).optional()
1430
- });
1431
- function valuesOfKey(node, key) {
1432
- if (Array.isArray(node)) return node.flatMap((entry) => valuesOfKey(entry, key));
1433
- if (!node || typeof node !== "object") return [];
1434
- const record = node;
1435
- return [
1436
- ...key in record ? [record[key]] : [],
1437
- ...Object.values(record).flatMap((value) => valuesOfKey(value, key))
1438
- ];
1439
- }
1440
- function mixedEventSourceTypes(rule) {
1441
- const types = valuesOfKey(rule, "event_sources").flatMap((sources) => Array.isArray(sources) ? sources : []).map((source) => source?.type).filter((type) => typeof type === "string");
1442
- const distinct = [...new Set(types)].sort();
1443
- return distinct.length > 1 ? distinct : [];
1444
- }
1445
- var customAudienceCreateSchema = z.strictObject({
1446
- name: z.string().min(1).max(META_LIMITS.audience.nameMax),
1447
- subtype: z.enum(CUSTOM_AUDIENCE_SUBTYPES),
1448
- description: z.string().max(500).optional(),
1449
- customer_file_source: z.enum(CUSTOMER_FILE_SOURCES).optional(),
1450
- retention_days: z.number().int().min(1).max(META_LIMITS.audience.retentionDaysMax).optional(),
1451
- lookalike_spec: lookalikeSpecSchema.optional(),
1452
- /** Website/engagement rule — structural passthrough validated by Meta. */
1453
- rule: z.record(z.string(), z.unknown()).optional()
1454
- }).superRefine((p, ctx) => {
1455
- if (p.subtype === "LOOKALIKE" && !p.lookalike_spec) {
1456
- ctx.addIssue({ code: "custom", path: ["lookalike_spec"], message: "LOOKALIKE audiences need a lookalike_spec" });
1457
- }
1458
- if ((p.subtype === "WEBSITE" || p.subtype === "ENGAGEMENT") && !p.rule) {
1459
- ctx.addIssue({ code: "custom", path: ["rule"], message: `${p.subtype} audiences need a rule (use --file)` });
1460
- }
1461
- if (p.rule && p.retention_days !== void 0) {
1462
- ctx.addIssue({
1463
- code: "custom",
1464
- path: ["retention_days"],
1465
- message: "a rule carries its own window in retention_seconds, so drop retention_days \u2014 Meta takes it only on a customer-file audience, and sending both leaves the review showing a window the audience will not have"
1466
- });
1467
- }
1468
- const mixed = mixedEventSourceTypes(p.rule);
1469
- if (mixed.length > 0) {
1470
- ctx.addIssue({
1471
- code: "custom",
1472
- path: ["rule"],
1473
- message: `one audience covers one kind of source, but this rule mixes ${mixed.join(" and ")} \u2014 split it into one audience per source`
1474
- });
1475
- }
1476
- });
1477
- var customAudienceUpdateSchema = z.strictObject({
1478
- name: z.string().min(1).max(META_LIMITS.audience.nameMax).optional(),
1479
- description: z.string().max(500).optional()
1480
- }).refine((p) => Object.values(p).some((val) => val !== void 0), "update needs at least one field");
1481
- var customConversionCreateSchema = z.strictObject({
1482
- name: z.string().min(1).max(META_LIMITS.customConversion.nameMax),
1483
- description: z.string().max(META_LIMITS.customConversion.descriptionMax).optional(),
1484
- /** The pixel the conversion counts from — `event_source_id` on the wire. Baker never creates pixels, so this is always a real id. */
1485
- pixel_id: z.string().regex(NUMERIC_ID_REGEX),
1486
- custom_event_type: z.enum(CUSTOM_EVENT_TYPES),
1487
- /** Meta's filter JSON. Built by `buildCustomConversionRule` for the URL case. */
1488
- rule: z.record(z.string(), z.unknown()),
1489
- /** What one conversion is worth, when the site cannot send a value with the event. */
1490
- default_conversion_value: z.number().min(0).optional()
1491
- }).superRefine((p, ctx) => {
1492
- const refusal = customConversionRuleRefusal(p.rule);
1493
- if (refusal) {
1494
- ctx.addIssue({ code: "custom", path: ["rule"], message: refusal });
1495
- }
1496
- });
1497
- var mediaUploadSchema = z.strictObject({
1498
- kind: z.enum(MEDIA_KINDS),
1499
- bakerImageId: bakerMediaIdSchema.optional(),
1500
- bakerVideoId: bakerMediaIdSchema.optional(),
1501
- /** Optional display name / filename hint. */
1502
- name: z.string().max(255).optional()
1503
- }).superRefine((p, ctx) => {
1504
- if (p.kind === "image" && !p.bakerImageId) {
1505
- ctx.addIssue({ code: "custom", path: ["bakerImageId"], message: "image uploads need a bakerImageId" });
1506
- }
1507
- if (p.kind === "video" && !p.bakerVideoId) {
1508
- ctx.addIssue({ code: "custom", path: ["bakerVideoId"], message: "video uploads need a bakerVideoId" });
1509
- }
1510
- });
1511
- var leadFormCreateSchema = z.strictObject({
1512
- page_id: z.string().regex(NUMERIC_ID_REGEX),
1513
- name: z.string().min(1).max(255),
1514
- locale: z.enum(["EN_US", "EN_GB", "ES_ES", "ES_LA", "FR_FR", "DE_DE", "PT_BR", "PT_PT"]).default("EN_US"),
1515
- questionPageHeadline: z.string().min(1).max(255).optional(),
1516
- questions: z.array(
1517
- z.strictObject({
1518
- type: z.enum([
1519
- "FULL_NAME",
1520
- "FIRST_NAME",
1521
- "LAST_NAME",
1522
- "EMAIL",
1523
- "PHONE",
1524
- "CITY",
1525
- "STATE",
1526
- "COUNTRY",
1527
- "ZIP_CODE",
1528
- "COMPANY_NAME",
1529
- "JOB_TITLE",
1530
- "CUSTOM"
1531
- ]),
1532
- label: z.string().min(1).max(255).optional()
1533
- })
1534
- ).min(1).max(15),
1535
- privacyPolicyUrl: httpsUrlSchema,
1536
- privacyPolicyLinkText: z.string().min(1).max(70).default("Privacy Policy"),
1537
- followUpActionUrl: httpsUrlSchema,
1538
- optimizedForQuality: z.boolean().default(false),
1539
- thankYou: z.strictObject({
1540
- title: z.string().min(1).max(255),
1541
- body: z.string().min(1).max(1e3),
1542
- buttonText: z.string().min(1).max(70).default("View website")
1543
- }).optional()
1544
- }).superRefine((form, ctx) => {
1545
- const seen = /* @__PURE__ */ new Set();
1546
- for (const [index, question] of form.questions.entries()) {
1547
- if (question.type === "CUSTOM" && !question.label) {
1548
- ctx.addIssue({ code: "custom", path: ["questions", index, "label"], message: "custom questions need a label" });
1549
- }
1550
- const key = `${question.type}:${question.label ?? ""}`;
1551
- if (seen.has(key)) ctx.addIssue({ code: "custom", path: ["questions", index], message: "duplicate question" });
1552
- seen.add(key);
1553
- }
1554
- });
1555
- var META_DRAFT_OP_KINDS = [
1556
- "campaign.create",
1557
- "campaign.update",
1558
- "adSet.create",
1559
- "adSet.update",
1560
- "adCreative.create",
1561
- "adCreative.update",
1562
- "ad.create",
1563
- "ad.update",
1564
- "customAudience.create",
1565
- "customAudience.update",
1566
- "customConversion.create",
1567
- "leadForm.create",
1568
- "media.upload"
1569
- ];
1570
- var metaDraftOpKindSchema = z.enum(META_DRAFT_OP_KINDS);
1571
- var accountIdSchema = z.string().regex(NUMERIC_ID_REGEX, "accountId must be the bare numeric ad account id");
1572
- var updateTargetSchema = z.union([z.string().regex(NUMERIC_ID_REGEX), tempRefSchema]);
1573
- function createOp(kind, payload) {
1574
- return z.object({ kind: z.literal(kind), accountId: accountIdSchema, payload });
1575
- }
1576
- function updateOp(kind, payload) {
1577
- return z.object({ kind: z.literal(kind), accountId: accountIdSchema, target: updateTargetSchema, payload });
1578
- }
1579
- var metaDraftOpInputSchema = z.discriminatedUnion("kind", [
1580
- createOp("campaign.create", campaignCreateSchema),
1581
- updateOp("campaign.update", campaignUpdateSchema),
1582
- createOp("adSet.create", adSetCreateSchema),
1583
- updateOp("adSet.update", adSetUpdateSchema),
1584
- createOp("adCreative.create", adCreativeCreateSchema),
1585
- updateOp("adCreative.update", adCreativeUpdateSchema),
1586
- createOp("ad.create", adCreateSchema),
1587
- updateOp("ad.update", adUpdateSchema),
1588
- createOp("customAudience.create", customAudienceCreateSchema),
1589
- updateOp("customAudience.update", customAudienceUpdateSchema),
1590
- createOp("customConversion.create", customConversionCreateSchema),
1591
- createOp("leadForm.create", leadFormCreateSchema),
1592
- createOp("media.upload", mediaUploadSchema)
1593
- ]);
1594
-
1595
- export {
1596
- buildCustomConversionRule,
1597
- isMetaLeadAdsRefusal,
1598
- FACEBOOK_PREVIEW_FORMATS,
1599
- INSTAGRAM_PREVIEW_FORMATS,
1600
- PLATFORM_SCOPED_POSITIONS,
1601
- previewFormatForPosition,
1602
- placementFormatNote,
1603
- metaDraftOpInputSchema
1604
- };
1605
- //# sourceMappingURL=chunk-GOJXKIFQ.js.map