@koda-sl/baker-cli 0.489.0 → 0.490.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/README.md +169 -7
  2. package/dist/{account-Z65CPOWE.js → account-3H6BZO5H.js} +2 -2
  3. package/dist/account-IKFDY52P.js +138 -0
  4. package/dist/account-IKFDY52P.js.map +1 -0
  5. package/dist/account-assets-LKZVWZAR.js +289 -0
  6. package/dist/account-assets-LKZVWZAR.js.map +1 -0
  7. package/dist/account-level-UJOZDVXY.js +608 -0
  8. package/dist/account-level-UJOZDVXY.js.map +1 -0
  9. package/dist/{account-writes-4N2MA2ZR.js → account-writes-AE5IJGGW.js} +2 -2
  10. package/dist/{accounts-UA2ZWRN4.js → accounts-K4INATCW.js} +2 -2
  11. package/dist/{activities-IQPJPP4B.js → activities-T253KK4Q.js} +4 -4
  12. package/dist/{ad-group-writes-EUTMPBMK.js → ad-group-writes-VRSBI2Z2.js} +2 -2
  13. package/dist/{ad-groups-OVPAI5RM.js → ad-groups-IEBVEAMS.js} +6 -6
  14. package/dist/{ad-writes-DACTYFEO.js → ad-writes-ALV4KFPZ.js} +2 -2
  15. package/dist/{ads-L65JIKCD.js → ads-CQZHD7FC.js} +7 -7
  16. package/dist/{ads-G6AS5L7G.js → ads-QIKZ6O2N.js} +5 -5
  17. package/dist/{ads-HXX2IAFF.js → ads-ZEY72UBN.js} +14 -13
  18. package/dist/ads-ZEY72UBN.js.map +1 -0
  19. package/dist/{adsets-LPN6WFGF.js → adsets-5H3MOT3D.js} +15 -14
  20. package/dist/{adsets-LPN6WFGF.js.map → adsets-5H3MOT3D.js.map} +1 -1
  21. package/dist/{analytics-QKP3A5F3.js → analytics-ALOZ7ZZ4.js} +1 -1
  22. package/dist/asset-writes-L5TMKIZC.js +47 -0
  23. package/dist/audience-writes-X52VG35Y.js +324 -0
  24. package/dist/audience-writes-X52VG35Y.js.map +1 -0
  25. package/dist/{audiences-RPLVMO4H.js → audiences-AAZH56WD.js} +2 -2
  26. package/dist/{audiences-XEZHACKH.js → audiences-X3RLGOVM.js} +12 -6
  27. package/dist/audiences-X3RLGOVM.js.map +1 -0
  28. package/dist/{avatars-MXTI74VC.js → avatars-YSFFRHDK.js} +1 -1
  29. package/dist/{brief-BN4UGUXF.js → brief-7S6XCJIA.js} +15 -15
  30. package/dist/{businesses-PRRYPR7H.js → businesses-H3HIDQX6.js} +2 -2
  31. package/dist/{campaign-writes-BAFB5E7A.js → campaign-writes-7ZF57KLH.js} +3 -3
  32. package/dist/campaign-writes-7ZF57KLH.js.map +1 -0
  33. package/dist/{campaign-writes-U5LTDTYK.js → campaign-writes-U5PUVSMT.js} +2 -2
  34. package/dist/{campaigns-4SOLY7OR.js → campaigns-AV6G3AUU.js} +32 -15
  35. package/dist/campaigns-AV6G3AUU.js.map +1 -0
  36. package/dist/{campaigns-TFEQTSO3.js → campaigns-JEIKY2M4.js} +6 -6
  37. package/dist/{campaigns-NR6TNQFN.js → campaigns-VTRMKSAT.js} +5 -5
  38. package/dist/{canvas-GJAQAVS6.js → canvas-SVJEQO4V.js} +13 -13
  39. package/dist/{catalog-USZL4SGX.js → catalog-S32MX453.js} +5 -5
  40. package/dist/{catalogs-A7XMEEEP.js → catalogs-OCVXZLIF.js} +2 -2
  41. package/dist/catalogs-RXJTZTVX.js +778 -0
  42. package/dist/catalogs-RXJTZTVX.js.map +1 -0
  43. package/dist/{chatgpt-4PEWDJKP.js → chatgpt-QVF2FD3E.js} +12 -12
  44. package/dist/{chats-INN2OHSH.js → chats-QG72JB6Y.js} +22 -8
  45. package/dist/chats-QG72JB6Y.js.map +1 -0
  46. package/dist/{check-MMJGFFZS.js → check-SLNHVYGS.js} +4 -4
  47. package/dist/{chunk-7RBJ2Z7Z.js → chunk-2C7AHPM4.js} +25 -6
  48. package/dist/chunk-2C7AHPM4.js.map +1 -0
  49. package/dist/{chunk-KPYDTIAI.js → chunk-2WZI36D3.js} +2 -2
  50. package/dist/{chunk-FUKDI2UK.js → chunk-3W6G6ARX.js} +2 -2
  51. package/dist/{chunk-JWSEPW7F.js → chunk-46GWHUKN.js} +2 -2
  52. package/dist/{chunk-3TZVZXM6.js → chunk-4KJMLYCD.js} +6 -6
  53. package/dist/{chunk-6JWEGFM5.js → chunk-5C35OW7L.js} +38 -7
  54. package/dist/chunk-5C35OW7L.js.map +1 -0
  55. package/dist/chunk-5GQCN2QZ.js +391 -0
  56. package/dist/chunk-5GQCN2QZ.js.map +1 -0
  57. package/dist/{chunk-KIGGMKAE.js → chunk-65Y3RCWP.js} +4 -2
  58. package/dist/chunk-65Y3RCWP.js.map +1 -0
  59. package/dist/{chunk-R3EKM2P2.js → chunk-6NCJGU6I.js} +5 -5
  60. package/dist/chunk-A4MVVPJ2.js +4204 -0
  61. package/dist/chunk-A4MVVPJ2.js.map +1 -0
  62. package/dist/{chunk-LPXSM2DI.js → chunk-AO45BX6Q.js} +3 -3
  63. package/dist/{chunk-3UXMQ3K2.js → chunk-AQM4JH62.js} +2 -2
  64. package/dist/chunk-AQM4JH62.js.map +1 -0
  65. package/dist/{chunk-NPMAATZG.js → chunk-C7NWUCLQ.js} +2 -2
  66. package/dist/chunk-CP4P6YKM.js +287 -0
  67. package/dist/chunk-CP4P6YKM.js.map +1 -0
  68. package/dist/{chunk-OWA7ZLC4.js → chunk-D4CKCNGW.js} +4 -4
  69. package/dist/{chunk-H5HDZ7IC.js → chunk-DCBZ5CHZ.js} +4 -4
  70. package/dist/{chunk-C6EYCD5J.js → chunk-FVHJCERJ.js} +5 -5
  71. package/dist/{chunk-BITS62MF.js → chunk-G6XKD7QE.js} +2 -2
  72. package/dist/{chunk-QE3JEJXF.js → chunk-GSZZLW5Q.js} +4 -4
  73. package/dist/chunk-HLVRHBKL.js +1078 -0
  74. package/dist/chunk-HLVRHBKL.js.map +1 -0
  75. package/dist/{chunk-TPANP5A2.js → chunk-JKJQWRLO.js} +2 -2
  76. package/dist/{chunk-62JQQUAU.js → chunk-JQH5VG6F.js} +2 -2
  77. package/dist/{chunk-6WXV5GTA.js → chunk-JVH5A3XC.js} +2 -2
  78. package/dist/{chunk-AVNSH2JE.js → chunk-KOXDXSKN.js} +7 -7
  79. package/dist/{chunk-2XRMPSEV.js → chunk-LXQB4ZGE.js} +2 -2
  80. package/dist/{chunk-ZL23HA4N.js → chunk-M6PN3VH6.js} +2 -2
  81. package/dist/{chunk-TZEVD4Q6.js → chunk-P5FRWPG7.js} +2 -2
  82. package/dist/{chunk-CSZFZKVX.js → chunk-PQJXIY64.js} +5 -5
  83. package/dist/{chunk-OP7DNHD2.js → chunk-QTOZ32SU.js} +27 -1
  84. package/dist/chunk-QTOZ32SU.js.map +1 -0
  85. package/dist/chunk-SVAB6KV5.js +219 -0
  86. package/dist/chunk-SVAB6KV5.js.map +1 -0
  87. package/dist/{chunk-LBO2YAZY.js → chunk-UNX6BS4U.js} +15 -15
  88. package/dist/{chunk-UWXDNVS5.js → chunk-ZJSGGJ5R.js} +2 -2
  89. package/dist/cli.js +20 -20
  90. package/dist/{connect-WBGCBBFJ.js → connect-S54TJ6OV.js} +3 -3
  91. package/dist/{conversion-writes-JU7Q2MUO.js → conversion-writes-ECZBVY7D.js} +2 -2
  92. package/dist/{conversions-3ISBR3TS.js → conversions-5QCSCRLI.js} +3 -3
  93. package/dist/copy-writes-D2RTHAL6.js +167 -0
  94. package/dist/copy-writes-D2RTHAL6.js.map +1 -0
  95. package/dist/{creatives-VQO2TKE3.js → creatives-5I3G5YP3.js} +2 -2
  96. package/dist/{creatives-YJ3CXZQC.js → creatives-MZ6ICNSY.js} +5 -4
  97. package/dist/{creatives-YJ3CXZQC.js.map → creatives-MZ6ICNSY.js.map} +1 -1
  98. package/dist/{creatives-S5QUWUL6.js → creatives-PCAGWPW3.js} +10 -10
  99. package/dist/{critique-5LCG5TYF.js → critique-NRHUPIWF.js} +7 -7
  100. package/dist/{custom-conversions-YRYE65PU.js → custom-conversions-FIP6ZS34.js} +5 -3
  101. package/dist/{custom-conversions-YRYE65PU.js.map → custom-conversions-FIP6ZS34.js.map} +1 -1
  102. package/dist/{draft-Y2QJE2NM.js → draft-34CGWUVA.js} +2 -2
  103. package/dist/{draft-GPN3HOAG.js → draft-4P3YO67N.js} +9 -5
  104. package/dist/draft-4P3YO67N.js.map +1 -0
  105. package/dist/{draft-EWDOIXSH.js → draft-L45PGCYZ.js} +7 -3
  106. package/dist/draft-L45PGCYZ.js.map +1 -0
  107. package/dist/engine/index.js +4 -4
  108. package/dist/{experiment-G3FQVAJU.js → experiment-7N4QFRWV.js} +4 -4
  109. package/dist/{feedback-CAOZPGTT.js → feedback-O3H42V4I.js} +10 -10
  110. package/dist/{feedback-record-EXV5H6OS.js → feedback-record-FAPN2GBS.js} +12 -12
  111. package/dist/{find-EVY4XEIQ.js → find-FSQAEGGF.js} +4 -4
  112. package/dist/{flows-Z7355RMD.js → flows-T22B77J3.js} +3 -3
  113. package/dist/{funnel-2B3JXJPX.js → funnel-7OA33VRP.js} +5 -5
  114. package/dist/{ga4-2BL5YAYN.js → ga4-LPDIBNYP.js} +1 -1
  115. package/dist/{google-7STODZQR.js → google-5ESVO76E.js} +5 -5
  116. package/dist/{gsc-UU3T2C6B.js → gsc-FIZTQX3N.js} +1 -1
  117. package/dist/{history-IQ33J5PB.js → history-QKDYBSYM.js} +2 -2
  118. package/dist/{icon-GB7UH5RF.js → icon-CSVAZ7NE.js} +4 -4
  119. package/dist/{ideas-F6CIGTVU.js → ideas-JQT422P7.js} +4 -4
  120. package/dist/{images-WCKTD6Z2.js → images-WBNWK2ZH.js} +6 -6
  121. package/dist/{insights-4HT2NAYP.js → insights-YWVJMATY.js} +4 -3
  122. package/dist/{insights-4HT2NAYP.js.map → insights-YWVJMATY.js.map} +1 -1
  123. package/dist/{inspiration-XQYHBJY2.js → inspiration-IX5N724J.js} +1 -1
  124. package/dist/instant-experiences-NQ2GWIWL.js +257 -0
  125. package/dist/instant-experiences-NQ2GWIWL.js.map +1 -0
  126. package/dist/{landing-WUILAWDS.js → landing-Y6QCTXCZ.js} +2 -2
  127. package/dist/leads-THI37ZMD.js +537 -0
  128. package/dist/leads-THI37ZMD.js.map +1 -0
  129. package/dist/{learn-CC6Q5IK2.js → learn-3BDZUWDT.js} +5 -5
  130. package/dist/{linkedin-XKVPSCLV.js → linkedin-UGMAFSGO.js} +2 -2
  131. package/dist/{locations-YA7NZY44.js → locations-HM56X2MK.js} +2 -2
  132. package/dist/locations-HM56X2MK.js.map +1 -0
  133. package/dist/{logo-YSNUUT33.js → logo-VHXH4J6A.js} +3 -3
  134. package/dist/{make-ED7HBLH3.js → make-W2PYZXYF.js} +39 -39
  135. package/dist/media-H6B7VDON.js +18 -0
  136. package/dist/media-H6B7VDON.js.map +1 -0
  137. package/dist/{media-sources-PEHUMH7C.js → media-sources-EZKAJNVD.js} +1 -1
  138. package/dist/meta-YHDTGJQ6.js +122 -0
  139. package/dist/meta-YHDTGJQ6.js.map +1 -0
  140. package/dist/{options-6FCNFWUF.js → options-NSCZSQ5P.js} +3 -3
  141. package/dist/page-photos-CXRG4AXV.js +115 -0
  142. package/dist/page-photos-CXRG4AXV.js.map +1 -0
  143. package/dist/{pages-FTI44OSH.js → pages-PTWRXAZT.js} +2 -2
  144. package/dist/{pixels-6IUB3Y3H.js → pixels-MYT3TCHZ.js} +2 -2
  145. package/dist/{pixels-MBKR4XPX.js → pixels-ZZCQUS3J.js} +2 -2
  146. package/dist/{preview-V4YBD45S.js → preview-XOXAAPMQ.js} +73 -27
  147. package/dist/preview-XOXAAPMQ.js.map +1 -0
  148. package/dist/{rerun-A2XHGFZS.js → rerun-5THJLQQJ.js} +18 -18
  149. package/dist/{research-BLDY5UWH.js → research-JHDWWFL7.js} +1 -1
  150. package/dist/rule-writes-6ZCAJDYZ.js +522 -0
  151. package/dist/rule-writes-6ZCAJDYZ.js.map +1 -0
  152. package/dist/rules-BMYOY2BM.js +216 -0
  153. package/dist/rules-BMYOY2BM.js.map +1 -0
  154. package/dist/{rules-SK5DFFPY.js → rules-YLLFDZEM.js} +3 -3
  155. package/dist/{rules-add-YQNYSME7.js → rules-add-U2GU4AGP.js} +4 -4
  156. package/dist/{run-KBN5K7LE.js → run-V5YQB6TH.js} +18 -18
  157. package/dist/{scaffold-ad-6BN5LWQH.js → scaffold-ad-H4GJOKAW.js} +12 -12
  158. package/dist/{scaffold-static-ad-VVZRAWBR.js → scaffold-static-ad-2YIFHCTL.js} +25 -25
  159. package/dist/{scaffold-video-LFIYI4GP.js → scaffold-video-3EJLKR2O.js} +14 -14
  160. package/dist/{select-QBU6ED4K.js → select-I22NPSIW.js} +9 -9
  161. package/dist/{set-prompt-TL64CRBQ.js → set-prompt-S75OMQ7L.js} +8 -8
  162. package/dist/{shared-NDRFKAH7.js → shared-3IBNDEFL.js} +2 -2
  163. package/dist/{sources-RMNFV4CA.js → sources-VA23PDND.js} +1 -1
  164. package/dist/{stale-ITFCPOER.js → stale-MHTU2NQJ.js} +8 -8
  165. package/dist/{stats-RCLQE4HJ.js → stats-ZAGJH4AD.js} +1 -1
  166. package/dist/{stock-ECRBD7RP.js → stock-6SHHLSKG.js} +5 -5
  167. package/dist/studies-4NIV4D5Y.js +249 -0
  168. package/dist/studies-4NIV4D5Y.js.map +1 -0
  169. package/dist/{studio-MARZ22J2.js → studio-ZLCGXFAN.js} +1 -1
  170. package/dist/study-writes-L2AA2PGL.js +467 -0
  171. package/dist/study-writes-L2AA2PGL.js.map +1 -0
  172. package/dist/{sync-definition-C6ROLKJ4.js → sync-definition-2EBSQA6A.js} +11 -11
  173. package/dist/{tag-manager-G3LBQZUL.js → tag-manager-3CJ66GKJ.js} +1 -1
  174. package/dist/targeting-LNDQV4EK.js +759 -0
  175. package/dist/targeting-LNDQV4EK.js.map +1 -0
  176. package/dist/{testimonials-YMMA5YWL.js → testimonials-GR6TIS5S.js} +2 -2
  177. package/dist/{translate-OXVIMYHE.js → translate-GEFUP6KQ.js} +18 -18
  178. package/dist/{validate-ZS2M5Q3V.js → validate-NOWIOAHE.js} +11 -11
  179. package/dist/{videos-I6YXFBFT.js → videos-XMTDEHEJ.js} +1 -1
  180. package/dist/{viewer-check-7ZG7KHEN.js → viewer-check-U4XZMMS7.js} +6 -6
  181. package/dist/viewer-check-U4XZMMS7.js.map +1 -0
  182. package/dist/{winning-ads-ABN5OULS.js → winning-ads-QOAYIR5U.js} +1 -1
  183. package/dist/{write-commands-HCQI4Y27.js → write-commands-PEJBTME6.js} +485 -57
  184. package/dist/write-commands-PEJBTME6.js.map +1 -0
  185. package/dist/{x-WK2VQDPF.js → x-VCSMV7T5.js} +4 -4
  186. package/package.json +1 -1
  187. package/dist/account-7LUQWY6Q.js +0 -49
  188. package/dist/account-7LUQWY6Q.js.map +0 -1
  189. package/dist/ads-HXX2IAFF.js.map +0 -1
  190. package/dist/audiences-XEZHACKH.js.map +0 -1
  191. package/dist/campaign-writes-BAFB5E7A.js.map +0 -1
  192. package/dist/campaigns-4SOLY7OR.js.map +0 -1
  193. package/dist/chats-INN2OHSH.js.map +0 -1
  194. package/dist/chunk-3UXMQ3K2.js.map +0 -1
  195. package/dist/chunk-6JWEGFM5.js.map +0 -1
  196. package/dist/chunk-7RBJ2Z7Z.js.map +0 -1
  197. package/dist/chunk-GOJXKIFQ.js +0 -1605
  198. package/dist/chunk-GOJXKIFQ.js.map +0 -1
  199. package/dist/chunk-KIGGMKAE.js.map +0 -1
  200. package/dist/chunk-OP7DNHD2.js.map +0 -1
  201. package/dist/draft-EWDOIXSH.js.map +0 -1
  202. package/dist/draft-GPN3HOAG.js.map +0 -1
  203. package/dist/leads-2XOSAYP4.js +0 -293
  204. package/dist/leads-2XOSAYP4.js.map +0 -1
  205. package/dist/locations-YA7NZY44.js.map +0 -1
  206. package/dist/media-ES2UBGYW.js +0 -15
  207. package/dist/media-ES2UBGYW.js.map +0 -1
  208. package/dist/meta-AOIPEDV5.js +0 -69
  209. package/dist/meta-AOIPEDV5.js.map +0 -1
  210. package/dist/preview-V4YBD45S.js.map +0 -1
  211. package/dist/write-commands-HCQI4Y27.js.map +0 -1
  212. /package/dist/{account-Z65CPOWE.js.map → account-3H6BZO5H.js.map} +0 -0
  213. /package/dist/{account-writes-4N2MA2ZR.js.map → account-writes-AE5IJGGW.js.map} +0 -0
  214. /package/dist/{accounts-UA2ZWRN4.js.map → accounts-K4INATCW.js.map} +0 -0
  215. /package/dist/{activities-IQPJPP4B.js.map → activities-T253KK4Q.js.map} +0 -0
  216. /package/dist/{ad-group-writes-EUTMPBMK.js.map → ad-group-writes-VRSBI2Z2.js.map} +0 -0
  217. /package/dist/{ad-groups-OVPAI5RM.js.map → ad-groups-IEBVEAMS.js.map} +0 -0
  218. /package/dist/{ad-writes-DACTYFEO.js.map → ad-writes-ALV4KFPZ.js.map} +0 -0
  219. /package/dist/{ads-L65JIKCD.js.map → ads-CQZHD7FC.js.map} +0 -0
  220. /package/dist/{ads-G6AS5L7G.js.map → ads-QIKZ6O2N.js.map} +0 -0
  221. /package/dist/{analytics-QKP3A5F3.js.map → analytics-ALOZ7ZZ4.js.map} +0 -0
  222. /package/dist/{connect-WBGCBBFJ.js.map → asset-writes-L5TMKIZC.js.map} +0 -0
  223. /package/dist/{audiences-RPLVMO4H.js.map → audiences-AAZH56WD.js.map} +0 -0
  224. /package/dist/{avatars-MXTI74VC.js.map → avatars-YSFFRHDK.js.map} +0 -0
  225. /package/dist/{brief-BN4UGUXF.js.map → brief-7S6XCJIA.js.map} +0 -0
  226. /package/dist/{businesses-PRRYPR7H.js.map → businesses-H3HIDQX6.js.map} +0 -0
  227. /package/dist/{campaign-writes-U5LTDTYK.js.map → campaign-writes-U5PUVSMT.js.map} +0 -0
  228. /package/dist/{campaigns-TFEQTSO3.js.map → campaigns-JEIKY2M4.js.map} +0 -0
  229. /package/dist/{campaigns-NR6TNQFN.js.map → campaigns-VTRMKSAT.js.map} +0 -0
  230. /package/dist/{canvas-GJAQAVS6.js.map → canvas-SVJEQO4V.js.map} +0 -0
  231. /package/dist/{catalog-USZL4SGX.js.map → catalog-S32MX453.js.map} +0 -0
  232. /package/dist/{catalogs-A7XMEEEP.js.map → catalogs-OCVXZLIF.js.map} +0 -0
  233. /package/dist/{chatgpt-4PEWDJKP.js.map → chatgpt-QVF2FD3E.js.map} +0 -0
  234. /package/dist/{check-MMJGFFZS.js.map → check-SLNHVYGS.js.map} +0 -0
  235. /package/dist/{chunk-KPYDTIAI.js.map → chunk-2WZI36D3.js.map} +0 -0
  236. /package/dist/{chunk-FUKDI2UK.js.map → chunk-3W6G6ARX.js.map} +0 -0
  237. /package/dist/{chunk-JWSEPW7F.js.map → chunk-46GWHUKN.js.map} +0 -0
  238. /package/dist/{chunk-3TZVZXM6.js.map → chunk-4KJMLYCD.js.map} +0 -0
  239. /package/dist/{chunk-R3EKM2P2.js.map → chunk-6NCJGU6I.js.map} +0 -0
  240. /package/dist/{chunk-LPXSM2DI.js.map → chunk-AO45BX6Q.js.map} +0 -0
  241. /package/dist/{chunk-NPMAATZG.js.map → chunk-C7NWUCLQ.js.map} +0 -0
  242. /package/dist/{chunk-OWA7ZLC4.js.map → chunk-D4CKCNGW.js.map} +0 -0
  243. /package/dist/{chunk-H5HDZ7IC.js.map → chunk-DCBZ5CHZ.js.map} +0 -0
  244. /package/dist/{chunk-C6EYCD5J.js.map → chunk-FVHJCERJ.js.map} +0 -0
  245. /package/dist/{chunk-BITS62MF.js.map → chunk-G6XKD7QE.js.map} +0 -0
  246. /package/dist/{chunk-QE3JEJXF.js.map → chunk-GSZZLW5Q.js.map} +0 -0
  247. /package/dist/{chunk-TPANP5A2.js.map → chunk-JKJQWRLO.js.map} +0 -0
  248. /package/dist/{chunk-62JQQUAU.js.map → chunk-JQH5VG6F.js.map} +0 -0
  249. /package/dist/{chunk-6WXV5GTA.js.map → chunk-JVH5A3XC.js.map} +0 -0
  250. /package/dist/{chunk-AVNSH2JE.js.map → chunk-KOXDXSKN.js.map} +0 -0
  251. /package/dist/{chunk-2XRMPSEV.js.map → chunk-LXQB4ZGE.js.map} +0 -0
  252. /package/dist/{chunk-ZL23HA4N.js.map → chunk-M6PN3VH6.js.map} +0 -0
  253. /package/dist/{chunk-TZEVD4Q6.js.map → chunk-P5FRWPG7.js.map} +0 -0
  254. /package/dist/{chunk-CSZFZKVX.js.map → chunk-PQJXIY64.js.map} +0 -0
  255. /package/dist/{chunk-LBO2YAZY.js.map → chunk-UNX6BS4U.js.map} +0 -0
  256. /package/dist/{chunk-UWXDNVS5.js.map → chunk-ZJSGGJ5R.js.map} +0 -0
  257. /package/dist/{ideas-F6CIGTVU.js.map → connect-S54TJ6OV.js.map} +0 -0
  258. /package/dist/{conversion-writes-JU7Q2MUO.js.map → conversion-writes-ECZBVY7D.js.map} +0 -0
  259. /package/dist/{conversions-3ISBR3TS.js.map → conversions-5QCSCRLI.js.map} +0 -0
  260. /package/dist/{creatives-VQO2TKE3.js.map → creatives-5I3G5YP3.js.map} +0 -0
  261. /package/dist/{creatives-S5QUWUL6.js.map → creatives-PCAGWPW3.js.map} +0 -0
  262. /package/dist/{critique-5LCG5TYF.js.map → critique-NRHUPIWF.js.map} +0 -0
  263. /package/dist/{draft-Y2QJE2NM.js.map → draft-34CGWUVA.js.map} +0 -0
  264. /package/dist/{experiment-G3FQVAJU.js.map → experiment-7N4QFRWV.js.map} +0 -0
  265. /package/dist/{feedback-CAOZPGTT.js.map → feedback-O3H42V4I.js.map} +0 -0
  266. /package/dist/{feedback-record-EXV5H6OS.js.map → feedback-record-FAPN2GBS.js.map} +0 -0
  267. /package/dist/{find-EVY4XEIQ.js.map → find-FSQAEGGF.js.map} +0 -0
  268. /package/dist/{flows-Z7355RMD.js.map → flows-T22B77J3.js.map} +0 -0
  269. /package/dist/{funnel-2B3JXJPX.js.map → funnel-7OA33VRP.js.map} +0 -0
  270. /package/dist/{ga4-2BL5YAYN.js.map → ga4-LPDIBNYP.js.map} +0 -0
  271. /package/dist/{google-7STODZQR.js.map → google-5ESVO76E.js.map} +0 -0
  272. /package/dist/{gsc-UU3T2C6B.js.map → gsc-FIZTQX3N.js.map} +0 -0
  273. /package/dist/{history-IQ33J5PB.js.map → history-QKDYBSYM.js.map} +0 -0
  274. /package/dist/{icon-GB7UH5RF.js.map → icon-CSVAZ7NE.js.map} +0 -0
  275. /package/dist/{logo-YSNUUT33.js.map → ideas-JQT422P7.js.map} +0 -0
  276. /package/dist/{images-WCKTD6Z2.js.map → images-WBNWK2ZH.js.map} +0 -0
  277. /package/dist/{inspiration-XQYHBJY2.js.map → inspiration-IX5N724J.js.map} +0 -0
  278. /package/dist/{landing-WUILAWDS.js.map → landing-Y6QCTXCZ.js.map} +0 -0
  279. /package/dist/{learn-CC6Q5IK2.js.map → learn-3BDZUWDT.js.map} +0 -0
  280. /package/dist/{linkedin-XKVPSCLV.js.map → linkedin-UGMAFSGO.js.map} +0 -0
  281. /package/dist/{run-KBN5K7LE.js.map → logo-VHXH4J6A.js.map} +0 -0
  282. /package/dist/{make-ED7HBLH3.js.map → make-W2PYZXYF.js.map} +0 -0
  283. /package/dist/{media-sources-PEHUMH7C.js.map → media-sources-EZKAJNVD.js.map} +0 -0
  284. /package/dist/{options-6FCNFWUF.js.map → options-NSCZSQ5P.js.map} +0 -0
  285. /package/dist/{pages-FTI44OSH.js.map → pages-PTWRXAZT.js.map} +0 -0
  286. /package/dist/{pixels-6IUB3Y3H.js.map → pixels-MYT3TCHZ.js.map} +0 -0
  287. /package/dist/{pixels-MBKR4XPX.js.map → pixels-ZZCQUS3J.js.map} +0 -0
  288. /package/dist/{rerun-A2XHGFZS.js.map → rerun-5THJLQQJ.js.map} +0 -0
  289. /package/dist/{research-BLDY5UWH.js.map → research-JHDWWFL7.js.map} +0 -0
  290. /package/dist/{rules-SK5DFFPY.js.map → rules-YLLFDZEM.js.map} +0 -0
  291. /package/dist/{rules-add-YQNYSME7.js.map → rules-add-U2GU4AGP.js.map} +0 -0
  292. /package/dist/{shared-NDRFKAH7.js.map → run-V5YQB6TH.js.map} +0 -0
  293. /package/dist/{scaffold-ad-6BN5LWQH.js.map → scaffold-ad-H4GJOKAW.js.map} +0 -0
  294. /package/dist/{scaffold-static-ad-VVZRAWBR.js.map → scaffold-static-ad-2YIFHCTL.js.map} +0 -0
  295. /package/dist/{scaffold-video-LFIYI4GP.js.map → scaffold-video-3EJLKR2O.js.map} +0 -0
  296. /package/dist/{select-QBU6ED4K.js.map → select-I22NPSIW.js.map} +0 -0
  297. /package/dist/{set-prompt-TL64CRBQ.js.map → set-prompt-S75OMQ7L.js.map} +0 -0
  298. /package/dist/{sync-definition-C6ROLKJ4.js.map → shared-3IBNDEFL.js.map} +0 -0
  299. /package/dist/{sources-RMNFV4CA.js.map → sources-VA23PDND.js.map} +0 -0
  300. /package/dist/{stale-ITFCPOER.js.map → stale-MHTU2NQJ.js.map} +0 -0
  301. /package/dist/{stats-RCLQE4HJ.js.map → stats-ZAGJH4AD.js.map} +0 -0
  302. /package/dist/{stock-ECRBD7RP.js.map → stock-6SHHLSKG.js.map} +0 -0
  303. /package/dist/{studio-MARZ22J2.js.map → studio-ZLCGXFAN.js.map} +0 -0
  304. /package/dist/{viewer-check-7ZG7KHEN.js.map → sync-definition-2EBSQA6A.js.map} +0 -0
  305. /package/dist/{tag-manager-G3LBQZUL.js.map → tag-manager-3CJ66GKJ.js.map} +0 -0
  306. /package/dist/{testimonials-YMMA5YWL.js.map → testimonials-GR6TIS5S.js.map} +0 -0
  307. /package/dist/{translate-OXVIMYHE.js.map → translate-GEFUP6KQ.js.map} +0 -0
  308. /package/dist/{validate-ZS2M5Q3V.js.map → validate-NOWIOAHE.js.map} +0 -0
  309. /package/dist/{videos-I6YXFBFT.js.map → videos-XMTDEHEJ.js.map} +0 -0
  310. /package/dist/{winning-ads-ABN5OULS.js.map → winning-ads-QOAYIR5U.js.map} +0 -0
  311. /package/dist/{x-WK2VQDPF.js.map → x-VCSMV7T5.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/meta/leads.ts","../src/commands/ads/meta/lead-form-writes.ts"],"sourcesContent":["import { isMetaLeadAdsRefusal } from \"@baker/api/ads-meta\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiGet } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { writeAdsJson, writeAdsOutput, writeJsonEnvelope } from \"../output.ts\";\nimport {\n leadFormsArchiveCommand,\n leadFormsCreateCommand,\n leadFormsDuplicateCommand,\n leadFormsSpecCommand,\n leadFormsUnarchiveCommand,\n} from \"./lead-form-writes.ts\";\nimport { csvOrJson, handleMetaError } from \"./shared.ts\";\n\n/** An instant form attached to a Facebook Page. */\nexport interface MetaLeadForm {\n id: string;\n name?: string;\n status?: string;\n locale?: string;\n leads_count?: number;\n created_time?: string;\n}\n\n/** One page of leads plus the cursor that continues it. */\nexport interface MetaLeadPage {\n leads: MetaLead[];\n /** Present only while Meta says another page exists. */\n nextCursor?: string;\n /** What the backend says about this page (every answer masked when it could not tell contact questions apart). */\n hints?: string[];\n}\n\n/** One lead, already shaped by the backend (contact values masked unless --full). */\nexport interface MetaLead {\n id: string;\n created_time?: string;\n ad_id?: string;\n ad_name?: string;\n adset_id?: string;\n adset_name?: string;\n campaign_id?: string;\n campaign_name?: string;\n form_id?: string;\n is_organic?: boolean;\n platform?: string;\n answers: Record<string, string>;\n /** Each disclaimer checkbox by its key: ticked or not. */\n consents?: Record<string, boolean>;\n partner_name?: string;\n}\n\nregisterSchema({\n command: \"ads.meta.lead-forms\",\n description:\n \"List the instant (lead) forms on a Facebook Page, with how many leads each has collected. Start here: a lead is fetched by form id. Use a Page from `baker ads meta pages` with hasPageAccessToken: true.\",\n args: {\n \"page-id\": {\n type: \"string\",\n description: \"Facebook Page ID — from `baker ads meta pages` with hasPageAccessToken: true\",\n required: true,\n },\n full: { type: \"boolean\", description: \"Include each form's questions\", required: false },\n output: { type: \"string\", description: \"json|csv\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.meta.leads\",\n description:\n \"Read the leads an instant form collected. Contact details (email, phone) come back masked; pass --full only when the raw values are genuinely needed, e.g. handing them to a CRM.\",\n args: {\n \"form-id\": { type: \"string\", description: \"Instant form ID — from `baker ads meta lead-forms`\", required: false },\n \"ad-id\": { type: \"string\", description: \"Read the leads of one ad instead of a whole form\", required: false },\n \"adset-id\": { type: \"string\", description: \"Read the leads of every ad in an ad set\", required: false },\n \"campaign-id\": { type: \"string\", description: \"Read the leads of every ad in a campaign\", required: false },\n since: { type: \"string\", description: \"Earliest submission date, YYYY-MM-DD\", required: false },\n until: { type: \"string\", description: \"Latest submission date, YYYY-MM-DD (inclusive)\", required: false },\n limit: { type: \"string\", description: \"Leads per page (default 100, max 500)\", required: false },\n after: {\n type: \"string\",\n description: \"Cursor from a previous call's nextCursor — fetches the following page\",\n required: false,\n },\n full: { type: \"boolean\", description: \"Return raw contact details instead of masked ones\", required: false },\n output: { type: \"string\", description: \"json|csv\", required: false, default: \"json\" },\n },\n});\n\n/**\n * A form that exists but has never collected anything is the single most common\n * thing to misread here — it looks identical to a permissions problem in the\n * output, and the remedies are opposite. Say which it is.\n */\n/** The backend drains instant forms up to this many; see `META_LEAD_FORMS_MAX`. */\nconst LEAD_FORMS_CAP = 500;\n\nexport function leadFormHints(forms: MetaLeadForm[]): string[] {\n if (forms.length === 0) {\n return [\"This Page has NO instant forms. Nothing to read leads from — the form has to be created first.\"];\n }\n if (forms.length >= LEAD_FORMS_CAP) {\n return [\n `PARTIAL LIST — this Page has at least ${LEAD_FORMS_CAP} instant forms and only the first ${LEAD_FORMS_CAP} came back. Do not describe this as every form on the Page.`,\n ];\n }\n const empty = forms.filter((form) => (form.leads_count ?? 0) === 0);\n if (empty.length === forms.length) {\n return [\n \"Every form on this Page has collected 0 leads. That is a real, readable answer — the connection works. Do not retry and do not report it as a permissions problem.\",\n ];\n }\n return [];\n}\n\n/**\n * A `FORBIDDEN` that Baker itself produced is already conclusive, so it must not\n * collect the generic ambiguous-403 remedy.\n *\n * `metaForbiddenFix` exists for Meta's own 403, which covers two causes with\n * opposite fixes and can only be told apart by testing the blast radius. Pasting\n * that after *\"this needs switching on by the Baker team\"* would hand the agent\n * a paragraph suggesting a reconnect right underneath a sentence saying a\n * reconnect cannot help — and the agent would pass it on, costing the client a\n * pointless round trip through their Meta login. Everything that is genuinely\n * Meta's still goes through the normal handler.\n */\nfunction handleLeadsError(err: unknown): never {\n if (err instanceof ApiError && err.code === \"FORBIDDEN\" && isMetaLeadAdsRefusal(err.message)) {\n writeAdsJson({\n ok: false,\n error: {\n code: err.code,\n message: err.message,\n fix: { action: \"reject\", explanation: err.message },\n retryable: false,\n },\n });\n process.exit(1);\n }\n handleMetaError(err);\n}\n\n/**\n * What the agent has to know before it reports a number.\n *\n * Counting is what this command is mostly used for, so a page that is full is\n * the dangerous case: without a word, 100 rows read as \"100 leads\" and the\n * client is told something false. The cursor is the remedy, and it has to be\n * named in the same breath as the warning.\n */\nexport function leadPageHints(page: MetaLeadPage, full: boolean): string[] {\n const hints: string[] = [];\n if (page.nextCursor) {\n hints.push(\n `PARTIAL PAGE — more leads exist. This is ${page.leads.length} of an unknown larger number; do NOT report it as a total. Fetch the next page with \\`--after ${page.nextCursor}\\` (repeat until no nextCursor), or narrow the window with --since/--until.`,\n );\n }\n if (!full) {\n hints.push(\n \"Answers that give contact details (email, phone, any question asking for one) are masked. Report on them as they are; pass --full only when the raw values have to leave Baker (a CRM hand-off), and never paste them into the chat otherwise.\",\n );\n }\n hints.push(...(page.hints ?? []));\n return hints;\n}\n\nconst leadFormsListArgs = {\n \"page-id\": { type: \"string\", description: \"Facebook Page ID\" },\n full: { type: \"boolean\", description: \"Include each form's questions\" },\n output: { type: \"string\", description: \"Output format\", default: \"json\" },\n} as const;\n\nconst leadFormsListCommand = defineCommand({\n meta: {\n name: \"list\",\n description:\n \"List the Instant Forms on a Facebook Page, with lead counts. Choose a Page with hasPageAccessToken: true from `baker ads meta pages`. Pass --full to include questions.\",\n },\n args: leadFormsListArgs,\n run: async ({ args }) => {\n try {\n const pageId = args[\"page-id\"] as string | undefined;\n if (!pageId) {\n handleLeadsError(\n new Error(\n \"--page-id is required. Run `baker ads meta pages` and choose a Page with hasPageAccessToken: true.\",\n ),\n );\n }\n const params: Record<string, string> = { \"page-id\": pageId };\n if (args.full) params.full = \"true\";\n const data = await apiGet<MetaLeadForm[]>(\"/api/ads/meta/lead-forms\", params);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(data as unknown as Array<Record<string, unknown>>, fmt);\n return;\n }\n const hints = leadFormHints(data);\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n } catch (err) {\n handleLeadsError(err);\n }\n },\n});\n\nexport const leadFormsCommand = defineCommand({\n meta: {\n name: \"lead-forms\",\n description: `List Instant Forms on a Facebook Page, or stage a new one, a changed copy, an archive.\nA form is permanent on Meta and nothing on it changes once made: to change one, duplicate it with changes and archive the old one.\nExamples:\n baker ads meta lead-forms --page-id 100635183117758\n baker ads meta lead-forms --page-id 100635183117758 --full\n baker ads meta lead-forms create --account-id act_123 --page-id 555 --file form.json\n baker ads meta lead-forms spec 987654321 — a live form as a create --file payload\n baker ads meta lead-forms duplicate 987654321 --account-id act_123 --name \"Free audit (ES)\" --locale ES_LA\n baker ads meta lead-forms archive 987654321 --account-id act_123`,\n },\n args: leadFormsListArgs,\n subCommands: {\n list: leadFormsListCommand,\n create: leadFormsCreateCommand,\n spec: leadFormsSpecCommand,\n duplicate: leadFormsDuplicateCommand,\n archive: leadFormsArchiveCommand,\n unarchive: leadFormsUnarchiveCommand,\n },\n default: \"list\",\n});\n\nexport const leadsCommand = defineCommand({\n meta: {\n name: \"leads\",\n description: `Read the leads an instant form collected. Every question comes back; email and phone answers are MASKED unless you pass --full, so you can report on what a form is collecting without moving contact details around.\n\nExamples:\n baker ads meta leads --form-id 987654321\n baker ads meta leads --form-id 987654321 --since 2026-08-01 --until 2026-08-31\n baker ads meta leads --ad-id 6123456789 --limit 50\n baker ads meta leads --adset-id 6123456780 --since 2026-08-01 # every ad in the ad set (Meta has no ad set edge)\n baker ads meta leads --form-id 987654321 --after <nextCursor> # the next page\n baker ads meta leads --form-id 987654321 --full # raw contact details — only when handing leads over\n\nResults are PAGED. A response carrying \\`nextCursor\\` is not the whole set — follow it before reporting any total.`,\n },\n args: {\n \"form-id\": { type: \"string\", description: \"Instant form ID (from `baker ads meta lead-forms`)\" },\n \"ad-id\": { type: \"string\", description: \"Read one ad's leads instead of a whole form\" },\n \"adset-id\": { type: \"string\", description: \"Read the leads of every ad in an ad set\" },\n \"campaign-id\": { type: \"string\", description: \"Read the leads of every ad in a campaign\" },\n since: { type: \"string\", description: \"Earliest submission date, YYYY-MM-DD\" },\n until: { type: \"string\", description: \"Latest submission date, YYYY-MM-DD (inclusive)\" },\n limit: { type: \"string\", description: \"Leads per page (default 100, max 500)\" },\n after: { type: \"string\", description: \"Cursor from a previous call's nextCursor\" },\n full: { type: \"boolean\", description: \"Return raw contact details instead of masked ones\" },\n output: { type: \"string\", description: \"Output format\", default: \"json\" },\n },\n run: async ({ args }) => {\n try {\n const params: Record<string, string> = {};\n for (const flag of [\"form-id\", \"ad-id\", \"adset-id\", \"campaign-id\"] as const) {\n const value = args[flag];\n if (typeof value === \"string\" && value.length > 0) params[flag] = value;\n }\n if (Object.keys(params).length !== 1) {\n handleLeadsError(\n new Error(\"Pass one of --form-id (from `baker ads meta lead-forms`), --ad-id, --adset-id or --campaign-id.\"),\n );\n }\n if (args.since) params.since = args.since as string;\n if (args.until) params.until = args.until as string;\n if (args.limit) params.limit = String(args.limit);\n if (args.after) params.after = String(args.after);\n if (args.full) params.full = \"true\";\n const page = await apiGet<MetaLeadPage>(\"/api/ads/meta/leads\", params);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(page.leads as unknown as Array<Record<string, unknown>>, fmt);\n return;\n }\n writeJsonEnvelope({\n ok: true,\n data: page.leads,\n ...(page.nextCursor ? { nextCursor: page.nextCursor } : {}),\n hints: leadPageHints(page, args.full === true),\n });\n } catch (err) {\n handleLeadsError(err);\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport { apiGet } from \"../../../client.ts\";\nimport { repeatedValues } from \"../../../lib/repeatedFlags.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { handleMetaError } from \"./shared.ts\";\nimport {\n bareAccountId,\n failWriteValidation,\n loadJsonFileArg,\n mergePayload,\n requireTarget,\n stageOp,\n upper,\n} from \"./write-shared.ts\";\n\n/**\n * Staging Instant Forms. A form is permanent on Meta — it is never deleted,\n * only archived — and nothing on it changes once it exists, so every write\n * here is a new form (create, duplicate) or an archive / unarchive, all staged\n * on this chat's draft and applied at publish.\n */\n\ntype Args = Record<string, unknown>;\n\nconst STAGED_NOTE = \"Staged until publish — review with `baker ads meta draft`.\";\n\nconst str = (value: unknown): string | undefined => (typeof value === \"string\" && value.length > 0 ? value : undefined);\n\n/** `\"Question? => answer | answer\"` → a CUSTOM question, multiple choice when it lists answers. */\nfunction customQuestion(value: string): Record<string, unknown> {\n const [label = \"\", answers] = value.split(\"=>\").map((part) => part.trim());\n const options = answers\n ?.split(\"|\")\n .map((answer) => answer.trim())\n .filter(Boolean)\n .map((answer) => ({ value: answer }));\n return { type: \"CUSTOM\", label, ...(options && options.length > 0 ? { options } : {}) };\n}\n\nfunction questionsFromFlags(args: Args, rawArgs: readonly string[] | undefined): unknown[] | undefined {\n const predefined = (str(args.questions) ?? \"\")\n .split(\",\")\n .map((type) => type.trim().toUpperCase())\n .filter(Boolean)\n .map((type) => ({ type }));\n const custom = repeatedValues(rawArgs, \"question\", args.question).map(customQuestion);\n const all = [...predefined, ...custom];\n return all.length > 0 ? all : undefined;\n}\n\n/**\n * The intro fields the flags name, and only those: a duplicate keeps every\n * other intro field of the live form (`mergeDuplicateSpec`), so `--intro-title`\n * alone does not wipe the text and `--intro-button` alone is not dropped.\n */\nfunction introFromFlags(args: Args, rawArgs: readonly string[] | undefined): Record<string, unknown> | undefined {\n const content = repeatedValues(rawArgs, \"intro-text\", args[\"intro-text\"]);\n const set = {\n ...(str(args[\"intro-title\"]) ? { title: str(args[\"intro-title\"]) } : {}),\n ...(content.length > 0 ? { style: content.length > 1 ? \"LIST_STYLE\" : \"PARAGRAPH_STYLE\", content } : {}),\n ...(str(args[\"intro-button\"]) ? { buttonText: str(args[\"intro-button\"]) } : {}),\n };\n return Object.keys(set).length > 0 ? set : undefined;\n}\n\nfunction thankYouFromFlags(args: Args): Record<string, unknown> | undefined {\n const fields = {\n title: str(args[\"thank-you-title\"]),\n body: str(args[\"thank-you-body\"]),\n buttonType: upper(args[\"thank-you-button\"]),\n buttonText: str(args[\"thank-you-button-text\"]),\n websiteUrl: str(args[\"thank-you-url\"]),\n businessPhoneNumber: str(args[\"thank-you-phone\"]),\n countryCode: upper(args[\"thank-you-country\"]),\n };\n const set = Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== undefined));\n return Object.keys(set).length > 0 ? set : undefined;\n}\n\nfunction trackingFromFlags(args: Args, rawArgs: readonly string[] | undefined): Record<string, string> | undefined {\n const pairs = repeatedValues(rawArgs, \"tracking\", args.tracking).map((pair) => {\n const at = pair.indexOf(\"=\");\n if (at <= 0) failWriteValidation(`--tracking takes name=value, got \"${pair}\"`);\n return [pair.slice(0, at).trim(), pair.slice(at + 1).trim()] as const;\n });\n return pairs.length > 0 ? Object.fromEntries(pairs) : undefined;\n}\n\n/** The `leadForm.create` fields the flags name; anything a flag leaves out comes from `--file`. */\nexport function leadFormPayloadFromFlags(args: Args, rawArgs?: readonly string[]): Record<string, unknown> {\n const quality = args[\"higher-intent\"] ?? args[\"optimized-for-quality\"];\n return {\n page_id: str(args[\"page-id\"]),\n name: str(args.name),\n locale: upper(args.locale),\n questionPageHeadline: str(args.headline),\n questions: questionsFromFlags(args, rawArgs),\n privacyPolicyUrl: str(args[\"privacy-policy-url\"]),\n privacyPolicyLinkText: str(args[\"privacy-link-text\"]),\n followUpActionUrl: str(args[\"follow-up-url\"]),\n optimizedForQuality: typeof quality === \"boolean\" ? quality : undefined,\n intro: introFromFlags(args, rawArgs),\n thankYou: thankYouFromFlags(args),\n sharing: str(args.sharing)?.toLowerCase(),\n smsVerification: args[\"sms-verification\"] === true ? true : undefined,\n trackingParameters: trackingFromFlags(args, rawArgs),\n };\n}\n\n/**\n * A `--file` form as staged. `lead-forms spec > form.json` writes the CLI's\n * `{ok, data, hints}` envelope, so the form is its `data`; a hand-written file\n * is the form itself.\n */\nexport function formFileForStaging(raw: Record<string, unknown>): Record<string, unknown> {\n const data = raw.ok === true && \"data\" in raw ? raw.data : raw;\n return data && typeof data === \"object\" && !Array.isArray(data) ? (data as Record<string, unknown>) : raw;\n}\n\n/** The screens a duplicate changes field by field, so a flag naming one field keeps the others. */\nconst SCREENS = [\"intro\", \"thankYou\"] as const;\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\n}\n\n/** `over` on `base`, the intro and thank-you screens merged a field at a time. */\nfunction mergeOver(base: Record<string, unknown>, over: Record<string, unknown>): Record<string, unknown> {\n const merged = mergePayload(base, over);\n for (const screen of SCREENS) {\n const from = record(base[screen]);\n const to = record(over[screen]);\n if (from && to) merged[screen] = mergePayload(from, to);\n }\n return merged;\n}\n\n/**\n * A duplicate: the live form, then the `--file` changes over it, then the\n * flags over both. Forms are permanent, so the intro and thank-you screens\n * change only in the fields named — never wholesale.\n */\nexport function mergeDuplicateSpec(\n live: Record<string, unknown>,\n changes: Record<string, unknown>,\n flags: Record<string, unknown>,\n): Record<string, unknown> {\n return mergeOver(mergeOver(live, changes), flags);\n}\n\nconst FORM_FLAG_ARGS = {\n name: { type: \"string\", description: \"Form name — unique among the Page's forms (archived ones count)\" },\n locale: {\n type: \"string\",\n description:\n \"Form language, e.g. EN_US, ES_LA, PT_BR, FR_FR, DE_DE (Meta's 32) — Meta words its own questions in it\",\n },\n headline: { type: \"string\", description: \"Headline above the questions\" },\n questions: {\n type: \"string\",\n description:\n \"Questions Meta words itself, comma-separated: FULL_NAME,EMAIL,PHONE,WORK_EMAIL,COMPANY_NAME,JOB_TITLE,CITY,ZIP,DOB…\",\n },\n question: {\n type: \"string\",\n description: 'A custom question, repeatable: \"Question?\" or multiple choice \"Question? => Answer | Answer\"',\n },\n \"privacy-policy-url\": { type: \"string\", description: \"Public https privacy policy (required)\" },\n \"privacy-link-text\": { type: \"string\", description: \"Words of the privacy link (≤70, default Privacy Policy)\" },\n \"follow-up-url\": { type: \"string\", description: \"https link of the default View website button\" },\n \"higher-intent\": {\n type: \"boolean\",\n description: \"Higher intent: people review their answers before submitting (default: more volume)\",\n },\n \"optimized-for-quality\": { type: \"boolean\", description: \"Same as --higher-intent\" },\n \"intro-title\": { type: \"string\", description: \"Intro screen title\" },\n \"intro-text\": { type: \"string\", description: \"Intro paragraph; repeat for bullet points\" },\n \"intro-button\": { type: \"string\", description: \"Intro screen button text\" },\n \"thank-you-title\": { type: \"string\", description: \"Thank-you screen title\" },\n \"thank-you-body\": { type: \"string\", description: \"Thank-you screen text\" },\n \"thank-you-button\": {\n type: \"string\",\n description: \"VIEW_WEBSITE|DOWNLOAD|BOOK_ON_WEBSITE|CALL_BUSINESS|WHATSAPP|P2B_MESSENGER|PROMO_CODE|NONE\",\n },\n \"thank-you-button-text\": { type: \"string\", description: \"Thank-you button text\" },\n \"thank-you-url\": { type: \"string\", description: \"Website the thank-you button opens\" },\n \"thank-you-phone\": { type: \"string\", description: \"CALL_BUSINESS: phone number, e.g. +14155550100\" },\n \"thank-you-country\": { type: \"string\", description: \"CALL_BUSINESS: the number's country, e.g. US\" },\n sharing: { type: \"string\", description: \"restricted (only people shown the ad, Meta's default) | open\" },\n \"sms-verification\": { type: \"boolean\", description: \"Confirm the PHONE answer with a text-message code\" },\n tracking: { type: \"string\", description: \"name=value Meta adds to every lead, repeatable\" },\n} as const;\n\nconst SCHEMA_FORM_ARGS = Object.fromEntries(\n Object.entries(FORM_FLAG_ARGS).map(([key, arg]) => [key, { ...arg, required: false }]),\n);\n\n// --- Create ---\n\nregisterSchema({\n command: \"ads.meta.lead-forms.create\",\n description:\n \"Start here to stage a Page-owned Meta Instant Form. The form is created only when this Session publishes, and it is permanent (Meta archives, never deletes). Use the returned meta_temp_* ref as --lead-form on a creative in the same Session. --file takes the whole spec (questions with keys, options, inlineContext; intro; disclaimer with checkboxes; thankYou; sharing; trackingParameters).\",\n args: {\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account, act_<id>\", required: true },\n \"page-id\": {\n type: \"string\",\n description:\n \"Facebook Page that owns the form — choose one with this account in promotingAccountIds and hasPageAccessToken: true from `baker ads meta pages`\",\n required: true,\n },\n ...SCHEMA_FORM_ARGS,\n file: {\n type: \"string\",\n description: \"JSON file with the full form payload; flags override its keys\",\n required: false,\n },\n },\n});\n\nexport const leadFormsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a Meta Instant Form on a Facebook Page. ${STAGED_NOTE} The form is permanent once published (archive it to retire it).\nChoose a Page with this account in promotingAccountIds and hasPageAccessToken: true from \\`baker ads meta pages\\`.\nExample: baker ads meta lead-forms create --account-id act_123 --page-id 456 --name \"Free audit\" --questions FULL_NAME,EMAIL,PHONE --question \"Budget? => Under 1k | 1k+\" --privacy-policy-url https://example.com/privacy --follow-up-url https://example.com\nFull spec: --file form.json (see \\`baker schema ads.meta.lead-forms.create\\` and the ads-meta tool doc).`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account\" },\n \"page-id\": { type: \"string\", description: \"Facebook Page ID\" },\n ...FORM_FLAG_ARGS,\n file: { type: \"string\", description: \"JSON form payload; flags override file keys\" },\n },\n run: async ({ args, rawArgs }) => {\n const accountId = bareAccountId(args as Args);\n const payload = mergePayload(\n formFileForStaging(loadJsonFileArg(args.file)),\n leadFormPayloadFromFlags(args as Args, rawArgs),\n );\n await stageOp({ kind: \"leadForm.create\", accountId, payload }, [\n \"An ad opens it with `creatives create --cta SIGN_UP --lead-form <ref>` into an ad set with destination ON_AD.\",\n ]);\n },\n});\n\n// --- Spec + duplicate ---\n\ninterface FormSpec {\n spec: Record<string, unknown>;\n notCopied: string[];\n status?: string;\n}\n\nregisterSchema({\n command: \"ads.meta.lead-forms.spec\",\n description:\n \"Read a live Instant Form as the exact payload `lead-forms create --file` takes — the starting point for a changed copy. Lists what could not be carried over.\",\n args: { id: { type: \"positional\", description: \"Instant Form id\", required: true } },\n});\n\nexport const leadFormsSpecCommand = defineCommand({\n meta: {\n name: \"spec\",\n description: `A live form as the payload \\`lead-forms create --file\\` / \\`lead-forms duplicate --file\\` take.\nExample: baker ads meta lead-forms spec 1460955752594831 > form.json`,\n },\n args: { id: { type: \"positional\", description: \"Instant Form id\", required: true } },\n run: async ({ args }) => {\n try {\n const data = await apiGet<FormSpec>(\"/api/ads/meta/lead-forms/spec\", { \"form-id\": String(args.id) });\n writeJsonEnvelope({\n ok: true,\n data: data.spec,\n ...(data.notCopied.length > 0 ? { hints: [`Not carried over: ${data.notCopied.join(\"; \")}`] } : {}),\n });\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\nregisterSchema({\n command: \"ads.meta.lead-forms.duplicate\",\n description:\n \"Stage a NEW Instant Form copied from a live one, with changes — the only way Meta lets a form change (it keeps a form's questions, texts and settings as made). --file holds the changed keys; flags override both. Point ads at the copy, then archive the original.\",\n args: {\n id: { type: \"positional\", description: \"Instant Form id to copy\", required: true },\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account, act_<id>\", required: true },\n ...SCHEMA_FORM_ARGS,\n name: { type: \"string\", description: \"Name of the copy — unique on the Page\", required: true },\n file: { type: \"string\", description: \"JSON with the keys to change (same shape as create)\", required: false },\n },\n});\n\nexport const leadFormsDuplicateCommand = defineCommand({\n meta: {\n name: \"duplicate\",\n description: `Stage a changed copy of a live Instant Form (Meta changes nothing on an existing form). ${STAGED_NOTE}\nExample: baker ads meta lead-forms duplicate 1460955752594831 --account-id act_123 --name \"Free audit (ES)\" --locale ES_LA\nThen point the ads at the copy (\\`creatives create --lead-form <ref>\\`) and \\`lead-forms archive <old id>\\`.`,\n },\n args: {\n id: { type: \"positional\", description: \"Instant Form id to copy\", required: true },\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account\" },\n ...FORM_FLAG_ARGS,\n file: { type: \"string\", description: \"JSON with the keys to change\" },\n },\n run: async ({ args, rawArgs }) => {\n const accountId = bareAccountId(args as Args);\n if (!str(args.name)) failWriteValidation(\"--name is required: Meta refuses a second form with the same name\");\n let source: FormSpec;\n try {\n source = await apiGet<FormSpec>(\"/api/ads/meta/lead-forms/spec\", { \"form-id\": String(args.id) });\n } catch (err) {\n handleMetaError(err);\n }\n const flags = leadFormPayloadFromFlags(args as Args, rawArgs);\n const payload = mergeDuplicateSpec(source.spec, formFileForStaging(loadJsonFileArg(args.file)), flags);\n const notCopied = source.notCopied.length > 0 ? [`Not carried over: ${source.notCopied.join(\"; \")}`] : [];\n await stageOp({ kind: \"leadForm.create\", accountId, payload }, [\n ...notCopied,\n `Point the ads at the copy, then \\`baker ads meta lead-forms archive ${String(args.id)}\\` to retire the original.`,\n ]);\n },\n});\n\n// --- Archive / unarchive ---\n\nfunction statusCommand(name: \"archive\" | \"unarchive\", status: \"ARCHIVED\" | \"ACTIVE\", description: string) {\n registerSchema({\n command: `ads.meta.lead-forms.${name}`,\n description,\n args: {\n id: { type: \"positional\", description: \"Instant Form id\", required: true },\n \"account-id\": { type: \"string\", description: \"Ad account the change is staged under\", required: true },\n },\n });\n return defineCommand({\n meta: {\n name,\n description: `${description} ${STAGED_NOTE}\nExample: baker ads meta lead-forms ${name} 1460955752594831 --account-id act_123`,\n },\n args: {\n id: { type: \"positional\", description: \"Instant Form id\", required: true },\n \"account-id\": { type: \"string\", description: \"Numeric account ID or act_N\" },\n },\n run: async ({ args }) => {\n await stageOp({\n kind: \"leadForm.update\",\n accountId: bareAccountId(args as Args),\n target: requireTarget(args as Args, \"Instant Form\"),\n payload: { status },\n });\n },\n });\n}\n\nexport const leadFormsArchiveCommand = statusCommand(\n \"archive\",\n \"ARCHIVED\",\n \"Archive an Instant Form: it leaves the Page's form library and no ad can use it. Meta never deletes a form; this is how one is retired.\",\n);\n\nexport const leadFormsUnarchiveCommand = statusCommand(\n \"unarchive\",\n \"ACTIVE\",\n \"Bring an archived Instant Form back so ads can use it again.\",\n);\n"],"mappings":"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","names":["defineCommand","defineCommand"]}
