@koda-sl/baker-cli 0.447.0-dev.f5788a631 → 0.447.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 (870) hide show
  1. package/README.md +14 -10
  2. package/dist/account-2ZMZFPIU.js +79 -0
  3. package/dist/account-F6MHQ64I.js +80 -0
  4. package/dist/account-writes-ISE4U2FQ.js +66 -0
  5. package/dist/accounts-RHGN5WMU.js +611 -0
  6. package/dist/accounts-VINHZRWA.js +77 -0
  7. package/dist/actions-5F4ZP6M4.js +55 -0
  8. package/dist/ad-group-writes-UU5NNKSO.js +170 -0
  9. package/dist/ad-groups-CGFXZNIA.js +68 -0
  10. package/dist/ad-writes-NALDYWOR.js +174 -0
  11. package/dist/add-KBPMSK2P.js +104 -0
  12. package/dist/add-OGH4DZZ5.js +280 -0
  13. package/dist/ads-56OWZBXZ.js +40 -0
  14. package/dist/ads-H7GH7A26.js +113 -0
  15. package/dist/ads-PV7GZXPR.js +77 -0
  16. package/dist/adsets-H7QT42U6.js +176 -0
  17. package/dist/advertisers-PM4WPG4N.js +120 -0
  18. package/dist/advertisers-PM4WPG4N.js.map +1 -0
  19. package/dist/analytics-5FALU2GL.js +433 -0
  20. package/dist/analytics-JVZKN735.js +1958 -0
  21. package/dist/animate-FWWHSYPL.js +480 -0
  22. package/dist/assign-KLYZ6USE.js +77 -0
  23. package/dist/audience-size-JHB42DB4.js +94 -0
  24. package/dist/audiences-JACGRBNN.js +78 -0
  25. package/dist/audiences-VEKGLWBG.js +268 -0
  26. package/dist/audit-5XH7WZIM.js +151 -0
  27. package/dist/autocomplete-7F3PZLEY.js +111 -0
  28. package/dist/autocomplete-7F3PZLEY.js.map +1 -0
  29. package/dist/avatars-N4SRNQI7.js +38 -0
  30. package/dist/bid-pricing-VYLVGU26.js +99 -0
  31. package/dist/brand-ASBS2HZM.js +22 -0
  32. package/dist/brief-JSZKDPGU.js +477 -0
  33. package/dist/brief-JSZKDPGU.js.map +1 -0
  34. package/dist/campaign-groups-ATE2DE4V.js +95 -0
  35. package/dist/campaign-writes-ETT57KLQ.js +165 -0
  36. package/dist/campaign-writes-SX52CJYW.js +170 -0
  37. package/dist/campaigns-FGBAS6AZ.js +107 -0
  38. package/dist/campaigns-J6VZBIV6.js +109 -0
  39. package/dist/campaigns-WBEG5QA4.js +110 -0
  40. package/dist/campaigns-X3DPCCSN.js +76 -0
  41. package/dist/canvas-K7IN7HLO.js +46 -0
  42. package/dist/capabilities-RDAERPYY.js +144 -0
  43. package/dist/catalog-MENVHL5U.js +65 -0
  44. package/dist/catalog-MENVHL5U.js.map +1 -0
  45. package/dist/catalogs-G3YEVG6S.js +128 -0
  46. package/dist/changes-TP7ZZHB3.js +135 -0
  47. package/dist/chatgpt-QNUN63YS.js +47 -0
  48. package/dist/chats-YIAQGQ3X.js +262 -0
  49. package/dist/chunk-2GK33EJV.js +382 -0
  50. package/dist/chunk-35XWJEWH.js +274 -0
  51. package/dist/chunk-3CWL2LY4.js +206 -0
  52. package/dist/chunk-3CWL2LY4.js.map +1 -0
  53. package/dist/chunk-4NBVGARW.js +1079 -0
  54. package/dist/chunk-5R5ADJ47.js +2880 -0
  55. package/dist/chunk-5R5ADJ47.js.map +1 -0
  56. package/dist/chunk-65RIB7A6.js +592 -0
  57. package/dist/chunk-6DB2B3GF.js +175 -0
  58. package/dist/chunk-7SDFKGQ4.js +363 -0
  59. package/dist/chunk-ACANMASG.js +19 -0
  60. package/dist/chunk-ALTBBAYU.js +96 -0
  61. package/dist/chunk-ANCSKUWI.js +433 -0
  62. package/dist/chunk-AWMFUGVX.js +160 -0
  63. package/dist/chunk-AWMFUGVX.js.map +1 -0
  64. package/dist/chunk-BA7FDXQC.js +197 -0
  65. package/dist/chunk-BNCW67EM.js +534 -0
  66. package/dist/chunk-BSC33FLJ.js +217 -0
  67. package/dist/chunk-CHSNHVYF.js +3182 -0
  68. package/dist/chunk-CHSNHVYF.js.map +1 -0
  69. package/dist/chunk-DKGTQSLR.js +310 -0
  70. package/dist/chunk-DR34ZTWD.js +207 -0
  71. package/dist/chunk-E4MDJBLO.js +163 -0
  72. package/dist/chunk-EH4C4CZK.js +455 -0
  73. package/dist/chunk-FXED3VZK.js +174 -0
  74. package/dist/chunk-G7UTTEBS.js +337 -0
  75. package/dist/chunk-GATKK4RJ.js +440 -0
  76. package/dist/chunk-GATKK4RJ.js.map +1 -0
  77. package/dist/chunk-GIJT3A5U.js +166 -0
  78. package/dist/chunk-GX6VAHY7.js +830 -0
  79. package/dist/chunk-HIPDMQZ6.js +136 -0
  80. package/dist/chunk-HQSCJYZO.js +26 -0
  81. package/dist/chunk-HZ5DR5MX.js +51 -0
  82. package/dist/chunk-I4NEHDSD.js +813 -0
  83. package/dist/chunk-I4NEHDSD.js.map +1 -0
  84. package/dist/chunk-IM52NHGL.js +390 -0
  85. package/dist/chunk-JF47LEPU.js +5163 -0
  86. package/dist/chunk-JF47LEPU.js.map +1 -0
  87. package/dist/chunk-K3PN7TN5.js +84 -0
  88. package/dist/chunk-KBP7WJQB.js +446 -0
  89. package/dist/chunk-KBP7WJQB.js.map +1 -0
  90. package/dist/chunk-KLBTXETO.js +23992 -0
  91. package/dist/chunk-KLBTXETO.js.map +1 -0
  92. package/dist/chunk-KNWHUMVZ.js +4381 -0
  93. package/dist/chunk-KNWHUMVZ.js.map +1 -0
  94. package/dist/chunk-KQTYTCKQ.js +98 -0
  95. package/dist/chunk-LIQ4SQ2T.js +150 -0
  96. package/dist/chunk-LW4VSTL5.js +304 -0
  97. package/dist/chunk-LW4VSTL5.js.map +1 -0
  98. package/dist/chunk-MADAAZZV.js +169 -0
  99. package/dist/chunk-MLU6STIN.js +66 -0
  100. package/dist/chunk-NDXBU22S.js +6145 -0
  101. package/dist/chunk-NDXBU22S.js.map +1 -0
  102. package/dist/chunk-NE4F3FHN.js +1854 -0
  103. package/dist/chunk-NE4F3FHN.js.map +1 -0
  104. package/dist/chunk-OTFHEHIU.js +1706 -0
  105. package/dist/chunk-OTFHEHIU.js.map +1 -0
  106. package/dist/chunk-PDTB5EX6.js +57 -0
  107. package/dist/chunk-SB3GZFCV.js +622 -0
  108. package/dist/chunk-T3BDNJIX.js +494 -0
  109. package/dist/chunk-TEINLN64.js +649 -0
  110. package/dist/chunk-TEINLN64.js.map +1 -0
  111. package/dist/chunk-TIOQ7ZFQ.js +496 -0
  112. package/dist/chunk-U3HAMW5W.js +133 -0
  113. package/dist/chunk-U6SYRIOB.js +486 -0
  114. package/dist/chunk-UC6BWM5J.js +159 -0
  115. package/dist/chunk-ULJ5RFOV.js +76 -0
  116. package/dist/chunk-VAISMQQB.js +346 -0
  117. package/dist/chunk-VB6WJJR3.js +1830 -0
  118. package/dist/chunk-VB6WJJR3.js.map +1 -0
  119. package/dist/chunk-VDHQJ6HD.js +23 -0
  120. package/dist/chunk-VMDAXFRI.js +111 -0
  121. package/dist/chunk-WNFIJAUO.js +98 -0
  122. package/dist/chunk-WNFIJAUO.js.map +1 -0
  123. package/dist/chunk-XCM6XWOB.js +417 -0
  124. package/dist/chunk-XMD4SHFI.js +60 -0
  125. package/dist/chunk-Y6QAJNKP.js +1411 -0
  126. package/dist/chunk-YBP7O5P4.js +103 -0
  127. package/dist/chunk-YC2TQ3VC.js +297 -0
  128. package/dist/chunk-YPZYOJP6.js +6664 -0
  129. package/dist/chunk-YPZYOJP6.js.map +1 -0
  130. package/dist/chunk-ZPU3WDVK.js +92 -0
  131. package/dist/claim-V4F5GZJK.js +197 -0
  132. package/dist/cli.js +29 -29
  133. package/dist/companies-NJGJ7XNN.js +195 -0
  134. package/dist/complete-MGNF5OAK.js +81 -0
  135. package/dist/connect-PJOTRTT4.js +36 -0
  136. package/dist/conversation-4DM26FRD.js +93 -0
  137. package/dist/conversion-report-N4HANYOB.js +125 -0
  138. package/dist/conversion-upload-command-TZTHU2CD.js +438 -0
  139. package/dist/conversion-writes-LW4HQKK5.js +120 -0
  140. package/dist/conversions-JGECVZSY.js +135 -0
  141. package/dist/conversions-TS723AZV.js +76 -0
  142. package/dist/countries-ESAKTQAE.js +82 -0
  143. package/dist/create-DSGQFBI7.js +207 -0
  144. package/dist/create-I2KVDTCQ.js +59 -0
  145. package/dist/create-SBQWVLXG.js +130 -0
  146. package/dist/create-WOHPIGBK.js +235 -0
  147. package/dist/creatives-4JGVZQGC.js +182 -0
  148. package/dist/creatives-DWO5KEQC.js +51 -0
  149. package/dist/creatives-PSWCNY7U.js +87 -0
  150. package/dist/credentials-UULYCN2L.js +1055 -0
  151. package/dist/credentials-UULYCN2L.js.map +1 -0
  152. package/dist/critique-NGMZK5LX.js +213 -0
  153. package/dist/critique-NGMZK5LX.js.map +1 -0
  154. package/dist/critique-TIZJ5GFM.js +1449 -0
  155. package/dist/crm-2WAR565U.js +224 -0
  156. package/dist/crm-VDXUO2YU.js +318 -0
  157. package/dist/currency-XCGKQ7FE.js +88 -0
  158. package/dist/custom-conversions-6P555U2K.js +125 -0
  159. package/dist/customers-ATENMXDO.js +56 -0
  160. package/dist/delete-AVMZYNVT.js +54 -0
  161. package/dist/delete-H744GNS4.js +63 -0
  162. package/dist/delete-OEYPFATY.js +66 -0
  163. package/dist/demographics-M5LJF3RZ.js +138 -0
  164. package/dist/discard-72I6SM7G.js +66 -0
  165. package/dist/discover-BJPZNXUQ.js +172 -0
  166. package/dist/domain-R4EIZD2W.js +98 -0
  167. package/dist/draft-34C3F5U4.js +217 -0
  168. package/dist/draft-BBFJNZ5X.js +328 -0
  169. package/dist/draft-BV2QRPZ4.js +107 -0
  170. package/dist/draft-THPZFASM.js +281 -0
  171. package/dist/draft-YYYRWF7M.js +306 -0
  172. package/dist/engine/index.d.ts +0 -12
  173. package/dist/engine/index.js +6 -7
  174. package/dist/facets-F2H52MS4.js +114 -0
  175. package/dist/feedback-IQKKT4MC.js +66 -0
  176. package/dist/feedback-IQKKT4MC.js.map +1 -0
  177. package/dist/feedback-record-UZV4Y7UD.js +175 -0
  178. package/dist/feedback-record-UZV4Y7UD.js.map +1 -0
  179. package/dist/fetch-ZUAZPLAE.js +176 -0
  180. package/dist/fetch-ZUAZPLAE.js.map +1 -0
  181. package/dist/fit-2CA4JH7N.js +45 -0
  182. package/dist/flows-CWXCXEUD.js +244 -0
  183. package/dist/follow-FN7LV3WV.js +82 -0
  184. package/dist/follow-competitors-MKXFHLXB.js +131 -0
  185. package/dist/fonts-F2XUCIIW.js +34 -0
  186. package/dist/forecast-IDKJYM2B.js +104 -0
  187. package/dist/funnel-RLGQGYKO.js +837 -0
  188. package/dist/generate-MMBYB44G.js +262 -0
  189. package/dist/get-C6UQ22HH.js +54 -0
  190. package/dist/get-EEUR6SAW.js +78 -0
  191. package/dist/google-35GDU3G3.js +1872 -0
  192. package/dist/google-35GDU3G3.js.map +1 -0
  193. package/dist/google-ads-Q37I2D5P.js +195 -0
  194. package/dist/google-ads-Q37I2D5P.js.map +1 -0
  195. package/dist/history-4II5QA4B.js +133 -0
  196. package/dist/history-DBIEYQHY.js +67 -0
  197. package/dist/hubspot-TTITJFBO.js +779 -0
  198. package/dist/ideas-V4Q6JDKV.js +32 -0
  199. package/dist/images-SP5REF6E.js +90 -0
  200. package/dist/ingest-574GIFAR.js +107 -0
  201. package/dist/ingest-IC4T76W6.js +23 -0
  202. package/dist/insights-ZIU6FJMS.js +122 -0
  203. package/dist/inspect-ATHYY6A2.js +189 -0
  204. package/dist/inspiration-P265QJ2H.js +53 -0
  205. package/dist/intent-E3UIVZBN.js +95 -0
  206. package/dist/keyword-gap-BG6M665A.js +130 -0
  207. package/dist/keyword-metrics-J4UPUDN7.js +197 -0
  208. package/dist/keywords-for-site-MWADFEO2.js +128 -0
  209. package/dist/keywords-for-site-MWADFEO2.js.map +1 -0
  210. package/dist/landing-R6DN7XLK.js +28 -0
  211. package/dist/languages-HORKPDNH.js +40 -0
  212. package/dist/languages-JSGWCC7Z.js +55 -0
  213. package/dist/leads-7EVHMNUF.js +293 -0
  214. package/dist/leads-JM6HUERX.js +90 -0
  215. package/dist/learn-LGS2F5TR.js +203 -0
  216. package/dist/learn-LGS2F5TR.js.map +1 -0
  217. package/dist/lighthouse-6ZC45E53.js +75 -0
  218. package/dist/line-item-writes-KUYEXSIH.js +208 -0
  219. package/dist/line-items-GIWLP3FL.js +103 -0
  220. package/dist/link-PVM7XJQI.js +64 -0
  221. package/dist/linkedin-WX54EAX6.js +1008 -0
  222. package/dist/list-4ZKQZBCL.js +151 -0
  223. package/dist/list-MCEFXC6L.js +63 -0
  224. package/dist/list-WR7QYTON.js +303 -0
  225. package/dist/locations-74TPQWAT.js +67 -0
  226. package/dist/locations-J4G5RNPH.js +40 -0
  227. package/dist/log-U6IWZGOF.js +92 -0
  228. package/dist/make-RXFHEGUI.js +593 -0
  229. package/dist/make-RXFHEGUI.js.map +1 -0
  230. package/dist/map-TWL7T4KP.js +404 -0
  231. package/dist/mcp-HVAVJGGS.js +476 -0
  232. package/dist/media-M7E6V2XU.js +15 -0
  233. package/dist/media-sources-JWGO23BZ.js +32 -0
  234. package/dist/members-5FAW4YE7.js +44 -0
  235. package/dist/meta-EZ4SY25M.js +69 -0
  236. package/dist/metrics-SQDJ5NQO.js +152 -0
  237. package/dist/models-7U3GRYHF.js +155 -0
  238. package/dist/normalize-GW4GZNVY.js +138 -0
  239. package/dist/options-NSUCENLU.js +121 -0
  240. package/dist/performance-FGCDWHMC.js +24 -0
  241. package/dist/pixels-45A55MOP.js +60 -0
  242. package/dist/promoted-tweet-writes-BPWTDESL.js +180 -0
  243. package/dist/promoted-tweets-OS3NHYVE.js +119 -0
  244. package/dist/publish-SXZEWBVJ.js +322 -0
  245. package/dist/query-IEZRY6HV.js +1341 -0
  246. package/dist/reddit-TF6K37SB.js +26 -0
  247. package/dist/refresh-APVDWXRZ.js +94 -0
  248. package/dist/release-32SEJU4L.js +60 -0
  249. package/dist/relevant-pages-OWMNUCP7.js +99 -0
  250. package/dist/remove-U64GTHLQ.js +50 -0
  251. package/dist/reopen-5VS233SF.js +63 -0
  252. package/dist/rerun-7Z45QOOO.js +85 -0
  253. package/dist/rerun-7Z45QOOO.js.map +1 -0
  254. package/dist/research-O7CJV5IS.js +62 -0
  255. package/dist/research-O7CJV5IS.js.map +1 -0
  256. package/dist/research-QYSQ6LW4.js +262 -0
  257. package/dist/reset-22FC7BXQ.js +54 -0
  258. package/dist/reset-47B5VPT4.js +54 -0
  259. package/dist/resolve-7KQGVTQT.js +121 -0
  260. package/dist/retry-J5UVLS72.js +62 -0
  261. package/dist/retry-UJ5UF4BM.js +60 -0
  262. package/dist/run-SI4FA32F.js +65 -0
  263. package/dist/run-TFLFBQU2.js +60 -0
  264. package/dist/scaffold-ad-SEXNE2K6.js +1549 -0
  265. package/dist/scaffold-ad-SEXNE2K6.js.map +1 -0
  266. package/dist/scaffold-static-ad-VBOL6CLN.js +966 -0
  267. package/dist/scaffold-static-ad-VBOL6CLN.js.map +1 -0
  268. package/dist/scaffold-video-Z37MIBDI.js +873 -0
  269. package/dist/scaffold-video-Z37MIBDI.js.map +1 -0
  270. package/dist/schedule-52ZM4KRQ.js +61 -0
  271. package/dist/scheduled-agents-PCWCQAKP.js +49 -0
  272. package/dist/schema-FY6ORDXZ.js +129 -0
  273. package/dist/search-NS7XNRZC.js +174 -0
  274. package/dist/search-UO5KJTYS.js +26 -0
  275. package/dist/select-4XCYVV2G.js +94 -0
  276. package/dist/select-4XCYVV2G.js.map +1 -0
  277. package/dist/set-prompt-TRJBYA3D.js +186 -0
  278. package/dist/set-prompt-TRJBYA3D.js.map +1 -0
  279. package/dist/setup-links-V3URI7DL.js +141 -0
  280. package/dist/site-WIQ7SSU3.js +177 -0
  281. package/dist/sources-DWJXOLEH.js +421 -0
  282. package/dist/sources-L453U5MT.js +30 -0
  283. package/dist/stale-6OVG6VME.js +63 -0
  284. package/dist/stale-6OVG6VME.js.map +1 -0
  285. package/dist/status-WXWU54WR.js +62 -0
  286. package/dist/studio-C5K3YX3P.js +49 -0
  287. package/dist/sync-CDZUTGV3.js +54 -0
  288. package/dist/sync-definition-BAJQUBE3.js +53 -0
  289. package/dist/tag-manager-DYZUOIAS.js +43 -0
  290. package/dist/tags-6RY23XOG.js +20 -0
  291. package/dist/tags-BHFQWNPL.js +224 -0
  292. package/dist/tags-SG3NVC3J.js +26 -0
  293. package/dist/tags-VN5HTL35.js +20 -0
  294. package/dist/tags-WR6PDIDR.js +20 -0
  295. package/dist/targeting-criteria-5EXP2NXF.js +113 -0
  296. package/dist/targets-WUVEJPSD.js +102 -0
  297. package/dist/templates-LOJQX2NG.js +178 -0
  298. package/dist/testimonials-6M5DXORT.js +32 -0
  299. package/dist/top-companies-E2OMMPSV.js +108 -0
  300. package/dist/translate-AW4CUKDA.js +598 -0
  301. package/dist/translate-AW4CUKDA.js.map +1 -0
  302. package/dist/triggers-MRXIDCSN.js +141 -0
  303. package/dist/unlink-HNL747YM.js +67 -0
  304. package/dist/unstage-OL2JDCLK.js +84 -0
  305. package/dist/update-4KGIT4BF.js +142 -0
  306. package/dist/update-JPBUF7M2.js +98 -0
  307. package/dist/update-RTTC3SAK.js +155 -0
  308. package/dist/update-YNNRX5B2.js +63 -0
  309. package/dist/upload-UIXPCSXJ.js +126 -0
  310. package/dist/url-options-GGXAL3J4.js +127 -0
  311. package/dist/url-params-K47CE7Y5.js +98 -0
  312. package/dist/validate-TD2BY4VE.js +89 -0
  313. package/dist/validate-TD2BY4VE.js.map +1 -0
  314. package/dist/videos-BP3BKNTY.js +39 -0
  315. package/dist/viewer-check-HFRUJ4ZU.js +69 -0
  316. package/dist/web-RPSGFN4U.js +140 -0
  317. package/dist/web-RPSGFN4U.js.map +1 -0
  318. package/dist/winning-ads-WUENRDVJ.js +62 -0
  319. package/dist/write-commands-4WARNR2T.js +1015 -0
  320. package/dist/write-commands-TAYGTJEZ.js +737 -0
  321. package/dist/x-VZCELH3P.js +47 -0
  322. package/package.json +1 -1
  323. package/dist/account-4H7QVBRK.js +0 -80
  324. package/dist/account-PCEZQUK7.js +0 -79
  325. package/dist/account-writes-AK42HGRM.js +0 -66
  326. package/dist/accounts-5AXLYU7P.js +0 -77
  327. package/dist/accounts-OSXDZZLY.js +0 -611
  328. package/dist/actions-HM4VVTGW.js +0 -55
  329. package/dist/ad-group-writes-QQS4223F.js +0 -170
  330. package/dist/ad-groups-WGPDPUI2.js +0 -68
  331. package/dist/ad-writes-XE2IE4DS.js +0 -174
  332. package/dist/add-4J2EF54O.js +0 -104
  333. package/dist/add-VZAY57M4.js +0 -280
  334. package/dist/ads-6UEDYT3O.js +0 -113
  335. package/dist/ads-BCOSQALY.js +0 -77
  336. package/dist/ads-NUME2UXH.js +0 -40
  337. package/dist/adsets-Q5DWGANV.js +0 -176
  338. package/dist/advertisers-WSNHNCBQ.js +0 -116
  339. package/dist/advertisers-WSNHNCBQ.js.map +0 -1
  340. package/dist/analytics-PHU7H5VY.js +0 -433
  341. package/dist/analytics-QTR2ZITZ.js +0 -1958
  342. package/dist/animate-3Z7HXOLE.js +0 -480
  343. package/dist/assign-IIAVNATI.js +0 -77
  344. package/dist/audience-size-2L7XMYJL.js +0 -94
  345. package/dist/audiences-AMRFZRZ7.js +0 -78
  346. package/dist/audiences-TGD5US2M.js +0 -268
  347. package/dist/audit-ZCUFJLUG.js +0 -151
  348. package/dist/autocomplete-6PYFCOMX.js +0 -107
  349. package/dist/autocomplete-6PYFCOMX.js.map +0 -1
  350. package/dist/avatars-OEK3FYKK.js +0 -38
  351. package/dist/bid-pricing-FDW3IY6G.js +0 -99
  352. package/dist/brand-OXYFSNA5.js +0 -22
  353. package/dist/brief-TBSXPEXI.js +0 -478
  354. package/dist/brief-TBSXPEXI.js.map +0 -1
  355. package/dist/campaign-groups-5GCFQT2W.js +0 -95
  356. package/dist/campaign-writes-3SJQSCUK.js +0 -165
  357. package/dist/campaign-writes-SXLZFYF6.js +0 -170
  358. package/dist/campaigns-7QDDWZ76.js +0 -107
  359. package/dist/campaigns-D6B6Z67Y.js +0 -110
  360. package/dist/campaigns-SYEOFKFV.js +0 -109
  361. package/dist/campaigns-YS3OGQXO.js +0 -76
  362. package/dist/canvas-B6DPRQGN.js +0 -46
  363. package/dist/capabilities-GVHPHH2G.js +0 -144
  364. package/dist/catalog-TNNG66MH.js +0 -66
  365. package/dist/catalog-TNNG66MH.js.map +0 -1
  366. package/dist/catalogs-BRXEDE56.js +0 -128
  367. package/dist/changes-6QBJMGJC.js +0 -135
  368. package/dist/chatgpt-7W75X3ER.js +0 -47
  369. package/dist/chats-54CWM7DL.js +0 -262
  370. package/dist/chunk-2SCPDSFN.js +0 -150
  371. package/dist/chunk-3X3446TG.js +0 -169
  372. package/dist/chunk-4SJDDGPV.js +0 -1411
  373. package/dist/chunk-4SNOWJV7.js +0 -103
  374. package/dist/chunk-5EEDEVOR.js +0 -486
  375. package/dist/chunk-5VC6IK7B.js +0 -390
  376. package/dist/chunk-654U6NU6.js +0 -534
  377. package/dist/chunk-6HJAHLLA.js +0 -6086
  378. package/dist/chunk-6HJAHLLA.js.map +0 -1
  379. package/dist/chunk-6TCDQSM7.js +0 -111
  380. package/dist/chunk-6YYEBLYI.js +0 -92
  381. package/dist/chunk-7FVWIZHM.js +0 -382
  382. package/dist/chunk-7J6EHOH6.js +0 -274
  383. package/dist/chunk-7JUUKYKG.js +0 -57
  384. package/dist/chunk-ACFWVULZ.js +0 -304
  385. package/dist/chunk-ACFWVULZ.js.map +0 -1
  386. package/dist/chunk-AO5UQQLJ.js +0 -197
  387. package/dist/chunk-CKU4WYTF.js +0 -175
  388. package/dist/chunk-CLMM6P6B.js +0 -1751
  389. package/dist/chunk-CLMM6P6B.js.map +0 -1
  390. package/dist/chunk-DE6ANJLU.js +0 -310
  391. package/dist/chunk-DZSIUEGH.js +0 -136
  392. package/dist/chunk-E5IFTZJ3.js +0 -622
  393. package/dist/chunk-EAHP7L2R.js +0 -363
  394. package/dist/chunk-EPMN4BK7.js +0 -217
  395. package/dist/chunk-EVYXTT7V.js +0 -417
  396. package/dist/chunk-F46KAIBS.js +0 -159
  397. package/dist/chunk-FGH4Z5K5.js +0 -433
  398. package/dist/chunk-FTWJFDIN.js +0 -23992
  399. package/dist/chunk-FTWJFDIN.js.map +0 -1
  400. package/dist/chunk-FYQPB2SS.js +0 -207
  401. package/dist/chunk-GTK46DE3.js +0 -346
  402. package/dist/chunk-H2QNBOPS.js +0 -819
  403. package/dist/chunk-H2QNBOPS.js.map +0 -1
  404. package/dist/chunk-HDWKLFF5.js +0 -96
  405. package/dist/chunk-HO3IUJ4K.js +0 -70
  406. package/dist/chunk-HO3IUJ4K.js.map +0 -1
  407. package/dist/chunk-HRYOZUSK.js +0 -1711
  408. package/dist/chunk-HRYOZUSK.js.map +0 -1
  409. package/dist/chunk-HYCIBVDW.js +0 -98
  410. package/dist/chunk-HYUUH4BE.js +0 -3149
  411. package/dist/chunk-HYUUH4BE.js.map +0 -1
  412. package/dist/chunk-IH4UQ2OK.js +0 -6668
  413. package/dist/chunk-IH4UQ2OK.js.map +0 -1
  414. package/dist/chunk-IKYNOT57.js +0 -131
  415. package/dist/chunk-IKYNOT57.js.map +0 -1
  416. package/dist/chunk-J5IU4OX2.js +0 -297
  417. package/dist/chunk-KMEMA7AZ.js +0 -496
  418. package/dist/chunk-KV5BCSUR.js +0 -337
  419. package/dist/chunk-KWAOTV7F.js +0 -830
  420. package/dist/chunk-L27H2R2N.js +0 -174
  421. package/dist/chunk-NK2UFFVH.js +0 -19
  422. package/dist/chunk-NSA6HRG6.js +0 -60
  423. package/dist/chunk-NTPXZU3V.js +0 -163
  424. package/dist/chunk-OAQPHP6V.js +0 -592
  425. package/dist/chunk-OBDAYP2P.js +0 -3155
  426. package/dist/chunk-OBDAYP2P.js.map +0 -1
  427. package/dist/chunk-PIWMNKWI.js +0 -164
  428. package/dist/chunk-PIWMNKWI.js.map +0 -1
  429. package/dist/chunk-RB5DB3WN.js +0 -1079
  430. package/dist/chunk-RCQJHKK5.js +0 -4374
  431. package/dist/chunk-RCQJHKK5.js.map +0 -1
  432. package/dist/chunk-SKT3SAHG.js +0 -133
  433. package/dist/chunk-T4DD5YMP.js +0 -166
  434. package/dist/chunk-TBEUMOEL.js +0 -95
  435. package/dist/chunk-TBEUMOEL.js.map +0 -1
  436. package/dist/chunk-V2X3KK52.js +0 -420
  437. package/dist/chunk-V2X3KK52.js.map +0 -1
  438. package/dist/chunk-V5WSJP5A.js +0 -51
  439. package/dist/chunk-VJZHVOA4.js +0 -509
  440. package/dist/chunk-VJZHVOA4.js.map +0 -1
  441. package/dist/chunk-WRIC2RPQ.js +0 -23
  442. package/dist/chunk-WTOYCUKH.js +0 -84
  443. package/dist/chunk-WYCVJIHD.js +0 -638
  444. package/dist/chunk-WYCVJIHD.js.map +0 -1
  445. package/dist/chunk-XDNEG2H6.js +0 -5189
  446. package/dist/chunk-XDNEG2H6.js.map +0 -1
  447. package/dist/chunk-XG3XCHN6.js +0 -26
  448. package/dist/chunk-XML7AJM3.js +0 -1854
  449. package/dist/chunk-XML7AJM3.js.map +0 -1
  450. package/dist/chunk-XV6XCFF7.js +0 -494
  451. package/dist/chunk-YUPRCOEN.js +0 -455
  452. package/dist/chunk-ZNBDKK4Y.js +0 -76
  453. package/dist/chunk-ZZQXVYUY.js +0 -66
  454. package/dist/claim-CIASHKMC.js +0 -197
  455. package/dist/companies-ECVMO24S.js +0 -195
  456. package/dist/complete-32CPBFIG.js +0 -81
  457. package/dist/connect-OJSOM6PY.js +0 -36
  458. package/dist/conversation-7FHN5ESN.js +0 -93
  459. package/dist/conversion-report-XQBJ6LG4.js +0 -125
  460. package/dist/conversion-upload-command-BBUXLFT3.js +0 -438
  461. package/dist/conversion-writes-UBCVXP2E.js +0 -120
  462. package/dist/conversions-7YJDNZ7Y.js +0 -135
  463. package/dist/conversions-D236RTUK.js +0 -76
  464. package/dist/countries-FYHM3IMJ.js +0 -82
  465. package/dist/create-2TBDXHAM.js +0 -130
  466. package/dist/create-FE5QLW7V.js +0 -207
  467. package/dist/create-OYT76OMJ.js +0 -235
  468. package/dist/create-ZGRL7YCV.js +0 -59
  469. package/dist/creatives-5MUTX4DQ.js +0 -51
  470. package/dist/creatives-IUB57I3T.js +0 -182
  471. package/dist/creatives-UEPLNCPN.js +0 -87
  472. package/dist/credentials-AETHKP5T.js +0 -1055
  473. package/dist/credentials-AETHKP5T.js.map +0 -1
  474. package/dist/critique-C53EJDPA.js +0 -214
  475. package/dist/critique-C53EJDPA.js.map +0 -1
  476. package/dist/critique-T7HJ42D4.js +0 -1449
  477. package/dist/crm-JP4UOPMN.js +0 -318
  478. package/dist/crm-KH6XX2TT.js +0 -224
  479. package/dist/currency-DJDVIR3C.js +0 -88
  480. package/dist/custom-conversions-2VLJGPRV.js +0 -125
  481. package/dist/customers-7I7UY5PS.js +0 -56
  482. package/dist/delete-6IOUDEWY.js +0 -54
  483. package/dist/delete-ODFKNHAI.js +0 -63
  484. package/dist/delete-RAETUVO2.js +0 -66
  485. package/dist/demographics-2FTDKPBD.js +0 -138
  486. package/dist/discard-ZX5TLFYH.js +0 -66
  487. package/dist/discover-M3ZKKFEL.js +0 -172
  488. package/dist/domain-TH7KIC2T.js +0 -98
  489. package/dist/draft-CRE2Y24G.js +0 -328
  490. package/dist/draft-MNFJ4G3C.js +0 -281
  491. package/dist/draft-S2FSQOJN.js +0 -217
  492. package/dist/draft-SH25PKST.js +0 -107
  493. package/dist/draft-YHUIFDDR.js +0 -306
  494. package/dist/facets-6B2U4BSM.js +0 -114
  495. package/dist/feedback-QGSAJJVC.js +0 -66
  496. package/dist/feedback-QGSAJJVC.js.map +0 -1
  497. package/dist/feedback-record-NUAJ6UBL.js +0 -176
  498. package/dist/feedback-record-NUAJ6UBL.js.map +0 -1
  499. package/dist/fetch-UTTJAOLC.js +0 -171
  500. package/dist/fetch-UTTJAOLC.js.map +0 -1
  501. package/dist/fit-FJ5CLQS4.js +0 -43
  502. package/dist/flows-OGGSWWGT.js +0 -244
  503. package/dist/follow-DUIEGDVK.js +0 -82
  504. package/dist/follow-competitors-IT5ZVJPE.js +0 -131
  505. package/dist/fonts-GCJRLEGD.js +0 -34
  506. package/dist/forecast-2AGTFMXH.js +0 -104
  507. package/dist/funnel-7U55LNJ4.js +0 -837
  508. package/dist/generate-DMQUS665.js +0 -262
  509. package/dist/get-IRJIHOQK.js +0 -78
  510. package/dist/get-N7FR6NFX.js +0 -54
  511. package/dist/google-NYRI2NDZ.js +0 -1872
  512. package/dist/google-NYRI2NDZ.js.map +0 -1
  513. package/dist/history-PSNJAUTW.js +0 -133
  514. package/dist/history-Q3QCT64S.js +0 -67
  515. package/dist/hubspot-2NHL47R2.js +0 -779
  516. package/dist/ideas-22MRXKT7.js +0 -32
  517. package/dist/images-LXFWEON7.js +0 -90
  518. package/dist/ingest-W7VEDEYD.js +0 -107
  519. package/dist/ingest-ZN3DEZHY.js +0 -23
  520. package/dist/insights-LNAXV2CG.js +0 -122
  521. package/dist/inspect-3LBIHMMP.js +0 -189
  522. package/dist/inspiration-I4MMKAWA.js +0 -53
  523. package/dist/intent-ICKFJRT2.js +0 -95
  524. package/dist/keyword-gap-NGPH32FN.js +0 -130
  525. package/dist/keyword-metrics-PZXFB4NG.js +0 -197
  526. package/dist/keywords-for-site-RH47P4GJ.js +0 -124
  527. package/dist/keywords-for-site-RH47P4GJ.js.map +0 -1
  528. package/dist/landing-D7QS42GK.js +0 -28
  529. package/dist/languages-JDYL2N5F.js +0 -40
  530. package/dist/languages-JMVNOHMG.js +0 -55
  531. package/dist/leads-ARUWPHBM.js +0 -293
  532. package/dist/leads-E22XFSX2.js +0 -90
  533. package/dist/learn-Y4KIZNRF.js +0 -204
  534. package/dist/learn-Y4KIZNRF.js.map +0 -1
  535. package/dist/lighthouse-NQBUCHTW.js +0 -75
  536. package/dist/line-item-writes-KA5PVKFO.js +0 -208
  537. package/dist/line-items-3ZFFZCNH.js +0 -103
  538. package/dist/link-AEU6BV75.js +0 -64
  539. package/dist/linkedin-WCB2H5NH.js +0 -1008
  540. package/dist/list-OLX7AI3O.js +0 -63
  541. package/dist/list-PAMYQS4X.js +0 -151
  542. package/dist/list-TOUUGHMS.js +0 -303
  543. package/dist/locations-2NKBJKBT.js +0 -67
  544. package/dist/locations-S4U6IJIS.js +0 -40
  545. package/dist/log-UGVWSK7Z.js +0 -92
  546. package/dist/make-3PZLTEXT.js +0 -516
  547. package/dist/make-3PZLTEXT.js.map +0 -1
  548. package/dist/map-BW4CHSIO.js +0 -404
  549. package/dist/mcp-JOXKA5HY.js +0 -476
  550. package/dist/media-53DJRC4N.js +0 -15
  551. package/dist/media-sources-SJZUOMI2.js +0 -32
  552. package/dist/members-VAX6KAFN.js +0 -44
  553. package/dist/meta-A7KM6TF5.js +0 -69
  554. package/dist/metrics-AY4RP54F.js +0 -152
  555. package/dist/models-5NTC7A5G.js +0 -155
  556. package/dist/normalize-IVQ7I54Z.js +0 -138
  557. package/dist/options-V7C6CU6M.js +0 -121
  558. package/dist/performance-L6RJZPXX.js +0 -24
  559. package/dist/pixels-TZPF746S.js +0 -60
  560. package/dist/promoted-tweet-writes-DBATH765.js +0 -180
  561. package/dist/promoted-tweets-AU3XF3JD.js +0 -119
  562. package/dist/publish-G6DYVT4S.js +0 -322
  563. package/dist/query-CPZZNMDY.js +0 -1341
  564. package/dist/reddit-S2S6C4RT.js +0 -26
  565. package/dist/refresh-ARJ2SOMY.js +0 -94
  566. package/dist/release-3WCBAHPO.js +0 -60
  567. package/dist/relevant-pages-MTMFMBPD.js +0 -99
  568. package/dist/remove-FUAARCSC.js +0 -50
  569. package/dist/reopen-PZI5H4X2.js +0 -63
  570. package/dist/rerun-AUP4XT6T.js +0 -86
  571. package/dist/rerun-AUP4XT6T.js.map +0 -1
  572. package/dist/research-SY3QRGOC.js +0 -262
  573. package/dist/research-TISR736S.js +0 -59
  574. package/dist/research-TISR736S.js.map +0 -1
  575. package/dist/reset-E6F5NXOI.js +0 -54
  576. package/dist/reset-ZWM7DDD7.js +0 -54
  577. package/dist/resolve-I5R5ELMZ.js +0 -121
  578. package/dist/retry-7CFZTKWI.js +0 -60
  579. package/dist/retry-JO3JXXT2.js +0 -62
  580. package/dist/run-JR6SILHL.js +0 -61
  581. package/dist/run-UKB647DI.js +0 -65
  582. package/dist/scaffold-ad-BYGVU7MT.js +0 -1550
  583. package/dist/scaffold-ad-BYGVU7MT.js.map +0 -1
  584. package/dist/scaffold-static-ad-U57V5UV3.js +0 -948
  585. package/dist/scaffold-static-ad-U57V5UV3.js.map +0 -1
  586. package/dist/scaffold-video-POZTINEV.js +0 -874
  587. package/dist/scaffold-video-POZTINEV.js.map +0 -1
  588. package/dist/schedule-SOAHLZZF.js +0 -61
  589. package/dist/scheduled-agents-K5WU7SVJ.js +0 -49
  590. package/dist/schema-SOPL6GJP.js +0 -129
  591. package/dist/search-5VUDFOHI.js +0 -174
  592. package/dist/search-XUIVHGAY.js +0 -26
  593. package/dist/select-T36UH4HL.js +0 -95
  594. package/dist/select-T36UH4HL.js.map +0 -1
  595. package/dist/set-prompt-Y4X7GV2Q.js +0 -187
  596. package/dist/set-prompt-Y4X7GV2Q.js.map +0 -1
  597. package/dist/setup-links-KFROCISS.js +0 -141
  598. package/dist/site-MXPKMRQT.js +0 -177
  599. package/dist/sources-FFHNWVLV.js +0 -30
  600. package/dist/sources-MLDLMEDT.js +0 -421
  601. package/dist/stale-UXL4X4AD.js +0 -64
  602. package/dist/stale-UXL4X4AD.js.map +0 -1
  603. package/dist/status-M47G5HD4.js +0 -62
  604. package/dist/studio-HUEBE6DS.js +0 -49
  605. package/dist/sync-HS7VZJ2H.js +0 -54
  606. package/dist/sync-definition-PY6REQ4J.js +0 -54
  607. package/dist/tag-manager-HREEYGVM.js +0 -43
  608. package/dist/tags-DIXLYB5P.js +0 -224
  609. package/dist/tags-DYRZTYHD.js +0 -20
  610. package/dist/tags-MRG56YOE.js +0 -26
  611. package/dist/tags-WAW6MQAY.js +0 -20
  612. package/dist/tags-Y4HHJJGE.js +0 -20
  613. package/dist/targeting-criteria-5UUESFWC.js +0 -113
  614. package/dist/targets-COZPVG52.js +0 -102
  615. package/dist/templates-75VFYZ3E.js +0 -178
  616. package/dist/testimonials-WJBRWLNW.js +0 -32
  617. package/dist/top-companies-C2R4FG6H.js +0 -108
  618. package/dist/translate-RYAJAFV7.js +0 -599
  619. package/dist/translate-RYAJAFV7.js.map +0 -1
  620. package/dist/triggers-5UHVJPBV.js +0 -141
  621. package/dist/unlink-PLOOAGM3.js +0 -67
  622. package/dist/unstage-JIIOTBTF.js +0 -84
  623. package/dist/update-G6R5ZHUI.js +0 -63
  624. package/dist/update-QYM6U7LL.js +0 -142
  625. package/dist/update-RCP7F5L5.js +0 -98
  626. package/dist/update-RGVNTA5X.js +0 -155
  627. package/dist/upload-EEJ34Q3Y.js +0 -126
  628. package/dist/url-options-QEWKRKZ3.js +0 -127
  629. package/dist/url-params-2G5M2B3J.js +0 -98
  630. package/dist/validate-M33VLUG4.js +0 -90
  631. package/dist/validate-M33VLUG4.js.map +0 -1
  632. package/dist/videos-FVVID55J.js +0 -39
  633. package/dist/viewer-check-2Q3WHSEL.js +0 -70
  634. package/dist/web-WUGLSULO.js +0 -135
  635. package/dist/web-WUGLSULO.js.map +0 -1
  636. package/dist/winning-ads-OSRFHVLV.js +0 -62
  637. package/dist/write-commands-CLJOD2XF.js +0 -1015
  638. package/dist/write-commands-CT74VHH6.js +0 -737
  639. package/dist/x-EBKLJJPJ.js +0 -47
  640. /package/dist/{account-PCEZQUK7.js.map → account-2ZMZFPIU.js.map} +0 -0
  641. /package/dist/{account-4H7QVBRK.js.map → account-F6MHQ64I.js.map} +0 -0
  642. /package/dist/{account-writes-AK42HGRM.js.map → account-writes-ISE4U2FQ.js.map} +0 -0
  643. /package/dist/{accounts-OSXDZZLY.js.map → accounts-RHGN5WMU.js.map} +0 -0
  644. /package/dist/{accounts-5AXLYU7P.js.map → accounts-VINHZRWA.js.map} +0 -0
  645. /package/dist/{actions-HM4VVTGW.js.map → actions-5F4ZP6M4.js.map} +0 -0
  646. /package/dist/{ad-group-writes-QQS4223F.js.map → ad-group-writes-UU5NNKSO.js.map} +0 -0
  647. /package/dist/{ad-groups-WGPDPUI2.js.map → ad-groups-CGFXZNIA.js.map} +0 -0
  648. /package/dist/{ad-writes-XE2IE4DS.js.map → ad-writes-NALDYWOR.js.map} +0 -0
  649. /package/dist/{add-4J2EF54O.js.map → add-KBPMSK2P.js.map} +0 -0
  650. /package/dist/{add-VZAY57M4.js.map → add-OGH4DZZ5.js.map} +0 -0
  651. /package/dist/{ads-NUME2UXH.js.map → ads-56OWZBXZ.js.map} +0 -0
  652. /package/dist/{ads-6UEDYT3O.js.map → ads-H7GH7A26.js.map} +0 -0
  653. /package/dist/{ads-BCOSQALY.js.map → ads-PV7GZXPR.js.map} +0 -0
  654. /package/dist/{adsets-Q5DWGANV.js.map → adsets-H7QT42U6.js.map} +0 -0
  655. /package/dist/{analytics-PHU7H5VY.js.map → analytics-5FALU2GL.js.map} +0 -0
  656. /package/dist/{analytics-QTR2ZITZ.js.map → analytics-JVZKN735.js.map} +0 -0
  657. /package/dist/{animate-3Z7HXOLE.js.map → animate-FWWHSYPL.js.map} +0 -0
  658. /package/dist/{assign-IIAVNATI.js.map → assign-KLYZ6USE.js.map} +0 -0
  659. /package/dist/{audience-size-2L7XMYJL.js.map → audience-size-JHB42DB4.js.map} +0 -0
  660. /package/dist/{audiences-AMRFZRZ7.js.map → audiences-JACGRBNN.js.map} +0 -0
  661. /package/dist/{audiences-TGD5US2M.js.map → audiences-VEKGLWBG.js.map} +0 -0
  662. /package/dist/{audit-ZCUFJLUG.js.map → audit-5XH7WZIM.js.map} +0 -0
  663. /package/dist/{avatars-OEK3FYKK.js.map → avatars-N4SRNQI7.js.map} +0 -0
  664. /package/dist/{bid-pricing-FDW3IY6G.js.map → bid-pricing-VYLVGU26.js.map} +0 -0
  665. /package/dist/{brand-OXYFSNA5.js.map → brand-ASBS2HZM.js.map} +0 -0
  666. /package/dist/{campaign-groups-5GCFQT2W.js.map → campaign-groups-ATE2DE4V.js.map} +0 -0
  667. /package/dist/{campaign-writes-3SJQSCUK.js.map → campaign-writes-ETT57KLQ.js.map} +0 -0
  668. /package/dist/{campaign-writes-SXLZFYF6.js.map → campaign-writes-SX52CJYW.js.map} +0 -0
  669. /package/dist/{campaigns-7QDDWZ76.js.map → campaigns-FGBAS6AZ.js.map} +0 -0
  670. /package/dist/{campaigns-SYEOFKFV.js.map → campaigns-J6VZBIV6.js.map} +0 -0
  671. /package/dist/{campaigns-D6B6Z67Y.js.map → campaigns-WBEG5QA4.js.map} +0 -0
  672. /package/dist/{campaigns-YS3OGQXO.js.map → campaigns-X3DPCCSN.js.map} +0 -0
  673. /package/dist/{canvas-B6DPRQGN.js.map → canvas-K7IN7HLO.js.map} +0 -0
  674. /package/dist/{capabilities-GVHPHH2G.js.map → capabilities-RDAERPYY.js.map} +0 -0
  675. /package/dist/{catalogs-BRXEDE56.js.map → catalogs-G3YEVG6S.js.map} +0 -0
  676. /package/dist/{changes-6QBJMGJC.js.map → changes-TP7ZZHB3.js.map} +0 -0
  677. /package/dist/{chatgpt-7W75X3ER.js.map → chatgpt-QNUN63YS.js.map} +0 -0
  678. /package/dist/{chats-54CWM7DL.js.map → chats-YIAQGQ3X.js.map} +0 -0
  679. /package/dist/{chunk-7FVWIZHM.js.map → chunk-2GK33EJV.js.map} +0 -0
  680. /package/dist/{chunk-7J6EHOH6.js.map → chunk-35XWJEWH.js.map} +0 -0
  681. /package/dist/{chunk-RB5DB3WN.js.map → chunk-4NBVGARW.js.map} +0 -0
  682. /package/dist/{chunk-OAQPHP6V.js.map → chunk-65RIB7A6.js.map} +0 -0
  683. /package/dist/{chunk-CKU4WYTF.js.map → chunk-6DB2B3GF.js.map} +0 -0
  684. /package/dist/{chunk-EAHP7L2R.js.map → chunk-7SDFKGQ4.js.map} +0 -0
  685. /package/dist/{chunk-NK2UFFVH.js.map → chunk-ACANMASG.js.map} +0 -0
  686. /package/dist/{chunk-HDWKLFF5.js.map → chunk-ALTBBAYU.js.map} +0 -0
  687. /package/dist/{chunk-FGH4Z5K5.js.map → chunk-ANCSKUWI.js.map} +0 -0
  688. /package/dist/{chunk-AO5UQQLJ.js.map → chunk-BA7FDXQC.js.map} +0 -0
  689. /package/dist/{chunk-654U6NU6.js.map → chunk-BNCW67EM.js.map} +0 -0
  690. /package/dist/{chunk-EPMN4BK7.js.map → chunk-BSC33FLJ.js.map} +0 -0
  691. /package/dist/{chunk-DE6ANJLU.js.map → chunk-DKGTQSLR.js.map} +0 -0
  692. /package/dist/{chunk-FYQPB2SS.js.map → chunk-DR34ZTWD.js.map} +0 -0
  693. /package/dist/{chunk-NTPXZU3V.js.map → chunk-E4MDJBLO.js.map} +0 -0
  694. /package/dist/{chunk-YUPRCOEN.js.map → chunk-EH4C4CZK.js.map} +0 -0
  695. /package/dist/{chunk-L27H2R2N.js.map → chunk-FXED3VZK.js.map} +0 -0
  696. /package/dist/{chunk-KV5BCSUR.js.map → chunk-G7UTTEBS.js.map} +0 -0
  697. /package/dist/{chunk-T4DD5YMP.js.map → chunk-GIJT3A5U.js.map} +0 -0
  698. /package/dist/{chunk-KWAOTV7F.js.map → chunk-GX6VAHY7.js.map} +0 -0
  699. /package/dist/{chunk-DZSIUEGH.js.map → chunk-HIPDMQZ6.js.map} +0 -0
  700. /package/dist/{chunk-XG3XCHN6.js.map → chunk-HQSCJYZO.js.map} +0 -0
  701. /package/dist/{chunk-V5WSJP5A.js.map → chunk-HZ5DR5MX.js.map} +0 -0
  702. /package/dist/{chunk-5VC6IK7B.js.map → chunk-IM52NHGL.js.map} +0 -0
  703. /package/dist/{chunk-WTOYCUKH.js.map → chunk-K3PN7TN5.js.map} +0 -0
  704. /package/dist/{chunk-HYCIBVDW.js.map → chunk-KQTYTCKQ.js.map} +0 -0
  705. /package/dist/{chunk-2SCPDSFN.js.map → chunk-LIQ4SQ2T.js.map} +0 -0
  706. /package/dist/{chunk-3X3446TG.js.map → chunk-MADAAZZV.js.map} +0 -0
  707. /package/dist/{chunk-ZZQXVYUY.js.map → chunk-MLU6STIN.js.map} +0 -0
  708. /package/dist/{chunk-7JUUKYKG.js.map → chunk-PDTB5EX6.js.map} +0 -0
  709. /package/dist/{chunk-E5IFTZJ3.js.map → chunk-SB3GZFCV.js.map} +0 -0
  710. /package/dist/{chunk-XV6XCFF7.js.map → chunk-T3BDNJIX.js.map} +0 -0
  711. /package/dist/{chunk-KMEMA7AZ.js.map → chunk-TIOQ7ZFQ.js.map} +0 -0
  712. /package/dist/{chunk-SKT3SAHG.js.map → chunk-U3HAMW5W.js.map} +0 -0
  713. /package/dist/{chunk-5EEDEVOR.js.map → chunk-U6SYRIOB.js.map} +0 -0
  714. /package/dist/{chunk-F46KAIBS.js.map → chunk-UC6BWM5J.js.map} +0 -0
  715. /package/dist/{chunk-ZNBDKK4Y.js.map → chunk-ULJ5RFOV.js.map} +0 -0
  716. /package/dist/{chunk-GTK46DE3.js.map → chunk-VAISMQQB.js.map} +0 -0
  717. /package/dist/{chunk-WRIC2RPQ.js.map → chunk-VDHQJ6HD.js.map} +0 -0
  718. /package/dist/{chunk-6TCDQSM7.js.map → chunk-VMDAXFRI.js.map} +0 -0
  719. /package/dist/{chunk-EVYXTT7V.js.map → chunk-XCM6XWOB.js.map} +0 -0
  720. /package/dist/{chunk-NSA6HRG6.js.map → chunk-XMD4SHFI.js.map} +0 -0
  721. /package/dist/{chunk-4SJDDGPV.js.map → chunk-Y6QAJNKP.js.map} +0 -0
  722. /package/dist/{chunk-4SNOWJV7.js.map → chunk-YBP7O5P4.js.map} +0 -0
  723. /package/dist/{chunk-J5IU4OX2.js.map → chunk-YC2TQ3VC.js.map} +0 -0
  724. /package/dist/{chunk-6YYEBLYI.js.map → chunk-ZPU3WDVK.js.map} +0 -0
  725. /package/dist/{claim-CIASHKMC.js.map → claim-V4F5GZJK.js.map} +0 -0
  726. /package/dist/{companies-ECVMO24S.js.map → companies-NJGJ7XNN.js.map} +0 -0
  727. /package/dist/{complete-32CPBFIG.js.map → complete-MGNF5OAK.js.map} +0 -0
  728. /package/dist/{connect-OJSOM6PY.js.map → connect-PJOTRTT4.js.map} +0 -0
  729. /package/dist/{conversation-7FHN5ESN.js.map → conversation-4DM26FRD.js.map} +0 -0
  730. /package/dist/{conversion-report-XQBJ6LG4.js.map → conversion-report-N4HANYOB.js.map} +0 -0
  731. /package/dist/{conversion-upload-command-BBUXLFT3.js.map → conversion-upload-command-TZTHU2CD.js.map} +0 -0
  732. /package/dist/{conversion-writes-UBCVXP2E.js.map → conversion-writes-LW4HQKK5.js.map} +0 -0
  733. /package/dist/{conversions-7YJDNZ7Y.js.map → conversions-JGECVZSY.js.map} +0 -0
  734. /package/dist/{conversions-D236RTUK.js.map → conversions-TS723AZV.js.map} +0 -0
  735. /package/dist/{countries-FYHM3IMJ.js.map → countries-ESAKTQAE.js.map} +0 -0
  736. /package/dist/{create-FE5QLW7V.js.map → create-DSGQFBI7.js.map} +0 -0
  737. /package/dist/{create-ZGRL7YCV.js.map → create-I2KVDTCQ.js.map} +0 -0
  738. /package/dist/{create-2TBDXHAM.js.map → create-SBQWVLXG.js.map} +0 -0
  739. /package/dist/{create-OYT76OMJ.js.map → create-WOHPIGBK.js.map} +0 -0
  740. /package/dist/{creatives-IUB57I3T.js.map → creatives-4JGVZQGC.js.map} +0 -0
  741. /package/dist/{creatives-5MUTX4DQ.js.map → creatives-DWO5KEQC.js.map} +0 -0
  742. /package/dist/{creatives-UEPLNCPN.js.map → creatives-PSWCNY7U.js.map} +0 -0
  743. /package/dist/{critique-T7HJ42D4.js.map → critique-TIZJ5GFM.js.map} +0 -0
  744. /package/dist/{crm-KH6XX2TT.js.map → crm-2WAR565U.js.map} +0 -0
  745. /package/dist/{crm-JP4UOPMN.js.map → crm-VDXUO2YU.js.map} +0 -0
  746. /package/dist/{currency-DJDVIR3C.js.map → currency-XCGKQ7FE.js.map} +0 -0
  747. /package/dist/{custom-conversions-2VLJGPRV.js.map → custom-conversions-6P555U2K.js.map} +0 -0
  748. /package/dist/{customers-7I7UY5PS.js.map → customers-ATENMXDO.js.map} +0 -0
  749. /package/dist/{delete-6IOUDEWY.js.map → delete-AVMZYNVT.js.map} +0 -0
  750. /package/dist/{delete-ODFKNHAI.js.map → delete-H744GNS4.js.map} +0 -0
  751. /package/dist/{delete-RAETUVO2.js.map → delete-OEYPFATY.js.map} +0 -0
  752. /package/dist/{demographics-2FTDKPBD.js.map → demographics-M5LJF3RZ.js.map} +0 -0
  753. /package/dist/{discard-ZX5TLFYH.js.map → discard-72I6SM7G.js.map} +0 -0
  754. /package/dist/{discover-M3ZKKFEL.js.map → discover-BJPZNXUQ.js.map} +0 -0
  755. /package/dist/{domain-TH7KIC2T.js.map → domain-R4EIZD2W.js.map} +0 -0
  756. /package/dist/{draft-S2FSQOJN.js.map → draft-34C3F5U4.js.map} +0 -0
  757. /package/dist/{draft-CRE2Y24G.js.map → draft-BBFJNZ5X.js.map} +0 -0
  758. /package/dist/{draft-SH25PKST.js.map → draft-BV2QRPZ4.js.map} +0 -0
  759. /package/dist/{draft-MNFJ4G3C.js.map → draft-THPZFASM.js.map} +0 -0
  760. /package/dist/{draft-YHUIFDDR.js.map → draft-YYYRWF7M.js.map} +0 -0
  761. /package/dist/{facets-6B2U4BSM.js.map → facets-F2H52MS4.js.map} +0 -0
  762. /package/dist/{fit-FJ5CLQS4.js.map → fit-2CA4JH7N.js.map} +0 -0
  763. /package/dist/{flows-OGGSWWGT.js.map → flows-CWXCXEUD.js.map} +0 -0
  764. /package/dist/{follow-DUIEGDVK.js.map → follow-FN7LV3WV.js.map} +0 -0
  765. /package/dist/{follow-competitors-IT5ZVJPE.js.map → follow-competitors-MKXFHLXB.js.map} +0 -0
  766. /package/dist/{fonts-GCJRLEGD.js.map → fonts-F2XUCIIW.js.map} +0 -0
  767. /package/dist/{forecast-2AGTFMXH.js.map → forecast-IDKJYM2B.js.map} +0 -0
  768. /package/dist/{funnel-7U55LNJ4.js.map → funnel-RLGQGYKO.js.map} +0 -0
  769. /package/dist/{generate-DMQUS665.js.map → generate-MMBYB44G.js.map} +0 -0
  770. /package/dist/{get-N7FR6NFX.js.map → get-C6UQ22HH.js.map} +0 -0
  771. /package/dist/{get-IRJIHOQK.js.map → get-EEUR6SAW.js.map} +0 -0
  772. /package/dist/{history-PSNJAUTW.js.map → history-4II5QA4B.js.map} +0 -0
  773. /package/dist/{history-Q3QCT64S.js.map → history-DBIEYQHY.js.map} +0 -0
  774. /package/dist/{hubspot-2NHL47R2.js.map → hubspot-TTITJFBO.js.map} +0 -0
  775. /package/dist/{ideas-22MRXKT7.js.map → ideas-V4Q6JDKV.js.map} +0 -0
  776. /package/dist/{images-LXFWEON7.js.map → images-SP5REF6E.js.map} +0 -0
  777. /package/dist/{ingest-W7VEDEYD.js.map → ingest-574GIFAR.js.map} +0 -0
  778. /package/dist/{ingest-ZN3DEZHY.js.map → ingest-IC4T76W6.js.map} +0 -0
  779. /package/dist/{insights-LNAXV2CG.js.map → insights-ZIU6FJMS.js.map} +0 -0
  780. /package/dist/{inspect-3LBIHMMP.js.map → inspect-ATHYY6A2.js.map} +0 -0
  781. /package/dist/{inspiration-I4MMKAWA.js.map → inspiration-P265QJ2H.js.map} +0 -0
  782. /package/dist/{intent-ICKFJRT2.js.map → intent-E3UIVZBN.js.map} +0 -0
  783. /package/dist/{keyword-gap-NGPH32FN.js.map → keyword-gap-BG6M665A.js.map} +0 -0
  784. /package/dist/{keyword-metrics-PZXFB4NG.js.map → keyword-metrics-J4UPUDN7.js.map} +0 -0
  785. /package/dist/{landing-D7QS42GK.js.map → landing-R6DN7XLK.js.map} +0 -0
  786. /package/dist/{languages-JDYL2N5F.js.map → languages-HORKPDNH.js.map} +0 -0
  787. /package/dist/{languages-JMVNOHMG.js.map → languages-JSGWCC7Z.js.map} +0 -0
  788. /package/dist/{leads-ARUWPHBM.js.map → leads-7EVHMNUF.js.map} +0 -0
  789. /package/dist/{leads-E22XFSX2.js.map → leads-JM6HUERX.js.map} +0 -0
  790. /package/dist/{lighthouse-NQBUCHTW.js.map → lighthouse-6ZC45E53.js.map} +0 -0
  791. /package/dist/{line-item-writes-KA5PVKFO.js.map → line-item-writes-KUYEXSIH.js.map} +0 -0
  792. /package/dist/{line-items-3ZFFZCNH.js.map → line-items-GIWLP3FL.js.map} +0 -0
  793. /package/dist/{link-AEU6BV75.js.map → link-PVM7XJQI.js.map} +0 -0
  794. /package/dist/{linkedin-WCB2H5NH.js.map → linkedin-WX54EAX6.js.map} +0 -0
  795. /package/dist/{list-PAMYQS4X.js.map → list-4ZKQZBCL.js.map} +0 -0
  796. /package/dist/{list-OLX7AI3O.js.map → list-MCEFXC6L.js.map} +0 -0
  797. /package/dist/{list-TOUUGHMS.js.map → list-WR7QYTON.js.map} +0 -0
  798. /package/dist/{locations-2NKBJKBT.js.map → locations-74TPQWAT.js.map} +0 -0
  799. /package/dist/{locations-S4U6IJIS.js.map → locations-J4G5RNPH.js.map} +0 -0
  800. /package/dist/{log-UGVWSK7Z.js.map → log-U6IWZGOF.js.map} +0 -0
  801. /package/dist/{map-BW4CHSIO.js.map → map-TWL7T4KP.js.map} +0 -0
  802. /package/dist/{mcp-JOXKA5HY.js.map → mcp-HVAVJGGS.js.map} +0 -0
  803. /package/dist/{media-53DJRC4N.js.map → media-M7E6V2XU.js.map} +0 -0
  804. /package/dist/{media-sources-SJZUOMI2.js.map → media-sources-JWGO23BZ.js.map} +0 -0
  805. /package/dist/{members-VAX6KAFN.js.map → members-5FAW4YE7.js.map} +0 -0
  806. /package/dist/{meta-A7KM6TF5.js.map → meta-EZ4SY25M.js.map} +0 -0
  807. /package/dist/{metrics-AY4RP54F.js.map → metrics-SQDJ5NQO.js.map} +0 -0
  808. /package/dist/{models-5NTC7A5G.js.map → models-7U3GRYHF.js.map} +0 -0
  809. /package/dist/{normalize-IVQ7I54Z.js.map → normalize-GW4GZNVY.js.map} +0 -0
  810. /package/dist/{options-V7C6CU6M.js.map → options-NSUCENLU.js.map} +0 -0
  811. /package/dist/{performance-L6RJZPXX.js.map → performance-FGCDWHMC.js.map} +0 -0
  812. /package/dist/{pixels-TZPF746S.js.map → pixels-45A55MOP.js.map} +0 -0
  813. /package/dist/{promoted-tweet-writes-DBATH765.js.map → promoted-tweet-writes-BPWTDESL.js.map} +0 -0
  814. /package/dist/{promoted-tweets-AU3XF3JD.js.map → promoted-tweets-OS3NHYVE.js.map} +0 -0
  815. /package/dist/{publish-G6DYVT4S.js.map → publish-SXZEWBVJ.js.map} +0 -0
  816. /package/dist/{query-CPZZNMDY.js.map → query-IEZRY6HV.js.map} +0 -0
  817. /package/dist/{reddit-S2S6C4RT.js.map → reddit-TF6K37SB.js.map} +0 -0
  818. /package/dist/{refresh-ARJ2SOMY.js.map → refresh-APVDWXRZ.js.map} +0 -0
  819. /package/dist/{release-3WCBAHPO.js.map → release-32SEJU4L.js.map} +0 -0
  820. /package/dist/{relevant-pages-MTMFMBPD.js.map → relevant-pages-OWMNUCP7.js.map} +0 -0
  821. /package/dist/{remove-FUAARCSC.js.map → remove-U64GTHLQ.js.map} +0 -0
  822. /package/dist/{reopen-PZI5H4X2.js.map → reopen-5VS233SF.js.map} +0 -0
  823. /package/dist/{research-SY3QRGOC.js.map → research-QYSQ6LW4.js.map} +0 -0
  824. /package/dist/{reset-E6F5NXOI.js.map → reset-22FC7BXQ.js.map} +0 -0
  825. /package/dist/{reset-ZWM7DDD7.js.map → reset-47B5VPT4.js.map} +0 -0
  826. /package/dist/{resolve-I5R5ELMZ.js.map → resolve-7KQGVTQT.js.map} +0 -0
  827. /package/dist/{retry-JO3JXXT2.js.map → retry-J5UVLS72.js.map} +0 -0
  828. /package/dist/{retry-7CFZTKWI.js.map → retry-UJ5UF4BM.js.map} +0 -0
  829. /package/dist/{run-UKB647DI.js.map → run-SI4FA32F.js.map} +0 -0
  830. /package/dist/{run-JR6SILHL.js.map → run-TFLFBQU2.js.map} +0 -0
  831. /package/dist/{schedule-SOAHLZZF.js.map → schedule-52ZM4KRQ.js.map} +0 -0
  832. /package/dist/{scheduled-agents-K5WU7SVJ.js.map → scheduled-agents-PCWCQAKP.js.map} +0 -0
  833. /package/dist/{schema-SOPL6GJP.js.map → schema-FY6ORDXZ.js.map} +0 -0
  834. /package/dist/{search-5VUDFOHI.js.map → search-NS7XNRZC.js.map} +0 -0
  835. /package/dist/{search-XUIVHGAY.js.map → search-UO5KJTYS.js.map} +0 -0
  836. /package/dist/{setup-links-KFROCISS.js.map → setup-links-V3URI7DL.js.map} +0 -0
  837. /package/dist/{site-MXPKMRQT.js.map → site-WIQ7SSU3.js.map} +0 -0
  838. /package/dist/{sources-MLDLMEDT.js.map → sources-DWJXOLEH.js.map} +0 -0
  839. /package/dist/{sources-FFHNWVLV.js.map → sources-L453U5MT.js.map} +0 -0
  840. /package/dist/{status-M47G5HD4.js.map → status-WXWU54WR.js.map} +0 -0
  841. /package/dist/{studio-HUEBE6DS.js.map → studio-C5K3YX3P.js.map} +0 -0
  842. /package/dist/{sync-HS7VZJ2H.js.map → sync-CDZUTGV3.js.map} +0 -0
  843. /package/dist/{sync-definition-PY6REQ4J.js.map → sync-definition-BAJQUBE3.js.map} +0 -0
  844. /package/dist/{tag-manager-HREEYGVM.js.map → tag-manager-DYZUOIAS.js.map} +0 -0
  845. /package/dist/{tags-WAW6MQAY.js.map → tags-6RY23XOG.js.map} +0 -0
  846. /package/dist/{tags-DIXLYB5P.js.map → tags-BHFQWNPL.js.map} +0 -0
  847. /package/dist/{tags-MRG56YOE.js.map → tags-SG3NVC3J.js.map} +0 -0
  848. /package/dist/{tags-DYRZTYHD.js.map → tags-VN5HTL35.js.map} +0 -0
  849. /package/dist/{tags-Y4HHJJGE.js.map → tags-WR6PDIDR.js.map} +0 -0
  850. /package/dist/{targeting-criteria-5UUESFWC.js.map → targeting-criteria-5EXP2NXF.js.map} +0 -0
  851. /package/dist/{targets-COZPVG52.js.map → targets-WUVEJPSD.js.map} +0 -0
  852. /package/dist/{templates-75VFYZ3E.js.map → templates-LOJQX2NG.js.map} +0 -0
  853. /package/dist/{testimonials-WJBRWLNW.js.map → testimonials-6M5DXORT.js.map} +0 -0
  854. /package/dist/{top-companies-C2R4FG6H.js.map → top-companies-E2OMMPSV.js.map} +0 -0
  855. /package/dist/{triggers-5UHVJPBV.js.map → triggers-MRXIDCSN.js.map} +0 -0
  856. /package/dist/{unlink-PLOOAGM3.js.map → unlink-HNL747YM.js.map} +0 -0
  857. /package/dist/{unstage-JIIOTBTF.js.map → unstage-OL2JDCLK.js.map} +0 -0
  858. /package/dist/{update-QYM6U7LL.js.map → update-4KGIT4BF.js.map} +0 -0
  859. /package/dist/{update-RCP7F5L5.js.map → update-JPBUF7M2.js.map} +0 -0
  860. /package/dist/{update-RGVNTA5X.js.map → update-RTTC3SAK.js.map} +0 -0
  861. /package/dist/{update-G6R5ZHUI.js.map → update-YNNRX5B2.js.map} +0 -0
  862. /package/dist/{upload-EEJ34Q3Y.js.map → upload-UIXPCSXJ.js.map} +0 -0
  863. /package/dist/{url-options-QEWKRKZ3.js.map → url-options-GGXAL3J4.js.map} +0 -0
  864. /package/dist/{url-params-2G5M2B3J.js.map → url-params-K47CE7Y5.js.map} +0 -0
  865. /package/dist/{videos-FVVID55J.js.map → videos-BP3BKNTY.js.map} +0 -0
  866. /package/dist/{viewer-check-2Q3WHSEL.js.map → viewer-check-HFRUJ4ZU.js.map} +0 -0
  867. /package/dist/{winning-ads-OSRFHVLV.js.map → winning-ads-WUENRDVJ.js.map} +0 -0
  868. /package/dist/{write-commands-CLJOD2XF.js.map → write-commands-4WARNR2T.js.map} +0 -0
  869. /package/dist/{write-commands-CT74VHH6.js.map → write-commands-TAYGTJEZ.js.map} +0 -0
  870. /package/dist/{x-EBKLJJPJ.js.map → x-VZCELH3P.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../api/src/ad-library/wire.ts"],"sourcesContent":["/**\n * Wire contract for `/api/ad-library/*` — the Baker-side surface over the ad-dna\n * \"winners\" service (`apps/ad-dna-service`, ads.withbaker.com).\n *\n * Two kinds of schema live here:\n * - **Request** schemas are strict: they validate CLI/dashboard input at the\n * backend boundary (`schema.parse(...)`).\n * - **Lean response** schemas describe the shape *our* routes/actions emit. The\n * raw ad-dna envelope is large and occasionally messy, so the backend client\n * coerces it into these lean shapes by hand (see `adLibrary/client.ts`); the\n * schemas are the contract the CLI + dashboard bind to, not a parser for the\n * upstream payload.\n *\n * Pure + zod-only (no `convex` import), like the rest of `@baker/api`.\n */\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Platforms. The ad-dna corpus has a discovery connector per platform, so the\n// surfaces we expose are limited to the ones with a connector. (Result rows may\n// still carry a legacy platform string from older data, so result `platform`\n// stays a plain string; only *inputs* are constrained.)\n// ---------------------------------------------------------------------------\n\nexport const adLibraryPlatformSchema = z.enum([\"meta\", \"linkedin\", \"tiktok\"]);\nexport type AdLibraryPlatform = z.infer<typeof adLibraryPlatformSchema>;\n\n/**\n * Whether a corpus row's platform is one Baker can follow. Corpus rows carry a\n * free-text platform (legacy data, and platforms the DNA schema knows about\n * before a connector exists), so a membership test — not a cast — is what\n * decides which of an advertiser's platform identities we subscribe to.\n */\nexport function isFollowablePlatform(platform: string | null | undefined): platform is AdLibraryPlatform {\n return adLibraryPlatformSchema.safeParse(platform).success;\n}\n\n// ---------------------------------------------------------------------------\n// Winner search — `/api/ad-library/winners/search`\n// ---------------------------------------------------------------------------\n\nexport const winnersHardFiltersSchema = z.object({\n platform: z.array(z.string()).optional(),\n format: z.array(z.string()).optional(),\n winner_category: z.array(z.string()).optional(),\n awareness_stage: z.array(z.string()).optional(),\n country: z.array(z.string()).optional(),\n language: z.array(z.string()).optional(),\n advertiser_ids: z.array(z.string()).optional(),\n exclude_advertiser_ids: z.array(z.string()).optional(),\n industry_cluster_ids: z.array(z.string()).optional(),\n business_model_cluster_ids: z.array(z.string()).optional(),\n // Proven HOOK seeds (from the `/api/ad-library/seed-catalog` rollup) — narrows\n // a find-similar search to ads on a chosen winning hook pattern, no cluster\n // lookup. Forwarded verbatim to ad-dna's `hard_filters.hook_archetype_seeds`;\n // must live in this schema or the strict boundary parse would drop it.\n hook_archetype_seeds: z.array(z.string()).optional(),\n // A static's container (comparison_table, before_after_split, …), the values\n // `/api/ad-library/seed-catalog` ranks as formats: the best proven example of\n // a container whatever category it sells.\n static_format_patterns: z.array(z.string()).optional(),\n // Who the ad was made for, as the library judged it from the creative: pick\n // references whose audience matches ours (a cold brief, cold references).\n audience_temperature: z.array(z.string()).optional(),\n funnel_stage: z.array(z.string()).optional(),\n advertiser_size: z.array(z.string()).optional(),\n // `false` drops the ads known to work only on viewers who already know the\n // brand (an ad not judged yet is kept); `true` keeps only those.\n presumes_brand_knowledge: z.boolean().optional(),\n first_seen_after: z.string().optional(),\n first_seen_before: z.string().optional(),\n});\nexport type WinnersHardFilters = z.infer<typeof winnersHardFiltersSchema>;\n\n/**\n * A first-seen bound as ad-dna requires it (an ISO datetime in UTC). A bare\n * date reads as the start of that day; an offset is converted to UTC.\n */\nconst firstSeenBoundSchema = z\n .union([z.iso.date(), z.iso.datetime({ offset: true })], {\n error: \"first_seen_after/first_seen_before must be an ISO date (2026-01-01) or datetime (2026-01-01T00:00:00Z)\",\n })\n .transform((value) => new Date(value.length === 10 ? `${value}T00:00:00Z` : value).toISOString());\n\n// ad-dna's closed vocabularies for the search filters, mirrored here so a typo\n// is refused with the valid values before a paid search. Sources:\n// apps/ad-dna-service/src/schema/enums.ts (format, winner category, awareness\n// stage) and packages/ad-dna/src/schema/enums.ts (`staticFormatPatternEnum`,\n// and the stored audience temperature, funnel stage and advertiser size).\n// Platform is the connector set above, not every platform the DNA knows.\nexport const adFormatSchema = z.enum([\"video\", \"static\", \"carousel\"]);\nexport const winnerCategorySchema = z.enum([\n \"winner\",\n \"grand_slam_winner\",\n \"scaled_winner\",\n \"low_profile_winner\",\n \"rising\",\n \"evergreen\",\n \"low_traction_dud\",\n \"thrash_iteration\",\n \"thrash_family\",\n \"false_winner\",\n \"untested\",\n \"dud\",\n]);\nexport const awarenessStageSchema = z.enum([\n \"unaware\",\n \"problem_aware\",\n \"solution_aware\",\n \"product_aware\",\n \"most_aware\",\n]);\nexport const audienceTemperatureSchema = z.enum([\"0_cold\", \"1_warm_engaged\", \"2_hot_visited\", \"3_customer\"]);\nexport const funnelStageSchema = z.enum([\"TOF\", \"MOF\", \"BOF\"]);\nexport const advertiserSizeSchema = z.enum([\"solo\", \"smb\", \"mid\", \"enterprise\"]);\nexport const staticFormatPatternSchema = z.enum([\n \"clean_product\",\n \"lifestyle_photo\",\n \"headline_card\",\n \"infographic\",\n \"chat_screenshot\",\n \"tweet_screenshot\",\n \"review_screenshot\",\n \"before_after_split\",\n \"comparison_table\",\n \"list_card\",\n \"meme_template\",\n \"native_post_lookalike\",\n \"stock_photo_overlay\",\n \"founder_portrait\",\n \"testimonial_quote\",\n \"packshot_minimalist\",\n \"four_panel_lifestyle_grid\",\n \"two_panel_split\",\n \"notes_app_screenshot\",\n \"founder_letter_textonly\",\n \"us_vs_them_grid\",\n \"benefit_callout_grid\",\n \"create_your_own_adventure_meme\",\n \"quad_split\",\n \"stories_style_casual_static\",\n]);\n\n/** The filters as a caller's input is checked where it enters Baker, before a paid search. */\nconst validatedHardFiltersSchema = winnersHardFiltersSchema.extend({\n platform: z.array(adLibraryPlatformSchema).optional(),\n format: z.array(adFormatSchema).optional(),\n winner_category: z.array(winnerCategorySchema).optional(),\n awareness_stage: z.array(awarenessStageSchema).optional(),\n static_format_patterns: z.array(staticFormatPatternSchema).optional(),\n audience_temperature: z.array(audienceTemperatureSchema).optional(),\n funnel_stage: z.array(funnelStageSchema).optional(),\n advertiser_size: z.array(advertiserSizeSchema).optional(),\n first_seen_after: firstSeenBoundSchema.optional(),\n first_seen_before: firstSeenBoundSchema.optional(),\n});\n\nexport const winnersSortSchema = z.enum([\"winner\", \"longest_running\", \"newest\"]);\nexport type WinnersSort = z.infer<typeof winnersSortSchema>;\n\nconst winnersSearchFields = z.object({\n free_text_query: z.string().max(500).optional(),\n ref_ad_id: z.string().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n // Pagination offset for infinite scroll. The browse view (no query) scrolls\n // the whole library; a text/similar search scrolls its bounded ranked pool.\n offset: z.number().int().min(0).optional(),\n // Per-advertiser cap: past it a brand's ads are dropped. `0` = no cap (the\n // library browse view sends it so a facet-filtered slice shows every winner\n // and matches the facet-rail count); omit it to spread the brands instead,\n // three each at the top and none dropped.\n max_per_advertiser: z.number().int().min(0).max(50).optional(),\n // ad-dna reads one advertiser in `advertiser_ids` as browsing that brand, and\n // keeps its measured failures. `false` keeps it a reference search: what\n // Baker sends when it narrowed to the company's followed brands itself.\n brand_browse: z.boolean().optional(),\n min_relevance: z.number().min(0).max(1).optional(),\n // One page picked for variety (different brands, containers and hooks)\n // instead of rank order: a reference set for N concepts. Ignores offset.\n diverse: z.boolean().optional(),\n // The order of a browse (no query): by winner score (default), by how long\n // the ad has run, or by when it was first seen. A query ranks by relevance\n // blended with winner score, so `sort` only means something without one.\n sort: winnersSortSchema.optional(),\n hard_filters: winnersHardFiltersSchema.optional(),\n // `score_breakdown` surfaces the \"why it ranked\" panel; facets drive the\n // filter rail. thumbnails/full_dna_url are opt-in extras.\n include: z.array(z.enum([\"score_breakdown\", \"facets\", \"full_dna_url\", \"thumbnails\"])).optional(),\n});\n\nconst hasSearchInput = (b: { free_text_query?: string; ref_ad_id?: string; hard_filters?: unknown }): boolean =>\n b.free_text_query !== undefined || b.ref_ad_id !== undefined || b.hard_filters !== undefined;\nconst SEARCH_INPUT_MESSAGE = \"Provide free_text_query, ref_ad_id, or hard_filters\";\n\n/** The request ad-dna's `/v1/search` answers, forwarded verbatim. */\nexport type WinnersSearchRequest = z.infer<typeof winnersSearchFields>;\n\n/**\n * Which brands a reference search draws from. The corpus is shared by every\n * Baker company, so `all` can surface a brand some other client follows.\n * - `followed-first` (default): followed brands first, topped up from the\n * whole library when fewer than `limit` of them clear the relevance floor.\n * A company that follows nobody gets the whole library, as `all` would.\n * - `followed`: only brands this company follows.\n * - `all`: the whole library.\n */\nexport const winnerSearchScopeSchema = z.enum([\"all\", \"followed\", \"followed-first\"]);\nexport type WinnerSearchScope = z.infer<typeof winnerSearchScopeSchema>;\n\n/** `/api/ad-library/winners/search`: the ad-dna request plus a scope Baker resolves from the API key's company. */\nexport const scopedWinnersSearchRequestSchema = winnersSearchFields\n .extend({\n scope: winnerSearchScopeSchema.default(\"followed-first\"),\n hard_filters: validatedHardFiltersSchema.optional(),\n })\n .refine(hasSearchInput, { message: SEARCH_INPUT_MESSAGE })\n // Paging a merged two-phase answer has no stable meaning: page 2 of \"followed\n // first\" depends on how many followed ads page 1 happened to hold.\n .refine((b) => b.scope !== \"followed-first\" || !b.offset, {\n message: \"offset is not supported with scope followed-first; raise limit instead\",\n });\nexport type ScopedWinnersSearchRequest = z.infer<typeof scopedWinnersSearchRequestSchema>;\n\n/** DNA \"why it works\" summary — every field nullable (ad-dna omits freely). */\nexport const winningAdDnaSchema = z.object({\n creative_concept: z.string().nullable(),\n angle: z.string().nullable(),\n awareness_stage: z.string().nullable(),\n // How many claims the ad's market has already heard (s1 first to say it … s5 tired of claims).\n // Optional while an older ad-dna does not send it.\n sophistication_stage: z.string().nullable().optional(),\n audience_temperature: z.string().nullable(),\n // Who else the ad was made for, and whether its copy only works on viewers who\n // already know the brand (null: not judged yet). Optional while an older\n // ad-dna does not send them.\n funnel_stage: z.string().nullable().optional(),\n advertiser_size: z.string().nullable().optional(),\n presumes_brand_knowledge: z.boolean().nullable().optional(),\n brand_knowledge_reason: z.string().nullable().optional(),\n target_persona: z.string().nullable(),\n hook_archetype: z.string().nullable(),\n // The proven hook pattern (`winning-ads hooks` seed) the free-text\n // `hook_archetype` matches: the value two ads can share. Optional while an\n // older ad-dna does not send it.\n hook_seed: z.string().nullable().optional(),\n creator_type: z.string().nullable(),\n industry: z.string().nullable(),\n business_model: z.string().nullable(),\n // What the viewer sees, the static's container (comparison_table, …) and why\n // it works: pick a reference on its move, not on its angle label.\n visual: z.string().nullable(),\n container: z.string().nullable(),\n mechanism: z.string().nullable(),\n});\nexport type WinningAdDna = z.infer<typeof winningAdDnaSchema>;\n\n/** The \"why it ranked\" breakdown — present only when include=score_breakdown. */\nexport const winningAdScoreBreakdownSchema = z.object({\n relevance: z.number().nullable(),\n judge_reason: z.string().nullable(),\n winner_score: z.number().nullable(),\n final_score: z.number().nullable(),\n});\nexport type WinningAdScoreBreakdown = z.infer<typeof winningAdScoreBreakdownSchema>;\n\n/** One winner card. Search returns one row per *creative family*. */\nexport const winningAdSchema = z.object({\n ad_id: z.string().nullable(),\n advertiser_id: z.string().nullable(),\n advertiser: z.string().nullable(),\n platform: z.string().nullable(),\n format: z.string().nullable(),\n media_url: z.string().nullable(),\n media_kind: z.string().nullable(),\n thumbnail_url: z.string().nullable(),\n // Query match ∈ [0,1]; null on pure winner browse (no query).\n relevance: z.number().nullable(),\n // How proven in-market (global creative strength).\n winner_score: z.number().nullable(),\n winner_category: z.string().nullable(),\n // The score ad-dna ranked the result by (relevance blended with winner\n // score, or the winner score on a browse). Search results only.\n final_score: z.number().nullable().optional(),\n days_active: z.number().nullable(),\n reach: z.number().nullable(),\n // Null when the brand hasn't been checked recently enough to say.\n active: z.boolean().nullable(),\n // When the brand's ads were last checked: the date `active` was observed.\n active_checked_at: z.string().nullable(),\n // Creative family grouping (search dedups launches into one card).\n creative_id: z.string().nullable(),\n family_id: z.string().nullable(),\n member_count: z.number().nullable(),\n sibling_ad_ids: z.array(z.string()),\n dna: winningAdDnaSchema,\n score_breakdown: winningAdScoreBreakdownSchema.nullable(),\n});\nexport type WinningAd = z.infer<typeof winningAdSchema>;\n\n// `value` is the token the filter matches on (a cluster id, or the raw text\n// when a value has no cluster). `label` is the human-readable name to show;\n// absent when it's identical to `value`.\nexport const facetCountSchema = z.object({ value: z.string(), label: z.string().optional(), count: z.number() });\nexport type FacetCount = z.infer<typeof facetCountSchema>;\n\nexport const winnersFacetsSchema = z.object({\n industry: z.array(facetCountSchema),\n creator_type: z.array(facetCountSchema),\n winner_category: z.array(facetCountSchema),\n format: z.array(facetCountSchema),\n business_model: z.array(facetCountSchema),\n});\nexport type WinnersFacets = z.infer<typeof winnersFacetsSchema>;\n\nexport const winnersSearchResponseSchema = z.object({\n results: z.array(winningAdSchema),\n facets: winnersFacetsSchema.nullable(),\n pool_size: z.number().nullable(),\n // Bucketed confidence of the top match; null on pure browse.\n match_confidence: z.enum([\"high\", \"medium\", \"low\"]).nullable(),\n below_floor_count: z.number().nullable(),\n query_id: z.string().nullable(),\n // Pagination window for infinite scroll. `offset` echoes the request; `total`\n // is how many winners this query+filters can scroll through; `has_more` is\n // true when more pages exist. Null on an older ad-dna that predates paging —\n // the dashboard then falls back to a single non-paged page.\n offset: z.number().nullable(),\n total: z.number().nullable(),\n has_more: z.boolean().nullable(),\n // Ads the corpus holds for each requested `country`; null when the search did\n // not filter by country. Tells \"no winners matched\" apart from \"unsupported\"\n // (an unknown code is refused outright).\n country_coverage: z.array(z.object({ code: z.string(), ads: z.number() })).nullable(),\n});\nexport type WinnersSearchResponse = z.infer<typeof winnersSearchResponseSchema>;\n\n/** Where a scoped search result came from: a brand this company follows, or the shared library. */\nexport const winnerSourceSchema = z.enum([\"followed\", \"library\"]);\nexport type WinnerSource = z.infer<typeof winnerSourceSchema>;\n\n/**\n * What Baker knows about a reference beyond the library: how many companies\n * turned it into a creative that reached their Workspace, whether this company\n * already did (such results are listed last), and how the creatives adapted\n * from it were judged: `approved` and `rejected` count the review verdicts\n * across every company's creatives with this source ad, counts only.\n */\nexport const referenceUsesSchema = z.object({\n companies: z.number(),\n ours: z.boolean(),\n approved: z.number(),\n rejected: z.number(),\n});\nexport type ReferenceUses = z.infer<typeof referenceUsesSchema>;\n\nexport const scopedWinningAdSchema = winningAdSchema.extend({\n source: winnerSourceSchema,\n baker_uses: referenceUsesSchema.optional(),\n});\nexport type ScopedWinningAd = z.infer<typeof scopedWinningAdSchema>;\n\nexport const scopedWinnersSearchResponseSchema = winnersSearchResponseSchema.extend({\n results: z.array(scopedWinningAdSchema),\n scope: winnerSearchScopeSchema,\n // How many brands the company follows; 0 means `followed` answers empty and\n // `followed-first` is the whole library.\n following_count: z.number(),\n});\nexport type ScopedWinnersSearchResponse = z.infer<typeof scopedWinnersSearchResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Advertisers (corpus) — `/api/ad-library/advertisers`\n// ---------------------------------------------------------------------------\n\nexport const advertiserPlatformSchema = z.object({\n platform: z.string(),\n external_id: z.string().nullable(),\n region: z.string().nullable(),\n});\nexport type AdvertiserPlatform = z.infer<typeof advertiserPlatformSchema>;\n\n/** A brand as it exists in the shared ad-dna corpus. */\nexport const corpusAdvertiserSchema = z.object({\n advertiser_id: z.string(),\n label: z.string().nullable(),\n scraped_name: z.string().nullable(),\n image_url: z.string().nullable(),\n platforms: z.array(advertiserPlatformSchema),\n platform_count: z.number().nullable(),\n family_count: z.number().nullable(),\n active_ad_count: z.number().nullable(),\n total_ad_count: z.number().nullable(),\n total_reach: z.number().nullable(),\n last_synced_at: z.string().nullable(),\n});\nexport type CorpusAdvertiser = z.infer<typeof corpusAdvertiserSchema>;\n\nexport const advertiserSearchRequestSchema = z.object({\n q: z.string().optional(),\n platform: adLibraryPlatformSchema.optional(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n});\nexport type AdvertiserSearchRequest = z.infer<typeof advertiserSearchRequestSchema>;\n\nexport const advertiserSearchResponseSchema = z.object({\n advertisers: z.array(corpusAdvertiserSchema),\n total: z.number().nullable(),\n});\nexport type AdvertiserSearchResponse = z.infer<typeof advertiserSearchResponseSchema>;\n\n/** Convergence: is the brand still exploring angles or has it converged? */\nexport const advertiserConvergenceSchema = z.object({\n convergence_state: z.string().nullable(),\n dimension_summary: z.unknown().nullable(),\n iteration_velocity_30d: z.number().nullable(),\n last_refresh_completed_at: z.string().nullable(),\n});\nexport type AdvertiserConvergence = z.infer<typeof advertiserConvergenceSchema>;\n\n// ---------------------------------------------------------------------------\n// Resolve + preview — turn a domain / URL / brand into a platform identity\n// ---------------------------------------------------------------------------\n\n/** The confirmation-modal card: who we resolved + the id we'd ingest. */\nexport const resolvePreviewSchema = z.object({\n platform: adLibraryPlatformSchema,\n external_id: z.string(),\n name: z.string(),\n image_url: z.string().nullable(),\n category: z.string().nullable(),\n industry: z.string().nullable(),\n website: z.string().nullable(),\n followers: z.number().nullable(),\n});\nexport type ResolvePreview = z.infer<typeof resolvePreviewSchema>;\n\n// ---------------------------------------------------------------------------\n// Followed advertisers (Baker-side subscriptions)\n// ---------------------------------------------------------------------------\n\n/**\n * `discovering` = still enumerating the brand's ads upstream.\n * `ingesting` = enumeration done, the ads it found are still being processed.\n * `ready` = there is something to look at.\n *\n * The middle state exists because enumeration finishes long before the ads it\n * queued actually land. Without it a brand with a thousand pending ads reported\n * a confident zero the moment its spinner stopped.\n */\nexport const followedStatusSchema = z.enum([\"discovering\", \"ingesting\", \"ready\"]);\nexport type FollowedStatus = z.infer<typeof followedStatusSchema>;\n\nexport const followedAdvertiserSchema = z.object({\n // Baker subscription row id (used to unfollow).\n followed_id: z.string(),\n advertiser_id: z.string(),\n label: z.string(),\n image_url: z.string().nullable(),\n platforms: z.array(z.object({ platform: adLibraryPlatformSchema, external_id: z.string() })),\n status: followedStatusSchema,\n active_ad_count: z.number().nullable(),\n total_ad_count: z.number().nullable(),\n family_count: z.number().nullable(),\n // Progress while status is \"discovering\" or \"ingesting\". `adding_ingested`\n // and `adding_enqueued` are both counts for the CURRENT run, so they read as\n // a fraction; `total_ad_count` is the brand's whole corpus and is not.\n adding_discovered: z.number().nullable(),\n adding_enqueued: z.number().nullable(),\n adding_ingested: z.number().nullable(),\n // A discovery job ended in failure, so this brand's ads are under-counted.\n // Distinguishes \"we couldn't finish looking\" from \"this brand runs no ads\".\n discovery_failed: z.boolean().nullable(),\n});\nexport type FollowedAdvertiser = z.infer<typeof followedAdvertiserSchema>;\n\nexport const followingListResponseSchema = z.object({\n following: z.array(followedAdvertiserSchema),\n});\nexport type FollowingListResponse = z.infer<typeof followingListResponseSchema>;\n\n// --- Follow (composite: search-first → subscribe, else resolve + enqueue) ---\n\nexport const followRequestSchema = z.object({\n input: z.string().min(1),\n platform: adLibraryPlatformSchema,\n // Optional override for the display label; defaults to the resolved name.\n label: z.string().optional(),\n});\nexport type FollowRequest = z.infer<typeof followRequestSchema>;\n\nexport const followResponseSchema = z.object({\n // \"following\" = subscribed to an advertiser already in the corpus (no\n // ingestion). \"added\" = a new advertiser was enqueued for discovery.\n // \"ambiguous\" = the identity mapped to multiple corpus advertisers; the\n // caller must pick one of `candidates`.\n status: z.enum([\"following\", \"added\", \"ambiguous\"]),\n advertiser: followedAdvertiserSchema.nullable(),\n preview: resolvePreviewSchema.nullable(),\n candidates: z.array(corpusAdvertiserSchema).nullable(),\n});\nexport type FollowResponse = z.infer<typeof followResponseSchema>;\n\n// --- Batch follow (add many brands at once, e.g. every competitor domain) ---\n\n// Cap the batch so one call can't fan out into an unbounded number of paid\n// resolve lookups + ad-dna adds. A competitor set is ~7-20 brands in practice.\nexport const FOLLOW_BATCH_MAX = 50;\n\nexport const followBatchRequestSchema = z.object({\n // One entry per brand — a domain (best; resolves both Meta + LinkedIn), a\n // profile / ad-library URL, or a brand name.\n inputs: z.array(z.string().min(1)).min(1).max(FOLLOW_BATCH_MAX),\n // How to read every input (not a tracking limit — a domain still resolves\n // every platform we can). Defaults to reading inputs as Meta identities.\n platform: adLibraryPlatformSchema.default(\"meta\"),\n});\nexport type FollowBatchRequest = z.infer<typeof followBatchRequestSchema>;\n\nexport const followBatchResultSchema = z.object({\n // Echoes the input so the caller can line results up with what it sent.\n input: z.string(),\n // \"following\"/\"added\" mirror the single-follow statuses; \"ambiguous\" needs a\n // manual pick; \"failed\" = we couldn't resolve or add it (see `error`).\n status: z.enum([\"following\", \"added\", \"ambiguous\", \"failed\"]),\n advertiser: followedAdvertiserSchema.nullable(),\n // Present only when status is \"failed\" — a plain-language reason.\n error: z.string().nullable(),\n});\nexport type FollowBatchResult = z.infer<typeof followBatchResultSchema>;\n\nexport const followBatchResponseSchema = z.object({\n results: z.array(followBatchResultSchema),\n // Rollup counts across the batch for a one-glance summary.\n followed_count: z.number(),\n added_count: z.number(),\n ambiguous_count: z.number(),\n failed_count: z.number(),\n});\nexport type FollowBatchResponse = z.infer<typeof followBatchResponseSchema>;\n\nexport const unfollowRequestSchema = z.object({\n // Accept either the Baker subscription id or the corpus advertiser id.\n followed_id: z.string().optional(),\n advertiser_id: z.string().optional(),\n});\nexport type UnfollowRequest = z.infer<typeof unfollowRequestSchema>;\n\nexport const unfollowResponseSchema = z.object({ removed: z.boolean() });\nexport type UnfollowResponse = z.infer<typeof unfollowResponseSchema>;\n\n// --- Winners for one advertiser ---\n\nexport const advertiserWinnersResponseSchema = z.object({\n advertiser_id: z.string(),\n winners: z.array(winningAdSchema),\n});\nexport type AdvertiserWinnersResponse = z.infer<typeof advertiserWinnersResponseSchema>;\n\n// --- Feed: winners across every followed advertiser (browse + trim) ---\n\nexport const feedRequestSchema = z.object({\n // Optional subset of your followed advertiser ids to narrow to (\"trim down\n // per advertiser\"). Ids you don't follow are ignored and echoed back in\n // `unknown_requested`. Omit to browse winners across every brand you follow.\n advertiser_ids: z.array(z.string()).optional(),\n platform: adLibraryPlatformSchema.optional(),\n winner_category: z.array(z.string()).optional(),\n format: z.array(z.string()).optional(),\n // Winners kept per advertiser so no single brand floods the feed. `0` = no\n // cap. Default applied by the route.\n per_advertiser: z.number().int().min(0).max(50).optional(),\n // Total winners returned across all followed advertisers.\n limit: z.number().int().min(1).max(200).optional(),\n});\nexport type FeedRequest = z.infer<typeof feedRequestSchema>;\n\nexport const feedResponseSchema = z.object({\n // The feed only ever reads followed brands, so every winner is `followed`:\n // the same `source` a scoped search carries, so the surfaces agree.\n winners: z.array(winningAdSchema.extend({ source: winnerSourceSchema })),\n // How many brands the company follows (regardless of the trim).\n following_count: z.number(),\n // The advertiser ids actually queried (follows ∩ requested subset).\n advertiser_ids: z.array(z.string()),\n // Requested ids that aren't followed — a hint the caller mistyped or hasn't\n // followed them yet.\n unknown_requested: z.array(z.string()),\n});\nexport type FeedResponse = z.infer<typeof feedResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Seed catalog — `/api/ad-library/seed-catalog`\n//\n// Reads ad-dna's corpus-wide `pattern_stats` rollup: the top winner-weighted\n// enum SEEDS for one taxonomy field (hook archetype, persuasion mechanism, or\n// static-ad format), optionally narrowed to a platform / awareness / industry\n// segment. Grounds a creative in a PROVEN pattern for the exact segment before\n// it grounds in a real reference.\n// ---------------------------------------------------------------------------\n\nexport const seedCatalogFieldSchema = z.enum([\"hook_archetype\", \"mechanism_type\", \"static_format_pattern\"]);\nexport type SeedCatalogField = z.infer<typeof seedCatalogFieldSchema>;\n\nexport const seedCatalogRequestSchema = z.object({\n field: seedCatalogFieldSchema,\n platform: z.string().optional(),\n awareness_stage: z.string().optional(),\n industry: z.string().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n});\nexport type SeedCatalogRequest = z.infer<typeof seedCatalogRequestSchema>;\n\nexport const patternSeedSchema = z.object({\n key: z.string(),\n count: z.number(),\n sum_winner_score: z.number(),\n mean_winner_score: z.number(),\n winner_share: z.number(),\n // How the seed did inside the brands that used it, the order of the catalog:\n // the mean, over brands, of how much more often their creatives with the seed\n // ran 60 days than their others (0 until five brands have a verdict), and\n // how many brands it won and lost inside.\n lift: z.number(),\n brands_for: z.number(),\n brands_against: z.number(),\n // Per-segment counts (platform/awareness_stage/industry → value → n); present\n // only on `--full`, so the response can stay lean by default.\n breakdown_by: z.record(z.string(), z.unknown()).nullable(),\n});\nexport type PatternSeed = z.infer<typeof patternSeedSchema>;\n\nexport const seedCatalogSegmentSchema = z.object({\n platform: z.string().nullable(),\n awareness_stage: z.string().nullable(),\n industry: z.string().nullable(),\n});\nexport type SeedCatalogSegment = z.infer<typeof seedCatalogSegmentSchema>;\n\nexport const seedCatalogResponseSchema = z.object({\n field: z.string(),\n segment: seedCatalogSegmentSchema.nullable(),\n patterns: z.array(patternSeedSchema),\n});\nexport type SeedCatalogResponse = z.infer<typeof seedCatalogResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Ad content — `/api/ad-library/ad-content`\n//\n// Per-ad drill-down for *reading what's inside* one winning creative: the spoken\n// transcript, the on-screen text, the ad copy, and (with --full) the speech,\n// pacing, and soundtrack detail. `search`/`winners`/`feed` return a lean\n// shortlist to pick from; this is the deliberate \"open this one and understand\n// it\" step, keyed by the `ad_id` those surfaces return. Sourced from ad-dna\n// `GET /v1/ads/:id`, which returns the whole `full_dna`; the backend client\n// projects it down to this lean shape (transcript/overlays live only there).\n// ---------------------------------------------------------------------------\n\nexport const adContentRequestSchema = z.object({\n ad_id: z.string().min(1),\n platform: adLibraryPlatformSchema.optional(),\n});\nexport type AdContentRequest = z.infer<typeof adContentRequestSchema>;\n\n/**\n * `POST /api/ad-library/reference-read`: one library ad's picture read as a static ad built on\n * it needs it (the describe blueprint and the identity-critical elements), made once by the\n * backend and shared by every company. `reused` is a read another build already paid for.\n */\nexport const referenceReadRequestSchema = z.object({\n ad_id: z.string().min(1),\n platform: adLibraryPlatformSchema.default(\"meta\"),\n});\nexport type ReferenceReadRequest = z.input<typeof referenceReadRequestSchema>;\n\nexport const referenceReadResponseSchema = z.object({\n blueprint: z.record(z.string(), z.unknown()),\n elements: z.array(z.unknown()),\n credits_charged: z.number(),\n reused: z.boolean(),\n});\nexport type ReferenceReadResponse = z.infer<typeof referenceReadResponseSchema>;\n\n/**\n * One piece of on-screen text: the words shown on the frame, when + where, and\n * the job they do (headline, benefit, cta…). A video overlay carries its time;\n * a static ad's in-image text has none; a carousel card's text carries `card`.\n */\nexport const adContentOverlaySchema = z.object({\n text: z.string(),\n appears_at_s: z.number().nullable(),\n position: z.string().nullable(),\n role: z.string().nullable(),\n card: z.number().nullable(),\n});\nexport type AdContentOverlay = z.infer<typeof adContentOverlaySchema>;\n\n/** Voiceover detail — how the ad speaks, not just what it says. --full only. */\nexport const adContentSpeechSchema = z.object({\n speech_pct_of_runtime: z.number().nullable(),\n speaker_count: z.number().nullable(),\n voiceover_vs_sync: z.string().nullable(),\n is_direct_address: z.boolean().nullable(),\n speech_emotion_dominant: z.string().nullable(),\n});\nexport type AdContentSpeech = z.infer<typeof adContentSpeechSchema>;\n\n/** Shot pacing + key timeline moments. --full only. */\nexport const adContentPacingSchema = z.object({\n scene_count: z.number().nullable(),\n avg_shot_length_s: z.number().nullable(),\n pacing_shape: z.string().nullable(),\n hook_ends_at_s: z.number().nullable(),\n cta_first_shown_at_s: z.number().nullable(),\n product_first_appears_at_s: z.number().nullable(),\n});\nexport type AdContentPacing = z.infer<typeof adContentPacingSchema>;\n\n/** Recognised soundtrack (AudD), when matched. --full only. */\nexport const adContentMusicSchema = z.object({\n track_title: z.string().nullable(),\n track_artist: z.string().nullable(),\n});\nexport type AdContentMusic = z.infer<typeof adContentMusicSchema>;\n\n/**\n * How a static ad (or carousel) is built: what to reproduce when it is the\n * reference: its container, composition, colours, the CTA drawn into it and the\n * attention markers on it. A carousel is read from its first card and has no\n * `format_pattern`. Video ads fill only the format-neutral fields.\n */\nexport const adContentLayoutSchema = z.object({\n format_pattern: z.string().nullable(),\n composition: z.string().nullable(),\n focal_subject: z.string().nullable(),\n aspect_ratio: z.string().nullable(),\n background: z.string().nullable(),\n palette_mood: z.string().nullable(),\n colors: z.array(z.string()),\n production: z.string().nullable(),\n aesthetic: z.array(z.string()),\n cta_in_image: z.string().nullable(),\n markers: z.array(z.string()),\n card_roles: z.array(z.string()),\n});\nexport type AdContentLayout = z.infer<typeof adContentLayoutSchema>;\n\n/** The persuasion an ad carries: who it speaks to and how it convinces them. */\nexport const adContentMessageSchema = z.object({\n awareness_stage: z.string().nullable(),\n sophistication: z.string().nullable(),\n mechanism: z.string().nullable(),\n pain_points: z.array(z.string()),\n desires: z.array(z.string()),\n value_props: z.array(z.string()),\n objections_handled: z.array(z.string()),\n proof: z.array(z.string()),\n risk_reversal: z.array(z.string()),\n});\nexport type AdContentMessage = z.infer<typeof adContentMessageSchema>;\n\n/**\n * The offer the ad makes. The extractor fills absent parts with \"none\" / \"n_a\";\n * those arrive as null or empty, so a filled field is always a real finding.\n */\nexport const adContentOfferSchema = z.object({\n offer_type: z.string().nullable(),\n pricing_model: z.string().nullable(),\n entry_price: z.string().nullable(),\n no_credit_card: z.boolean().nullable(),\n guarantee: z.array(z.string()),\n guarantee_days: z.number().nullable(),\n urgency: z.string().nullable(),\n bonus: z.string().nullable(),\n});\nexport type AdContentOffer = z.infer<typeof adContentOfferSchema>;\n\n/**\n * The readable content of one ad. `transcript`, `has_speech`, `speech`, `pacing`,\n * and `music` describe a *video*; they're null/empty for a static or carousel ad.\n * `on_screen_text` holds a video's timed overlays, or the text drawn into a\n * static or carousel image. The copy fields (`primary_text`, `headline`, `cta`)\n * apply to every format.\n */\nexport const adContentSchema = z.object({\n ad_id: z.string().nullable(),\n advertiser: z.string().nullable(),\n advertiser_id: z.string().nullable(),\n platform: z.string().nullable(),\n format: z.string().nullable(),\n media_kind: z.string().nullable(),\n media_url: z.string().nullable(),\n winner_score: z.number().nullable(),\n winner_category: z.string().nullable(),\n summary: z.string().nullable(),\n angle: z.string().nullable(),\n hook_archetype: z.string().nullable(),\n // Spoken words (video only; null when the ad has no speech track).\n transcript: z.string().nullable(),\n has_speech: z.boolean().nullable(),\n speech: adContentSpeechSchema,\n // On-screen text / captions.\n has_captions: z.boolean().nullable(),\n caption_style: z.string().nullable(),\n on_screen_text: z.array(adContentOverlaySchema),\n // Copy the viewer reads outside the media.\n primary_text: z.string().nullable(),\n headline: z.string().nullable(),\n cta: z.string().nullable(),\n // Structure + soundtrack.\n pacing: adContentPacingSchema,\n music: adContentMusicSchema,\n layout: adContentLayoutSchema,\n message: adContentMessageSchema,\n offer: adContentOfferSchema,\n});\nexport type AdContent = z.infer<typeof adContentSchema>;\n\nexport const adContentResponseSchema = z.object({ ad: adContentSchema });\nexport type AdContentResponse = z.infer<typeof adContentResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Ad DNA detail — the dashboard's reference-ad panel only.\n//\n// Everything in one ad's `full_dna` that `AdContent` does not already carry:\n// the colours with their share of the frame, the video's story beat by beat,\n// each carousel card, where it ran and to whom, and every other extracted\n// trait grouped by what it describes. Not on the CLI: the agent reads the lean\n// `AdContent`, and this is the depth a person browses.\n// ---------------------------------------------------------------------------\n\n/** One colour of the ad and the share of the frame it covers (0–1). */\nexport const adDnaColorSchema = z.object({\n hex: z.string(),\n share: z.number().nullable(),\n});\nexport type AdDnaColor = z.infer<typeof adDnaColorSchema>;\n\n/** One beat of a video as the watch saw and heard it, in order. */\nexport const adDnaSceneSchema = z.object({\n start_s: z.number(),\n end_s: z.number(),\n role: z.string().nullable(),\n visual: z.string(),\n speech: z.string().nullable(),\n on_screen_text: z.string().nullable(),\n sound: z.string().nullable(),\n});\nexport type AdDnaScene = z.infer<typeof adDnaSceneSchema>;\n\n/** A moment on a video's timeline: when the hook ends, the product, price or CTA first shows, the logo. */\nexport const adDnaMomentSchema = z.object({\n kind: z.enum([\"hook_ends\", \"product\", \"price\", \"cta\", \"logo\"]),\n at_s: z.number(),\n});\nexport type AdDnaMoment = z.infer<typeof adDnaMomentSchema>;\n\nexport const adDnaStorySchema = z.object({\n duration_s: z.number().nullable(),\n summary: z.string().nullable(),\n hook: z.string().nullable(),\n scenes: z.array(adDnaSceneSchema),\n moments: z.array(adDnaMomentSchema),\n});\nexport type AdDnaStory = z.infer<typeof adDnaStorySchema>;\n\n/** One carousel card: its job in the sequence, how it is laid out and coloured, and how it leads on. */\nexport const adDnaCardSchema = z.object({\n index: z.number(),\n role: z.string().nullable(),\n layout: z.string().nullable(),\n colors: z.array(adDnaColorSchema),\n open_loop: z.string().nullable(),\n transition: z.string().nullable(),\n});\nexport type AdDnaCard = z.infer<typeof adDnaCardSchema>;\n\n/** People reached in one age band (Meta's EU transparency breakdown, summed over countries). */\nexport const adDnaAgeReachSchema = z.object({\n age_range: z.string(),\n female: z.number(),\n male: z.number(),\n unknown: z.number(),\n});\nexport type AdDnaAgeReach = z.infer<typeof adDnaAgeReachSchema>;\n\n/** Where the ad ran and who saw it, as the platform discloses it. */\nexport const adDnaReachSchema = z.object({\n total: z.number().nullable(),\n eu_total: z.number().nullable(),\n ages: z.object({ min: z.number(), max: z.number() }).nullable(),\n gender: z.string().nullable(),\n locations: z.array(z.string()),\n excluded_locations: z.array(z.string()),\n channels: z.array(z.string()),\n by_age: z.array(adDnaAgeReachSchema),\n});\nexport type AdDnaReach = z.infer<typeof adDnaReachSchema>;\n\n/** One extracted trait. `key` is the DNA field name; a yes/no trait is kept only when true. */\nexport const adDnaTraitSchema = z.object({\n key: z.string(),\n value: z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]),\n});\nexport type AdDnaTrait = z.infer<typeof adDnaTraitSchema>;\n\nexport const adDnaTraitGroupKeySchema = z.enum([\n \"audience\",\n \"business\",\n \"message\",\n \"copy\",\n \"look\",\n \"cast\",\n \"pacing\",\n \"sound\",\n \"on_screen_text\",\n \"branding\",\n \"subject\",\n \"cta_visual\",\n \"markers\",\n \"carousel\",\n \"offer\",\n \"delivery\",\n]);\nexport type AdDnaTraitGroupKey = z.infer<typeof adDnaTraitGroupKeySchema>;\n\nexport const adDnaTraitGroupSchema = z.object({\n key: adDnaTraitGroupKeySchema,\n traits: z.array(adDnaTraitSchema),\n});\nexport type AdDnaTraitGroup = z.infer<typeof adDnaTraitGroupSchema>;\n\nexport const adDnaDetailSchema = z.object({\n palette: z.array(adDnaColorSchema),\n background_hex: z.string().nullable(),\n button_hex: z.string().nullable(),\n story: adDnaStorySchema.nullable(),\n cards: z.array(adDnaCardSchema),\n reach: adDnaReachSchema.nullable(),\n groups: z.array(adDnaTraitGroupSchema),\n extracted_at: z.string().nullable(),\n});\nexport type AdDnaDetail = z.infer<typeof adDnaDetailSchema>;\n\n/** One stored carousel card's media: `index` from 0, matching the DNA's `card_index`. */\nexport const adCardMediaSchema = z.object({\n index: z.number(),\n url: z.string(),\n kind: z.enum([\"image\", \"video\"]).nullable(),\n});\nexport type AdCardMedia = z.infer<typeof adCardMediaSchema>;\n\n/**\n * What the reference-ad panel loads when an ad opens: its readable content, the\n * rest of its DNA, and every carousel card's media (empty for other formats and\n * for carousels whose other cards were never stored — they show their first).\n */\nexport const adDetailSchema = z.object({\n content: adContentSchema,\n dna: adDnaDetailSchema,\n card_media: z.array(adCardMediaSchema),\n});\nexport type AdDetail = z.infer<typeof adDetailSchema>;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,496 @@
1
+ import {
2
+ repeatedValues
3
+ } from "./chunk-ERSX3MKH.js";
4
+ import {
5
+ adCopyHints,
6
+ booleanWordPositionalError,
7
+ capabilityFix
8
+ } from "./chunk-GIJT3A5U.js";
9
+ import {
10
+ hintLines,
11
+ withHints
12
+ } from "./chunk-D5FY4FAK.js";
13
+ import {
14
+ handleConnectionError,
15
+ isNotConnectedError,
16
+ writeJsonEnvelope
17
+ } from "./chunk-VFIOJD5M.js";
18
+ import {
19
+ GOOGLE_DRAFT_BATCH_MAX,
20
+ googleDraftOpInputSchema,
21
+ toMicros
22
+ } from "./chunk-NE4F3FHN.js";
23
+ import {
24
+ ApiError,
25
+ apiPost
26
+ } from "./chunk-XBOK23HI.js";
27
+ import {
28
+ requireChatId,
29
+ resolveChatId
30
+ } from "./chunk-NAWWC5I3.js";
31
+
32
+ // src/commands/ads/google/write-shared.ts
33
+ import { readFileSync } from "fs";
34
+
35
+ // src/commands/ads/google/copy-list-usage.ts
36
+ var AD_COPY_LIST_USAGE = `repeat the flag once per item, or pass one comma-separated list and wrap an item that contains a comma in double quotes: '"Fast, free quotes",Book today'. A flag given once is read as a list, so a lone item with a comma needs its double quotes too: '"Fast, free quotes"'`;
37
+ var COPY_LIST_FLAG = {
38
+ headlines: "--headlines",
39
+ descriptions: "--descriptions",
40
+ longHeadlines: "--long-headlines"
41
+ };
42
+ function valueAt(root, path) {
43
+ let node = root;
44
+ for (const key of path) {
45
+ if (node === null || typeof node !== "object") return void 0;
46
+ node = node[key];
47
+ }
48
+ return node;
49
+ }
50
+ function countRefusal(op, issue) {
51
+ if (issue.code !== "too_big" && issue.code !== "too_small" || issue.origin !== "array") return void 0;
52
+ const flag = COPY_LIST_FLAG[String(issue.path.at(-1))];
53
+ if (!flag) return void 0;
54
+ const value = valueAt(op, issue.path);
55
+ const count = Array.isArray(value) ? value.length : void 0;
56
+ return issue.code === "too_big" ? { flag, count, bound: `at most ${issue.maximum}`, tooMany: true } : { flag, count, bound: `at least ${issue.minimum}`, tooMany: false };
57
+ }
58
+ function copyListCountFix(op, issues) {
59
+ const refusals = issues.map((issue) => countRefusal(op, issue));
60
+ if (refusals.length === 0 || refusals.some((refusal) => refusal === void 0)) return void 0;
61
+ const counted = refusals.filter((refusal) => refusal !== void 0);
62
+ const limits = counted.map(({ flag, count, bound }) => `${flag} has ${count ?? "the wrong number of"} items; this ad takes ${bound}.`).join(" ");
63
+ const commaCause = counted.some((refusal) => refusal.tooMany) ? ` If you meant fewer items, the copy was cut at its commas: a flag given once is read as a comma-separated list, so an item with a comma in it ("Fast, free quotes", a decimal like "4,5/5") becomes two. To keep a comma, ${AD_COPY_LIST_USAGE} \u2014 or put the content in --file as JSON.` : "";
64
+ return {
65
+ action: "fix_copy_list_count",
66
+ explanation: `${limits}${commaCause} ${commaCause ? "Otherwise add" : "Add"} or drop items to fit the limit, then stage again; the field names are right.`
67
+ };
68
+ }
69
+
70
+ // src/commands/ads/google/draft-status.ts
71
+ var OPERATION_LABELS = {
72
+ create: "Creating",
73
+ update: "Updating",
74
+ pause: "Pausing",
75
+ resume: "Resuming",
76
+ remove: "Removing"
77
+ };
78
+ function badge(node) {
79
+ const label = node.operation ? OPERATION_LABELS[node.operation] : void 0;
80
+ if (label) {
81
+ return label;
82
+ }
83
+ return node.existing ? "on Google Ads" : "staged";
84
+ }
85
+ function collectionLine(collection) {
86
+ const parts = [];
87
+ if (collection.added > 0) {
88
+ parts.push(`+${collection.added}`);
89
+ }
90
+ if (collection.existing > 0) {
91
+ parts.push(`${collection.existing} existing`);
92
+ }
93
+ if (collection.removed > 0) {
94
+ parts.push(`-${collection.removed}`);
95
+ }
96
+ if ((collection.updated ?? 0) > 0) {
97
+ parts.push(`~${collection.updated}`);
98
+ }
99
+ return parts.length > 0 ? `${collection.label}: ${parts.join(", ")}` : void 0;
100
+ }
101
+ function accountsInTree(nodes) {
102
+ const accounts = /* @__PURE__ */ new Set();
103
+ const walk = (node) => {
104
+ accounts.add(node.customerId);
105
+ for (const child of node.children) {
106
+ walk(child);
107
+ }
108
+ };
109
+ for (const node of nodes) {
110
+ walk(node);
111
+ }
112
+ return accounts;
113
+ }
114
+ function renderNode(node, depth, lines, showAccount) {
115
+ const indent = " ".repeat(depth);
116
+ const account = showAccount ? ` \xB7 account ${node.customerId}` : "";
117
+ lines.push(`${indent}\u2022 ${node.name} \xB7 ${badge(node)}${account}`);
118
+ for (const warning of node.warnings ?? []) {
119
+ lines.push(`${indent} \u26A0 ${warning}`);
120
+ }
121
+ for (const collection of node.collections) {
122
+ const line = collectionLine(collection);
123
+ if (line) {
124
+ lines.push(`${indent} ${line}`);
125
+ }
126
+ }
127
+ for (const child of node.children) {
128
+ renderNode(child, depth + 1, lines, showAccount);
129
+ }
130
+ }
131
+ var RESOURCE_ENTITIES = /* @__PURE__ */ new Set([
132
+ "sharedSet",
133
+ "biddingStrategy",
134
+ "audience",
135
+ "conversionAction",
136
+ "label",
137
+ "budget",
138
+ "asset"
139
+ ]);
140
+ function renderSection(title, nodes, lines, showAccount) {
141
+ if (nodes.length === 0) {
142
+ return;
143
+ }
144
+ lines.push("");
145
+ lines.push(title);
146
+ for (const node of nodes) {
147
+ renderNode(node, 1, lines, showAccount);
148
+ }
149
+ }
150
+ function renderAdvisories(data, lines) {
151
+ const advisories = data.advisories ?? [];
152
+ if (advisories.length === 0 || data.status === "applied") {
153
+ return;
154
+ }
155
+ lines.push("");
156
+ lines.push("Advisories (non-blocking, checked across the whole draft \u2014 settle these before you publish)");
157
+ for (const advisory of advisories) {
158
+ lines.push(` \u2022 ${advisory.message}`);
159
+ }
160
+ }
161
+ function renderOutcome(data, lines) {
162
+ const counts = /* @__PURE__ */ new Map();
163
+ for (const op of data.ops) {
164
+ const status = op.result?.status ?? "pending";
165
+ counts.set(status, (counts.get(status) ?? 0) + 1);
166
+ }
167
+ const summary = [...counts].map(([status, count]) => `${count} ${status}`).join(", ");
168
+ lines.push(`Google Ads \u2014 published \xB7 ${summary || `${data.count} op(s)`} \xB7 ${data.mode}`);
169
+ for (const op of data.ops) {
170
+ const status = op.result?.status;
171
+ if (status !== "failed" && status !== "skipped") {
172
+ continue;
173
+ }
174
+ const reason = op.result?.error ?? op.result?.skippedBecause ?? "no reason recorded";
175
+ lines.push(` \u2717 ${op.summary} \u2014 ${status}: ${reason}`);
176
+ }
177
+ }
178
+ function renderDraftStatus(data) {
179
+ if (data.status === "none" || data.count === 0) {
180
+ return "No staged Google Ads changes on this chat.";
181
+ }
182
+ const modeNote = data.mode === "live" ? "Live \u2014 publishing writes directly to Google Ads." : "Simulated \u2014 publishing completes the whole draft without calling Google Ads.";
183
+ const lines = [];
184
+ if (data.status === "applied") {
185
+ renderOutcome(data, lines);
186
+ } else if (data.status === "publishing") {
187
+ lines.push(`Google Ads \u2014 publishing ${data.count} change${data.count === 1 ? "" : "s"} \xB7 ${data.mode}`);
188
+ } else {
189
+ lines.push(`Google Ads \u2014 ${data.count} staged change${data.count === 1 ? "" : "s"} \xB7 ${data.mode}`);
190
+ }
191
+ lines.push(modeNote);
192
+ const tree = data.tree ?? [];
193
+ const showAccount = accountsInTree(tree).size > 1;
194
+ renderSection(
195
+ "Shared resources",
196
+ tree.filter((node) => RESOURCE_ENTITIES.has(node.entity)),
197
+ lines,
198
+ showAccount
199
+ );
200
+ renderSection(
201
+ "Campaigns",
202
+ tree.filter((node) => node.entity === "campaign"),
203
+ lines,
204
+ showAccount
205
+ );
206
+ const rest = tree.filter((node) => !RESOURCE_ENTITIES.has(node.entity) && node.entity !== "campaign");
207
+ renderSection("Other", rest, lines, showAccount);
208
+ renderAdvisories(data, lines);
209
+ return lines.join("\n");
210
+ }
211
+
212
+ // src/commands/ads/google/write-shared.ts
213
+ function failWriteValidation(message) {
214
+ writeJsonEnvelope({ ok: false, error: { code: "VALIDATION_ERROR", message } });
215
+ process.exit(1);
216
+ }
217
+ function requireCustomerId(args) {
218
+ const raw = args["customer-id"] ?? args.customerId;
219
+ if (!raw || !/^\d{10}$/.test(raw)) {
220
+ failWriteValidation("pass --customer-id as the 10-digit Google Ads customer id (no dashes)");
221
+ }
222
+ return raw;
223
+ }
224
+ function requireTarget(args, entity) {
225
+ const booleanWord = booleanWordPositionalError(args, entity);
226
+ if (booleanWord) {
227
+ failWriteValidation(booleanWord);
228
+ }
229
+ const positional = Array.isArray(args._) ? args._[0] : void 0;
230
+ const target = args.id ?? args.target ?? args.ref ?? positional;
231
+ if (typeof target !== "string" || target.length === 0) {
232
+ failWriteValidation(`pass the ${entity} resource name or id as the positional argument`);
233
+ }
234
+ return target;
235
+ }
236
+ function requireStringFlag(value, flag) {
237
+ if (typeof value !== "string" || value.length === 0) {
238
+ failWriteValidation(`${flag} is required`);
239
+ }
240
+ return value;
241
+ }
242
+ function microsFlag(value, flag) {
243
+ if (value === void 0 || value === null || value === "") {
244
+ return void 0;
245
+ }
246
+ const num = Number(value);
247
+ if (Number.isNaN(num) || num <= 0) {
248
+ failWriteValidation(`${flag} must be a positive amount (major currency units, e.g. 50 or 50.00)`);
249
+ }
250
+ return toMicros(num);
251
+ }
252
+ function listFlag(value) {
253
+ if (typeof value !== "string" || value.length === 0) {
254
+ return void 0;
255
+ }
256
+ const items = value.split(",").map((v) => v.trim()).filter(Boolean);
257
+ return items.length > 0 ? items : void 0;
258
+ }
259
+ var MATCH_TYPES = /* @__PURE__ */ new Set(["EXACT", "PHRASE", "BROAD"]);
260
+ function parseKeywordEntry(raw, defaultMatch) {
261
+ const colon = raw.lastIndexOf(":");
262
+ if (colon > 0) {
263
+ const suffix = raw.slice(colon + 1).trim().toUpperCase();
264
+ if (MATCH_TYPES.has(suffix)) {
265
+ return { text: raw.slice(0, colon).trim(), matchType: suffix };
266
+ }
267
+ failWriteValidation(`"${raw}": ":${raw.slice(colon + 1)}" is not a match type (EXACT | PHRASE | BROAD)`);
268
+ }
269
+ if (!defaultMatch) {
270
+ failWriteValidation(`"${raw}" has no match type \u2014 add a :EXACT/:PHRASE/:BROAD suffix or pass --match-type`);
271
+ }
272
+ return { text: raw, matchType: defaultMatch };
273
+ }
274
+ function rawTextEntries(value, rawArgs) {
275
+ return repeatedValues(rawArgs, "text", value).flatMap((v) => v.split(",")).map((v) => v.trim()).filter(Boolean);
276
+ }
277
+ function rawFileEntries(path) {
278
+ if (typeof path !== "string" || path.length === 0) {
279
+ return [];
280
+ }
281
+ return readFileSync(path, "utf8").split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#"));
282
+ }
283
+ function keywordEntries(args, rawArgs) {
284
+ const defaultMatch = typeof args["match-type"] === "string" ? args["match-type"].toUpperCase() : void 0;
285
+ const raw = [...rawTextEntries(args.text, rawArgs), ...rawFileEntries(args.file)];
286
+ if (raw.length === 0) {
287
+ failWriteValidation("pass keywords via --text (comma-separated) and/or --file (one per line)");
288
+ }
289
+ if (raw.length > GOOGLE_DRAFT_BATCH_MAX) {
290
+ failWriteValidation(`${raw.length} keywords exceeds the batch limit of ${GOOGLE_DRAFT_BATCH_MAX}`);
291
+ }
292
+ const entries = [];
293
+ const seen = /* @__PURE__ */ new Set();
294
+ for (const item of raw) {
295
+ const entry = parseKeywordEntry(item, defaultMatch);
296
+ const key = JSON.stringify([entry.text, entry.matchType]);
297
+ if (!seen.has(key)) {
298
+ seen.add(key);
299
+ entries.push(entry);
300
+ }
301
+ }
302
+ return entries;
303
+ }
304
+ function loadJsonFileArg(path) {
305
+ if (typeof path !== "string" || path.length === 0) {
306
+ return {};
307
+ }
308
+ const inline = path.trimStart().startsWith("{");
309
+ const source = inline ? "inline JSON" : path;
310
+ try {
311
+ const parsed = JSON.parse(inline ? path : readFileSync(path, "utf8"));
312
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
313
+ failWriteValidation(`${source} must contain a JSON object`);
314
+ }
315
+ return parsed;
316
+ } catch (err) {
317
+ if (err instanceof SyntaxError) {
318
+ failWriteValidation(`${source} is not valid JSON: ${err.message}`);
319
+ }
320
+ throw err;
321
+ }
322
+ }
323
+ function mergePayload(file, flags) {
324
+ const merged = { ...file };
325
+ for (const [key, value] of Object.entries(flags)) {
326
+ if (value !== void 0) {
327
+ merged[key] = value;
328
+ }
329
+ }
330
+ return merged;
331
+ }
332
+ function loadPatchArg(args) {
333
+ const file = typeof args.file === "string" && args.file.length > 0 ? args.file : void 0;
334
+ const inline = typeof args.patch === "string" && args.patch.length > 0 ? args.patch : void 0;
335
+ if (Boolean(file) === Boolean(inline)) {
336
+ failWriteValidation("pass exactly one of --file <patch.json> or --patch '<json>'");
337
+ }
338
+ if (file) {
339
+ return loadJsonFileArg(file);
340
+ }
341
+ try {
342
+ const parsed = JSON.parse(inline);
343
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
344
+ failWriteValidation("--patch must be a JSON object");
345
+ }
346
+ return parsed;
347
+ } catch (err) {
348
+ if (err instanceof SyntaxError) {
349
+ failWriteValidation(`--patch is not valid JSON: ${err.message}`);
350
+ }
351
+ throw err;
352
+ }
353
+ }
354
+ function handleGoogleError(err) {
355
+ if (err instanceof ApiError) {
356
+ if (isNotConnectedError(err.code, err.message)) {
357
+ handleConnectionError("google_ads", err.message);
358
+ }
359
+ writeJsonEnvelope({ ok: false, error: { code: err.code ?? "API_ERROR", message: err.message } });
360
+ process.exit(1);
361
+ }
362
+ writeJsonEnvelope({
363
+ ok: false,
364
+ error: { code: "UNKNOWN", message: err instanceof Error ? err.message : String(err) }
365
+ });
366
+ process.exit(1);
367
+ }
368
+ function noopHints(data) {
369
+ return data.staged ? [] : [`NOT STAGED \u2014 ${data.reason}. Nothing to publish for this change; say so rather than reporting it as done.`];
370
+ }
371
+ function skippedHints(skipped, total) {
372
+ if (skipped.length === 0) {
373
+ return [];
374
+ }
375
+ const detail = skipped.map((s) => `${s.summary} \u2014 ${s.reason}`).join("; ");
376
+ return [
377
+ `${skipped.length} of ${total} op(s) NOT STAGED: ${detail}. Don't re-stage them; tell the user which changes couldn't be made and why, then carry on with the rest.`
378
+ ];
379
+ }
380
+ async function stageGoogleOp(raw, hints) {
381
+ const preflight = googleDraftOpInputSchema.safeParse(raw);
382
+ if (!preflight.success) {
383
+ const fields = preflight.error.issues.map((issue) => ({ path: issue.path.join("."), message: issue.message }));
384
+ writeJsonEnvelope({
385
+ ok: false,
386
+ error: {
387
+ code: "VALIDATION_ERROR",
388
+ message: fields.map((f) => f.path ? `${f.path}: ${f.message}` : f.message).join("; "),
389
+ fields,
390
+ fix: copyListCountFix(raw, preflight.error.issues) ?? capabilityFix("google-ads")
391
+ }
392
+ });
393
+ process.exit(1);
394
+ }
395
+ try {
396
+ const chatId = requireChatId();
397
+ const response = await apiPost("/api/ads/google/draft/stage", { chatId, op: preflight.data });
398
+ const allHints = [...noopHints(response.data), ...hints ?? [], ...await adCopyHints(preflight.data)];
399
+ writeJsonEnvelope(withHints(response, allHints));
400
+ } catch (err) {
401
+ handleGoogleError(err);
402
+ }
403
+ }
404
+ async function stageCreate(kind, customerId, payload, hints) {
405
+ await stageGoogleOp({ kind, customerId, payload }, hints);
406
+ }
407
+ async function stageGoogleOps(rawOps, hints) {
408
+ if (rawOps.length === 1 && rawOps[0]) {
409
+ await stageGoogleOp(rawOps[0], hints);
410
+ return;
411
+ }
412
+ const ops = [];
413
+ for (const [index, raw] of rawOps.entries()) {
414
+ const preflight = googleDraftOpInputSchema.safeParse(raw);
415
+ if (!preflight.success) {
416
+ const fields = preflight.error.issues.map((issue) => ({
417
+ path: `ops[${index}].${issue.path.join(".")}`,
418
+ message: issue.message
419
+ }));
420
+ writeJsonEnvelope({
421
+ ok: false,
422
+ error: {
423
+ code: "VALIDATION_ERROR",
424
+ message: fields.map((f) => `${f.path}: ${f.message}`).join("; "),
425
+ fields,
426
+ fix: copyListCountFix(raw, preflight.error.issues) ?? capabilityFix("google-ads")
427
+ }
428
+ });
429
+ process.exit(1);
430
+ }
431
+ ops.push(preflight.data);
432
+ }
433
+ try {
434
+ const chatId = requireChatId();
435
+ const response = await apiPost("/api/ads/google/draft/stage-batch", { chatId, ops });
436
+ const allHints = [
437
+ ...skippedHints(response.data.skipped ?? [], ops.length),
438
+ ...hints ?? [],
439
+ ...await adCopyHints(ops)
440
+ ];
441
+ writeJsonEnvelope(withHints(response, allHints));
442
+ } catch (err) {
443
+ handleGoogleError(err);
444
+ }
445
+ }
446
+ async function stageUpdate(kind, customerId, target, payload, hints) {
447
+ await stageGoogleOp({ kind, customerId, target, payload }, hints);
448
+ }
449
+ async function stageTarget(kind, customerId, target, hints) {
450
+ await stageGoogleOp({ kind, customerId, target }, hints);
451
+ }
452
+ async function draftAction(path, body, chat) {
453
+ try {
454
+ const chatId = resolveChatId(chat);
455
+ const response = await apiPost(path, { chatId, ...body });
456
+ writeJsonEnvelope(response);
457
+ } catch (err) {
458
+ handleGoogleError(err);
459
+ }
460
+ }
461
+ async function draftListAction(json, chat) {
462
+ try {
463
+ const chatId = resolveChatId(chat);
464
+ const response = await apiPost("/api/ads/google/draft", { chatId });
465
+ if (json || !response.ok || !response.data) {
466
+ writeJsonEnvelope(response);
467
+ return;
468
+ }
469
+ process.stdout.write(`${renderDraftStatus(response.data)}${hintLines(response)}
470
+ `);
471
+ } catch (err) {
472
+ handleGoogleError(err);
473
+ }
474
+ }
475
+
476
+ export {
477
+ AD_COPY_LIST_USAGE,
478
+ failWriteValidation,
479
+ requireCustomerId,
480
+ requireTarget,
481
+ requireStringFlag,
482
+ microsFlag,
483
+ listFlag,
484
+ keywordEntries,
485
+ loadJsonFileArg,
486
+ mergePayload,
487
+ loadPatchArg,
488
+ stageGoogleOp,
489
+ stageCreate,
490
+ stageGoogleOps,
491
+ stageUpdate,
492
+ stageTarget,
493
+ draftAction,
494
+ draftListAction
495
+ };
496
+ //# sourceMappingURL=chunk-TIOQ7ZFQ.js.map