@koda-sl/baker-cli 0.387.0 → 0.389.0-dev.8065ad8f0

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 (967) hide show
  1. package/README.md +1090 -211
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-CLOKMTTC.js +49 -0
  5. package/dist/account-CLOKMTTC.js.map +1 -0
  6. package/dist/account-V5Y2QHAK.js +79 -0
  7. package/dist/account-V5Y2QHAK.js.map +1 -0
  8. package/dist/account-XFK6VX2R.js +80 -0
  9. package/dist/account-XFK6VX2R.js.map +1 -0
  10. package/dist/account-reads-S5VXX2QU.js +218 -0
  11. package/dist/account-reads-S5VXX2QU.js.map +1 -0
  12. package/dist/account-writes-Y7EQXDXF.js +66 -0
  13. package/dist/account-writes-Y7EQXDXF.js.map +1 -0
  14. package/dist/accounts-7YD457YN.js +114 -0
  15. package/dist/accounts-7YD457YN.js.map +1 -0
  16. package/dist/accounts-BJ3X5JQT.js +115 -0
  17. package/dist/accounts-BJ3X5JQT.js.map +1 -0
  18. package/dist/accounts-LOJ4WLIX.js +77 -0
  19. package/dist/accounts-LOJ4WLIX.js.map +1 -0
  20. package/dist/accounts-RYBDLQ6H.js +75 -0
  21. package/dist/accounts-RYBDLQ6H.js.map +1 -0
  22. package/dist/accounts-UO4XBWM2.js +611 -0
  23. package/dist/accounts-UO4XBWM2.js.map +1 -0
  24. package/dist/actions-3AW3R63U.js +55 -0
  25. package/dist/actions-3AW3R63U.js.map +1 -0
  26. package/dist/active-entities-R6GZIO6Z.js +103 -0
  27. package/dist/active-entities-R6GZIO6Z.js.map +1 -0
  28. package/dist/activities-ESBF3GFS.js +74 -0
  29. package/dist/activities-ESBF3GFS.js.map +1 -0
  30. package/dist/ad-group-writes-I225OYDZ.js +170 -0
  31. package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
  32. package/dist/ad-groups-O35MWNF6.js +68 -0
  33. package/dist/ad-groups-O35MWNF6.js.map +1 -0
  34. package/dist/ad-writes-SS5YZO5W.js +174 -0
  35. package/dist/ad-writes-SS5YZO5W.js.map +1 -0
  36. package/dist/add-43DUOVNR.js +104 -0
  37. package/dist/add-43DUOVNR.js.map +1 -0
  38. package/dist/add-IE5WDELB.js +302 -0
  39. package/dist/add-IE5WDELB.js.map +1 -0
  40. package/dist/add-QZHAWUBA.js +97 -0
  41. package/dist/add-QZHAWUBA.js.map +1 -0
  42. package/dist/add-TGQIVVXH.js +105 -0
  43. package/dist/add-TGQIVVXH.js.map +1 -0
  44. package/dist/add-accounts-6QYPOPR2.js +91 -0
  45. package/dist/add-accounts-6QYPOPR2.js.map +1 -0
  46. package/dist/ads-AUSRB4GU.js +128 -0
  47. package/dist/ads-AUSRB4GU.js.map +1 -0
  48. package/dist/ads-COYOTEKE.js +77 -0
  49. package/dist/ads-COYOTEKE.js.map +1 -0
  50. package/dist/ads-MALHYD2D.js +40 -0
  51. package/dist/ads-MALHYD2D.js.map +1 -0
  52. package/dist/ads-XZCMSPM5.js +113 -0
  53. package/dist/ads-XZCMSPM5.js.map +1 -0
  54. package/dist/adsets-AKR75THA.js +176 -0
  55. package/dist/adsets-AKR75THA.js.map +1 -0
  56. package/dist/advertisers-52FMMBTQ.js +120 -0
  57. package/dist/advertisers-52FMMBTQ.js.map +1 -0
  58. package/dist/advertisers-BCGKUMEH.js +125 -0
  59. package/dist/advertisers-BCGKUMEH.js.map +1 -0
  60. package/dist/analytics-JPDBKETM.js +1980 -0
  61. package/dist/analytics-JPDBKETM.js.map +1 -0
  62. package/dist/analytics-YVQ6H4BG.js +433 -0
  63. package/dist/analytics-YVQ6H4BG.js.map +1 -0
  64. package/dist/animate-JXIT77Y5.js +480 -0
  65. package/dist/animate-JXIT77Y5.js.map +1 -0
  66. package/dist/assign-66NTWTR2.js +77 -0
  67. package/dist/assign-66NTWTR2.js.map +1 -0
  68. package/dist/audience-size-LVQJWQAS.js +94 -0
  69. package/dist/audience-size-LVQJWQAS.js.map +1 -0
  70. package/dist/audiences-DC3IOG34.js +85 -0
  71. package/dist/audiences-DC3IOG34.js.map +1 -0
  72. package/dist/audiences-NEW3LLQR.js +268 -0
  73. package/dist/audiences-NEW3LLQR.js.map +1 -0
  74. package/dist/audiences-NYGMBGQ3.js +79 -0
  75. package/dist/audiences-NYGMBGQ3.js.map +1 -0
  76. package/dist/audit-UIPMTI5C.js +88 -0
  77. package/dist/audit-UIPMTI5C.js.map +1 -0
  78. package/dist/audit-XGN2OFLN.js +151 -0
  79. package/dist/audit-XGN2OFLN.js.map +1 -0
  80. package/dist/autocomplete-LVPDV3JE.js +111 -0
  81. package/dist/autocomplete-LVPDV3JE.js.map +1 -0
  82. package/dist/avatars-S6NSLMJK.js +38 -0
  83. package/dist/avatars-S6NSLMJK.js.map +1 -0
  84. package/dist/bid-pricing-2LYULXU2.js +99 -0
  85. package/dist/bid-pricing-2LYULXU2.js.map +1 -0
  86. package/dist/brand-WWHUZ72R.js +22 -0
  87. package/dist/brand-WWHUZ72R.js.map +1 -0
  88. package/dist/brief-XY3TFWBC.js +492 -0
  89. package/dist/brief-XY3TFWBC.js.map +1 -0
  90. package/dist/businesses-J7OP7MSK.js +53 -0
  91. package/dist/businesses-J7OP7MSK.js.map +1 -0
  92. package/dist/campaign-groups-N4TZ2F3L.js +95 -0
  93. package/dist/campaign-groups-N4TZ2F3L.js.map +1 -0
  94. package/dist/campaign-writes-5XA727KI.js +170 -0
  95. package/dist/campaign-writes-5XA727KI.js.map +1 -0
  96. package/dist/campaign-writes-7YFRQIQT.js +165 -0
  97. package/dist/campaign-writes-7YFRQIQT.js.map +1 -0
  98. package/dist/campaigns-JPYNVFQI.js +76 -0
  99. package/dist/campaigns-JPYNVFQI.js.map +1 -0
  100. package/dist/campaigns-L43ZUKAI.js +107 -0
  101. package/dist/campaigns-L43ZUKAI.js.map +1 -0
  102. package/dist/campaigns-OD7Z332M.js +109 -0
  103. package/dist/campaigns-OD7Z332M.js.map +1 -0
  104. package/dist/campaigns-R4DXIR2Q.js +110 -0
  105. package/dist/campaigns-R4DXIR2Q.js.map +1 -0
  106. package/dist/canvas-J7SLIVL7.js +46 -0
  107. package/dist/canvas-J7SLIVL7.js.map +1 -0
  108. package/dist/capabilities-FVTZAFPV.js +144 -0
  109. package/dist/capabilities-FVTZAFPV.js.map +1 -0
  110. package/dist/cards-7H32TNMO.js +85 -0
  111. package/dist/cards-7H32TNMO.js.map +1 -0
  112. package/dist/catalog-OTICZPJA.js +64 -0
  113. package/dist/catalog-OTICZPJA.js.map +1 -0
  114. package/dist/catalogs-ABCQLCDU.js +128 -0
  115. package/dist/catalogs-ABCQLCDU.js.map +1 -0
  116. package/dist/changes-7ZIGNUW6.js +135 -0
  117. package/dist/changes-7ZIGNUW6.js.map +1 -0
  118. package/dist/chatgpt-B3NHRJUE.js +47 -0
  119. package/dist/chatgpt-B3NHRJUE.js.map +1 -0
  120. package/dist/chats-E7DBRHBF.js +262 -0
  121. package/dist/chats-E7DBRHBF.js.map +1 -0
  122. package/dist/chunk-2CV7LX23.js +474 -0
  123. package/dist/chunk-2CV7LX23.js.map +1 -0
  124. package/dist/chunk-2HCI5BXB.js +479 -0
  125. package/dist/chunk-2HCI5BXB.js.map +1 -0
  126. package/dist/chunk-2SQJL7ZN.js +56 -0
  127. package/dist/chunk-2SQJL7ZN.js.map +1 -0
  128. package/dist/chunk-2Y5V23PU.js +29 -0
  129. package/dist/chunk-2Y5V23PU.js.map +1 -0
  130. package/dist/chunk-32CPGJPL.js +149 -0
  131. package/dist/chunk-32CPGJPL.js.map +1 -0
  132. package/dist/chunk-3ACMDRSE.js +39 -0
  133. package/dist/chunk-3ACMDRSE.js.map +1 -0
  134. package/dist/chunk-3CIXGQJS.js +150 -0
  135. package/dist/chunk-3CIXGQJS.js.map +1 -0
  136. package/dist/chunk-3U7TDBIB.js +275 -0
  137. package/dist/chunk-3U7TDBIB.js.map +1 -0
  138. package/dist/chunk-3UDSYYND.js +42 -0
  139. package/dist/chunk-3UDSYYND.js.map +1 -0
  140. package/dist/chunk-3ZWWXAQZ.js +150 -0
  141. package/dist/chunk-3ZWWXAQZ.js.map +1 -0
  142. package/dist/chunk-4MH6LONO.js +274 -0
  143. package/dist/chunk-4MH6LONO.js.map +1 -0
  144. package/dist/chunk-4NZ47VXO.js +137 -0
  145. package/dist/chunk-4NZ47VXO.js.map +1 -0
  146. package/dist/chunk-564AEU2Q.js +541 -0
  147. package/dist/chunk-564AEU2Q.js.map +1 -0
  148. package/dist/chunk-5HYSKH77.js +315 -0
  149. package/dist/chunk-5HYSKH77.js.map +1 -0
  150. package/dist/chunk-5MBPIONY.js +29 -0
  151. package/dist/chunk-5MBPIONY.js.map +1 -0
  152. package/dist/chunk-5OVOLYY3.js +74 -0
  153. package/dist/chunk-5OVOLYY3.js.map +1 -0
  154. package/dist/chunk-66USKCVY.js +4410 -0
  155. package/dist/chunk-66USKCVY.js.map +1 -0
  156. package/dist/chunk-6I7SYEYN.js +166 -0
  157. package/dist/chunk-6I7SYEYN.js.map +1 -0
  158. package/dist/chunk-6O7ISBC7.js +65 -0
  159. package/dist/chunk-6O7ISBC7.js.map +1 -0
  160. package/dist/chunk-752S7JF6.js +35 -0
  161. package/dist/chunk-752S7JF6.js.map +1 -0
  162. package/dist/chunk-77DN7R35.js +228 -0
  163. package/dist/chunk-77DN7R35.js.map +1 -0
  164. package/dist/chunk-7F7MFMLI.js +175 -0
  165. package/dist/chunk-7F7MFMLI.js.map +1 -0
  166. package/dist/chunk-7THBBTJJ.js +183 -0
  167. package/dist/chunk-7THBBTJJ.js.map +1 -0
  168. package/dist/chunk-7XU3HKMX.js +1599 -0
  169. package/dist/chunk-7XU3HKMX.js.map +1 -0
  170. package/dist/chunk-A2CBZLQ6.js +111 -0
  171. package/dist/chunk-A2CBZLQ6.js.map +1 -0
  172. package/dist/chunk-AFJGYJ7Z.js +45 -0
  173. package/dist/chunk-AFJGYJ7Z.js.map +1 -0
  174. package/dist/chunk-AR7PU7BB.js +76 -0
  175. package/dist/chunk-AR7PU7BB.js.map +1 -0
  176. package/dist/chunk-ASL7JFBD.js +96 -0
  177. package/dist/chunk-ASL7JFBD.js.map +1 -0
  178. package/dist/chunk-AUSKKFVH.js +84 -0
  179. package/dist/chunk-AUSKKFVH.js.map +1 -0
  180. package/dist/chunk-B52DCYL2.js +159 -0
  181. package/dist/chunk-B52DCYL2.js.map +1 -0
  182. package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
  183. package/dist/chunk-BVM5IRZW.js.map +1 -0
  184. package/dist/chunk-CAMX6OHF.js +3182 -0
  185. package/dist/chunk-CAMX6OHF.js.map +1 -0
  186. package/dist/chunk-CYBLKMXQ.js +310 -0
  187. package/dist/chunk-CYBLKMXQ.js.map +1 -0
  188. package/dist/chunk-CZENWCBS.js +333 -0
  189. package/dist/chunk-CZENWCBS.js.map +1 -0
  190. package/dist/chunk-D5FY4FAK.js +24 -0
  191. package/dist/chunk-D5FY4FAK.js.map +1 -0
  192. package/dist/chunk-DGCUPJZD.js +39 -0
  193. package/dist/chunk-DGCUPJZD.js.map +1 -0
  194. package/dist/chunk-DNCLWSHO.js +41 -0
  195. package/dist/chunk-DNCLWSHO.js.map +1 -0
  196. package/dist/chunk-DX4GIDO7.js +296 -0
  197. package/dist/chunk-DX4GIDO7.js.map +1 -0
  198. package/dist/chunk-EDLZGTGN.js +216 -0
  199. package/dist/chunk-EDLZGTGN.js.map +1 -0
  200. package/dist/chunk-EDNKALM6.js +304 -0
  201. package/dist/chunk-EDNKALM6.js.map +1 -0
  202. package/dist/chunk-EDNX3AOS.js +76 -0
  203. package/dist/chunk-EDNX3AOS.js.map +1 -0
  204. package/dist/chunk-EF5DP6EB.js +52 -0
  205. package/dist/chunk-EF5DP6EB.js.map +1 -0
  206. package/dist/chunk-ERSX3MKH.js +34 -0
  207. package/dist/chunk-ERSX3MKH.js.map +1 -0
  208. package/dist/chunk-F3IJSR7O.js +346 -0
  209. package/dist/chunk-F3IJSR7O.js.map +1 -0
  210. package/dist/chunk-FKOECEVC.js +126 -0
  211. package/dist/chunk-FKOECEVC.js.map +1 -0
  212. package/dist/chunk-FWT55B3O.js +509 -0
  213. package/dist/chunk-FWT55B3O.js.map +1 -0
  214. package/dist/chunk-FYWWTMXP.js +2902 -0
  215. package/dist/chunk-FYWWTMXP.js.map +1 -0
  216. package/dist/chunk-FZGCAW46.js +64 -0
  217. package/dist/chunk-FZGCAW46.js.map +1 -0
  218. package/dist/chunk-G7AFVTUS.js +106 -0
  219. package/dist/chunk-G7AFVTUS.js.map +1 -0
  220. package/dist/chunk-GIW7ABMM.js +74 -0
  221. package/dist/chunk-GIW7ABMM.js.map +1 -0
  222. package/dist/chunk-GIWHHCD6.js +145 -0
  223. package/dist/chunk-GIWHHCD6.js.map +1 -0
  224. package/dist/chunk-GRQ2AXDX.js +9 -0
  225. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  226. package/dist/chunk-GXDLWBOY.js +73 -0
  227. package/dist/chunk-GXDLWBOY.js.map +1 -0
  228. package/dist/chunk-GYABNLWW.js +629 -0
  229. package/dist/chunk-GYABNLWW.js.map +1 -0
  230. package/dist/chunk-H7MLHG2I.js +94 -0
  231. package/dist/chunk-H7MLHG2I.js.map +1 -0
  232. package/dist/chunk-H7XVKLIY.js +206 -0
  233. package/dist/chunk-H7XVKLIY.js.map +1 -0
  234. package/dist/chunk-HAE4WWFQ.js +455 -0
  235. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  236. package/dist/chunk-HDHWIEJJ.js +136 -0
  237. package/dist/chunk-HDHWIEJJ.js.map +1 -0
  238. package/dist/chunk-HJTIBTF7.js +98 -0
  239. package/dist/chunk-HJTIBTF7.js.map +1 -0
  240. package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
  241. package/dist/chunk-HLXWKMTK.js.map +1 -0
  242. package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
  243. package/dist/chunk-HREWXNTO.js.map +1 -0
  244. package/dist/chunk-HYXKRNRV.js +176 -0
  245. package/dist/chunk-HYXKRNRV.js.map +1 -0
  246. package/dist/chunk-I3DIZWN5.js +97 -0
  247. package/dist/chunk-I3DIZWN5.js.map +1 -0
  248. package/dist/chunk-IJMWEO4P.js +57 -0
  249. package/dist/chunk-IJMWEO4P.js.map +1 -0
  250. package/dist/chunk-IOCSDFF2.js +23992 -0
  251. package/dist/chunk-IOCSDFF2.js.map +1 -0
  252. package/dist/chunk-IVIJJXXT.js +62 -0
  253. package/dist/chunk-IVIJJXXT.js.map +1 -0
  254. package/dist/chunk-J57GWTPK.js +106 -0
  255. package/dist/chunk-J57GWTPK.js.map +1 -0
  256. package/dist/chunk-JPK34QPS.js +134 -0
  257. package/dist/chunk-JPK34QPS.js.map +1 -0
  258. package/dist/chunk-JRCFCIE3.js +188 -0
  259. package/dist/chunk-JRCFCIE3.js.map +1 -0
  260. package/dist/chunk-JUAIGJ2A.js +76 -0
  261. package/dist/chunk-JUAIGJ2A.js.map +1 -0
  262. package/dist/chunk-K5OQES4V.js +58 -0
  263. package/dist/chunk-K5OQES4V.js.map +1 -0
  264. package/dist/chunk-KBS5GH4T.js +1626 -0
  265. package/dist/chunk-KBS5GH4T.js.map +1 -0
  266. package/dist/chunk-KIGGMKAE.js +66 -0
  267. package/dist/chunk-KIGGMKAE.js.map +1 -0
  268. package/dist/chunk-KKJ4KJCW.js +29 -0
  269. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  270. package/dist/chunk-KLK6KQLQ.js +55 -0
  271. package/dist/chunk-KLK6KQLQ.js.map +1 -0
  272. package/dist/chunk-KXGG6EQM.js +382 -0
  273. package/dist/chunk-KXGG6EQM.js.map +1 -0
  274. package/dist/chunk-KXRKPZZY.js +169 -0
  275. package/dist/chunk-KXRKPZZY.js.map +1 -0
  276. package/dist/chunk-KZUHRZ2C.js +5187 -0
  277. package/dist/chunk-KZUHRZ2C.js.map +1 -0
  278. package/dist/chunk-L45A3IYV.js +1079 -0
  279. package/dist/chunk-L45A3IYV.js.map +1 -0
  280. package/dist/chunk-LA6PPSNA.js +65 -0
  281. package/dist/chunk-LA6PPSNA.js.map +1 -0
  282. package/dist/chunk-LEIQAHWF.js +25 -0
  283. package/dist/chunk-LEIQAHWF.js.map +1 -0
  284. package/dist/chunk-LERWCRY5.js +297 -0
  285. package/dist/chunk-LERWCRY5.js.map +1 -0
  286. package/dist/chunk-LLPFY3NI.js +207 -0
  287. package/dist/chunk-LLPFY3NI.js.map +1 -0
  288. package/dist/chunk-M6UNISGO.js +66 -0
  289. package/dist/chunk-M6UNISGO.js.map +1 -0
  290. package/dist/chunk-MDATIJPM.js +92 -0
  291. package/dist/chunk-MDATIJPM.js.map +1 -0
  292. package/dist/chunk-MGKHFGLV.js +75 -0
  293. package/dist/chunk-MGKHFGLV.js.map +1 -0
  294. package/dist/chunk-MZWC6HHA.js +455 -0
  295. package/dist/chunk-MZWC6HHA.js.map +1 -0
  296. package/dist/chunk-N3XJ434P.js +197 -0
  297. package/dist/chunk-N3XJ434P.js.map +1 -0
  298. package/dist/chunk-NFSLRRIE.js +77 -0
  299. package/dist/chunk-NFSLRRIE.js.map +1 -0
  300. package/dist/chunk-NHU33T2S.js +60 -0
  301. package/dist/chunk-NHU33T2S.js.map +1 -0
  302. package/dist/chunk-NJEZM4OB.js +51 -0
  303. package/dist/chunk-NJEZM4OB.js.map +1 -0
  304. package/dist/chunk-O6QKCJE4.js +455 -0
  305. package/dist/chunk-O6QKCJE4.js.map +1 -0
  306. package/dist/chunk-OFFAMC5H.js +225 -0
  307. package/dist/chunk-OFFAMC5H.js.map +1 -0
  308. package/dist/chunk-OHGTCFFE.js +57 -0
  309. package/dist/chunk-OHGTCFFE.js.map +1 -0
  310. package/dist/chunk-P4NSJS54.js +20 -0
  311. package/dist/chunk-P4NSJS54.js.map +1 -0
  312. package/dist/chunk-P5T7OZKV.js +26 -0
  313. package/dist/chunk-P5T7OZKV.js.map +1 -0
  314. package/dist/chunk-PFBQERWX.js +10 -0
  315. package/dist/chunk-PFBQERWX.js.map +1 -0
  316. package/dist/chunk-PUPEGICD.js +103 -0
  317. package/dist/chunk-PUPEGICD.js.map +1 -0
  318. package/dist/chunk-Q6ULQMWG.js +41 -0
  319. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  320. package/dist/chunk-QO23YHLK.js +84 -0
  321. package/dist/chunk-QO23YHLK.js.map +1 -0
  322. package/dist/chunk-QSGIWV4P.js +337 -0
  323. package/dist/chunk-QSGIWV4P.js.map +1 -0
  324. package/dist/chunk-R4Y5P3PB.js +19 -0
  325. package/dist/chunk-R4Y5P3PB.js.map +1 -0
  326. package/dist/chunk-R5OQM7FF.js +179 -0
  327. package/dist/chunk-R5OQM7FF.js.map +1 -0
  328. package/dist/chunk-RODLBWIR.js +592 -0
  329. package/dist/chunk-RODLBWIR.js.map +1 -0
  330. package/dist/chunk-RY7TYEIX.js +504 -0
  331. package/dist/chunk-RY7TYEIX.js.map +1 -0
  332. package/dist/chunk-S4LZ7KTG.js +160 -0
  333. package/dist/chunk-S4LZ7KTG.js.map +1 -0
  334. package/dist/chunk-SHTESUB6.js +1442 -0
  335. package/dist/chunk-SHTESUB6.js.map +1 -0
  336. package/dist/chunk-SJH4EOZH.js +23 -0
  337. package/dist/chunk-SJH4EOZH.js.map +1 -0
  338. package/dist/chunk-SMIENBNX.js +6212 -0
  339. package/dist/chunk-SMIENBNX.js.map +1 -0
  340. package/dist/chunk-T7GT22KA.js +494 -0
  341. package/dist/chunk-T7GT22KA.js.map +1 -0
  342. package/dist/chunk-T7M4WFNV.js +172 -0
  343. package/dist/chunk-T7M4WFNV.js.map +1 -0
  344. package/dist/chunk-TIFVHGQL.js +6683 -0
  345. package/dist/chunk-TIFVHGQL.js.map +1 -0
  346. package/dist/chunk-TMIDUSOR.js +665 -0
  347. package/dist/chunk-TMIDUSOR.js.map +1 -0
  348. package/dist/{chunk-WLDM2TRF.js → chunk-TPXI2GCW.js} +4 -4
  349. package/dist/chunk-U6VRBDNQ.js +1830 -0
  350. package/dist/chunk-U6VRBDNQ.js.map +1 -0
  351. package/dist/chunk-U7BBXM67.js +1743 -0
  352. package/dist/chunk-U7BBXM67.js.map +1 -0
  353. package/dist/chunk-UI6BKYQD.js +225 -0
  354. package/dist/chunk-UI6BKYQD.js.map +1 -0
  355. package/dist/chunk-UOI5S62H.js +846 -0
  356. package/dist/chunk-UOI5S62H.js.map +1 -0
  357. package/dist/chunk-USL5ARRE.js +26 -0
  358. package/dist/chunk-USL5ARRE.js.map +1 -0
  359. package/dist/chunk-UYC45JNS.js +139 -0
  360. package/dist/chunk-UYC45JNS.js.map +1 -0
  361. package/dist/chunk-VNKVBY54.js +363 -0
  362. package/dist/chunk-VNKVBY54.js.map +1 -0
  363. package/dist/chunk-VS4C7VAR.js +533 -0
  364. package/dist/chunk-VS4C7VAR.js.map +1 -0
  365. package/dist/chunk-VZMDYVNS.js +3151 -0
  366. package/dist/chunk-VZMDYVNS.js.map +1 -0
  367. package/dist/chunk-W4W4ZRBP.js +191 -0
  368. package/dist/chunk-W4W4ZRBP.js.map +1 -0
  369. package/dist/chunk-WN4KX7GE.js +25 -0
  370. package/dist/chunk-WN4KX7GE.js.map +1 -0
  371. package/dist/chunk-WNFTXSGR.js +111 -0
  372. package/dist/chunk-WNFTXSGR.js.map +1 -0
  373. package/dist/chunk-WOTDHRNF.js +2109 -0
  374. package/dist/chunk-WOTDHRNF.js.map +1 -0
  375. package/dist/chunk-XGWKTYXQ.js +67 -0
  376. package/dist/chunk-XGWKTYXQ.js.map +1 -0
  377. package/dist/chunk-XIGIJJSF.js +66 -0
  378. package/dist/chunk-XIGIJJSF.js.map +1 -0
  379. package/dist/chunk-XNUXB63I.js +817 -0
  380. package/dist/chunk-XNUXB63I.js.map +1 -0
  381. package/dist/chunk-XQ3CCNJD.js +610 -0
  382. package/dist/chunk-XQ3CCNJD.js.map +1 -0
  383. package/dist/chunk-XX6ZMCY5.js +4227 -0
  384. package/dist/chunk-XX6ZMCY5.js.map +1 -0
  385. package/dist/chunk-Y362QH54.js +98 -0
  386. package/dist/chunk-Y362QH54.js.map +1 -0
  387. package/dist/chunk-Y4T6ATDQ.js +74 -0
  388. package/dist/chunk-Y4T6ATDQ.js.map +1 -0
  389. package/dist/chunk-YQSBHWOI.js +41 -0
  390. package/dist/chunk-YU26SDNT.js +46 -0
  391. package/dist/chunk-YU26SDNT.js.map +1 -0
  392. package/dist/chunk-YULENNA7.js +501 -0
  393. package/dist/chunk-YULENNA7.js.map +1 -0
  394. package/dist/chunk-Z3ENMCFE.js +94 -0
  395. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  396. package/dist/chunk-ZH7ZM3ZM.js +125 -0
  397. package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
  398. package/dist/chunk-ZIXHS6AM.js +42 -0
  399. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  400. package/dist/chunk-ZLLJKSNS.js +96 -0
  401. package/dist/chunk-ZLLJKSNS.js.map +1 -0
  402. package/dist/claim-LF6VQ7OR.js +197 -0
  403. package/dist/claim-LF6VQ7OR.js.map +1 -0
  404. package/dist/cli.js +104 -70041
  405. package/dist/cli.js.map +1 -1
  406. package/dist/client-26SAJ46D.js +19 -0
  407. package/dist/code-MOWYJMDH.js +76 -0
  408. package/dist/code-MOWYJMDH.js.map +1 -0
  409. package/dist/companies-6HSK5BLK.js +195 -0
  410. package/dist/companies-6HSK5BLK.js.map +1 -0
  411. package/dist/complete-2PUAFQEC.js +81 -0
  412. package/dist/complete-2PUAFQEC.js.map +1 -0
  413. package/dist/config-X6GKOVQ6.js +88 -0
  414. package/dist/config-X6GKOVQ6.js.map +1 -0
  415. package/dist/connect-RXPMAJQI.js +42 -0
  416. package/dist/content-UYZC4AKN.js +85 -0
  417. package/dist/content-UYZC4AKN.js.map +1 -0
  418. package/dist/conversation-Y3NB2VDI.js +93 -0
  419. package/dist/conversation-Y3NB2VDI.js.map +1 -0
  420. package/dist/conversion-report-R4GJWWTK.js +125 -0
  421. package/dist/conversion-report-R4GJWWTK.js.map +1 -0
  422. package/dist/conversion-upload-command-YP4DGTPP.js +438 -0
  423. package/dist/conversion-upload-command-YP4DGTPP.js.map +1 -0
  424. package/dist/conversion-writes-WHFFUWWL.js +120 -0
  425. package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
  426. package/dist/conversions-K7C32DPW.js +135 -0
  427. package/dist/conversions-K7C32DPW.js.map +1 -0
  428. package/dist/conversions-OXJAX5GB.js +76 -0
  429. package/dist/conversions-OXJAX5GB.js.map +1 -0
  430. package/dist/countries-PBXNB3BR.js +82 -0
  431. package/dist/countries-PBXNB3BR.js.map +1 -0
  432. package/dist/create-AJ4KPSJ4.js +59 -0
  433. package/dist/create-AJ4KPSJ4.js.map +1 -0
  434. package/dist/create-ALKOAD5J.js +138 -0
  435. package/dist/create-ALKOAD5J.js.map +1 -0
  436. package/dist/create-HTKZMXKB.js +207 -0
  437. package/dist/create-HTKZMXKB.js.map +1 -0
  438. package/dist/create-TZMAOFBR.js +236 -0
  439. package/dist/create-TZMAOFBR.js.map +1 -0
  440. package/dist/creatives-MBTZTIAA.js +51 -0
  441. package/dist/creatives-MBTZTIAA.js.map +1 -0
  442. package/dist/creatives-OZHVU4WB.js +182 -0
  443. package/dist/creatives-OZHVU4WB.js.map +1 -0
  444. package/dist/creatives-VMGY5SU4.js +87 -0
  445. package/dist/creatives-VMGY5SU4.js.map +1 -0
  446. package/dist/credentials-FY4UH6TF.js +287 -0
  447. package/dist/credentials-FY4UH6TF.js.map +1 -0
  448. package/dist/critique-2UTP4DR3.js +216 -0
  449. package/dist/critique-2UTP4DR3.js.map +1 -0
  450. package/dist/critique-B3H7QFM2.js +1449 -0
  451. package/dist/critique-B3H7QFM2.js.map +1 -0
  452. package/dist/crm-2IBLUHDB.js +318 -0
  453. package/dist/crm-2IBLUHDB.js.map +1 -0
  454. package/dist/crm-YMYO4U53.js +224 -0
  455. package/dist/crm-YMYO4U53.js.map +1 -0
  456. package/dist/crop-U3AD4DDR.js +113 -0
  457. package/dist/crop-U3AD4DDR.js.map +1 -0
  458. package/dist/currency-S6KWZSZ6.js +88 -0
  459. package/dist/currency-S6KWZSZ6.js.map +1 -0
  460. package/dist/custom-conversions-FABS6YVT.js +125 -0
  461. package/dist/custom-conversions-FABS6YVT.js.map +1 -0
  462. package/dist/customers-P6LLLJHK.js +56 -0
  463. package/dist/decide-YTHCBKM6.js +199 -0
  464. package/dist/decide-YTHCBKM6.js.map +1 -0
  465. package/dist/delete-B2TDEW7H.js +63 -0
  466. package/dist/delete-B2TDEW7H.js.map +1 -0
  467. package/dist/delete-DZUDLYPC.js +69 -0
  468. package/dist/delete-DZUDLYPC.js.map +1 -0
  469. package/dist/delete-NZGZP4YP.js +71 -0
  470. package/dist/delete-NZGZP4YP.js.map +1 -0
  471. package/dist/delete-SDOZNDWQ.js +54 -0
  472. package/dist/delete-SDOZNDWQ.js.map +1 -0
  473. package/dist/delete-VQMU56OH.js +71 -0
  474. package/dist/delete-VQMU56OH.js.map +1 -0
  475. package/dist/delete-WKQPMVAM.js +66 -0
  476. package/dist/delete-WKQPMVAM.js.map +1 -0
  477. package/dist/demographics-Q3DCXULY.js +138 -0
  478. package/dist/demographics-Q3DCXULY.js.map +1 -0
  479. package/dist/describe-JNTCQZNL.js +97 -0
  480. package/dist/describe-JNTCQZNL.js.map +1 -0
  481. package/dist/describe-MT4334NG.js +97 -0
  482. package/dist/describe-MT4334NG.js.map +1 -0
  483. package/dist/dimensions-FEZUJRAG.js +101 -0
  484. package/dist/dimensions-FEZUJRAG.js.map +1 -0
  485. package/dist/discard-NEZM5CHF.js +66 -0
  486. package/dist/discard-NEZM5CHF.js.map +1 -0
  487. package/dist/discover-4GD7QSF5.js +93 -0
  488. package/dist/discover-4GD7QSF5.js.map +1 -0
  489. package/dist/discover-6K3IOYXR.js +172 -0
  490. package/dist/discover-6K3IOYXR.js.map +1 -0
  491. package/dist/domain-7Y256IDR.js +98 -0
  492. package/dist/domain-7Y256IDR.js.map +1 -0
  493. package/dist/download-L27HWEOE.js +299 -0
  494. package/dist/download-L27HWEOE.js.map +1 -0
  495. package/dist/draft-25G2P2TE.js +281 -0
  496. package/dist/draft-25G2P2TE.js.map +1 -0
  497. package/dist/draft-F6TUGXAY.js +307 -0
  498. package/dist/draft-F6TUGXAY.js.map +1 -0
  499. package/dist/draft-KLULNBWP.js +233 -0
  500. package/dist/draft-KLULNBWP.js.map +1 -0
  501. package/dist/draft-LY5ZPF73.js +217 -0
  502. package/dist/draft-LY5ZPF73.js.map +1 -0
  503. package/dist/draft-M4ZHDQ46.js +306 -0
  504. package/dist/draft-M4ZHDQ46.js.map +1 -0
  505. package/dist/draft-MI7RWY2K.js +100 -0
  506. package/dist/draft-MI7RWY2K.js.map +1 -0
  507. package/dist/draft-P4IVYTY3.js +103 -0
  508. package/dist/draft-P4IVYTY3.js.map +1 -0
  509. package/dist/draft-QQMCVDDS.js +328 -0
  510. package/dist/draft-QQMCVDDS.js.map +1 -0
  511. package/dist/engine/index.d.ts +213 -127
  512. package/dist/engine/index.js +18 -4
  513. package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
  514. package/dist/env-FBTHZKGN.js.map +1 -0
  515. package/dist/experiment-HDYTJPUY.js +1397 -0
  516. package/dist/experiment-HDYTJPUY.js.map +1 -0
  517. package/dist/export-TS5GYEMA.js +168 -0
  518. package/dist/export-TS5GYEMA.js.map +1 -0
  519. package/dist/extract-QVQFUOIK.js +113 -0
  520. package/dist/extract-QVQFUOIK.js.map +1 -0
  521. package/dist/facets-7MBSM7BP.js +114 -0
  522. package/dist/facets-7MBSM7BP.js.map +1 -0
  523. package/dist/favorites-7QP7BY5K.js +178 -0
  524. package/dist/favorites-7QP7BY5K.js.map +1 -0
  525. package/dist/feed-EETRO2FG.js +177 -0
  526. package/dist/feed-EETRO2FG.js.map +1 -0
  527. package/dist/feedback-PLMFRAQW.js +66 -0
  528. package/dist/feedback-PLMFRAQW.js.map +1 -0
  529. package/dist/feedback-record-QEHHGVYC.js +177 -0
  530. package/dist/feedback-record-QEHHGVYC.js.map +1 -0
  531. package/dist/fetch-QE3EB756.js +176 -0
  532. package/dist/fetch-QE3EB756.js.map +1 -0
  533. package/dist/fetch-Z7O3ZL4D.js +139 -0
  534. package/dist/fetch-Z7O3ZL4D.js.map +1 -0
  535. package/dist/find-KAQ6JDMO.js +134 -0
  536. package/dist/find-KAQ6JDMO.js.map +1 -0
  537. package/dist/fit-MY5GVZZZ.js +45 -0
  538. package/dist/fit-MY5GVZZZ.js.map +1 -0
  539. package/dist/flows-C67KEMDU.js +247 -0
  540. package/dist/flows-C67KEMDU.js.map +1 -0
  541. package/dist/follow-IX4XVK5Y.js +94 -0
  542. package/dist/follow-IX4XVK5Y.js.map +1 -0
  543. package/dist/follow-competitors-UZBUOYTH.js +112 -0
  544. package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
  545. package/dist/following-VGOIUCIZ.js +113 -0
  546. package/dist/following-VGOIUCIZ.js.map +1 -0
  547. package/dist/fonts-UR7XZ5XZ.js +34 -0
  548. package/dist/fonts-UR7XZ5XZ.js.map +1 -0
  549. package/dist/forecast-3F4SZNAK.js +104 -0
  550. package/dist/forecast-3F4SZNAK.js.map +1 -0
  551. package/dist/forecast-K5E7CTKX.js +168 -0
  552. package/dist/forecast-K5E7CTKX.js.map +1 -0
  553. package/dist/funding-H5YO37OW.js +85 -0
  554. package/dist/funding-H5YO37OW.js.map +1 -0
  555. package/dist/funnel-2PPEPAMY.js +394 -0
  556. package/dist/funnel-2PPEPAMY.js.map +1 -0
  557. package/dist/ga4-YHJ2XMLC.js +55 -0
  558. package/dist/ga4-YHJ2XMLC.js.map +1 -0
  559. package/dist/generate-M2ZX5DMI.js +262 -0
  560. package/dist/generate-M2ZX5DMI.js.map +1 -0
  561. package/dist/get-4EYKCZ6F.js +59 -0
  562. package/dist/get-4EYKCZ6F.js.map +1 -0
  563. package/dist/get-637GALM2.js +63 -0
  564. package/dist/get-637GALM2.js.map +1 -0
  565. package/dist/get-AZARFR6O.js +61 -0
  566. package/dist/get-AZARFR6O.js.map +1 -0
  567. package/dist/get-BPMEHRUG.js +56 -0
  568. package/dist/get-BPMEHRUG.js.map +1 -0
  569. package/dist/get-MQ6MMIZ7.js +78 -0
  570. package/dist/get-MQ6MMIZ7.js.map +1 -0
  571. package/dist/get-N4BPOQCB.js +63 -0
  572. package/dist/get-N4BPOQCB.js.map +1 -0
  573. package/dist/get-RPZHLQ56.js +92 -0
  574. package/dist/get-RPZHLQ56.js.map +1 -0
  575. package/dist/gif-6PRTB2VR.js +94 -0
  576. package/dist/gif-6PRTB2VR.js.map +1 -0
  577. package/dist/google-52JRH7X3.js +136 -0
  578. package/dist/google-52JRH7X3.js.map +1 -0
  579. package/dist/google-X2AQR3RB.js +3190 -0
  580. package/dist/google-X2AQR3RB.js.map +1 -0
  581. package/dist/google-ads-PWX7OF5Z.js +195 -0
  582. package/dist/google-ads-PWX7OF5Z.js.map +1 -0
  583. package/dist/group-AAZ5QKC3.js +43 -0
  584. package/dist/group-AAZ5QKC3.js.map +1 -0
  585. package/dist/group-GSYCZORC.js +43 -0
  586. package/dist/group-GSYCZORC.js.map +1 -0
  587. package/dist/gsc-TS5T7ML2.js +30 -0
  588. package/dist/gsc-TS5T7ML2.js.map +1 -0
  589. package/dist/history-EW6LFFCX.js +67 -0
  590. package/dist/history-EW6LFFCX.js.map +1 -0
  591. package/dist/history-XI5ABCFO.js +133 -0
  592. package/dist/history-XI5ABCFO.js.map +1 -0
  593. package/dist/hubspot-AVUOILRE.js +779 -0
  594. package/dist/hubspot-AVUOILRE.js.map +1 -0
  595. package/dist/icon-K75KI6BV.js +137 -0
  596. package/dist/icon-K75KI6BV.js.map +1 -0
  597. package/dist/ideas-L3SZSIZP.js +35 -0
  598. package/dist/ideas-L3SZSIZP.js.map +1 -0
  599. package/dist/images-CD53I2W5.js +90 -0
  600. package/dist/images-CD53I2W5.js.map +1 -0
  601. package/dist/improve-L3BW4EQG.js +86 -0
  602. package/dist/improve-L3BW4EQG.js.map +1 -0
  603. package/dist/ingest-KRJOYTCQ.js +107 -0
  604. package/dist/ingest-KRJOYTCQ.js.map +1 -0
  605. package/dist/ingest-WE3SPPND.js +23 -0
  606. package/dist/ingest-WE3SPPND.js.map +1 -0
  607. package/dist/insights-PELVD4RY.js +122 -0
  608. package/dist/insights-PELVD4RY.js.map +1 -0
  609. package/dist/insights-XCA4BUJW.js +423 -0
  610. package/dist/insights-XCA4BUJW.js.map +1 -0
  611. package/dist/inspect-QKETG5UJ.js +189 -0
  612. package/dist/inspect-QKETG5UJ.js.map +1 -0
  613. package/dist/inspiration-Y2J2PUPC.js +53 -0
  614. package/dist/inspiration-Y2J2PUPC.js.map +1 -0
  615. package/dist/intent-YJOJGNVJ.js +95 -0
  616. package/dist/intent-YJOJGNVJ.js.map +1 -0
  617. package/dist/job-E2U4FS5P.js +202 -0
  618. package/dist/job-E2U4FS5P.js.map +1 -0
  619. package/dist/job-create-DFYCHVQ7.js +109 -0
  620. package/dist/job-create-DFYCHVQ7.js.map +1 -0
  621. package/dist/job-status-FFPMTSHB.js +74 -0
  622. package/dist/job-status-FFPMTSHB.js.map +1 -0
  623. package/dist/keep-GYZS2UTL.js +78 -0
  624. package/dist/keep-GYZS2UTL.js.map +1 -0
  625. package/dist/keyword-gap-QU7O7UKC.js +130 -0
  626. package/dist/keyword-gap-QU7O7UKC.js.map +1 -0
  627. package/dist/keyword-metrics-HLCM3QU7.js +197 -0
  628. package/dist/keyword-metrics-HLCM3QU7.js.map +1 -0
  629. package/dist/keywords-for-site-BDKPQKWB.js +128 -0
  630. package/dist/keywords-for-site-BDKPQKWB.js.map +1 -0
  631. package/dist/landing-4K6XYNFM.js +28 -0
  632. package/dist/landing-4K6XYNFM.js.map +1 -0
  633. package/dist/landings-F7LOAEJE.js +151 -0
  634. package/dist/landings-F7LOAEJE.js.map +1 -0
  635. package/dist/languages-P3ZM6R2A.js +40 -0
  636. package/dist/languages-P3ZM6R2A.js.map +1 -0
  637. package/dist/languages-XEJKTIFP.js +55 -0
  638. package/dist/languages-XEJKTIFP.js.map +1 -0
  639. package/dist/launches-TCFAYUA5.js +19 -0
  640. package/dist/launches-TCFAYUA5.js.map +1 -0
  641. package/dist/layerize-ZSKFIPZA.js +190 -0
  642. package/dist/layerize-ZSKFIPZA.js.map +1 -0
  643. package/dist/leads-GDF4S2AM.js +90 -0
  644. package/dist/leads-GDF4S2AM.js.map +1 -0
  645. package/dist/leads-TPB5OFSQ.js +293 -0
  646. package/dist/leads-TPB5OFSQ.js.map +1 -0
  647. package/dist/learn-NMFEA5H5.js +203 -0
  648. package/dist/learn-NMFEA5H5.js.map +1 -0
  649. package/dist/library-IP2UKNRU.js +109 -0
  650. package/dist/library-IP2UKNRU.js.map +1 -0
  651. package/dist/lighthouse-57XBJRCO.js +75 -0
  652. package/dist/lighthouse-57XBJRCO.js.map +1 -0
  653. package/dist/line-item-writes-O6SSS5NQ.js +208 -0
  654. package/dist/line-item-writes-O6SSS5NQ.js.map +1 -0
  655. package/dist/line-items-ZZAKH3YZ.js +103 -0
  656. package/dist/line-items-ZZAKH3YZ.js.map +1 -0
  657. package/dist/link-CRY57R3E.js +64 -0
  658. package/dist/link-CRY57R3E.js.map +1 -0
  659. package/dist/linkedin-WC7LGYPP.js +1008 -0
  660. package/dist/linkedin-WC7LGYPP.js.map +1 -0
  661. package/dist/list-6IKPWQGG.js +57 -0
  662. package/dist/list-6IKPWQGG.js.map +1 -0
  663. package/dist/list-CAUH3BMG.js +65 -0
  664. package/dist/list-CAUH3BMG.js.map +1 -0
  665. package/dist/list-CWAKX5TH.js +63 -0
  666. package/dist/list-CWAKX5TH.js.map +1 -0
  667. package/dist/list-FJ5FSVL6.js +151 -0
  668. package/dist/list-FJ5FSVL6.js.map +1 -0
  669. package/dist/list-GTOSN7DP.js +50 -0
  670. package/dist/list-GTOSN7DP.js.map +1 -0
  671. package/dist/list-HLJP4NVE.js +51 -0
  672. package/dist/list-HLJP4NVE.js.map +1 -0
  673. package/dist/list-LCUPF7EF.js +76 -0
  674. package/dist/list-LCUPF7EF.js.map +1 -0
  675. package/dist/list-NH4ZRZTL.js +303 -0
  676. package/dist/list-NH4ZRZTL.js.map +1 -0
  677. package/dist/locations-2BYWKIYA.js +67 -0
  678. package/dist/locations-2BYWKIYA.js.map +1 -0
  679. package/dist/locations-LVVDOSXO.js +40 -0
  680. package/dist/locations-LVVDOSXO.js.map +1 -0
  681. package/dist/log-6JOWOY5G.js +92 -0
  682. package/dist/log-6JOWOY5G.js.map +1 -0
  683. package/dist/logo-AJK2TDQU.js +18 -0
  684. package/dist/logo-AJK2TDQU.js.map +1 -0
  685. package/dist/lookup-H5GEM77H.js +22 -0
  686. package/dist/lookup-H5GEM77H.js.map +1 -0
  687. package/dist/make-N3WZ6OSS.js +640 -0
  688. package/dist/make-N3WZ6OSS.js.map +1 -0
  689. package/dist/map-4KOYFHAN.js +404 -0
  690. package/dist/map-4KOYFHAN.js.map +1 -0
  691. package/dist/mcp-LSS2DHYL.js +463 -0
  692. package/dist/mcp-LSS2DHYL.js.map +1 -0
  693. package/dist/media-JBCN6V4X.js +15 -0
  694. package/dist/media-JBCN6V4X.js.map +1 -0
  695. package/dist/media-RAGEJTZX.js +89 -0
  696. package/dist/media-RAGEJTZX.js.map +1 -0
  697. package/dist/media-sources-GSPAV7HT.js +32 -0
  698. package/dist/media-sources-GSPAV7HT.js.map +1 -0
  699. package/dist/members-GUUVEK2Y.js +44 -0
  700. package/dist/members-GUUVEK2Y.js.map +1 -0
  701. package/dist/meta-Z37ZR3PJ.js +69 -0
  702. package/dist/meta-Z37ZR3PJ.js.map +1 -0
  703. package/dist/metrics-KW6SDULI.js +152 -0
  704. package/dist/metrics-KW6SDULI.js.map +1 -0
  705. package/dist/models-5J4WFUD3.js +155 -0
  706. package/dist/models-5J4WFUD3.js.map +1 -0
  707. package/dist/normalize-DSFVTRXN.js +806 -0
  708. package/dist/normalize-DSFVTRXN.js.map +1 -0
  709. package/dist/normalize-EUDI5HEM.js +141 -0
  710. package/dist/normalize-EUDI5HEM.js.map +1 -0
  711. package/dist/options-P4PPJQH4.js +121 -0
  712. package/dist/options-P4PPJQH4.js.map +1 -0
  713. package/dist/output-DTCLVPUF.js +24 -0
  714. package/dist/output-DTCLVPUF.js.map +1 -0
  715. package/dist/page-N2ZO3O7F.js +105 -0
  716. package/dist/page-N2ZO3O7F.js.map +1 -0
  717. package/dist/pages-FQ4CBAJ2.js +66 -0
  718. package/dist/pages-FQ4CBAJ2.js.map +1 -0
  719. package/dist/performance-A66LYIZX.js +24 -0
  720. package/dist/performance-A66LYIZX.js.map +1 -0
  721. package/dist/pinterest-NV5XTNJE.js +96 -0
  722. package/dist/pinterest-NV5XTNJE.js.map +1 -0
  723. package/dist/pixels-CTJ43FZ4.js +108 -0
  724. package/dist/pixels-CTJ43FZ4.js.map +1 -0
  725. package/dist/pixels-HKINGZCH.js +60 -0
  726. package/dist/pixels-HKINGZCH.js.map +1 -0
  727. package/dist/plan-ZYTWLGWK.js +207 -0
  728. package/dist/plan-ZYTWLGWK.js.map +1 -0
  729. package/dist/preview-5ROBOQG7.js +169 -0
  730. package/dist/preview-5ROBOQG7.js.map +1 -0
  731. package/dist/profile-Q3PHR6FU.js +159 -0
  732. package/dist/profile-Q3PHR6FU.js.map +1 -0
  733. package/dist/promoted-tweet-writes-AEOUK2LK.js +180 -0
  734. package/dist/promoted-tweet-writes-AEOUK2LK.js.map +1 -0
  735. package/dist/promoted-tweets-L2CEC2BJ.js +119 -0
  736. package/dist/promoted-tweets-L2CEC2BJ.js.map +1 -0
  737. package/dist/properties-WLL6M2P6.js +101 -0
  738. package/dist/properties-WLL6M2P6.js.map +1 -0
  739. package/dist/publish-KHNR5ARF.js +322 -0
  740. package/dist/publish-KHNR5ARF.js.map +1 -0
  741. package/dist/query-A34J7BGX.js +61 -0
  742. package/dist/query-A34J7BGX.js.map +1 -0
  743. package/dist/query-IYZN5KHO.js +236 -0
  744. package/dist/query-IYZN5KHO.js.map +1 -0
  745. package/dist/query-UN2P6DBA.js +247 -0
  746. package/dist/query-UN2P6DBA.js.map +1 -0
  747. package/dist/questionnaire-Z2ZIKNBV.js +93 -0
  748. package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
  749. package/dist/read-GM7PQYJA.js +141 -0
  750. package/dist/read-GM7PQYJA.js.map +1 -0
  751. package/dist/reddit-5NPFULGD.js +26 -0
  752. package/dist/reddit-5NPFULGD.js.map +1 -0
  753. package/dist/refresh-FGXW4Y4X.js +94 -0
  754. package/dist/refresh-FGXW4Y4X.js.map +1 -0
  755. package/dist/release-OKZMC73N.js +60 -0
  756. package/dist/release-OKZMC73N.js.map +1 -0
  757. package/dist/relevant-pages-J76ZKNKF.js +99 -0
  758. package/dist/relevant-pages-J76ZKNKF.js.map +1 -0
  759. package/dist/remove-CA2J6ACH.js +50 -0
  760. package/dist/remove-CA2J6ACH.js.map +1 -0
  761. package/dist/remove-GOYW2G4R.js +48 -0
  762. package/dist/remove-GOYW2G4R.js.map +1 -0
  763. package/dist/reopen-XPKSOE6O.js +63 -0
  764. package/dist/reopen-XPKSOE6O.js.map +1 -0
  765. package/dist/rerun-QA6ISKVO.js +86 -0
  766. package/dist/rerun-QA6ISKVO.js.map +1 -0
  767. package/dist/research-FZ63UZTE.js +62 -0
  768. package/dist/research-FZ63UZTE.js.map +1 -0
  769. package/dist/research-YGQQ6CNG.js +262 -0
  770. package/dist/research-YGQQ6CNG.js.map +1 -0
  771. package/dist/reset-BGPZ4HMA.js +54 -0
  772. package/dist/reset-BGPZ4HMA.js.map +1 -0
  773. package/dist/reset-HTD6LCIT.js +54 -0
  774. package/dist/reset-HTD6LCIT.js.map +1 -0
  775. package/dist/resolve-NRDZ6N2B.js +121 -0
  776. package/dist/resolve-NRDZ6N2B.js.map +1 -0
  777. package/dist/retry-PF4BGKJV.js +60 -0
  778. package/dist/retry-PF4BGKJV.js.map +1 -0
  779. package/dist/retry-XL26JDAV.js +62 -0
  780. package/dist/retry-XL26JDAV.js.map +1 -0
  781. package/dist/retry-failed-BEFWRV4Z.js +45 -0
  782. package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
  783. package/dist/run-3ZDGCCTH.js +61 -0
  784. package/dist/run-3ZDGCCTH.js.map +1 -0
  785. package/dist/run-EMJLI7LR.js +65 -0
  786. package/dist/run-EMJLI7LR.js.map +1 -0
  787. package/dist/scaffold-ad-QW75LLYR.js +1550 -0
  788. package/dist/scaffold-ad-QW75LLYR.js.map +1 -0
  789. package/dist/scaffold-static-ad-S3UOKLJ3.js +973 -0
  790. package/dist/scaffold-static-ad-S3UOKLJ3.js.map +1 -0
  791. package/dist/scaffold-video-3BJQOUAA.js +874 -0
  792. package/dist/scaffold-video-3BJQOUAA.js.map +1 -0
  793. package/dist/schedule-KQ7UIR3N.js +66 -0
  794. package/dist/schedule-KQ7UIR3N.js.map +1 -0
  795. package/dist/schedule-PKPNSISL.js +61 -0
  796. package/dist/schedule-PKPNSISL.js.map +1 -0
  797. package/dist/scheduled-agents-LP5LITA3.js +49 -0
  798. package/dist/scheduled-agents-LP5LITA3.js.map +1 -0
  799. package/dist/schema-B6J6VPTO.js +132 -0
  800. package/dist/schema-B6J6VPTO.js.map +1 -0
  801. package/dist/schema-QXTDLZVC.js +63 -0
  802. package/dist/schema-QXTDLZVC.js.map +1 -0
  803. package/dist/scrape-7YKJWFZE.js +2241 -0
  804. package/dist/scrape-7YKJWFZE.js.map +1 -0
  805. package/dist/screenshot-ZHBSG3SI.js +102 -0
  806. package/dist/screenshot-ZHBSG3SI.js.map +1 -0
  807. package/dist/search-332KFYZ6.js +224 -0
  808. package/dist/search-332KFYZ6.js.map +1 -0
  809. package/dist/search-4PBMXXUY.js +91 -0
  810. package/dist/search-4PBMXXUY.js.map +1 -0
  811. package/dist/search-6WNUKCMP.js +174 -0
  812. package/dist/search-6WNUKCMP.js.map +1 -0
  813. package/dist/search-AVNUU6TJ.js +26 -0
  814. package/dist/search-AVNUU6TJ.js.map +1 -0
  815. package/dist/search-F5INRFFK.js +92 -0
  816. package/dist/search-F5INRFFK.js.map +1 -0
  817. package/dist/search-copy-DZVBYG2B.js +168 -0
  818. package/dist/search-copy-DZVBYG2B.js.map +1 -0
  819. package/dist/seeds-5JTQN5WI.js +101 -0
  820. package/dist/seeds-5JTQN5WI.js.map +1 -0
  821. package/dist/select-2V6CHATD.js +96 -0
  822. package/dist/select-2V6CHATD.js.map +1 -0
  823. package/dist/sends-3L6QBS46.js +309 -0
  824. package/dist/sends-3L6QBS46.js.map +1 -0
  825. package/dist/sequences-YKFV7BDH.js +146 -0
  826. package/dist/sequences-YKFV7BDH.js.map +1 -0
  827. package/dist/set-prompt-XGZXW63I.js +188 -0
  828. package/dist/set-prompt-XGZXW63I.js.map +1 -0
  829. package/dist/setup-links-6H5ONDCQ.js +141 -0
  830. package/dist/setup-links-6H5ONDCQ.js.map +1 -0
  831. package/dist/{shared-6762QE6R.js → shared-QAMP7FZV.js} +8 -6
  832. package/dist/shared-QAMP7FZV.js.map +1 -0
  833. package/dist/shopify-D3GNV5O6.js +3715 -0
  834. package/dist/shopify-D3GNV5O6.js.map +1 -0
  835. package/dist/site-TBPERLY3.js +177 -0
  836. package/dist/site-TBPERLY3.js.map +1 -0
  837. package/dist/sitemaps-XPGLW24S.js +87 -0
  838. package/dist/sitemaps-XPGLW24S.js.map +1 -0
  839. package/dist/sites-WMBY2HJV.js +101 -0
  840. package/dist/sites-WMBY2HJV.js.map +1 -0
  841. package/dist/skills-3HEILQCU.js +47 -0
  842. package/dist/skills-3HEILQCU.js.map +1 -0
  843. package/dist/sources-JFQKTK2L.js +421 -0
  844. package/dist/sources-JFQKTK2L.js.map +1 -0
  845. package/dist/sources-Q3I6DDV7.js +30 -0
  846. package/dist/sources-Q3I6DDV7.js.map +1 -0
  847. package/dist/stale-4SERZW2D.js +66 -0
  848. package/dist/stale-4SERZW2D.js.map +1 -0
  849. package/dist/stats-GNILHSKK.js +34 -0
  850. package/dist/stats-GNILHSKK.js.map +1 -0
  851. package/dist/status-LIZWJYS4.js +62 -0
  852. package/dist/status-LIZWJYS4.js.map +1 -0
  853. package/dist/sticker-KCV3VZHY.js +94 -0
  854. package/dist/sticker-KCV3VZHY.js.map +1 -0
  855. package/dist/stock-VTORKR4C.js +179 -0
  856. package/dist/stock-VTORKR4C.js.map +1 -0
  857. package/dist/studio-QCRA6BY5.js +49 -0
  858. package/dist/studio-QCRA6BY5.js.map +1 -0
  859. package/dist/sync-455DB46Y.js +54 -0
  860. package/dist/sync-455DB46Y.js.map +1 -0
  861. package/dist/sync-A4KKQ3B6.js +265 -0
  862. package/dist/sync-A4KKQ3B6.js.map +1 -0
  863. package/dist/sync-ULKWDFXM.js +54 -0
  864. package/dist/sync-ULKWDFXM.js.map +1 -0
  865. package/dist/sync-definition-YTBLMLX2.js +55 -0
  866. package/dist/sync-definition-YTBLMLX2.js.map +1 -0
  867. package/dist/tag-manager-E7QTXBWQ.js +43 -0
  868. package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
  869. package/dist/tags-4Q4I5GQJ.js +20 -0
  870. package/dist/tags-4Q4I5GQJ.js.map +1 -0
  871. package/dist/tags-AMEVAQZ4.js +26 -0
  872. package/dist/tags-AMEVAQZ4.js.map +1 -0
  873. package/dist/tags-DPLOLH3E.js +20 -0
  874. package/dist/tags-DPLOLH3E.js.map +1 -0
  875. package/dist/tags-LDHXONR3.js +224 -0
  876. package/dist/tags-LDHXONR3.js.map +1 -0
  877. package/dist/tags-UW3WJTAQ.js +20 -0
  878. package/dist/tags-UW3WJTAQ.js.map +1 -0
  879. package/dist/targeting-constants-D64YO3E7.js +118 -0
  880. package/dist/targeting-constants-D64YO3E7.js.map +1 -0
  881. package/dist/targeting-criteria-BP6VJA7X.js +113 -0
  882. package/dist/targeting-criteria-BP6VJA7X.js.map +1 -0
  883. package/dist/targets-CQWO2UXD.js +102 -0
  884. package/dist/targets-CQWO2UXD.js.map +1 -0
  885. package/dist/templates-WZSTNRNZ.js +178 -0
  886. package/dist/templates-WZSTNRNZ.js.map +1 -0
  887. package/dist/testimonials-ETHSNWUH.js +32 -0
  888. package/dist/testimonials-ETHSNWUH.js.map +1 -0
  889. package/dist/themes-YU663LQH.js +94 -0
  890. package/dist/themes-YU663LQH.js.map +1 -0
  891. package/dist/top-companies-KTXHS472.js +108 -0
  892. package/dist/top-companies-KTXHS472.js.map +1 -0
  893. package/dist/translate-6QAJ5ZUU.js +600 -0
  894. package/dist/translate-6QAJ5ZUU.js.map +1 -0
  895. package/dist/triggers-4EDFLNGH.js +141 -0
  896. package/dist/triggers-4EDFLNGH.js.map +1 -0
  897. package/dist/tweets-ZUKQAAUQ.js +123 -0
  898. package/dist/tweets-ZUKQAAUQ.js.map +1 -0
  899. package/dist/unfollow-A4JVCJBF.js +46 -0
  900. package/dist/unfollow-A4JVCJBF.js.map +1 -0
  901. package/dist/unlink-KY2OEKMD.js +67 -0
  902. package/dist/unlink-KY2OEKMD.js.map +1 -0
  903. package/dist/unstage-FHUG67RI.js +84 -0
  904. package/dist/unstage-FHUG67RI.js.map +1 -0
  905. package/dist/unstage-ZRLLCSQF.js +95 -0
  906. package/dist/unstage-ZRLLCSQF.js.map +1 -0
  907. package/dist/update-27LGM65V.js +63 -0
  908. package/dist/update-27LGM65V.js.map +1 -0
  909. package/dist/update-AIY46I2Q.js +155 -0
  910. package/dist/update-AIY46I2Q.js.map +1 -0
  911. package/dist/update-QYD2XZFM.js +142 -0
  912. package/dist/update-QYD2XZFM.js.map +1 -0
  913. package/dist/update-W2OSRNFO.js +98 -0
  914. package/dist/update-W2OSRNFO.js.map +1 -0
  915. package/dist/upload-JGBTSKGH.js +126 -0
  916. package/dist/upload-JGBTSKGH.js.map +1 -0
  917. package/dist/upload-XEHWYMJG.js +150 -0
  918. package/dist/upload-XEHWYMJG.js.map +1 -0
  919. package/dist/upscale-I5P2OHTN.js +109 -0
  920. package/dist/upscale-I5P2OHTN.js.map +1 -0
  921. package/dist/url-options-QHGA42RP.js +130 -0
  922. package/dist/url-options-QHGA42RP.js.map +1 -0
  923. package/dist/url-params-NWSUHWRE.js +98 -0
  924. package/dist/url-params-NWSUHWRE.js.map +1 -0
  925. package/dist/use-U4HG2NF3.js +95 -0
  926. package/dist/use-U4HG2NF3.js.map +1 -0
  927. package/dist/validate-DOQ6AI62.js +91 -0
  928. package/dist/validate-DOQ6AI62.js.map +1 -0
  929. package/dist/variant-FOVE6URJ.js +338 -0
  930. package/dist/variant-FOVE6URJ.js.map +1 -0
  931. package/dist/videos-DP3VCSYG.js +39 -0
  932. package/dist/videos-DP3VCSYG.js.map +1 -0
  933. package/dist/view-HRI3FHCH.js +121 -0
  934. package/dist/view-HRI3FHCH.js.map +1 -0
  935. package/dist/viewer-check-JYUE24M6.js +68 -0
  936. package/dist/viewer-check-JYUE24M6.js.map +1 -0
  937. package/dist/web-AFUIWPFU.js +140 -0
  938. package/dist/web-AFUIWPFU.js.map +1 -0
  939. package/dist/winners-SMMDN6LW.js +113 -0
  940. package/dist/winners-SMMDN6LW.js.map +1 -0
  941. package/dist/winning-ads-PCIJUYVA.js +84 -0
  942. package/dist/winning-ads-PCIJUYVA.js.map +1 -0
  943. package/dist/write-commands-7Z34WG2J.js +206 -0
  944. package/dist/write-commands-7Z34WG2J.js.map +1 -0
  945. package/dist/write-commands-BLT2SEC4.js +713 -0
  946. package/dist/write-commands-BLT2SEC4.js.map +1 -0
  947. package/dist/write-commands-N4FSGRVQ.js +743 -0
  948. package/dist/write-commands-N4FSGRVQ.js.map +1 -0
  949. package/dist/write-commands-Q4MQ3BGM.js +1015 -0
  950. package/dist/write-commands-Q4MQ3BGM.js.map +1 -0
  951. package/dist/x-AUOZJNWE.js +47 -0
  952. package/dist/x-AUOZJNWE.js.map +1 -0
  953. package/package.json +9 -2
  954. package/dist/chunk-FGHMWBUD.js +0 -9989
  955. package/dist/chunk-FGHMWBUD.js.map +0 -1
  956. package/dist/chunk-HJEMOSPH.js +0 -1292
  957. package/dist/chunk-HJEMOSPH.js.map +0 -1
  958. package/dist/chunk-MF7YA62W.js.map +0 -1
  959. package/dist/chunk-VZEDAFAR.js.map +0 -1
  960. package/dist/chunk-XHC4LMK4.js.map +0 -1
  961. package/dist/client-GR6YL3YX.js +0 -17
  962. package/dist/output-NMQXZF3Z.js +0 -18
  963. /package/dist/{chunk-WLDM2TRF.js.map → chunk-TPXI2GCW.js.map} +0 -0
  964. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  965. /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
  966. /package/dist/{output-NMQXZF3Z.js.map → connect-RXPMAJQI.js.map} +0 -0
  967. /package/dist/{shared-6762QE6R.js.map → customers-P6LLLJHK.js.map} +0 -0