@@ -1,7 +1,3 @@
1
- import {
2
- parseDays,
3
- withDefinitions
4
- } from "./chunk-NXZCCGES.js";
5
1
  import {
6
2
  setDefinitionFields
7
3
  } from "./chunk-NEOUY3Q7.js";
@@ -10,6 +6,10 @@ import {
10
6
  readIdeas
11
7
  } from "./chunk-EOY6BK4C.js";
12
8
  import "./chunk-G2LGMWNG.js";
9
+ import {
10
+ parseDays,
11
+ withDefinitions
12
+ } from "./chunk-NXZCCGES.js";
13
13
  import "./chunk-FNA277HP.js";
14
14
  import "./chunk-5WMTPYKT.js";
15
15
  import {
@@ -201,4 +201,4 @@ export {
201
201
  learnCommand,
202
202
  learnEnvelope
203
203
  };
204
- //# sourceMappingURL=learn-CC6Q5IK2.js.map
204
+ //# sourceMappingURL=learn-3BDZUWDT.js.map
@@ -1031,7 +1031,7 @@ Full guide: __tooling__/docs/tools/baker/ads-linkedin.md`
1031
1031
  account: () => import("./account-KNRDOUJP.js").then((m) => m.accountCommand),
1032
1032
  "campaign-groups": () => import("./campaign-groups-YJK767AP.js").then((m) => m.campaignGroupsCommand),
1033
1033
  campaigns: () => import("./campaigns-GALDR5KK.js").then((m) => m.campaignsCommand),
1034
- creatives: () => import("./creatives-VQO2TKE3.js").then((m) => m.creativesCommand),
1034
+ creatives: () => import("./creatives-5I3G5YP3.js").then((m) => m.creativesCommand),
1035
1035
  audiences: () => import("./write-commands-6VR2UD3T.js").then((m) => m.audiencesCommand),
1036
1036
  "lead-forms": () => import("./write-commands-6VR2UD3T.js").then((m) => m.leadFormsCommand),
1037
1037
  draft: () => import("./draft-57OQKHZI.js").then((m) => m.linkedinDraftCommand),
@@ -1054,4 +1054,4 @@ Full guide: __tooling__/docs/tools/baker/ads-linkedin.md`
1054
1054
  export {
1055
1055
  linkedinCommand
1056
1056
  };
1057
- //# sourceMappingURL=linkedin-XKVPSCLV.js.map
1057
+ //# sourceMappingURL=linkedin-UGMAFSGO.js.map
@@ -23,7 +23,7 @@ registerSchema({
23
23
  command: "ads.chatgpt.locations",
24
24
  description: "Places ChatGPT Ads can target, found by name: each row's id is what `campaigns create|update --location-ids` takes. Countries go in --countries as two-letter codes instead.",
25
25
  args: {
26
- query: { type: "string", description: "The place to look for, e.g. Madrid", required: true },
26
+ query: { type: "positional", description: "The place to look for, e.g. Madrid", required: true },
27
27
  limit: { type: "string", description: "At most this many matches (default 20, max 100)", required: false }
28
28
  }
29
29
  });
@@ -64,4 +64,4 @@ export {
64
64
  locationHints,
65
65
  locationsCommand
66
66
  };
67
- //# sourceMappingURL=locations-YA7NZY44.js.map
67
+ //# sourceMappingURL=locations-HM56X2MK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/chatgpt/locations.ts"],"sourcesContent":["import type { ChatgptAdsLocation } from \"@baker/api/ads-chatgpt\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { CHATGPT_ADS_REFERENCE, runChatgptRead } from \"./shared.ts\";\n\nconst ARGS = {\n query: { type: \"positional\", description: \"The place to look for, e.g. Madrid\", required: true },\n limit: { type: \"string\", description: \"At most this many matches (default 20, max 100)\", required: false },\n} as const;\n\nregisterSchema({\n command: \"ads.chatgpt.locations\",\n description:\n \"Places ChatGPT Ads can target, found by name: each row's id is what `campaigns create|update --location-ids` takes. Countries go in --countries as two-letter codes instead.\",\n args: {\n query: { type: \"positional\", description: \"The place to look for, e.g. Madrid\", required: true },\n limit: { type: \"string\", description: \"At most this many matches (default 20, max 100)\", required: false },\n },\n});\n\nexport const locationsCommand = defineCommand({\n meta: {\n name: \"locations\",\n description: `Find the id of a region, city, market or postcode to target or exclude — countries use --countries codes instead.\n\nExamples:\n baker ads chatgpt locations Madrid\n baker ads chatgpt locations \"Comunidad Valenciana\" --limit 5`,\n },\n args: ARGS,\n run: async ({ args }) => {\n await runChatgptRead(\n `${CHATGPT_ADS_REFERENCE.overview}`,\n () =>\n apiGet<ChatgptAdsLocation[]>(\"/api/ads/chatgpt/locations\", {\n q: String(args.query),\n ...(typeof args.limit === \"string\" && args.limit ? { limit: args.limit } : {}),\n }),\n locationHints,\n );\n },\n});\n\nexport function locationHints(places: readonly ChatgptAdsLocation[]): string[] {\n if (places.length === 0) {\n return [\"No place matched. Try the local or English name, or a broader area.\"];\n }\n const unserved = [...new Set(places.filter((place) => !place.served).map((place) => place.countryCode))];\n return [\n \"Target one with `campaigns create|update --location-ids <id>` (or exclude it with `--excluded-location-ids`) — the id, not the name.\",\n ...(unserved.length > 0\n ? [\n `ChatGPT Ads did not serve in ${unserved.join(\", \")} when Baker last checked (served: false): a campaign targeting those places is refused at publish.`,\n ]\n : []),\n ];\n}\n"],"mappings":";;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAK9B,IAAM,OAAO;AAAA,EACX,OAAO,EAAE,MAAM,cAAc,aAAa,sCAAsC,UAAU,KAAK;AAAA,EAC/F,OAAO,EAAE,MAAM,UAAU,aAAa,mDAAmD,UAAU,MAAM;AAC3G;AAEA,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,OAAO,EAAE,MAAM,cAAc,aAAa,sCAAsC,UAAU,KAAK;AAAA,IAC/F,OAAO,EAAE,MAAM,UAAU,aAAa,mDAAmD,UAAU,MAAM;AAAA,EAC3G;AACF,CAAC;AAEM,IAAM,mBAAmB,cAAc;AAAA,EAC5C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf;AAAA,EACA,MAAM;AAAA,EACN,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM;AAAA,MACJ,GAAG,sBAAsB,QAAQ;AAAA,MACjC,MACE,OAA6B,8BAA8B;AAAA,QACzD,GAAG,OAAO,KAAK,KAAK;AAAA,QACpB,GAAI,OAAO,KAAK,UAAU,YAAY,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,MAC9E,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEM,SAAS,cAAc,QAAiD;AAC7E,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,CAAC,qEAAqE;AAAA,EAC/E;AACA,QAAM,WAAW,CAAC,GAAG,IAAI,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,MAAM,EAAE,IAAI,CAAC,UAAU,MAAM,WAAW,CAAC,CAAC;AACvG,SAAO;AAAA,IACL;AAAA,IACA,GAAI,SAAS,SAAS,IAClB;AAAA,MACE,gCAAgC,SAAS,KAAK,IAAI,CAAC;AAAA,IACrD,IACA,CAAC;AAAA,EACP;AACF;","names":[]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  fetchBrandLogo,
3
3
  logoCommand
4
- } from "./chunk-H5HDZ7IC.js";
4
+ } from "./chunk-DCBZ5CHZ.js";
5
5
  import "./chunk-IVIJJXXT.js";
6
6
  import "./chunk-MJQBXFW6.js";
7
- import "./chunk-Q6ULQMWG.js";
8
7
  import "./chunk-KKJ4KJCW.js";
8
+ import "./chunk-Q6ULQMWG.js";
9
9
  import "./chunk-XDZVBX6L.js";
10
10
  import "./chunk-N5O67GK5.js";
11
11
  import "./chunk-EE72SSB2.js";
@@ -15,4 +15,4 @@ export {
15
15
  fetchBrandLogo,
16
16
  logoCommand
17
17
  };
18
- //# sourceMappingURL=logo-YSNUUT33.js.map
18
+ //# sourceMappingURL=logo-VHXH4J6A.js.map
@@ -1,11 +1,6 @@
1
1
  import {
2
2
  scaffoldDelivery
3
- } from "./chunk-TPANP5A2.js";
4
- import {
5
- buildSearchBody
6
- } from "./chunk-MXWOYFI2.js";
7
- import "./chunk-D7KR6KXR.js";
8
- import "./chunk-I5VZVQBZ.js";
3
+ } from "./chunk-JKJQWRLO.js";
9
4
  import {
10
5
  NO_FIT_HINT,
11
6
  conceptFromFit,
@@ -17,26 +12,12 @@ import {
17
12
  import {
18
13
  makeSeriesAd,
19
14
  seriesMadeEnvelope
20
- } from "./chunk-CSZFZKVX.js";
21
- import "./chunk-XZ4YMCZK.js";
15
+ } from "./chunk-PQJXIY64.js";
22
16
  import {
23
17
  runBaker
24
- } from "./chunk-C6EYCD5J.js";
25
- import "./chunk-UWXDNVS5.js";
26
- import "./chunk-FUKDI2UK.js";
27
- import {
28
- parseDefinitionDelivery,
29
- parseDefinitionSourceFields,
30
- platformsNamedIn,
31
- projectAdaptBriefs,
32
- projectFormatBriefs,
33
- projectStaticBriefs,
34
- recordedShape,
35
- reroutedOnSpec,
36
- thinkingOutline,
37
- withThinking
38
- } from "./chunk-AVNSH2JE.js";
39
- import "./chunk-PA4W7BCQ.js";
18
+ } from "./chunk-FVHJCERJ.js";
19
+ import "./chunk-XZ4YMCZK.js";
20
+ import "./chunk-ZJSGGJ5R.js";
40
21
  import {
41
22
  audienceQuery,
42
23
  definitionFieldsOf,
@@ -60,25 +41,44 @@ import {
60
41
  whyUnfit,
61
42
  withFitConcept
62
43
  } from "./chunk-NEOUY3Q7.js";
44
+ import "./chunk-3W6G6ARX.js";
63
45
  import {
64
- IDEAS_DIR,
65
- coverageOf,
66
- readCreativeRecords,
67
- readIdeas,
68
- readInsights,
69
- readKnowledgeCorpus,
70
- readPersonaIds
71
- } from "./chunk-EOY6BK4C.js";
46
+ parseDefinitionDelivery,
47
+ parseDefinitionSourceFields,
48
+ platformsNamedIn,
49
+ projectAdaptBriefs,
50
+ projectFormatBriefs,
51
+ projectStaticBriefs,
52
+ recordedShape,
53
+ reroutedOnSpec,
54
+ thinkingOutline,
55
+ withThinking
56
+ } from "./chunk-KOXDXSKN.js";
57
+ import "./chunk-PA4W7BCQ.js";
72
58
  import {
73
59
  liveViewerLookups,
74
60
  readPersonas
75
- } from "./chunk-QE3JEJXF.js";
76
- import "./chunk-2XRMPSEV.js";
61
+ } from "./chunk-GSZZLW5Q.js";
62
+ import "./chunk-LXQB4ZGE.js";
77
63
  import {
78
64
  castInventory,
79
65
  companyName
80
66
  } from "./chunk-PTGYM4J6.js";