@@ -0,0 +1,64 @@
1
+ import {
2
+ shopifyProductDetailSchema,
3
+ shopifyVariantSchema
4
+ } from "./chunk-RY7TYEIX.js";
5
+ import {
6
+ apiGet
7
+ } from "./chunk-HREWXNTO.js";
8
+
9
+ // src/commands/creatives/store-product.ts
10
+ import { z } from "zod";
11
+ var storeProductSchema = shopifyProductDetailSchema.pick({ title: true, price: true, compareAt: true, pricesByCountry: true }).extend({ variants: z.array(shopifyVariantSchema.pick({ title: true, price: true, compareAtPrice: true })) });
12
+ var AMOUNT = /([A-Z]{3}) (\d+(?:\.\d+)?)/g;
13
+ function spoken(price) {
14
+ return price.replace(
15
+ AMOUNT,
16
+ (whole, currency, amount) => Number.isInteger(Number(amount)) ? `${whole} (${currency} ${Number(amount)})` : whole
17
+ );
18
+ }
19
+ function saving(price, was) {
20
+ const [, currency, now] = /^([A-Z]{3}) (\d+(?:\.\d+)?)$/.exec(price) ?? [];
21
+ const [, wasCurrency, before] = /^([A-Z]{3}) (\d+(?:\.\d+)?)$/.exec(was ?? "") ?? [];
22
+ if (!currency || currency !== wasCurrency || !now || !before) return void 0;
23
+ const off = Math.round((Number(before) - Number(now)) * 100) / 100;
24
+ if (off <= 0) return void 0;
25
+ const percent = off / Number(before) * 100;
26
+ const percents = [.../* @__PURE__ */ new Set([Math.round(percent), Math.floor(percent)])].map((p) => `${p}% off`).join(", ");
27
+ return `saving ${spoken(`${currency} ${off.toFixed(2)}`)}, ${percents}`;
28
+ }
29
+ function storeProductRecord(product) {
30
+ const lines = [
31
+ `${product.title}, in the connected store: price ${spoken(product.price)}${product.compareAt ? `, was ${spoken(product.compareAt)}` : ""}.`
32
+ ];
33
+ for (const variant of product.variants) {
34
+ const off = saving(variant.price, variant.compareAtPrice);
35
+ lines.push(
36
+ `${variant.title}: ${spoken(variant.price)}${variant.compareAtPrice ? `, was ${spoken(variant.compareAtPrice)}` : ""}${off ? `, ${off}` : ""}.`
37
+ );
38
+ }
39
+ for (const country of product.pricesByCountry ?? []) {
40
+ lines.push(`${country.name} (${country.countries.join(", ")}): ${spoken(country.price)}.`);
41
+ }
42
+ return lines.join("\n");
43
+ }
44
+ async function productFromStore(ref) {
45
+ return z.object({ product: storeProductSchema }).parse(await apiGet("/api/shopify/product", { ref })).product;
46
+ }
47
+ async function storeProductReads(refs, read = productFromStore) {
48
+ const unique = [...new Set([...refs].filter((ref) => Boolean(ref)))];
49
+ const reads = await Promise.all(
50
+ unique.map(async (ref) => {
51
+ try {
52
+ return [ref, { record: storeProductRecord(await read(ref)) }];
53
+ } catch (e) {
54
+ return [ref, { error: e instanceof Error ? e.message : String(e) }];
55
+ }
56
+ })
57
+ );
58
+ return new Map(reads);
59
+ }
60
+
61
+ export {
62
+ storeProductReads
63
+ };
64
+ //# sourceMappingURL=chunk-FZGCAW46.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/creatives/store-product.ts"],"sourcesContent":["/**\n * The store product an ad sells, as a source for its claims. A creative for a product of the\n * connected Shopify store may quote what the store says about it: its title, price, was price, the\n * saving between them and its prices by country, read from Baker's copy of the store (the read\n * `baker shopify product` makes). Both claim checks (`baker creatives ideas` and the render's proof\n * gate) count this record beside the Knowledge, for the idea or creative that names the product.\n */\nimport { shopifyProductDetailSchema, shopifyVariantSchema } from \"@baker/api/shopify\";\nimport { z } from \"zod\";\nimport { apiGet } from \"../../client.ts\";\nimport type { StoreProductRead } from \"./ideas-model.ts\";\n\n/** The part of `baker shopify product`'s answer an ad may quote. */\nconst storeProductSchema = shopifyProductDetailSchema\n .pick({ title: true, price: true, compareAt: true, pricesByCountry: true })\n .extend({ variants: z.array(shopifyVariantSchema.pick({ title: true, price: true, compareAtPrice: true })) });\nexport type StoreProduct = z.infer<typeof storeProductSchema>;\n\nconst AMOUNT = /([A-Z]{3}) (\\d+(?:\\.\\d+)?)/g;\n\n/** A price as the store writes it, with a whole amount also as an ad writes it (\"USD 885.00 (USD 885)\"). Pure. */\nfunction spoken(price: string): string {\n return price.replace(AMOUNT, (whole, currency: string, amount: string) =>\n Number.isInteger(Number(amount)) ? `${whole} (${currency} ${Number(amount)})` : whole,\n );\n}\n\n/** What an option saves against its was price, in money and percent (rounded and down), or nothing. Pure. */\nfunction saving(price: string, was: string | undefined): string | undefined {\n const [, currency, now] = /^([A-Z]{3}) (\\d+(?:\\.\\d+)?)$/.exec(price) ?? [];\n const [, wasCurrency, before] = /^([A-Z]{3}) (\\d+(?:\\.\\d+)?)$/.exec(was ?? \"\") ?? [];\n if (!currency || currency !== wasCurrency || !now || !before) return undefined;\n const off = Math.round((Number(before) - Number(now)) * 100) / 100;\n if (off <= 0) return undefined;\n const percent = (off / Number(before)) * 100;\n const percents = [...new Set([Math.round(percent), Math.floor(percent)])].map((p) => `${p}% off`).join(\", \");\n return `saving ${spoken(`${currency} ${off.toFixed(2)}`)}, ${percents}`;\n}\n\n/** What the store says about a product, as one record the claim checks read. Pure. */\nexport function storeProductRecord(product: StoreProduct): string {\n const lines = [\n `${product.title}, in the connected store: price ${spoken(product.price)}${product.compareAt ? `, was ${spoken(product.compareAt)}` : \"\"}.`,\n ];\n for (const variant of product.variants) {\n const off = saving(variant.price, variant.compareAtPrice);\n lines.push(\n `${variant.title}: ${spoken(variant.price)}${variant.compareAtPrice ? `, was ${spoken(variant.compareAtPrice)}` : \"\"}${off ? `, ${off}` : \"\"}.`,\n );\n }\n for (const country of product.pricesByCountry ?? []) {\n lines.push(`${country.name} (${country.countries.join(\", \")}): ${spoken(country.price)}.`);\n }\n return lines.join(\"\\n\");\n}\n\n/** One product from Baker's copy of the connected store, by the id, handle or link an idea names. */\nasync function productFromStore(ref: string): Promise<StoreProduct> {\n return z.object({ product: storeProductSchema }).parse(await apiGet<unknown>(\"/api/shopify/product\", { ref }))\n .product;\n}\n\n/** The store's record of each product named, or why it could not be read. Never throws. */\nexport async function storeProductReads(\n refs: Iterable<string | undefined>,\n read: (ref: string) => Promise<StoreProduct> = productFromStore,\n): Promise<Map<string, StoreProductRead>> {\n const unique = [...new Set([...refs].filter((ref): ref is string => Boolean(ref)))];\n const reads = await Promise.all(\n unique.map(async (ref): Promise<[string, StoreProductRead]> => {\n try {\n return [ref, { record: storeProductRecord(await read(ref)) }];\n } catch (e) {\n return [ref, { error: e instanceof Error ? e.message : String(e) }];\n }\n }),\n );\n return new Map(reads);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,106 @@
1
+ import {
2
+ cacheGet,
3
+ cacheSet,
4
+ handleConnectionError,
5
+ needsConnectionFix,
6
+ writeAdsJson
7
+ } from "./chunk-BVM5IRZW.js";
8
+ import {
9
+ ApiError,
10
+ apiGet
11
+ } from "./chunk-HREWXNTO.js";
12
+ import {
13
+ getEnv
14
+ } from "./chunk-O6QKCJE4.js";
15
+
16
+ // src/commands/ads/x/output.ts
17
+ var ACCOUNTS_CACHE_TTL_MS = 60 * 60 * 1e3;
18
+ var NO_X_ACCOUNTS_EXPLANATION = "The X Ads connection is live, but X lists no ads accounts for it. That is usually an account X has not activated for advertising yet \u2014 most often one with no billing set up. It does not mean the connection failed, and reconnecting will not change it. An account X omits here still works everywhere else: take its id from the ads.x.com URL (ads.x.com/manager/<id>/\u2026) and pass --account-id <id>, or set BAKER_X_ADS_ACCOUNT_ID.";
19
+ async function fetchXAccounts(useCache) {
20
+ if (useCache) {
21
+ const cached = cacheGet("x-accounts", "list");
22
+ if (cached) return cached.data;
23
+ }
24
+ const params = !useCache ? { "skip-cache": "true" } : void 0;
25
+ const data = await apiGet("/api/ads/x/accounts", params);
26
+ if (useCache) {
27
+ cacheSet("x-accounts", "list", data, ACCOUNTS_CACHE_TTL_MS);
28
+ }
29
+ return data;
30
+ }
31
+ async function resolveXAccountId(args) {
32
+ const fromArgs = args["account-id"];
33
+ const accountId = fromArgs || getEnv().BAKER_X_ADS_ACCOUNT_ID;
34
+ if (accountId) {
35
+ if (!/^[a-z0-9]+$/.test(accountId)) {
36
+ writeAdsJson({
37
+ ok: false,
38
+ error: {
39
+ code: "INVALID_ACCOUNT_ID",
40
+ message: "X Ads account ID must be a base36 string (lowercase letters and digits). Pass --account-id or set BAKER_X_ADS_ACCOUNT_ID."
41
+ }
42
+ });
43
+ process.exit(1);
44
+ }
45
+ return accountId;
46
+ }
47
+ const useCache = !args["no-cache"];
48
+ try {
49
+ const accounts = await fetchXAccounts(useCache);
50
+ const [single] = accounts;
51
+ if (accounts.length === 1 && single) {
52
+ process.stderr.write(`Using account "${single.name}" (${single.id})
53
+ `);
54
+ return single.id;
55
+ }
56
+ if (accounts.length === 0) {
57
+ writeAdsJson({
58
+ ok: false,
59
+ error: {
60
+ code: "INVALID_ACCOUNT_ID",
61
+ message: NO_X_ACCOUNTS_EXPLANATION,
62
+ fix: { action: "reject", explanation: NO_X_ACCOUNTS_EXPLANATION },
63
+ retryable: false
64
+ }
65
+ });
66
+ process.exit(1);
67
+ }
68
+ const list = accounts.map((a) => ` ${a.id} ${a.name}`).join("\n");
69
+ writeAdsJson({
70
+ ok: false,
71
+ error: {
72
+ code: "MULTIPLE_ACCOUNTS",
73
+ message: `Multiple X Ads accounts found. Pass --account-id or set BAKER_X_ADS_ACCOUNT_ID:
74
+ ${list}`
75
+ }
76
+ });
77
+ process.exit(1);
78
+ } catch (err) {
79
+ if (err instanceof ApiError && needsConnectionFix(err.code, err.message)) {
80
+ handleConnectionError("x_ads", err.message);
81
+ }
82
+ writeAdsJson({
83
+ ok: false,
84
+ error: {
85
+ code: "INVALID_ACCOUNT_ID",
86
+ message: "Could not auto-detect account. Pass --account-id or set BAKER_X_ADS_ACCOUNT_ID."
87
+ }
88
+ });
89
+ process.exit(1);
90
+ }
91
+ }
92
+ async function resolveXAccountTimezone(accountId, args) {
93
+ try {
94
+ const accounts = await fetchXAccounts(!args["no-cache"]);
95
+ return accounts.find((a) => a.id === accountId)?.timezone || "UTC";
96
+ } catch {
97
+ return "UTC";
98
+ }
99
+ }
100
+
101
+ export {
102
+ NO_X_ACCOUNTS_EXPLANATION,
103
+ resolveXAccountId,
104
+ resolveXAccountTimezone
105
+ };
106
+ //# sourceMappingURL=chunk-G7AFVTUS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/x/output.ts"],"sourcesContent":["import { ApiError, apiGet } from \"../../../client.ts\";\nimport { getEnv } from \"../../../env.ts\";\nimport { handleConnectionError, needsConnectionFix } from \"../../../error-handler.ts\";\nimport { cacheGet, cacheSet } from \"../cache.ts\";\nimport { writeAdsJson } from \"../output.ts\";\n\nexport interface XAccountInfo {\n id: string;\n name: string;\n approval_status?: string;\n timezone?: string;\n currency?: string;\n}\n\nconst ACCOUNTS_CACHE_TTL_MS = 60 * 60 * 1000;\n\n/**\n * X serves `/accounts` from its own idea of an active advertiser account, and an account it\n * leaves out of that list still answers every child endpoint — campaigns, media, funding and\n * the rest all work when the id is named. So an empty list is a discovery problem, never a\n * broken grant, and telling the user to reconnect sends them round a loop that cannot help.\n */\nexport const NO_X_ACCOUNTS_EXPLANATION =\n \"The X Ads connection is live, but X lists no ads accounts for it. That is usually an account \" +\n \"X has not activated for advertising yet — most often one with no billing set up. It does not \" +\n \"mean the connection failed, and reconnecting will not change it. An account X omits here still \" +\n \"works everywhere else: take its id from the ads.x.com URL (ads.x.com/manager/<id>/…) and pass \" +\n \"--account-id <id>, or set BAKER_X_ADS_ACCOUNT_ID.\";\n\nasync function fetchXAccounts(useCache: boolean): Promise<XAccountInfo[]> {\n if (useCache) {\n const cached = cacheGet<XAccountInfo[]>(\"x-accounts\", \"list\");\n if (cached) return cached.data;\n }\n const params = !useCache ? { \"skip-cache\": \"true\" } : undefined;\n const data = await apiGet<XAccountInfo[]>(\"/api/ads/x/accounts\", params);\n if (useCache) {\n cacheSet(\"x-accounts\", \"list\", data, ACCOUNTS_CACHE_TTL_MS);\n }\n return data;\n}\n\n/**\n * Resolve an X Ads account_id from either --account-id, BAKER_X_ADS_ACCOUNT_ID, or\n * (if exactly one account is connected) auto-detect.\n */\nexport async function resolveXAccountId(args: Record<string, unknown>): Promise<string> {\n const fromArgs = args[\"account-id\"] as string | undefined;\n const accountId = fromArgs || getEnv().BAKER_X_ADS_ACCOUNT_ID;\n if (accountId) {\n if (!/^[a-z0-9]+$/.test(accountId)) {\n writeAdsJson({\n ok: false,\n error: {\n code: \"INVALID_ACCOUNT_ID\",\n message:\n \"X Ads account ID must be a base36 string (lowercase letters and digits). Pass --account-id or set BAKER_X_ADS_ACCOUNT_ID.\",\n },\n });\n process.exit(1);\n }\n return accountId;\n }\n\n const useCache = !args[\"no-cache\"];\n try {\n const accounts = await fetchXAccounts(useCache);\n const [single] = accounts;\n if (accounts.length === 1 && single) {\n process.stderr.write(`Using account \"${single.name}\" (${single.id})\\n`);\n return single.id;\n }\n if (accounts.length === 0) {\n // Not a connection failure — see NO_X_ACCOUNTS_EXPLANATION.\n writeAdsJson({\n ok: false,\n error: {\n code: \"INVALID_ACCOUNT_ID\",\n message: NO_X_ACCOUNTS_EXPLANATION,\n fix: { action: \"reject\", explanation: NO_X_ACCOUNTS_EXPLANATION },\n retryable: false,\n },\n });\n process.exit(1);\n }\n const list = accounts.map((a) => ` ${a.id} ${a.name}`).join(\"\\n\");\n writeAdsJson({\n ok: false,\n error: {\n code: \"MULTIPLE_ACCOUNTS\",\n message: `Multiple X Ads accounts found. Pass --account-id or set BAKER_X_ADS_ACCOUNT_ID:\\n${list}`,\n },\n });\n process.exit(1);\n } catch (err) {\n if (err instanceof ApiError && needsConnectionFix(err.code, err.message)) {\n handleConnectionError(\"x_ads\", err.message);\n }\n writeAdsJson({\n ok: false,\n error: {\n code: \"INVALID_ACCOUNT_ID\",\n message: \"Could not auto-detect account. Pass --account-id or set BAKER_X_ADS_ACCOUNT_ID.\",\n },\n });\n process.exit(1);\n }\n}\n\n/**\n * The account's own timezone, which X Ads measures a DAY-granularity window against.\n * Falls back to UTC when the account cannot be read — X names the mismatch clearly enough.\n */\nexport async function resolveXAccountTimezone(accountId: string, args: Record<string, unknown>): Promise<string> {\n try {\n const accounts = await fetchXAccounts(!args[\"no-cache\"]);\n return accounts.find((a) => a.id === accountId)?.timezone || \"UTC\";\n } catch {\n return \"UTC\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAcA,IAAM,wBAAwB,KAAK,KAAK;AAQjC,IAAM,4BACX;AAMF,eAAe,eAAe,UAA4C;AACxE,MAAI,UAAU;AACZ,UAAM,SAAS,SAAyB,cAAc,MAAM;AAC5D,QAAI,OAAQ,QAAO,OAAO;AAAA,EAC5B;AACA,QAAM,SAAS,CAAC,WAAW,EAAE,cAAc,OAAO,IAAI;AACtD,QAAM,OAAO,MAAM,OAAuB,uBAAuB,MAAM;AACvE,MAAI,UAAU;AACZ,aAAS,cAAc,QAAQ,MAAM,qBAAqB;AAAA,EAC5D;AACA,SAAO;AACT;AAMA,eAAsB,kBAAkB,MAAgD;AACtF,QAAM,WAAW,KAAK,YAAY;AAClC,QAAM,YAAY,YAAY,OAAO,EAAE;AACvC,MAAI,WAAW;AACb,QAAI,CAAC,cAAc,KAAK,SAAS,GAAG;AAClC,mBAAa;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,UACL,MAAM;AAAA,UACN,SACE;AAAA,QACJ;AAAA,MACF,CAAC;AACD,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,CAAC,KAAK,UAAU;AACjC,MAAI;AACF,UAAM,WAAW,MAAM,eAAe,QAAQ;AAC9C,UAAM,CAAC,MAAM,IAAI;AACjB,QAAI,SAAS,WAAW,KAAK,QAAQ;AACnC,cAAQ,OAAO,MAAM,kBAAkB,OAAO,IAAI,MAAM,OAAO,EAAE;AAAA,CAAK;AACtE,aAAO,OAAO;AAAA,IAChB;AACA,QAAI,SAAS,WAAW,GAAG;AAEzB,mBAAa;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,UACT,KAAK,EAAE,QAAQ,UAAU,aAAa,0BAA0B;AAAA,UAChE,WAAW;AAAA,QACb;AAAA,MACF,CAAC;AACD,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,UAAM,OAAO,SAAS,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;AAClE,iBAAa;AAAA,MACX,IAAI;AAAA,MACJ,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,EAAoF,IAAI;AAAA,MACnG;AAAA,IACF,CAAC;AACD,YAAQ,KAAK,CAAC;AAAA,EAChB,SAAS,KAAK;AACZ,QAAI,eAAe,YAAY,mBAAmB,IAAI,MAAM,IAAI,OAAO,GAAG;AACxE,4BAAsB,SAAS,IAAI,OAAO;AAAA,IAC5C;AACA,iBAAa;AAAA,MACX,IAAI;AAAA,MACJ,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAMA,eAAsB,wBAAwB,WAAmB,MAAgD;AAC/G,MAAI;AACF,UAAM,WAAW,MAAM,eAAe,CAAC,KAAK,UAAU,CAAC;AACvD,WAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,GAAG,YAAY;AAAA,EAC/D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,74 @@
1
+ import {
2
+ cacheGet,
3
+ cacheSet,
4
+ handleConnectionError,
5
+ needsConnectionFix,
6
+ writeJsonEnvelope
7
+ } from "./chunk-BVM5IRZW.js";
8
+ import {
9
+ ApiError,
10
+ apiGet
11
+ } from "./chunk-HREWXNTO.js";
12
+ import {
13
+ getEnv
14
+ } from "./chunk-O6QKCJE4.js";
15
+
16
+ // src/commands/gsc/resolve.ts
17
+ async function fetchSites(useCache = true) {
18
+ if (useCache) {
19
+ const cached = cacheGet("gsc-sites", "list");
20
+ if (cached) return cached.data;
21
+ }
22
+ const params = !useCache ? { "skip-cache": "true" } : void 0;
23
+ const data = await apiGet("/api/gsc/sites", params);
24
+ if (useCache) {
25
+ cacheSet("gsc-sites", "list", data, 60 * 60 * 1e3);
26
+ }
27
+ return data;
28
+ }
29
+ async function resolveSiteUrl(args) {
30
+ const fromArgs = args["site-url"];
31
+ const fromEnv = getEnv().BAKER_GSC_SITE_URL;
32
+ const siteUrl = fromArgs || fromEnv;
33
+ if (siteUrl) return siteUrl;
34
+ const useCache = !args["no-cache"];
35
+ try {
36
+ const sites = await fetchSites(useCache);
37
+ const [single] = sites;
38
+ if (sites.length === 1 && single) {
39
+ process.stderr.write(`Using site "${single.siteUrl}"
40
+ `);
41
+ return single.siteUrl;
42
+ }
43
+ if (sites.length === 0) {
44
+ handleConnectionError("gsc");
45
+ }
46
+ const list = sites.map((s) => ` ${s.siteUrl} (${s.permissionLevel})`).join("\n");
47
+ writeJsonEnvelope({
48
+ ok: false,
49
+ error: {
50
+ code: "MULTIPLE_SITES",
51
+ message: `Multiple sites found. Pass --site-url or set BAKER_GSC_SITE_URL:
52
+ ${list}`
53
+ }
54
+ });
55
+ process.exit(1);
56
+ } catch (err) {
57
+ if (err instanceof ApiError && needsConnectionFix(err.code, err.message)) {
58
+ handleConnectionError("gsc", err.message);
59
+ }
60
+ writeJsonEnvelope({
61
+ ok: false,
62
+ error: {
63
+ code: "RESOLUTION_ERROR",
64
+ message: "Could not auto-detect site. Pass --site-url or set BAKER_GSC_SITE_URL."
65
+ }
66
+ });
67
+ process.exit(1);
68
+ }
69
+ }
70
+
71
+ export {
72
+ resolveSiteUrl
73
+ };
74
+ //# sourceMappingURL=chunk-GIW7ABMM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/gsc/resolve.ts"],"sourcesContent":["import { ApiError, apiGet } from \"../../client.ts\";\nimport { getEnv } from \"../../env.ts\";\nimport { handleConnectionError, needsConnectionFix } from \"../../error-handler.ts\";\nimport { cacheGet, cacheSet } from \"../ads/cache.ts\";\nimport { writeJsonEnvelope } from \"../ads/output.ts\";\n\ninterface GscSite {\n siteUrl: string;\n permissionLevel: string;\n}\n\nasync function fetchSites(useCache = true): Promise<GscSite[]> {\n if (useCache) {\n const cached = cacheGet<GscSite[]>(\"gsc-sites\", \"list\");\n if (cached) return cached.data;\n }\n const params = !useCache ? { \"skip-cache\": \"true\" } : undefined;\n const data = await apiGet<GscSite[]>(\"/api/gsc/sites\", params);\n if (useCache) {\n cacheSet(\"gsc-sites\", \"list\", data, 60 * 60 * 1000);\n }\n return data;\n}\n\nexport async function resolveSiteUrl(args: Record<string, unknown>): Promise<string> {\n const fromArgs = args[\"site-url\"] as string | undefined;\n const fromEnv = getEnv().BAKER_GSC_SITE_URL;\n const siteUrl = fromArgs || fromEnv;\n\n if (siteUrl) return siteUrl;\n\n const useCache = !args[\"no-cache\"];\n\n try {\n const sites = await fetchSites(useCache);\n const [single] = sites;\n if (sites.length === 1 && single) {\n process.stderr.write(`Using site \"${single.siteUrl}\"\\n`);\n return single.siteUrl;\n }\n if (sites.length === 0) {\n handleConnectionError(\"gsc\");\n }\n const list = sites.map((s) => ` ${s.siteUrl} (${s.permissionLevel})`).join(\"\\n\");\n writeJsonEnvelope({\n ok: false,\n error: {\n code: \"MULTIPLE_SITES\",\n message: `Multiple sites found. Pass --site-url or set BAKER_GSC_SITE_URL:\\n${list}`,\n },\n });\n process.exit(1);\n } catch (err) {\n // The listing call is the only thing that can throw here, so a 401/404 from\n // it means the connection is missing — not that resolution is ambiguous.\n if (err instanceof ApiError && needsConnectionFix(err.code, err.message)) {\n handleConnectionError(\"gsc\", err.message);\n }\n writeJsonEnvelope({\n ok: false,\n error: {\n code: \"RESOLUTION_ERROR\",\n message: \"Could not auto-detect site. Pass --site-url or set BAKER_GSC_SITE_URL.\",\n },\n });\n process.exit(1);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAWA,eAAe,WAAW,WAAW,MAA0B;AAC7D,MAAI,UAAU;AACZ,UAAM,SAAS,SAAoB,aAAa,MAAM;AACtD,QAAI,OAAQ,QAAO,OAAO;AAAA,EAC5B;AACA,QAAM,SAAS,CAAC,WAAW,EAAE,cAAc,OAAO,IAAI;AACtD,QAAM,OAAO,MAAM,OAAkB,kBAAkB,MAAM;AAC7D,MAAI,UAAU;AACZ,aAAS,aAAa,QAAQ,MAAM,KAAK,KAAK,GAAI;AAAA,EACpD;AACA,SAAO;AACT;AAEA,eAAsB,eAAe,MAAgD;AACnF,QAAM,WAAW,KAAK,UAAU;AAChC,QAAM,UAAU,OAAO,EAAE;AACzB,QAAM,UAAU,YAAY;AAE5B,MAAI,QAAS,QAAO;AAEpB,QAAM,WAAW,CAAC,KAAK,UAAU;AAEjC,MAAI;AACF,UAAM,QAAQ,MAAM,WAAW,QAAQ;AACvC,UAAM,CAAC,MAAM,IAAI;AACjB,QAAI,MAAM,WAAW,KAAK,QAAQ;AAChC,cAAQ,OAAO,MAAM,eAAe,OAAO,OAAO;AAAA,CAAK;AACvD,aAAO,OAAO;AAAA,IAChB;AACA,QAAI,MAAM,WAAW,GAAG;AACtB,4BAAsB,KAAK;AAAA,IAC7B;AACA,UAAM,OAAO,MAAM,IAAI,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,EAAE,eAAe,GAAG,EAAE,KAAK,IAAI;AACjF,sBAAkB;AAAA,MAChB,IAAI;AAAA,MACJ,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,EAAqE,IAAI;AAAA,MACpF;AAAA,IACF,CAAC;AACD,YAAQ,KAAK,CAAC;AAAA,EAChB,SAAS,KAAK;AAGZ,QAAI,eAAe,YAAY,mBAAmB,IAAI,MAAM,IAAI,OAAO,GAAG;AACxE,4BAAsB,OAAO,IAAI,OAAO;AAAA,IAC1C;AACA,sBAAkB;AAAA,MAChB,IAAI;AAAA,MACJ,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AACD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
@@ -0,0 +1,145 @@
1
+ // ../api/src/decide.ts
2
+ import { z } from "zod";
3
+ var DECIDE_MAX_QUESTIONS = 2e3;
4
+ var DECIDE_MAX_NAMED_QUESTIONS = 40;
5
+ var DECIDE_MAX_ITEMS = 500;
6
+ var DECIDE_MAX_ITEM_CHARS = 4e3;
7
+ var DECIDE_MAX_STATE_CHARS = 5e4;
8
+ var DECIDE_MAX_OPTIONS = 255;
9
+ var DECIDE_MAX_REQUEST_CHARS = 6e4;
10
+ var LIMIT = { decideLimit: true };
11
+ var questionText = z.string().trim().min(1, "a question cannot be empty").max(1e3);
12
+ var optionKey = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/, "option keys are short slugs: letters, digits, - and _");
13
+ var decideQuestionSchema = z.discriminatedUnion("type", [
14
+ z.object({ type: z.literal("noul"), question: questionText }),
15
+ z.object({
16
+ type: z.literal("choice"),
17
+ question: questionText,
18
+ /** Option key → what it means, in words. Jev picks exactly one. */
19
+ options: z.record(optionKey, z.string().trim().min(1).max(300)).refine((options) => Object.keys(options).length >= 2, "a choice needs at least 2 options").refine(
20
+ (options) => Object.keys(options).length <= DECIDE_MAX_OPTIONS,
21
+ `a choice takes at most ${DECIDE_MAX_OPTIONS} options`
22
+ )
23
+ }),
24
+ z.object({
25
+ type: z.literal("score"),
26
+ question: questionText,
27
+ /** The levels in words, lowest first. */
28
+ levels: z.array(z.string().trim().min(1).max(300)).min(2).max(10).refine((levels) => new Set(levels).size === levels.length, "a score's levels must be different")
29
+ })
30
+ ]);
31
+ var questionName = z.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,47}$/, "question names are identifiers: a letter, then letters, digits or _");
32
+ var jsonChars = (value) => JSON.stringify(value)?.length ?? 0;
33
+ function decideQuestionChars(question, item) {
34
+ return jsonChars(item === void 0 ? question : { item, ...question });
35
+ }
36
+ var decideItemSchema = z.object({
37
+ id: z.string().trim().min(1).max(200),
38
+ /** The item's words, or its named fields (`{ "angle": "…", "summary": "…" }`). Text only. */
39
+ text: z.union([z.string().trim().min(1), z.record(z.string(), z.unknown())])
40
+ }).superRefine((item, ctx) => {
41
+ const chars = jsonChars(item.text);
42
+ if (chars > DECIDE_MAX_ITEM_CHARS) {
43
+ ctx.addIssue({
44
+ code: "custom",
45
+ params: LIMIT,
46
+ path: ["text"],
47
+ message: `item "${item.id}" is ${chars} characters; one item takes at most ${DECIDE_MAX_ITEM_CHARS}`
48
+ });
49
+ }
50
+ });
51
+ var decideRequestSchema = z.object({
52
+ questions: z.record(questionName, decideQuestionSchema).refine((questions) => Object.keys(questions).length >= 1, "ask at least one question").refine((questions) => Object.keys(questions).length <= DECIDE_MAX_NAMED_QUESTIONS, {
53
+ message: `at most ${DECIDE_MAX_NAMED_QUESTIONS} named questions per call`,
54
+ params: LIMIT
55
+ }),
56
+ /** What every question reads beside its item (or on its own, with no items). */
57
+ state: z.union([z.string(), z.record(z.string(), z.unknown()), z.array(z.unknown())]).refine((state) => jsonChars(state) <= DECIDE_MAX_STATE_CHARS, {
58
+ message: `state is longer than ${DECIDE_MAX_STATE_CHARS} characters`,
59
+ params: LIMIT
60
+ }).optional(),
61
+ items: z.array(decideItemSchema).min(1).max(DECIDE_MAX_ITEMS).optional(),
62
+ /** Every option's probability on Choices and Scores, not only the pick's. */
63
+ full: z.boolean().default(false)
64
+ }).superRefine((request, ctx) => {
65
+ const ids = /* @__PURE__ */ new Set();
66
+ for (const [index, item] of (request.items ?? []).entries()) {
67
+ if (ids.has(item.id)) {
68
+ ctx.addIssue({ code: "custom", path: ["items", index, "id"], message: `item id "${item.id}" appears twice` });
69
+ return;
70
+ }
71
+ ids.add(item.id);
72
+ }
73
+ const asked = Object.keys(request.questions).length * (request.items?.length ?? 1);
74
+ if (asked > DECIDE_MAX_QUESTIONS) {
75
+ ctx.addIssue({
76
+ code: "custom",
77
+ params: LIMIT,
78
+ path: ["items"],
79
+ message: `this call asks ${asked} questions (items \xD7 named questions); one call asks at most ${DECIDE_MAX_QUESTIONS}`
80
+ });
81
+ return;
82
+ }
83
+ const questions = Object.values(request.questions);
84
+ const stateChars = request.state === void 0 ? 0 : jsonChars(request.state);
85
+ const subjects = request.items ? request.items.map((item, index) => ({ id: item.id, text: item.text, index })) : [{ id: null }];
86
+ for (const subject of subjects) {
87
+ const chars = stateChars + questions.reduce((total, question) => total + decideQuestionChars(question, subject.text), 0);
88
+ if (chars <= DECIDE_MAX_REQUEST_CHARS) continue;
89
+ const what = subject.id === null ? "the questions" : `item "${subject.id}" with its ${questions.length} questions`;
90
+ ctx.addIssue({
91
+ code: "custom",
92
+ params: LIMIT,
93
+ path: subject.index === void 0 ? ["state"] : ["items", subject.index, "text"],
94
+ message: `${what} and the state come to ${chars} characters, and one request carries at most ${DECIDE_MAX_REQUEST_CHARS}: ask fewer questions per call, shorten the state, or trim the item`
95
+ });
96
+ return;
97
+ }
98
+ });
99
+ function isDecideLimitIssue(issue) {
100
+ if (issue.code === "too_big" && issue.path.length === 1 && issue.path[0] === "items") return true;
101
+ return issue.code === "custom" && issue.params?.decideLimit === true;
102
+ }
103
+ var probabilities = z.record(z.string(), z.number());
104
+ var decideAnswerSchema = z.union([
105
+ z.object({ noul: z.number() }),
106
+ z.object({
107
+ choice: z.string(),
108
+ /** The pick's own probability. */
109
+ probability: z.number(),
110
+ /** How concentrated the distribution is; low means torn between options. */
111
+ confidence: z.number(),
112
+ probabilities: probabilities.optional()
113
+ }),
114
+ z.object({
115
+ /** The probability-weighted level, 0 = the first level; can land between levels. */
116
+ score: z.number(),
117
+ /** The level `score` rounds to, in words. */
118
+ level: z.string(),
119
+ confidence: z.number(),
120
+ probabilities: probabilities.optional()
121
+ })
122
+ ]);
123
+ var answersByName = z.record(z.string(), decideAnswerSchema);
124
+ var decideResponseSchema = z.object({
125
+ model: z.string(),
126
+ /** With no items: each named question's answer about `state`. */
127
+ answers: answersByName.optional(),
128
+ /** With items: each item's answers, in the order sent; `null` when Jev did not answer that item. */
129
+ items: z.array(z.object({ id: z.string(), answers: answersByName.nullable() })).optional(),
130
+ /** Ids of the items Jev did not answer (their request failed); the rest stand. */
131
+ unanswered: z.array(z.string()),
132
+ /** Jev requests the call was packed into (sent at once). */
133
+ requests: z.number(),
134
+ costUsd: z.number()
135
+ });
136
+
137
+ export {
138
+ DECIDE_MAX_QUESTIONS,
139
+ DECIDE_MAX_ITEMS,
140
+ DECIDE_MAX_ITEM_CHARS,
141
+ DECIDE_MAX_REQUEST_CHARS,
142
+ decideRequestSchema,
143
+ isDecideLimitIssue
144
+ };
145
+ //# sourceMappingURL=chunk-GIWHHCD6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../api/src/decide.ts"],"sourcesContent":["/**\n * `baker decide` — the wire contract for asking Jev (the decision model, see\n * docs/decision-model.md) typed questions about text and getting typed answers\n * back: a yes/no probability (Noul), one option of a set (Choice), or a level\n * on a scale (Score).\n *\n * Named questions are asked once about `state`, or — with `items` — once about\n * every item, each item inside its own question's instructions. The backend\n * packs the questions into as few Jev requests as fit and sends them at once.\n * Read-only: it decides, it never writes or generates anything.\n */\nimport { z } from \"zod\";\n\n/** Items × named questions in one call. Past it, split the items across calls. */\nexport const DECIDE_MAX_QUESTIONS = 2000;\nexport const DECIDE_MAX_NAMED_QUESTIONS = 40;\nexport const DECIDE_MAX_ITEMS = 500;\n/** One item's text (or its fields, as JSON). An ad's summary, angle and copy fit well within it. */\nexport const DECIDE_MAX_ITEM_CHARS = 4000;\n/** The shared `state`, as JSON. It goes in every request, so it leaves room there for the questions. */\nexport const DECIDE_MAX_STATE_CHARS = 50_000;\nexport const DECIDE_MAX_OPTIONS = 255;\n/** What one Jev request carries — the state and every question in it, items inside — under Jev's 32k-token context. */\nexport const DECIDE_MAX_REQUEST_CHARS = 60_000;\n\n/** Marks an issue a smaller call fixes (fewer items or questions, a shorter item or state), not a wrong one. */\nconst LIMIT = { decideLimit: true };\n\nconst questionText = z.string().trim().min(1, \"a question cannot be empty\").max(1000);\nconst optionKey = z\n .string()\n .regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/, \"option keys are short slugs: letters, digits, - and _\");\n\nconst decideQuestionSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"noul\"), question: questionText }),\n z.object({\n type: z.literal(\"choice\"),\n question: questionText,\n /** Option key → what it means, in words. Jev picks exactly one. */\n options: z\n .record(optionKey, z.string().trim().min(1).max(300))\n .refine((options) => Object.keys(options).length >= 2, \"a choice needs at least 2 options\")\n .refine(\n (options) => Object.keys(options).length <= DECIDE_MAX_OPTIONS,\n `a choice takes at most ${DECIDE_MAX_OPTIONS} options`,\n ),\n }),\n z.object({\n type: z.literal(\"score\"),\n question: questionText,\n /** The levels in words, lowest first. */\n levels: z\n .array(z.string().trim().min(1).max(300))\n .min(2)\n .max(10)\n .refine((levels) => new Set(levels).size === levels.length, \"a score's levels must be different\"),\n }),\n]);\n\nexport type DecideQuestion = z.infer<typeof decideQuestionSchema>;\n\nconst questionName = z\n .string()\n .regex(/^[A-Za-z][A-Za-z0-9_]{0,47}$/, \"question names are identifiers: a letter, then letters, digits or _\");\n\nconst jsonChars = (value: unknown) => JSON.stringify(value)?.length ?? 0;\n\n/** One named question as one request carries it, with the item it is asked about. The budget `DECIDE_MAX_REQUEST_CHARS` counts. */\nexport function decideQuestionChars(question: DecideQuestion, item?: unknown): number {\n return jsonChars(item === undefined ? question : { item, ...question });\n}\n\nconst decideItemSchema = z\n .object({\n id: z.string().trim().min(1).max(200),\n /** The item's words, or its named fields (`{ \"angle\": \"…\", \"summary\": \"…\" }`). Text only. */\n text: z.union([z.string().trim().min(1), z.record(z.string(), z.unknown())]),\n })\n .superRefine((item, ctx) => {\n const chars = jsonChars(item.text);\n if (chars > DECIDE_MAX_ITEM_CHARS) {\n ctx.addIssue({\n code: \"custom\",\n params: LIMIT,\n path: [\"text\"],\n message: `item \"${item.id}\" is ${chars} characters; one item takes at most ${DECIDE_MAX_ITEM_CHARS}`,\n });\n }\n });\n\nexport type DecideItem = z.infer<typeof decideItemSchema>;\n\nexport const decideRequestSchema = z\n .object({\n questions: z\n .record(questionName, decideQuestionSchema)\n .refine((questions) => Object.keys(questions).length >= 1, \"ask at least one question\")\n .refine((questions) => Object.keys(questions).length <= DECIDE_MAX_NAMED_QUESTIONS, {\n message: `at most ${DECIDE_MAX_NAMED_QUESTIONS} named questions per call`,\n params: LIMIT,\n }),\n /** What every question reads beside its item (or on its own, with no items). */\n state: z\n .union([z.string(), z.record(z.string(), z.unknown()), z.array(z.unknown())])\n .refine((state) => jsonChars(state) <= DECIDE_MAX_STATE_CHARS, {\n message: `state is longer than ${DECIDE_MAX_STATE_CHARS} characters`,\n params: LIMIT,\n })\n .optional(),\n items: z.array(decideItemSchema).min(1).max(DECIDE_MAX_ITEMS).optional(),\n /** Every option's probability on Choices and Scores, not only the pick's. */\n full: z.boolean().default(false),\n })\n .superRefine((request, ctx) => {\n const ids = new Set<string>();\n for (const [index, item] of (request.items ?? []).entries()) {\n if (ids.has(item.id)) {\n ctx.addIssue({ code: \"custom\", path: [\"items\", index, \"id\"], message: `item id \"${item.id}\" appears twice` });\n return;\n }\n ids.add(item.id);\n }\n const asked = Object.keys(request.questions).length * (request.items?.length ?? 1);\n if (asked > DECIDE_MAX_QUESTIONS) {\n ctx.addIssue({\n code: \"custom\",\n params: LIMIT,\n path: [\"items\"],\n message: `this call asks ${asked} questions (items × named questions); one call asks at most ${DECIDE_MAX_QUESTIONS}`,\n });\n return;\n }\n // Every question about one item goes in one request, beside the whole state: past the budget, no request can carry it.\n const questions = Object.values(request.questions);\n const stateChars = request.state === undefined ? 0 : jsonChars(request.state);\n const subjects: { id: string | null; text?: unknown; index?: number }[] = request.items\n ? request.items.map((item, index) => ({ id: item.id, text: item.text, index }))\n : [{ id: null }];\n for (const subject of subjects) {\n const chars =\n stateChars + questions.reduce((total, question) => total + decideQuestionChars(question, subject.text), 0);\n if (chars <= DECIDE_MAX_REQUEST_CHARS) continue;\n const what =\n subject.id === null ? \"the questions\" : `item \"${subject.id}\" with its ${questions.length} questions`;\n ctx.addIssue({\n code: \"custom\",\n params: LIMIT,\n path: subject.index === undefined ? [\"state\"] : [\"items\", subject.index, \"text\"],\n message: `${what} and the state come to ${chars} characters, and one request carries at most ${DECIDE_MAX_REQUEST_CHARS}: ask fewer questions per call, shorten the state, or trim the item`,\n });\n return;\n }\n });\n\n/** Whether a refusal is a size limit, which a smaller call fixes, rather than input that is wrong. */\nexport function isDecideLimitIssue(issue: z.core.$ZodIssue): boolean {\n if (issue.code === \"too_big\" && issue.path.length === 1 && issue.path[0] === \"items\") return true;\n return issue.code === \"custom\" && issue.params?.decideLimit === true;\n}\n\nexport type DecideRequest = z.input<typeof decideRequestSchema>;\nexport type DecideRequestParsed = z.output<typeof decideRequestSchema>;\n\nconst probabilities = z.record(z.string(), z.number());\n\nexport const decideAnswerSchema = z.union([\n z.object({ noul: z.number() }),\n z.object({\n choice: z.string(),\n /** The pick's own probability. */\n probability: z.number(),\n /** How concentrated the distribution is; low means torn between options. */\n confidence: z.number(),\n probabilities: probabilities.optional(),\n }),\n z.object({\n /** The probability-weighted level, 0 = the first level; can land between levels. */\n score: z.number(),\n /** The level `score` rounds to, in words. */\n level: z.string(),\n confidence: z.number(),\n probabilities: probabilities.optional(),\n }),\n]);\n\nexport type DecideAnswer = z.infer<typeof decideAnswerSchema>;\n\nconst answersByName = z.record(z.string(), decideAnswerSchema);\n\nexport const decideResponseSchema = z.object({\n model: z.string(),\n /** With no items: each named question's answer about `state`. */\n answers: answersByName.optional(),\n /** With items: each item's answers, in the order sent; `null` when Jev did not answer that item. */\n items: z.array(z.object({ id: z.string(), answers: answersByName.nullable() })).optional(),\n /** Ids of the items Jev did not answer (their request failed); the rest stand. */\n unanswered: z.array(z.string()),\n /** Jev requests the call was packed into (sent at once). */\n requests: z.number(),\n costUsd: z.number(),\n});\n\nexport type DecideResponse = z.infer<typeof decideResponseSchema>;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,9 @@
1
+ // ../api/src/event-ingest/mode.ts
2
+ var INGEST_MODE_HEADER = "X-Baker-Mode";
3
+ var INGEST_MODES = ["live", "test"];
4
+
5
+ export {
6
+ INGEST_MODE_HEADER,
7
+ INGEST_MODES
8
+ };
9
+ //# sourceMappingURL=chunk-GRQ2AXDX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../api/src/event-ingest/mode.ts"],"sourcesContent":["/**\n * Whether a request is a rehearsal, decided by the request.\n *\n * ## Why this is not a property of the key\n *\n * It was, and that was the wrong shape. A key that means \"test\" makes the mode\n * a deploy-time decision belonging to whoever set an environment variable,\n * which is a long way from the person deciding to rehearse. It also gives one\n * integration two credentials to hold, rotate and tell apart — and the moment\n * there are two, every surface that shows a key has to explain which one this\n * is, which is how a key list becomes a second species of key.\n *\n * Test versus live is a property of *this request*. The same CRM, with the same\n * credential, sends a rehearsal now and a real deal in an hour. So it travels\n * as a header, and the credential goes back to answering only the question a\n * credential should answer: who is this, and what may they reach.\n *\n * ## The one thing a separate key bought, and how it is bought back\n *\n * Worth stating plainly, because it is a real trade and not a free win. A key\n * that *cannot* write live data is a hard guarantee: a staging server holding\n * one can never pollute a client's reports, however it is configured. A header\n * can be forgotten, and a forgotten header means a rehearsal lands in the real\n * numbers — silently, because it is a perfectly valid request.\n *\n * Two things buy that back, and both matter:\n *\n * - **An unrecognised value is refused, never assumed.** `X-Baker-Mode: testing`\n * or `true` is a `400`, not a shrug that falls through to live. A typo is the\n * likely way this gets sent wrong, and it is now the loud way rather than the\n * silent one. Only a header that is genuinely absent means live.\n * - **The response says which mode it was treated as**, so the answer to \"did\n * my rehearsal count?\" is in the reply to the request that asked, rather than\n * in a report somebody reads next week.\n */\n\nexport const INGEST_MODE_HEADER = \"X-Baker-Mode\";\n\nexport const INGEST_MODES = [\"live\", \"test\"] as const;\nexport type IngestMode = (typeof INGEST_MODES)[number];\n\n/**\n * The mode a header asks for: `live` when it is absent, the named mode when it\n * is one this endpoint knows, and `null` for anything else — which the caller\n * turns into a `400` rather than guessing.\n *\n * Whitespace and case are forgiven because they are not what anybody means to\n * send; an unknown word is not, because it is.\n */\nexport function parseIngestMode(header: string | null | undefined): IngestMode | null {\n if (header === null || header === undefined || header.trim() === \"\") return \"live\";\n const value = header.trim().toLowerCase();\n return (INGEST_MODES as readonly string[]).includes(value) ? (value as IngestMode) : null;\n}\n"],"mappings":";AAoCO,IAAM,qBAAqB;AAE3B,IAAM,eAAe,CAAC,QAAQ,MAAM;","names":[]}
@@ -0,0 +1,73 @@
1
+ // ../api/src/media-sources.ts
2
+ import { z } from "zod";
3
+ var mediaSourcePlatformSchema = z.enum([
4
+ "instagram",
5
+ "tiktok",
6
+ "youtube",
7
+ "linkedin",
8
+ "facebook",
9
+ "google_drive"
10
+ ]);
11
+ var mediaSourceRefreshIntervalSchema = z.enum(["never", "daily", "weekly", "monthly"]);
12
+ var mediaSourceSyncStatusSchema = z.enum(["idle", "fetching", "processing", "error"]);
13
+ var mediaSourceHalfSchema = z.object({
14
+ sourceId: z.string(),
15
+ syncStatus: mediaSourceSyncStatusSchema,
16
+ storedCount: z.number().optional(),
17
+ pendingItems: z.number().optional(),
18
+ failedItems: z.number().optional(),
19
+ lastSyncedAt: z.number().optional(),
20
+ errorMessage: z.string().optional()
21
+ });
22
+ var mediaSourceSummarySchema = z.object({
23
+ key: z.string(),
24
+ platform: mediaSourcePlatformSchema,
25
+ platformLabel: z.string(),
26
+ handle: z.string(),
27
+ label: z.string(),
28
+ profileUrl: z.string(),
29
+ profileImageUrl: z.string().optional(),
30
+ refreshInterval: mediaSourceRefreshIntervalSchema,
31
+ /** Absent for a platform that feeds no images (YouTube). */
32
+ images: mediaSourceHalfSchema.optional(),
33
+ videos: mediaSourceHalfSchema.optional(),
34
+ createdAt: z.number()
35
+ });
36
+ var mediaSourceProfileSchema = z.object({
37
+ platform: mediaSourcePlatformSchema,
38
+ handle: z.string(),
39
+ displayName: z.string(),
40
+ avatarUrl: z.string(),
41
+ bio: z.string(),
42
+ followers: z.number().optional(),
43
+ postCount: z.number().optional(),
44
+ isPrivate: z.boolean(),
45
+ profileUrl: z.string(),
46
+ channelId: z.string().optional()
47
+ });
48
+ var mediaSourcesAddRequestSchema = z.object({
49
+ /** A profile URL or a Drive folder link, or an @handle together with `platform`. */
50
+ input: z.string().trim().min(1, "Pass the account's profile URL or @handle"),
51
+ /** Needed only when `input` is a bare handle; a URL names its own platform. */
52
+ platform: mediaSourcePlatformSchema.optional(),
53
+ /** Auto-sync cadence. Omitted = weekly, for every platform. */
54
+ every: mediaSourceRefreshIntervalSchema.optional()
55
+ });
56
+ var mediaSourceKeySchema = z.string().trim().regex(/^(instagram|tiktok|youtube|linkedin|facebook|google_drive):.+$/, "Pass a source key like tiktok:nike");
57
+ var mediaSourcesSyncRequestSchema = z.object({ key: mediaSourceKeySchema });
58
+ var mediaSourcesRemoveRequestSchema = z.object({ key: mediaSourceKeySchema });
59
+ var mediaSourcesScheduleRequestSchema = z.object({
60
+ key: mediaSourceKeySchema,
61
+ every: mediaSourceRefreshIntervalSchema
62
+ });
63
+
64
+ export {
65
+ mediaSourcePlatformSchema,
66
+ mediaSourceRefreshIntervalSchema,
67
+ mediaSourcesAddRequestSchema,
68
+ mediaSourceKeySchema,
69
+ mediaSourcesSyncRequestSchema,
70
+ mediaSourcesRemoveRequestSchema,
71
+ mediaSourcesScheduleRequestSchema
72
+ };
73
+ //# sourceMappingURL=chunk-GXDLWBOY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../api/src/media-sources.ts"],"sourcesContent":["/**\n * Contract for `/api/media-sources/...` — connecting a social account, or a\n * Google Drive folder the company's Google Drive connection can open, as a\n * source for the image and video libraries.\n *\n * A source is named by its key, `<platform>:<handle>` (`tiktok:nike`), never by\n * a row id: it is stored as two rows (its image half and its video half), and\n * the key is the one name both halves share.\n *\n * Mirrors `convex/lib/mediaSourcePlatforms.ts` (`MEDIA_SOURCE_PLATFORMS`) and\n * `convex/mediaSources/queries.ts` (`MediaSourceSummary`).\n */\nimport { z } from \"zod\";\n\nexport const mediaSourcePlatformSchema = z.enum([\n \"instagram\",\n \"tiktok\",\n \"youtube\",\n \"linkedin\",\n \"facebook\",\n \"google_drive\",\n]);\nexport type MediaSourcePlatform = z.infer<typeof mediaSourcePlatformSchema>;\n\nexport const mediaSourceRefreshIntervalSchema = z.enum([\"never\", \"daily\", \"weekly\", \"monthly\"]);\nexport type MediaSourceRefreshInterval = z.infer<typeof mediaSourceRefreshIntervalSchema>;\n\nexport const mediaSourceSyncStatusSchema = z.enum([\"idle\", \"fetching\", \"processing\", \"error\"]);\n\nexport const mediaSourceHalfSchema = z.object({\n sourceId: z.string(),\n syncStatus: mediaSourceSyncStatusSchema,\n storedCount: z.number().optional(),\n pendingItems: z.number().optional(),\n failedItems: z.number().optional(),\n lastSyncedAt: z.number().optional(),\n errorMessage: z.string().optional(),\n});\n\nexport const mediaSourceSummarySchema = z.object({\n key: z.string(),\n platform: mediaSourcePlatformSchema,\n platformLabel: z.string(),\n handle: z.string(),\n label: z.string(),\n profileUrl: z.string(),\n profileImageUrl: z.string().optional(),\n refreshInterval: mediaSourceRefreshIntervalSchema,\n /** Absent for a platform that feeds no images (YouTube). */\n images: mediaSourceHalfSchema.optional(),\n videos: mediaSourceHalfSchema.optional(),\n createdAt: z.number(),\n});\nexport type MediaSourceSummary = z.infer<typeof mediaSourceSummarySchema>;\n\nexport const mediaSourceProfileSchema = z.object({\n platform: mediaSourcePlatformSchema,\n handle: z.string(),\n displayName: z.string(),\n avatarUrl: z.string(),\n bio: z.string(),\n followers: z.number().optional(),\n postCount: z.number().optional(),\n isPrivate: z.boolean(),\n profileUrl: z.string(),\n channelId: z.string().optional(),\n});\n\n// --- POST /api/media-sources/add ---\nexport const mediaSourcesAddRequestSchema = z.object({\n /** A profile URL or a Drive folder link, or an @handle together with `platform`. */\n input: z.string().trim().min(1, \"Pass the account's profile URL or @handle\"),\n /** Needed only when `input` is a bare handle; a URL names its own platform. */\n platform: mediaSourcePlatformSchema.optional(),\n /** Auto-sync cadence. Omitted = weekly, for every platform. */\n every: mediaSourceRefreshIntervalSchema.optional(),\n});\nexport type MediaSourcesAddRequest = z.infer<typeof mediaSourcesAddRequestSchema>;\nexport type MediaSourcesAddResponse = {\n /** False when the account was already connected — adding is idempotent. */\n created: boolean;\n source: MediaSourceSummary;\n profile: z.infer<typeof mediaSourceProfileSchema>;\n};\n\n// --- GET /api/media-sources/list ---\nexport type MediaSourcesListResponse = { sources: MediaSourceSummary[] };\n\n// --- POST /api/media-sources/{sync,remove,schedule} ---\nexport const mediaSourceKeySchema = z\n .string()\n .trim()\n .regex(/^(instagram|tiktok|youtube|linkedin|facebook|google_drive):.+$/, \"Pass a source key like tiktok:nike\");\n\nexport const mediaSourcesSyncRequestSchema = z.object({ key: mediaSourceKeySchema });\nexport type MediaSourcesSyncRequest = z.infer<typeof mediaSourcesSyncRequestSchema>;\nexport type MediaSourcesSyncResponse = { key: string; started: boolean };\n\nexport const mediaSourcesRemoveRequestSchema = z.object({ key: mediaSourceKeySchema });\nexport type MediaSourcesRemoveRequest = z.infer<typeof mediaSourcesRemoveRequestSchema>;\nexport type MediaSourcesRemoveResponse = { key: string };\n\nexport const mediaSourcesScheduleRequestSchema = z.object({\n key: mediaSourceKeySchema,\n every: mediaSourceRefreshIntervalSchema,\n});\nexport type MediaSourcesScheduleRequest = z.infer<typeof mediaSourcesScheduleRequestSchema>;\nexport type MediaSourcesScheduleResponse = { key: string };\n"],"mappings":";AAYA,SAAS,SAAS;AAEX,IAAM,4BAA4B,EAAE,KAAK;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,mCAAmC,EAAE,KAAK,CAAC,SAAS,SAAS,UAAU,SAAS,CAAC;AAGvF,IAAM,8BAA8B,EAAE,KAAK,CAAC,QAAQ,YAAY,cAAc,OAAO,CAAC;AAEtF,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY;AAAA,EACZ,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,cAAc,EAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,KAAK,EAAE,OAAO;AAAA,EACd,UAAU;AAAA,EACV,eAAe,EAAE,OAAO;AAAA,EACxB,QAAQ,EAAE,OAAO;AAAA,EACjB,OAAO,EAAE,OAAO;AAAA,EAChB,YAAY,EAAE,OAAO;AAAA,EACrB,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,EACrC,iBAAiB;AAAA;AAAA,EAEjB,QAAQ,sBAAsB,SAAS;AAAA,EACvC,QAAQ,sBAAsB,SAAS;AAAA,EACvC,WAAW,EAAE,OAAO;AACtB,CAAC;AAGM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,UAAU;AAAA,EACV,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,EAAE,OAAO;AAAA,EACtB,WAAW,EAAE,OAAO;AAAA,EACpB,KAAK,EAAE,OAAO;AAAA,EACd,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,QAAQ;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAGM,IAAM,+BAA+B,EAAE,OAAO;AAAA;AAAA,EAEnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,2CAA2C;AAAA;AAAA,EAE3E,UAAU,0BAA0B,SAAS;AAAA;AAAA,EAE7C,OAAO,iCAAiC,SAAS;AACnD,CAAC;AAaM,IAAM,uBAAuB,EACjC,OAAO,EACP,KAAK,EACL,MAAM,kEAAkE,oCAAoC;AAExG,IAAM,gCAAgC,EAAE,OAAO,EAAE,KAAK,qBAAqB,CAAC;AAI5E,IAAM,kCAAkC,EAAE,OAAO,EAAE,KAAK,qBAAqB,CAAC;AAI9E,IAAM,oCAAoC,EAAE,OAAO;AAAA,EACxD,KAAK;AAAA,EACL,OAAO;AACT,CAAC;","names":[]}