81
67
  import "./chunk-LCW3U4EA.js";
68
+ import {
69
+ buildSearchBody
70
+ } from "./chunk-MXWOYFI2.js";
71
+ import "./chunk-D7KR6KXR.js";
72
+ import "./chunk-I5VZVQBZ.js";
73
+ import {
74
+ IDEAS_DIR,
75
+ coverageOf,
76
+ readCreativeRecords,
77
+ readIdeas,
78
+ readInsights,
79
+ readKnowledgeCorpus,
80
+ readPersonaIds
81
+ } from "./chunk-EOY6BK4C.js";
82
82
  import {
83
83
  avoidOf,
84
84
  memeRegister,
@@ -92,7 +92,7 @@ import {
92
92
  import "./chunk-P3W6SRSQ.js";
93
93
  import "./chunk-BL2MX6CR.js";
94
94
  import "./chunk-JYALBYN7.js";
95
- import "./chunk-BITS62MF.js";
95
+ import "./chunk-G6XKD7QE.js";
96
96
  import "./chunk-FNA277HP.js";
97
97
  import {
98
98
  holdUnbilledSpend
@@ -100,7 +100,7 @@ import {
100
100
  import {
101
101
  findWorkspaceRoot
102
102
  } from "./chunk-23H4ZJRP.js";
103
- import "./chunk-62JQQUAU.js";
103
+ import "./chunk-JQH5VG6F.js";
104
104
  import "./chunk-E2RFM6R2.js";
105
105
  import "./chunk-DGCUPJZD.js";
106
106
  import "./chunk-BTY4LZBG.js";
@@ -120,8 +120,8 @@ import {
120
120
  describeMarket,
121
121
  marketFromCompanyDoc,
122
122
  viewerFromKnowledge
123
- } from "./chunk-KPYDTIAI.js";
124
- import "./chunk-KIGGMKAE.js";
123
+ } from "./chunk-2WZI36D3.js";
124
+ import "./chunk-65Y3RCWP.js";
125
125
  import {
126
126
  askJevQuestions
127
127
  } from "./chunk-DWX44QL6.js";
@@ -1350,4 +1350,4 @@ export {
1350
1350
  startsFromIdea,
1351
1351
  unbuiltReference
1352
1352
  };
1353
- //# sourceMappingURL=make-ED7HBLH3.js.map
1353
+ //# sourceMappingURL=make-W2PYZXYF.js.map
@@ -0,0 +1,18 @@
1
+ import "./chunk-YQSBHWOI.js";
2
+
3
+ // src/commands/ads/meta/media.ts
4
+ import { defineCommand } from "citty";
5
+ var metaMediaCommand = defineCommand({
6
+ meta: {
7
+ name: "media",
8
+ description: "Stage Baker library media uploads to Meta so creatives can reference them (upload), or take an image out of the account's image library (delete --image-hash). Upload publishes an ad-image hash or video id a creative binds via --image-ref/--video-ref."
9
+ },
10
+ subCommands: {
11
+ upload: () => import("./write-commands-PEJBTME6.js").then((m) => m.mediaUploadCommand),
12
+ delete: () => import("./asset-writes-L5TMKIZC.js").then((m) => m.mediaDeleteCommand)
13
+ }
14
+ });
15
+ export {
16
+ metaMediaCommand
17
+ };
18
+ //# sourceMappingURL=media-H6B7VDON.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/meta/media.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\n\nexport const metaMediaCommand = defineCommand({\n meta: {\n name: \"media\",\n description:\n \"Stage Baker library media uploads to Meta so creatives can reference them (upload), or take an image out of the account's image library (delete --image-hash). Upload publishes an ad-image hash or video id a creative binds via --image-ref/--video-ref.\",\n },\n subCommands: {\n upload: () => import(\"./write-commands.ts\").then((m) => m.mediaUploadCommand),\n delete: () => import(\"./asset-writes.ts\").then((m) => m.mediaDeleteCommand),\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAEvB,IAAM,mBAAmB,cAAc;AAAA,EAC5C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,aAAa;AAAA,IACX,QAAQ,MAAM,OAAO,8BAAqB,EAAE,KAAK,CAAC,MAAM,EAAE,kBAAkB;AAAA,IAC5E,QAAQ,MAAM,OAAO,4BAAmB,EAAE,KAAK,CAAC,MAAM,EAAE,kBAAkB;AAAA,EAC5E;AACF,CAAC;","names":[]}
@@ -29,4 +29,4 @@ Full guide: __tooling__/docs/tools/baker/media-sources.md`
29
29
  export {
30
30
  mediaSourcesCommand
31
31
  };
32
- //# sourceMappingURL=media-sources-PEHUMH7C.js.map
32
+ //# sourceMappingURL=media-sources-EZKAJNVD.js.map
@@ -0,0 +1,122 @@
1
+ import "./chunk-YQSBHWOI.js";
2
+
3
+ // src/commands/ads/meta/index.ts
4
+ import { defineCommand } from "citty";
5
+ var metaCommand = defineCommand({
6
+ meta: {
7
+ name: "meta",
8
+ description: `Meta Marketing API \u2014 AI-first command surface (Facebook + Instagram ads).
9
+
10
+ Discovery:
11
+ baker ads meta accounts \u2014 accounts in this company's connected scope
12
+ baker ads meta businesses \u2014 Business Manager IDs
13
+ baker ads meta pages \u2014 Facebook Pages the selected ad accounts can promote (an ad's identity)
14
+ baker ads meta lead-forms --page-id 100635183117758 \u2014 instant (lead) forms on a Page, with lead counts
15
+ baker ads meta lead-forms create --account-id act_123 --page-id 555 --file form.json \u2014 stage a new form
16
+ baker ads meta leads --form-id 987654321 \u2014 the leads one form collected (contact details masked)
17
+
18
+ Snapshot a running account (default = ACTIVE only):
19
+ baker ads meta campaigns --account-id act_123
20
+ baker ads meta adsets --campaign-id 6123
21
+ baker ads meta ads --adset-id 6123
22
+ baker ads meta campaigns --account-id act_123 --all-statuses \u2014 include paused, archived
23
+
24
+ Build targeting (Meta takes ids, never names \u2014 look them up first):
25
+ baker ads meta targeting search --account-id act_123 --q "solar energy" \u2014 interest/behavior/employer\u2026 ids
26
+ baker ads meta targeting geo --account-id act_123 --q Madrid \u2014 location keys
27
+ baker ads meta targeting validate --account-id act_123 --targeting-file t.json
28
+ baker ads meta targeting estimate --account-id act_123 --targeting-file t.json --optimization-goal LEAD_GENERATION
29
+ baker ads meta targeting describe --account-id act_123 --adset-id 6123 \u2014 the audience in Meta's words
30
+
31
+ Identities and libraries:
32
+ baker ads meta instagram-accounts --account-id act_123 \u2014 the --instagram-user an ad can run as
33
+ baker ads meta apps --account-id act_123 \u2014 apps it can promote
34
+ baker ads meta dsa-recommendations --account-id act_123 \u2014 EU DSA beneficiary/payor names
35
+ baker ads meta images --account-id act_123 \u2014 image hashes already on Meta
36
+ baker ads meta labels --account-id act_123
37
+ baker ads meta catalogs --business-id 601050769212882 \u2014 product catalogs; --catalog-id for product sets; products/sets/feeds/diagnostics
38
+ baker ads meta page-photos upload --page-id \u2026 --image-id \u2026 \u2014 a photo on a Page, not posted (Instant Experiences)
39
+ baker ads meta instant-experiences --page-id 904238019441800 \u2014 full-screen pages an ad can open (collection ads)
40
+ baker ads meta studies --account-id act_123 \u2014 A/B tests; --study-id for results
41
+ baker ads meta high-demand-periods --campaign-id 6123 \u2014 budget boosts
42
+ baker ads meta page-posts --page-id 904238019441800 \u2014 posts an ad can boost; instagram-media for Instagram
43
+ baker ads meta block-lists --account-id act_123 \u2014 sites and apps ads stay off (brand safety)
44
+ baker ads meta reach-frequency --account-id act_123 \u2014 reach & frequency quotes; predict | reserve | cancel
45
+ baker ads meta account-settings --account-id act_123 --spending-limit 5000 \u2014 account name / spending limit (staged)
46
+ baker ads meta comments --ad-id 120211234567890 \u2014 comments on an ad's post
47
+ baker ads meta account-details --account-id act_123 --show users \u2014 people, Meta's suggestions, Advantage+ controls, playables, page sets
48
+
49
+ Drill in:
50
+ baker ads meta account --account-id act_123 \u2014 currency, balance, business, whether it can deliver
51
+ baker ads meta creatives --creative-id 9988 \u2014 single creative detail
52
+ baker ads meta audiences --account-id act_123
53
+ baker ads meta custom-conversions --account-id act_123 \u2014 the marketer's own conversions ("my conversions")
54
+ baker ads meta pixels --account-id act_123 \u2014 pixel list
55
+ baker ads meta pixels --pixel-id 9988 --stats --days 7 \u2014 firing health
56
+
57
+ Performance (the workhorse):
58
+ baker ads meta insights --object act_123 \u2014 defaults: level=account, intent=baseline, last_7d
59
+ baker ads meta insights --object act_123 --intent revenue --date-preset last_28d
60
+ baker ads meta insights --object act_123 --level ad --intent ranking \u2014 flag creatives to refresh
61
+ baker ads meta insights --object act_123 --level adset --breakdowns publisher_platform,age \u2014 placement \xD7 age
62
+ baker ads meta insights --object act_123 --level ad --since 2026-01-01 --until 2026-03-31 \u2014 auto-async
63
+ baker ads meta insights --list-intents
64
+
65
+ Automated rules (run on Meta, unattended, once published):
66
+ baker ads meta rules --account-id act_123 \u2014 every rule and what it does
67
+ baker ads meta rules history --rule-id 1132635173044914 \u2014 what a rule did and when
68
+ baker ads meta rules create --name "Stop expensive ads" --apply-to ad --when "cost_per_result>20" --action pause
69
+
70
+ A/B tests (Meta splits the audience between versions and calls the winner):
71
+ baker ads meta adsets duplicate 6123 --name "\u2026 \u2013 lookalike" \u2014 then change ONE thing on the copy
72
+ baker ads meta studies create --name "Broad vs lookalike" --adsets 6123,meta_temp_ab12 --start 2026-10-20T08:00Z --days 14
73
+
74
+ Audit & review:
75
+ baker ads meta activities --account-id act_123 --days 14
76
+ baker ads meta preview --creative-id 9988 --ad-format MOBILE_FEED_STANDARD --out-file /tmp/p.html
77
+ Full guide: __tooling__/docs/tools/baker/ads-meta.md`
78
+ },
79
+ subCommands: {
80
+ accounts: () => import("./accounts-K4INATCW.js").then((m) => m.accountsCommand),
81
+ account: () => import("./account-IKFDY52P.js").then((m) => m.accountCommand),
82
+ businesses: () => import("./businesses-H3HIDQX6.js").then((m) => m.businessesCommand),
83
+ pages: () => import("./pages-PTWRXAZT.js").then((m) => m.pagesCommand),
84
+ "lead-forms": () => import("./leads-THI37ZMD.js").then((m) => m.leadFormsCommand),
85
+ "instant-experiences": () => import("./instant-experiences-NQ2GWIWL.js").then((m) => m.instantExperiencesCommand),
86
+ leads: () => import("./leads-THI37ZMD.js").then((m) => m.leadsCommand),
87
+ campaigns: () => import("./campaigns-AV6G3AUU.js").then((m) => m.campaignsCommand),
88
+ adsets: () => import("./adsets-5H3MOT3D.js").then((m) => m.adsetsCommand),
89
+ ads: () => import("./ads-ZEY72UBN.js").then((m) => m.adsListCommand),
90
+ creatives: () => import("./creatives-MZ6ICNSY.js").then((m) => m.creativesCommand),
91
+ audiences: () => import("./audiences-X3RLGOVM.js").then((m) => m.audiencesCommand),
92
+ "custom-conversions": () => import("./custom-conversions-FIP6ZS34.js").then((m) => m.customConversionsCommand),
93
+ pixels: () => import("./pixels-ZZCQUS3J.js").then((m) => m.pixelsCommand),
94
+ activities: () => import("./activities-T253KK4Q.js").then((m) => m.activitiesCommand),
95
+ insights: () => import("./insights-YWVJMATY.js").then((m) => m.insightsCommand),
96
+ preview: () => import("./preview-XOXAAPMQ.js").then((m) => m.previewCommand),
97
+ targeting: () => import("./targeting-LNDQV4EK.js").then((m) => m.targetingCommand),
98
+ "instagram-accounts": () => import("./account-assets-LKZVWZAR.js").then((m) => m.instagramAccountsCommand),
99
+ apps: () => import("./account-assets-LKZVWZAR.js").then((m) => m.appsCommand),
100
+ "dsa-recommendations": () => import("./account-assets-LKZVWZAR.js").then((m) => m.dsaRecommendationsCommand),
101
+ images: () => import("./account-assets-LKZVWZAR.js").then((m) => m.imagesCommand),
102
+ labels: () => import("./account-assets-LKZVWZAR.js").then((m) => m.labelsCommand),
103
+ studies: () => import("./studies-4NIV4D5Y.js").then((m) => m.studiesCommand),
104
+ catalogs: () => import("./catalogs-RXJTZTVX.js").then((m) => m.catalogsCommand),
105
+ "page-photos": () => import("./page-photos-CXRG4AXV.js").then((m) => m.pagePhotosCommand),
106
+ "page-posts": () => import("./account-level-UJOZDVXY.js").then((m) => m.pagePostsCommand),
107
+ "instagram-media": () => import("./account-level-UJOZDVXY.js").then((m) => m.instagramMediaCommand),
108
+ comments: () => import("./account-level-UJOZDVXY.js").then((m) => m.commentsCommand),
109
+ "account-settings": () => import("./account-level-UJOZDVXY.js").then((m) => m.accountSettingsCommand),
110
+ "account-details": () => import("./account-level-UJOZDVXY.js").then((m) => m.accountDetailsCommand),
111
+ "block-lists": () => import("./account-level-UJOZDVXY.js").then((m) => m.blockListsCommand),
112
+ "reach-frequency": () => import("./account-level-UJOZDVXY.js").then((m) => m.reachFrequencyCommand),
113
+ "high-demand-periods": () => import("./account-assets-LKZVWZAR.js").then((m) => m.highDemandPeriodsCommand),
114
+ rules: () => import("./rules-BMYOY2BM.js").then((m) => m.rulesCommand),
115
+ media: () => import("./media-H6B7VDON.js").then((m) => m.metaMediaCommand),
116
+ draft: () => import("./draft-L45PGCYZ.js").then((m) => m.metaDraftCommand)
117
+ }
118
+ });
119
+ export {
120
+ metaCommand
121
+ };
122
+ //# sourceMappingURL=meta-YHDTGJQ6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/meta/index.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\n\n/**\n * Meta Ads command surface — curated for AI agents, not 1:1 with the Marketing API.\n *\n * Every backend read route has a command except `/currency`: `account` already\n * returns the currency and time zone, so a second command for two of its\n * fields would only be a second place to look.\n *\n * Default behaviors that matter:\n * - Listings (campaigns/adsets/ads) filter to ACTIVE — pass --all-statuses to widen.\n * - Insights filter out non-delivered rows (impressions=0) and sort by spend desc.\n * - Insights pick a smart field bundle via --intent (baseline|revenue|funnel|ranking|video|identity).\n * - Heavy insights queries auto-fall to async (poll loop hidden).\n * - Attribution defaults to 7d_click,1d_view — the only windows still working as of Jan 2026.\n */\nexport const metaCommand = defineCommand({\n meta: {\n name: \"meta\",\n description: `Meta Marketing API — AI-first command surface (Facebook + Instagram ads).\n\nDiscovery:\n baker ads meta accounts — accounts in this company's connected scope\n baker ads meta businesses — Business Manager IDs\n baker ads meta pages — Facebook Pages the selected ad accounts can promote (an ad's identity)\n baker ads meta lead-forms --page-id 100635183117758 — instant (lead) forms on a Page, with lead counts\n baker ads meta lead-forms create --account-id act_123 --page-id 555 --file form.json — stage a new form\n baker ads meta leads --form-id 987654321 — the leads one form collected (contact details masked)\n\nSnapshot a running account (default = ACTIVE only):\n baker ads meta campaigns --account-id act_123\n baker ads meta adsets --campaign-id 6123\n baker ads meta ads --adset-id 6123\n baker ads meta campaigns --account-id act_123 --all-statuses — include paused, archived\n\nBuild targeting (Meta takes ids, never names — look them up first):\n baker ads meta targeting search --account-id act_123 --q \"solar energy\" — interest/behavior/employer… ids\n baker ads meta targeting geo --account-id act_123 --q Madrid — location keys\n baker ads meta targeting validate --account-id act_123 --targeting-file t.json\n baker ads meta targeting estimate --account-id act_123 --targeting-file t.json --optimization-goal LEAD_GENERATION\n baker ads meta targeting describe --account-id act_123 --adset-id 6123 — the audience in Meta's words\n\nIdentities and libraries:\n baker ads meta instagram-accounts --account-id act_123 — the --instagram-user an ad can run as\n baker ads meta apps --account-id act_123 — apps it can promote\n baker ads meta dsa-recommendations --account-id act_123 — EU DSA beneficiary/payor names\n baker ads meta images --account-id act_123 — image hashes already on Meta\n baker ads meta labels --account-id act_123\n baker ads meta catalogs --business-id 601050769212882 — product catalogs; --catalog-id for product sets; products/sets/feeds/diagnostics\n baker ads meta page-photos upload --page-id … --image-id … — a photo on a Page, not posted (Instant Experiences)\n baker ads meta instant-experiences --page-id 904238019441800 — full-screen pages an ad can open (collection ads)\n baker ads meta studies --account-id act_123 — A/B tests; --study-id for results\n baker ads meta high-demand-periods --campaign-id 6123 — budget boosts\n baker ads meta page-posts --page-id 904238019441800 — posts an ad can boost; instagram-media for Instagram\n baker ads meta block-lists --account-id act_123 — sites and apps ads stay off (brand safety)\n baker ads meta reach-frequency --account-id act_123 — reach & frequency quotes; predict | reserve | cancel\n baker ads meta account-settings --account-id act_123 --spending-limit 5000 — account name / spending limit (staged)\n baker ads meta comments --ad-id 120211234567890 — comments on an ad's post\n baker ads meta account-details --account-id act_123 --show users — people, Meta's suggestions, Advantage+ controls, playables, page sets\n\nDrill in:\n baker ads meta account --account-id act_123 — currency, balance, business, whether it can deliver\n baker ads meta creatives --creative-id 9988 — single creative detail\n baker ads meta audiences --account-id act_123\n baker ads meta custom-conversions --account-id act_123 — the marketer's own conversions (\"my conversions\")\n baker ads meta pixels --account-id act_123 — pixel list\n baker ads meta pixels --pixel-id 9988 --stats --days 7 — firing health\n\nPerformance (the workhorse):\n baker ads meta insights --object act_123 — defaults: level=account, intent=baseline, last_7d\n baker ads meta insights --object act_123 --intent revenue --date-preset last_28d\n baker ads meta insights --object act_123 --level ad --intent ranking — flag creatives to refresh\n baker ads meta insights --object act_123 --level adset --breakdowns publisher_platform,age — placement × age\n baker ads meta insights --object act_123 --level ad --since 2026-01-01 --until 2026-03-31 — auto-async\n baker ads meta insights --list-intents\n\nAutomated rules (run on Meta, unattended, once published):\n baker ads meta rules --account-id act_123 — every rule and what it does\n baker ads meta rules history --rule-id 1132635173044914 — what a rule did and when\n baker ads meta rules create --name \"Stop expensive ads\" --apply-to ad --when \"cost_per_result>20\" --action pause\n\nA/B tests (Meta splits the audience between versions and calls the winner):\n baker ads meta adsets duplicate 6123 --name \"… – lookalike\" — then change ONE thing on the copy\n baker ads meta studies create --name \"Broad vs lookalike\" --adsets 6123,meta_temp_ab12 --start 2026-10-20T08:00Z --days 14\n\nAudit & review:\n baker ads meta activities --account-id act_123 --days 14\n baker ads meta preview --creative-id 9988 --ad-format MOBILE_FEED_STANDARD --out-file /tmp/p.html\nFull guide: __tooling__/docs/tools/baker/ads-meta.md`,\n },\n subCommands: {\n accounts: () => import(\"./accounts.ts\").then((m) => m.accountsCommand),\n account: () => import(\"./account.ts\").then((m) => m.accountCommand),\n businesses: () => import(\"./businesses.ts\").then((m) => m.businessesCommand),\n pages: () => import(\"./pages.ts\").then((m) => m.pagesCommand),\n \"lead-forms\": () => import(\"./leads.ts\").then((m) => m.leadFormsCommand),\n \"instant-experiences\": () => import(\"./instant-experiences.ts\").then((m) => m.instantExperiencesCommand),\n leads: () => import(\"./leads.ts\").then((m) => m.leadsCommand),\n campaigns: () => import(\"./campaigns.ts\").then((m) => m.campaignsCommand),\n adsets: () => import(\"./adsets.ts\").then((m) => m.adsetsCommand),\n ads: () => import(\"./ads.ts\").then((m) => m.adsListCommand),\n creatives: () => import(\"./creatives.ts\").then((m) => m.creativesCommand),\n audiences: () => import(\"./audiences.ts\").then((m) => m.audiencesCommand),\n \"custom-conversions\": () => import(\"./custom-conversions.ts\").then((m) => m.customConversionsCommand),\n pixels: () => import(\"./pixels.ts\").then((m) => m.pixelsCommand),\n activities: () => import(\"./activities.ts\").then((m) => m.activitiesCommand),\n insights: () => import(\"./insights.ts\").then((m) => m.insightsCommand),\n preview: () => import(\"./preview.ts\").then((m) => m.previewCommand),\n targeting: () => import(\"./targeting.ts\").then((m) => m.targetingCommand),\n \"instagram-accounts\": () => import(\"./account-assets.ts\").then((m) => m.instagramAccountsCommand),\n apps: () => import(\"./account-assets.ts\").then((m) => m.appsCommand),\n \"dsa-recommendations\": () => import(\"./account-assets.ts\").then((m) => m.dsaRecommendationsCommand),\n images: () => import(\"./account-assets.ts\").then((m) => m.imagesCommand),\n labels: () => import(\"./account-assets.ts\").then((m) => m.labelsCommand),\n studies: () => import(\"./studies.ts\").then((m) => m.studiesCommand),\n catalogs: () => import(\"./catalogs.ts\").then((m) => m.catalogsCommand),\n \"page-photos\": () => import(\"./page-photos.ts\").then((m) => m.pagePhotosCommand),\n \"page-posts\": () => import(\"./account-level.ts\").then((m) => m.pagePostsCommand),\n \"instagram-media\": () => import(\"./account-level.ts\").then((m) => m.instagramMediaCommand),\n comments: () => import(\"./account-level.ts\").then((m) => m.commentsCommand),\n \"account-settings\": () => import(\"./account-level.ts\").then((m) => m.accountSettingsCommand),\n \"account-details\": () => import(\"./account-level.ts\").then((m) => m.accountDetailsCommand),\n \"block-lists\": () => import(\"./account-level.ts\").then((m) => m.blockListsCommand),\n \"reach-frequency\": () => import(\"./account-level.ts\").then((m) => m.reachFrequencyCommand),\n \"high-demand-periods\": () => import(\"./account-assets.ts\").then((m) => m.highDemandPeriodsCommand),\n rules: () => import(\"./rules.ts\").then((m) => m.rulesCommand),\n media: () => import(\"./media.ts\").then((m) => m.metaMediaCommand),\n draft: () => import(\"./draft.ts\").then((m) => m.metaDraftCommand),\n },\n});\n"],"mappings":"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","names":[]}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  destinationRefusal
3
- } from "./chunk-OWA7ZLC4.js";
4
- import "./chunk-IJ22WP3G.js";
3
+ } from "./chunk-D4CKCNGW.js";
5
4
  import "./chunk-MXH35PJ5.js";
5
+ import "./chunk-IJ22WP3G.js";
6
6
  import {
7
7
  failApi
8
8
  } from "./chunk-TP7HKSBX.js";
@@ -119,4 +119,4 @@ export {
119
119
  optionsCommand,
120
120
  optionsHints
121
121
  };
122
- //# sourceMappingURL=options-6FCNFWUF.js.map
122
+ //# sourceMappingURL=options-NSCZSQ5P.js.map