@koda-sl/baker-cli 0.385.0-dev.ec7b0e42b → 0.385.0-dev.f7ef4c7e1

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 (963) hide show
  1. package/README.md +1082 -210
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-4UEZAY5T.js +49 -0
  5. package/dist/account-4UEZAY5T.js.map +1 -0
  6. package/dist/account-G6QK2VXQ.js +79 -0
  7. package/dist/account-G6QK2VXQ.js.map +1 -0
  8. package/dist/account-OINZG6UP.js +80 -0
  9. package/dist/account-OINZG6UP.js.map +1 -0
  10. package/dist/account-reads-ZKKDYHK5.js +218 -0
  11. package/dist/account-reads-ZKKDYHK5.js.map +1 -0
  12. package/dist/account-writes-N4JDIDRB.js +66 -0
  13. package/dist/account-writes-N4JDIDRB.js.map +1 -0
  14. package/dist/accounts-7KRRRVLB.js +611 -0
  15. package/dist/accounts-7KRRRVLB.js.map +1 -0
  16. package/dist/accounts-AEBQFCNH.js +114 -0
  17. package/dist/accounts-AEBQFCNH.js.map +1 -0
  18. package/dist/accounts-CNTOHRQ2.js +77 -0
  19. package/dist/accounts-CNTOHRQ2.js.map +1 -0
  20. package/dist/accounts-HP4BLKK5.js +75 -0
  21. package/dist/accounts-HP4BLKK5.js.map +1 -0
  22. package/dist/accounts-Z4CLGQXJ.js +115 -0
  23. package/dist/accounts-Z4CLGQXJ.js.map +1 -0
  24. package/dist/actions-QO7VQ6UV.js +55 -0
  25. package/dist/actions-QO7VQ6UV.js.map +1 -0
  26. package/dist/active-entities-YB46ADQN.js +103 -0
  27. package/dist/active-entities-YB46ADQN.js.map +1 -0
  28. package/dist/activities-DUAIQJLN.js +74 -0
  29. package/dist/activities-DUAIQJLN.js.map +1 -0
  30. package/dist/ad-group-writes-HL3EZ3BT.js +170 -0
  31. package/dist/ad-group-writes-HL3EZ3BT.js.map +1 -0
  32. package/dist/ad-groups-FGS5JJGN.js +68 -0
  33. package/dist/ad-groups-FGS5JJGN.js.map +1 -0
  34. package/dist/ad-writes-LX4ACUHB.js +174 -0
  35. package/dist/ad-writes-LX4ACUHB.js.map +1 -0
  36. package/dist/add-5CUXNOUM.js +97 -0
  37. package/dist/add-5CUXNOUM.js.map +1 -0
  38. package/dist/add-5JBMJHNW.js +302 -0
  39. package/dist/add-5JBMJHNW.js.map +1 -0
  40. package/dist/add-E66HBIZV.js +105 -0
  41. package/dist/add-E66HBIZV.js.map +1 -0
  42. package/dist/add-O76R2SPE.js +104 -0
  43. package/dist/add-O76R2SPE.js.map +1 -0
  44. package/dist/add-accounts-YME5SCXD.js +91 -0
  45. package/dist/add-accounts-YME5SCXD.js.map +1 -0
  46. package/dist/ads-65R3WMDU.js +128 -0
  47. package/dist/ads-65R3WMDU.js.map +1 -0
  48. package/dist/ads-O63J7BDF.js +113 -0
  49. package/dist/ads-O63J7BDF.js.map +1 -0
  50. package/dist/ads-T5JWNFSA.js +40 -0
  51. package/dist/ads-T5JWNFSA.js.map +1 -0
  52. package/dist/ads-TFZ5PXKS.js +77 -0
  53. package/dist/ads-TFZ5PXKS.js.map +1 -0
  54. package/dist/adsets-Y62JOOTV.js +176 -0
  55. package/dist/adsets-Y62JOOTV.js.map +1 -0
  56. package/dist/advertisers-LJ2HKJ4W.js +125 -0
  57. package/dist/advertisers-LJ2HKJ4W.js.map +1 -0
  58. package/dist/advertisers-WJW5DK3Q.js +120 -0
  59. package/dist/advertisers-WJW5DK3Q.js.map +1 -0
  60. package/dist/analytics-HIOC3TUK.js +1976 -0
  61. package/dist/analytics-HIOC3TUK.js.map +1 -0
  62. package/dist/analytics-U2NLDV2V.js +433 -0
  63. package/dist/analytics-U2NLDV2V.js.map +1 -0
  64. package/dist/animate-E3SKQ6SI.js +480 -0
  65. package/dist/animate-E3SKQ6SI.js.map +1 -0
  66. package/dist/assign-V7EAR7VD.js +77 -0
  67. package/dist/assign-V7EAR7VD.js.map +1 -0
  68. package/dist/audience-size-GS7EDBDP.js +94 -0
  69. package/dist/audience-size-GS7EDBDP.js.map +1 -0
  70. package/dist/audiences-5A6BCWSA.js +268 -0
  71. package/dist/audiences-5A6BCWSA.js.map +1 -0
  72. package/dist/audiences-6QOCASVV.js +78 -0
  73. package/dist/audiences-6QOCASVV.js.map +1 -0
  74. package/dist/audiences-O67NGIP5.js +85 -0
  75. package/dist/audiences-O67NGIP5.js.map +1 -0
  76. package/dist/audit-HWK24VXI.js +88 -0
  77. package/dist/audit-HWK24VXI.js.map +1 -0
  78. package/dist/audit-WMZERUAA.js +151 -0
  79. package/dist/audit-WMZERUAA.js.map +1 -0
  80. package/dist/autocomplete-KQSTLQFS.js +111 -0
  81. package/dist/autocomplete-KQSTLQFS.js.map +1 -0
  82. package/dist/avatars-HAFQZD63.js +38 -0
  83. package/dist/avatars-HAFQZD63.js.map +1 -0
  84. package/dist/bid-pricing-5SORFAPE.js +99 -0
  85. package/dist/bid-pricing-5SORFAPE.js.map +1 -0
  86. package/dist/brand-EBG436YV.js +22 -0
  87. package/dist/brand-EBG436YV.js.map +1 -0
  88. package/dist/brief-AYXXPTHC.js +490 -0
  89. package/dist/brief-AYXXPTHC.js.map +1 -0
  90. package/dist/businesses-65EWTK5E.js +53 -0
  91. package/dist/businesses-65EWTK5E.js.map +1 -0
  92. package/dist/campaign-groups-U7723BBE.js +95 -0
  93. package/dist/campaign-groups-U7723BBE.js.map +1 -0
  94. package/dist/campaign-writes-CXS4KYB5.js +165 -0
  95. package/dist/campaign-writes-CXS4KYB5.js.map +1 -0
  96. package/dist/campaign-writes-M6JLF5AC.js +170 -0
  97. package/dist/campaign-writes-M6JLF5AC.js.map +1 -0
  98. package/dist/campaigns-6SM2ZSIH.js +76 -0
  99. package/dist/campaigns-6SM2ZSIH.js.map +1 -0
  100. package/dist/campaigns-7DWD2A5U.js +109 -0
  101. package/dist/campaigns-7DWD2A5U.js.map +1 -0
  102. package/dist/campaigns-F66OYA6N.js +107 -0
  103. package/dist/campaigns-F66OYA6N.js.map +1 -0
  104. package/dist/campaigns-TD7ZB5DG.js +110 -0
  105. package/dist/campaigns-TD7ZB5DG.js.map +1 -0
  106. package/dist/canvas-3NYM5Y7G.js +46 -0
  107. package/dist/canvas-3NYM5Y7G.js.map +1 -0
  108. package/dist/capabilities-JNFYSGRD.js +144 -0
  109. package/dist/capabilities-JNFYSGRD.js.map +1 -0
  110. package/dist/cards-7HRC4UQQ.js +85 -0
  111. package/dist/cards-7HRC4UQQ.js.map +1 -0
  112. package/dist/catalog-N6MDMIVL.js +64 -0
  113. package/dist/catalog-N6MDMIVL.js.map +1 -0
  114. package/dist/catalogs-PB46L7FH.js +128 -0
  115. package/dist/catalogs-PB46L7FH.js.map +1 -0
  116. package/dist/changes-SASUQK62.js +135 -0
  117. package/dist/changes-SASUQK62.js.map +1 -0
  118. package/dist/chatgpt-JKBSAG25.js +47 -0
  119. package/dist/chatgpt-JKBSAG25.js.map +1 -0
  120. package/dist/chats-TUZANLQH.js +262 -0
  121. package/dist/chats-TUZANLQH.js.map +1 -0
  122. package/dist/chunk-25E6SC3F.js +363 -0
  123. package/dist/chunk-25E6SC3F.js.map +1 -0
  124. package/dist/chunk-2GVXNKAE.js +42 -0
  125. package/dist/chunk-2GVXNKAE.js.map +1 -0
  126. package/dist/{chunk-WLDM2TRF.js → chunk-2UFRHW3T.js} +4 -4
  127. package/dist/chunk-2Y5V23PU.js +29 -0
  128. package/dist/chunk-2Y5V23PU.js.map +1 -0
  129. package/dist/chunk-35NYNRRB.js +111 -0
  130. package/dist/chunk-35NYNRRB.js.map +1 -0
  131. package/dist/chunk-3ACMDRSE.js +39 -0
  132. package/dist/chunk-3ACMDRSE.js.map +1 -0
  133. package/dist/chunk-3M6RNCDD.js +26 -0
  134. package/dist/chunk-3M6RNCDD.js.map +1 -0
  135. package/dist/chunk-3VXQYDJN.js +1743 -0
  136. package/dist/chunk-3VXQYDJN.js.map +1 -0
  137. package/dist/chunk-42DF5DF3.js +304 -0
  138. package/dist/chunk-42DF5DF3.js.map +1 -0
  139. package/dist/chunk-44VXKO65.js +106 -0
  140. package/dist/chunk-44VXKO65.js.map +1 -0
  141. package/dist/chunk-4NZ47VXO.js +137 -0
  142. package/dist/chunk-4NZ47VXO.js.map +1 -0
  143. package/dist/chunk-4X3UR372.js +225 -0
  144. package/dist/chunk-4X3UR372.js.map +1 -0
  145. package/dist/chunk-5FEBUCJU.js +25 -0
  146. package/dist/chunk-5FEBUCJU.js.map +1 -0
  147. package/dist/chunk-5HYSKH77.js +315 -0
  148. package/dist/chunk-5HYSKH77.js.map +1 -0
  149. package/dist/chunk-5LBGFQWF.js +310 -0
  150. package/dist/chunk-5LBGFQWF.js.map +1 -0
  151. package/dist/chunk-5MBPIONY.js +29 -0
  152. package/dist/chunk-5MBPIONY.js.map +1 -0
  153. package/dist/chunk-6YMHGIHP.js +346 -0
  154. package/dist/chunk-6YMHGIHP.js.map +1 -0
  155. package/dist/{chunk-VZEDAFAR.js → chunk-6YYSUISH.js} +47 -8
  156. package/dist/chunk-6YYSUISH.js.map +1 -0
  157. package/dist/chunk-7GNU3P7X.js +175 -0
  158. package/dist/chunk-7GNU3P7X.js.map +1 -0
  159. package/dist/chunk-7OHWEF3I.js +98 -0
  160. package/dist/chunk-7OHWEF3I.js.map +1 -0
  161. package/dist/chunk-7TR3QVWM.js +57 -0
  162. package/dist/chunk-7TR3QVWM.js.map +1 -0
  163. package/dist/chunk-AADVCEL4.js +817 -0
  164. package/dist/chunk-AADVCEL4.js.map +1 -0
  165. package/dist/chunk-AG62YO7C.js +96 -0
  166. package/dist/chunk-AG62YO7C.js.map +1 -0
  167. package/dist/chunk-AIRIT4GF.js +75 -0
  168. package/dist/chunk-AIRIT4GF.js.map +1 -0
  169. package/dist/chunk-AP3TP6VG.js +139 -0
  170. package/dist/chunk-AP3TP6VG.js.map +1 -0
  171. package/dist/chunk-APP475IQ.js +474 -0
  172. package/dist/chunk-APP475IQ.js.map +1 -0
  173. package/dist/chunk-AR7PU7BB.js +76 -0
  174. package/dist/chunk-AR7PU7BB.js.map +1 -0
  175. package/dist/chunk-B4S72KSS.js +172 -0
  176. package/dist/chunk-B4S72KSS.js.map +1 -0
  177. package/dist/chunk-BIPIL4QA.js +486 -0
  178. package/dist/chunk-BIPIL4QA.js.map +1 -0
  179. package/dist/chunk-BPUSL5Y2.js +58 -0
  180. package/dist/chunk-BPUSL5Y2.js.map +1 -0
  181. package/dist/chunk-BR32GHYD.js +65 -0
  182. package/dist/chunk-BR32GHYD.js.map +1 -0
  183. package/dist/chunk-CAMX6OHF.js +3182 -0
  184. package/dist/chunk-CAMX6OHF.js.map +1 -0
  185. package/dist/chunk-CE7RTOX6.js +494 -0
  186. package/dist/chunk-CE7RTOX6.js.map +1 -0
  187. package/dist/{chunk-MF7YA62W.js → chunk-CUL3VB4L.js} +10 -5
  188. package/dist/chunk-CUL3VB4L.js.map +1 -0
  189. package/dist/chunk-CVEY353K.js +66 -0
  190. package/dist/chunk-CVEY353K.js.map +1 -0
  191. package/dist/chunk-CWXADUKL.js +1599 -0
  192. package/dist/chunk-CWXADUKL.js.map +1 -0
  193. package/dist/chunk-D46NOXRY.js +6212 -0
  194. package/dist/chunk-D46NOXRY.js.map +1 -0
  195. package/dist/chunk-D5FY4FAK.js +24 -0
  196. package/dist/chunk-D5FY4FAK.js.map +1 -0
  197. package/dist/chunk-DGCUPJZD.js +39 -0
  198. package/dist/chunk-DGCUPJZD.js.map +1 -0
  199. package/dist/chunk-DNCLWSHO.js +41 -0
  200. package/dist/chunk-DNCLWSHO.js.map +1 -0
  201. package/dist/chunk-DUPURL26.js +97 -0
  202. package/dist/chunk-DUPURL26.js.map +1 -0
  203. package/dist/chunk-DXJYQ5P2.js +625 -0
  204. package/dist/chunk-DXJYQ5P2.js.map +1 -0
  205. package/dist/chunk-E2ZOSNF5.js +96 -0
  206. package/dist/chunk-E2ZOSNF5.js.map +1 -0
  207. package/dist/chunk-E3HYHT7C.js +274 -0
  208. package/dist/chunk-E3HYHT7C.js.map +1 -0
  209. package/dist/chunk-EDLZGTGN.js +216 -0
  210. package/dist/chunk-EDLZGTGN.js.map +1 -0
  211. package/dist/{chunk-XHC4LMK4.js → chunk-EIGXX6KI.js} +16 -8
  212. package/dist/chunk-EIGXX6KI.js.map +1 -0
  213. package/dist/chunk-EPDE7ZRU.js +174 -0
  214. package/dist/chunk-EPDE7ZRU.js.map +1 -0
  215. package/dist/chunk-ERSX3MKH.js +34 -0
  216. package/dist/chunk-ERSX3MKH.js.map +1 -0
  217. package/dist/chunk-F7HRLPR5.js +67 -0
  218. package/dist/chunk-F7HRLPR5.js.map +1 -0
  219. package/dist/chunk-FEG6MN4H.js +84 -0
  220. package/dist/chunk-FEG6MN4H.js.map +1 -0
  221. package/dist/chunk-FKOECEVC.js +126 -0
  222. package/dist/chunk-FKOECEVC.js.map +1 -0
  223. package/dist/chunk-FMGW2NZI.js +106 -0
  224. package/dist/chunk-FMGW2NZI.js.map +1 -0
  225. package/dist/chunk-FPZKKNDK.js +98 -0
  226. package/dist/chunk-FPZKKNDK.js.map +1 -0
  227. package/dist/chunk-G3ZDLPNZ.js +206 -0
  228. package/dist/chunk-G3ZDLPNZ.js.map +1 -0
  229. package/dist/chunk-GIWHHCD6.js +145 -0
  230. package/dist/chunk-GIWHHCD6.js.map +1 -0
  231. package/dist/chunk-GOJXKIFQ.js +1605 -0
  232. package/dist/chunk-GOJXKIFQ.js.map +1 -0
  233. package/dist/chunk-GRQ2AXDX.js +9 -0
  234. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  235. package/dist/chunk-GXDLWBOY.js +73 -0
  236. package/dist/chunk-GXDLWBOY.js.map +1 -0
  237. package/dist/chunk-HAE4WWFQ.js +455 -0
  238. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  239. package/dist/chunk-HEEAC2YG.js +541 -0
  240. package/dist/chunk-HEEAC2YG.js.map +1 -0
  241. package/dist/chunk-I2DNBEV6.js +4227 -0
  242. package/dist/chunk-I2DNBEV6.js.map +1 -0
  243. package/dist/chunk-I4FTS5EE.js +455 -0
  244. package/dist/chunk-I4FTS5EE.js.map +1 -0
  245. package/dist/chunk-IA4KJU7O.js +3151 -0
  246. package/dist/chunk-IA4KJU7O.js.map +1 -0
  247. package/dist/chunk-IELPT4K2.js +74 -0
  248. package/dist/chunk-IELPT4K2.js.map +1 -0
  249. package/dist/chunk-IJMWEO4P.js +57 -0
  250. package/dist/chunk-IJMWEO4P.js.map +1 -0
  251. package/dist/chunk-IVIJJXXT.js +62 -0
  252. package/dist/chunk-IVIJJXXT.js.map +1 -0
  253. package/dist/chunk-JAU6OAFK.js +455 -0
  254. package/dist/chunk-JAU6OAFK.js.map +1 -0
  255. package/dist/chunk-JD3W3ON7.js +188 -0
  256. package/dist/chunk-JD3W3ON7.js.map +1 -0
  257. package/dist/chunk-JLWBK3VC.js +5187 -0
  258. package/dist/chunk-JLWBK3VC.js.map +1 -0
  259. package/dist/chunk-JPK34QPS.js +134 -0
  260. package/dist/chunk-JPK34QPS.js.map +1 -0
  261. package/dist/chunk-JXJD6RC5.js +169 -0
  262. package/dist/chunk-JXJD6RC5.js.map +1 -0
  263. package/dist/chunk-JXMZEOHV.js +333 -0
  264. package/dist/chunk-JXMZEOHV.js.map +1 -0
  265. package/dist/chunk-K6TDB2KV.js +1442 -0
  266. package/dist/chunk-K6TDB2KV.js.map +1 -0
  267. package/dist/chunk-KIGGMKAE.js +66 -0
  268. package/dist/chunk-KIGGMKAE.js.map +1 -0
  269. package/dist/chunk-KKJ4KJCW.js +29 -0
  270. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  271. package/dist/chunk-KONA5PSR.js +55 -0
  272. package/dist/chunk-KONA5PSR.js.map +1 -0
  273. package/dist/chunk-KVHRW7KO.js +60 -0
  274. package/dist/chunk-KVHRW7KO.js.map +1 -0
  275. package/dist/chunk-LA6PPSNA.js +65 -0
  276. package/dist/chunk-LA6PPSNA.js.map +1 -0
  277. package/dist/chunk-LKPJADL2.js +74 -0
  278. package/dist/chunk-LKPJADL2.js.map +1 -0
  279. package/dist/chunk-LM7N7IQR.js +297 -0
  280. package/dist/chunk-LM7N7IQR.js.map +1 -0
  281. package/dist/chunk-LWAEHLKV.js +74 -0
  282. package/dist/chunk-LWAEHLKV.js.map +1 -0
  283. package/dist/chunk-M6UNISGO.js +66 -0
  284. package/dist/chunk-M6UNISGO.js.map +1 -0
  285. package/dist/chunk-MFSIACRB.js +207 -0
  286. package/dist/chunk-MFSIACRB.js.map +1 -0
  287. package/dist/chunk-MIJAGBEP.js +23992 -0
  288. package/dist/chunk-MIJAGBEP.js.map +1 -0
  289. package/dist/chunk-MYTDK3AL.js +2102 -0
  290. package/dist/chunk-MYTDK3AL.js.map +1 -0
  291. package/dist/chunk-MYURCD23.js +6667 -0
  292. package/dist/chunk-MYURCD23.js.map +1 -0
  293. package/dist/chunk-MZQ5DX6S.js +125 -0
  294. package/dist/chunk-MZQ5DX6S.js.map +1 -0
  295. package/dist/chunk-NFSLRRIE.js +77 -0
  296. package/dist/chunk-NFSLRRIE.js.map +1 -0
  297. package/dist/chunk-NMDP7FZP.js +479 -0
  298. package/dist/chunk-NMDP7FZP.js.map +1 -0
  299. package/dist/chunk-NMGELUIA.js +183 -0
  300. package/dist/chunk-NMGELUIA.js.map +1 -0
  301. package/dist/chunk-NOK7MSVJ.js +533 -0
  302. package/dist/chunk-NOK7MSVJ.js.map +1 -0
  303. package/dist/chunk-O2EVJALZ.js +133 -0
  304. package/dist/chunk-O2EVJALZ.js.map +1 -0
  305. package/dist/chunk-OIL6PU5W.js +35 -0
  306. package/dist/chunk-OIL6PU5W.js.map +1 -0
  307. package/dist/chunk-P4NSJS54.js +20 -0
  308. package/dist/chunk-P4NSJS54.js.map +1 -0
  309. package/dist/chunk-P5T7OZKV.js +26 -0
  310. package/dist/chunk-P5T7OZKV.js.map +1 -0
  311. package/dist/chunk-PFBQERWX.js +10 -0
  312. package/dist/chunk-PFBQERWX.js.map +1 -0
  313. package/dist/chunk-PSWVSLJU.js +56 -0
  314. package/dist/chunk-PSWVSLJU.js.map +1 -0
  315. package/dist/chunk-PY2NJ6XZ.js +191 -0
  316. package/dist/chunk-PY2NJ6XZ.js.map +1 -0
  317. package/dist/chunk-PZ4OM2LK.js +45 -0
  318. package/dist/chunk-PZ4OM2LK.js.map +1 -0
  319. package/dist/chunk-Q2EKN7NI.js +1079 -0
  320. package/dist/chunk-Q2EKN7NI.js.map +1 -0
  321. package/dist/chunk-Q6ULQMWG.js +41 -0
  322. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  323. package/dist/chunk-QMLGJ5OW.js +2891 -0
  324. package/dist/chunk-QMLGJ5OW.js.map +1 -0
  325. package/dist/chunk-R7QV5N2S.js +846 -0
  326. package/dist/chunk-R7QV5N2S.js.map +1 -0
  327. package/dist/chunk-RCS4JKUD.js +23 -0
  328. package/dist/chunk-RCS4JKUD.js.map +1 -0
  329. package/dist/chunk-RR3KT2E7.js +665 -0
  330. package/dist/chunk-RR3KT2E7.js.map +1 -0
  331. package/dist/chunk-SEPPFM5S.js +228 -0
  332. package/dist/chunk-SEPPFM5S.js.map +1 -0
  333. package/dist/chunk-SQ7DRYCC.js +150 -0
  334. package/dist/chunk-SQ7DRYCC.js.map +1 -0
  335. package/dist/chunk-SYULM665.js +610 -0
  336. package/dist/chunk-SYULM665.js.map +1 -0
  337. package/dist/chunk-TKT3OHZ6.js +170 -0
  338. package/dist/chunk-TKT3OHZ6.js.map +1 -0
  339. package/dist/chunk-TNOSX3PJ.js +136 -0
  340. package/dist/chunk-TNOSX3PJ.js.map +1 -0
  341. package/dist/chunk-TTVKI54A.js +160 -0
  342. package/dist/chunk-TTVKI54A.js.map +1 -0
  343. package/dist/chunk-U55UZRIB.js +592 -0
  344. package/dist/chunk-U55UZRIB.js.map +1 -0
  345. package/dist/chunk-UI6BKYQD.js +225 -0
  346. package/dist/chunk-UI6BKYQD.js.map +1 -0
  347. package/dist/chunk-UKE4IZSA.js +337 -0
  348. package/dist/chunk-UKE4IZSA.js.map +1 -0
  349. package/dist/chunk-UKLDW4UW.js +46 -0
  350. package/dist/chunk-UKLDW4UW.js.map +1 -0
  351. package/dist/chunk-V6XXXEXZ.js +76 -0
  352. package/dist/chunk-V6XXXEXZ.js.map +1 -0
  353. package/dist/chunk-VCZSZCXY.js +197 -0
  354. package/dist/chunk-VCZSZCXY.js.map +1 -0
  355. package/dist/chunk-VJQWUF66.js +92 -0
  356. package/dist/chunk-VJQWUF66.js.map +1 -0
  357. package/dist/chunk-VSU5R34H.js +76 -0
  358. package/dist/chunk-VSU5R34H.js.map +1 -0
  359. package/dist/chunk-W4SA4CMR.js +296 -0
  360. package/dist/chunk-W4SA4CMR.js.map +1 -0
  361. package/dist/chunk-WFUMNDCE.js +111 -0
  362. package/dist/chunk-WFUMNDCE.js.map +1 -0
  363. package/dist/chunk-WGCGKU3M.js +51 -0
  364. package/dist/chunk-WGCGKU3M.js.map +1 -0
  365. package/dist/chunk-WHWNXLTD.js +166 -0
  366. package/dist/chunk-WHWNXLTD.js.map +1 -0
  367. package/dist/chunk-WN42X2OE.js +509 -0
  368. package/dist/chunk-WN42X2OE.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-XIY7P54H.js +84 -0
  372. package/dist/chunk-XIY7P54H.js.map +1 -0
  373. package/dist/chunk-XPLTWUMN.js +103 -0
  374. package/dist/chunk-XPLTWUMN.js.map +1 -0
  375. package/dist/chunk-Y6T5ZKBK.js +19 -0
  376. package/dist/chunk-Y6T5ZKBK.js.map +1 -0
  377. package/dist/chunk-YGGRQXDP.js +382 -0
  378. package/dist/chunk-YGGRQXDP.js.map +1 -0
  379. package/dist/chunk-YMBB4JBD.js +1830 -0
  380. package/dist/chunk-YMBB4JBD.js.map +1 -0
  381. package/dist/chunk-YNWM426O.js +159 -0
  382. package/dist/chunk-YNWM426O.js.map +1 -0
  383. package/dist/chunk-YQSBHWOI.js +41 -0
  384. package/dist/chunk-YTF3IVMF.js +149 -0
  385. package/dist/chunk-YTF3IVMF.js.map +1 -0
  386. package/dist/chunk-Z3ENMCFE.js +94 -0
  387. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  388. package/dist/chunk-Z7MWSXLG.js +94 -0
  389. package/dist/chunk-Z7MWSXLG.js.map +1 -0
  390. package/dist/chunk-ZIXHS6AM.js +42 -0
  391. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  392. package/dist/chunk-ZJ7TQUCU.js +4410 -0
  393. package/dist/chunk-ZJ7TQUCU.js.map +1 -0
  394. package/dist/chunk-ZNQRDLSS.js +52 -0
  395. package/dist/chunk-ZNQRDLSS.js.map +1 -0
  396. package/dist/chunk-ZPGGSXU3.js +275 -0
  397. package/dist/chunk-ZPGGSXU3.js.map +1 -0
  398. package/dist/claim-NXYQZEMC.js +197 -0
  399. package/dist/claim-NXYQZEMC.js.map +1 -0
  400. package/dist/cli.js +104 -70061
  401. package/dist/cli.js.map +1 -1
  402. package/dist/client-EURRWXPW.js +19 -0
  403. package/dist/code-FKQW7V7N.js +76 -0
  404. package/dist/code-FKQW7V7N.js.map +1 -0
  405. package/dist/companies-5ZH47E4H.js +195 -0
  406. package/dist/companies-5ZH47E4H.js.map +1 -0
  407. package/dist/complete-62OQPRHW.js +81 -0
  408. package/dist/complete-62OQPRHW.js.map +1 -0
  409. package/dist/config-OZOHIAOJ.js +88 -0
  410. package/dist/config-OZOHIAOJ.js.map +1 -0
  411. package/dist/connect-6DQFYKGN.js +42 -0
  412. package/dist/content-PCGSX2QU.js +85 -0
  413. package/dist/content-PCGSX2QU.js.map +1 -0
  414. package/dist/conversation-NS7JHTPK.js +93 -0
  415. package/dist/conversation-NS7JHTPK.js.map +1 -0
  416. package/dist/conversion-report-7QSWB2FY.js +125 -0
  417. package/dist/conversion-report-7QSWB2FY.js.map +1 -0
  418. package/dist/conversion-upload-command-XESIAQPU.js +438 -0
  419. package/dist/conversion-upload-command-XESIAQPU.js.map +1 -0
  420. package/dist/conversion-writes-BGOVLBS5.js +120 -0
  421. package/dist/conversion-writes-BGOVLBS5.js.map +1 -0
  422. package/dist/conversions-46MI57VC.js +135 -0
  423. package/dist/conversions-46MI57VC.js.map +1 -0
  424. package/dist/conversions-IYIWW4O7.js +76 -0
  425. package/dist/conversions-IYIWW4O7.js.map +1 -0
  426. package/dist/countries-5OBUVLLD.js +82 -0
  427. package/dist/countries-5OBUVLLD.js.map +1 -0
  428. package/dist/create-BEDPXUB7.js +236 -0
  429. package/dist/create-BEDPXUB7.js.map +1 -0
  430. package/dist/create-LLTMBBGV.js +207 -0
  431. package/dist/create-LLTMBBGV.js.map +1 -0
  432. package/dist/create-VNJ2VH3A.js +59 -0
  433. package/dist/create-VNJ2VH3A.js.map +1 -0
  434. package/dist/create-ZYKG2XOP.js +138 -0
  435. package/dist/create-ZYKG2XOP.js.map +1 -0
  436. package/dist/creatives-2LL66X4E.js +51 -0
  437. package/dist/creatives-2LL66X4E.js.map +1 -0
  438. package/dist/creatives-3MEMSUKJ.js +182 -0
  439. package/dist/creatives-3MEMSUKJ.js.map +1 -0
  440. package/dist/creatives-XI2DGQUZ.js +87 -0
  441. package/dist/creatives-XI2DGQUZ.js.map +1 -0
  442. package/dist/credentials-63PRTM3K.js +287 -0
  443. package/dist/credentials-63PRTM3K.js.map +1 -0
  444. package/dist/critique-IQI7CCTT.js +213 -0
  445. package/dist/critique-IQI7CCTT.js.map +1 -0
  446. package/dist/critique-UV7FPG45.js +1449 -0
  447. package/dist/critique-UV7FPG45.js.map +1 -0
  448. package/dist/crm-OERYUOBS.js +224 -0
  449. package/dist/crm-OERYUOBS.js.map +1 -0
  450. package/dist/crm-VNO3QTQG.js +318 -0
  451. package/dist/crm-VNO3QTQG.js.map +1 -0
  452. package/dist/crop-B52KIQ4O.js +113 -0
  453. package/dist/crop-B52KIQ4O.js.map +1 -0
  454. package/dist/currency-GGWF5DMU.js +88 -0
  455. package/dist/currency-GGWF5DMU.js.map +1 -0
  456. package/dist/custom-conversions-7WDBTC4X.js +125 -0
  457. package/dist/custom-conversions-7WDBTC4X.js.map +1 -0
  458. package/dist/customers-FOPXEGCB.js +56 -0
  459. package/dist/decide-PK7WNSQ2.js +199 -0
  460. package/dist/decide-PK7WNSQ2.js.map +1 -0
  461. package/dist/delete-56LKNEGA.js +71 -0
  462. package/dist/delete-56LKNEGA.js.map +1 -0
  463. package/dist/delete-EZ7HHOOD.js +69 -0
  464. package/dist/delete-EZ7HHOOD.js.map +1 -0
  465. package/dist/delete-JSYM7QKN.js +54 -0
  466. package/dist/delete-JSYM7QKN.js.map +1 -0
  467. package/dist/delete-NOUWBNZM.js +66 -0
  468. package/dist/delete-NOUWBNZM.js.map +1 -0
  469. package/dist/delete-T33AWV63.js +63 -0
  470. package/dist/delete-T33AWV63.js.map +1 -0
  471. package/dist/delete-YSYVFL6W.js +71 -0
  472. package/dist/delete-YSYVFL6W.js.map +1 -0
  473. package/dist/demographics-LQGFUS4F.js +138 -0
  474. package/dist/demographics-LQGFUS4F.js.map +1 -0
  475. package/dist/describe-AAVYIFE3.js +97 -0
  476. package/dist/describe-AAVYIFE3.js.map +1 -0
  477. package/dist/describe-UQFLWVFR.js +97 -0
  478. package/dist/describe-UQFLWVFR.js.map +1 -0
  479. package/dist/dimensions-QDXBG2XC.js +101 -0
  480. package/dist/dimensions-QDXBG2XC.js.map +1 -0
  481. package/dist/discard-V4LQ7ZGA.js +66 -0
  482. package/dist/discard-V4LQ7ZGA.js.map +1 -0
  483. package/dist/discover-6TEBPVNC.js +93 -0
  484. package/dist/discover-6TEBPVNC.js.map +1 -0
  485. package/dist/discover-SBZPB7T2.js +172 -0
  486. package/dist/discover-SBZPB7T2.js.map +1 -0
  487. package/dist/domain-65J2DEDB.js +98 -0
  488. package/dist/domain-65J2DEDB.js.map +1 -0
  489. package/dist/download-LV3GPOWV.js +299 -0
  490. package/dist/download-LV3GPOWV.js.map +1 -0
  491. package/dist/draft-DDFFTZ43.js +233 -0
  492. package/dist/draft-DDFFTZ43.js.map +1 -0
  493. package/dist/draft-FIKJXNIQ.js +281 -0
  494. package/dist/draft-FIKJXNIQ.js.map +1 -0
  495. package/dist/draft-GYGWTMBU.js +307 -0
  496. package/dist/draft-GYGWTMBU.js.map +1 -0
  497. package/dist/draft-KNXVZAZV.js +217 -0
  498. package/dist/draft-KNXVZAZV.js.map +1 -0
  499. package/dist/draft-N4LFPKTA.js +100 -0
  500. package/dist/draft-N4LFPKTA.js.map +1 -0
  501. package/dist/draft-NG2DPL2X.js +306 -0
  502. package/dist/draft-NG2DPL2X.js.map +1 -0
  503. package/dist/draft-QILZ7M7N.js +328 -0
  504. package/dist/draft-QILZ7M7N.js.map +1 -0
  505. package/dist/draft-XPO5RWST.js +103 -0
  506. package/dist/draft-XPO5RWST.js.map +1 -0
  507. package/dist/engine/index.d.ts +213 -127
  508. package/dist/engine/index.js +18 -4
  509. package/dist/{env-4P5HOGNA.js → env-TQ2XS2KY.js} +12 -2
  510. package/dist/env-TQ2XS2KY.js.map +1 -0
  511. package/dist/experiment-FQNKMORZ.js +1397 -0
  512. package/dist/experiment-FQNKMORZ.js.map +1 -0
  513. package/dist/export-4IZQZAPF.js +168 -0
  514. package/dist/export-4IZQZAPF.js.map +1 -0
  515. package/dist/extract-DZMGVQ7D.js +113 -0
  516. package/dist/extract-DZMGVQ7D.js.map +1 -0
  517. package/dist/facets-FAAOFHBF.js +114 -0
  518. package/dist/facets-FAAOFHBF.js.map +1 -0
  519. package/dist/favorites-DD2LNSTG.js +178 -0
  520. package/dist/favorites-DD2LNSTG.js.map +1 -0
  521. package/dist/feed-TUVFNX2U.js +177 -0
  522. package/dist/feed-TUVFNX2U.js.map +1 -0
  523. package/dist/feedback-NWOOZOFW.js +66 -0
  524. package/dist/feedback-NWOOZOFW.js.map +1 -0
  525. package/dist/feedback-record-CFPUKLMY.js +175 -0
  526. package/dist/feedback-record-CFPUKLMY.js.map +1 -0
  527. package/dist/fetch-LEY77E7V.js +176 -0
  528. package/dist/fetch-LEY77E7V.js.map +1 -0
  529. package/dist/fetch-O6UHNXWB.js +139 -0
  530. package/dist/fetch-O6UHNXWB.js.map +1 -0
  531. package/dist/find-4XKIBF4D.js +134 -0
  532. package/dist/find-4XKIBF4D.js.map +1 -0
  533. package/dist/fit-ODVVXV2Q.js +45 -0
  534. package/dist/fit-ODVVXV2Q.js.map +1 -0
  535. package/dist/flows-QKPC63AF.js +247 -0
  536. package/dist/flows-QKPC63AF.js.map +1 -0
  537. package/dist/follow-RCOXTZGY.js +94 -0
  538. package/dist/follow-RCOXTZGY.js.map +1 -0
  539. package/dist/follow-competitors-SQ5XBFTK.js +112 -0
  540. package/dist/follow-competitors-SQ5XBFTK.js.map +1 -0
  541. package/dist/following-VDU3BHC4.js +113 -0
  542. package/dist/following-VDU3BHC4.js.map +1 -0
  543. package/dist/fonts-WM2MJDVJ.js +34 -0
  544. package/dist/fonts-WM2MJDVJ.js.map +1 -0
  545. package/dist/forecast-2GJKBNBM.js +168 -0
  546. package/dist/forecast-2GJKBNBM.js.map +1 -0
  547. package/dist/forecast-7K3TAHDL.js +104 -0
  548. package/dist/forecast-7K3TAHDL.js.map +1 -0
  549. package/dist/funding-HTFVZLLG.js +85 -0
  550. package/dist/funding-HTFVZLLG.js.map +1 -0
  551. package/dist/funnel-CSPK5SPZ.js +394 -0
  552. package/dist/funnel-CSPK5SPZ.js.map +1 -0
  553. package/dist/ga4-2RC4EH7V.js +55 -0
  554. package/dist/ga4-2RC4EH7V.js.map +1 -0
  555. package/dist/generate-TPDOBCKQ.js +262 -0
  556. package/dist/generate-TPDOBCKQ.js.map +1 -0
  557. package/dist/get-4YZ4PI3B.js +56 -0
  558. package/dist/get-4YZ4PI3B.js.map +1 -0
  559. package/dist/get-FH2LIEYL.js +63 -0
  560. package/dist/get-FH2LIEYL.js.map +1 -0
  561. package/dist/get-GZLCDXXW.js +61 -0
  562. package/dist/get-GZLCDXXW.js.map +1 -0
  563. package/dist/get-HFU6ZJPX.js +78 -0
  564. package/dist/get-HFU6ZJPX.js.map +1 -0
  565. package/dist/get-TSPQYEKC.js +59 -0
  566. package/dist/get-TSPQYEKC.js.map +1 -0
  567. package/dist/get-TY3RXYNZ.js +63 -0
  568. package/dist/get-TY3RXYNZ.js.map +1 -0
  569. package/dist/get-VPW33XTN.js +92 -0
  570. package/dist/get-VPW33XTN.js.map +1 -0
  571. package/dist/gif-JFEYPFFI.js +94 -0
  572. package/dist/gif-JFEYPFFI.js.map +1 -0
  573. package/dist/google-R6RD4L6Z.js +136 -0
  574. package/dist/google-R6RD4L6Z.js.map +1 -0
  575. package/dist/google-VPQNRVIB.js +3190 -0
  576. package/dist/google-VPQNRVIB.js.map +1 -0
  577. package/dist/google-ads-WWM5KIRS.js +195 -0
  578. package/dist/google-ads-WWM5KIRS.js.map +1 -0
  579. package/dist/group-7AV6UL26.js +43 -0
  580. package/dist/group-7AV6UL26.js.map +1 -0
  581. package/dist/group-BVQZEZIC.js +43 -0
  582. package/dist/group-BVQZEZIC.js.map +1 -0
  583. package/dist/gsc-SQ42WAQE.js +30 -0
  584. package/dist/gsc-SQ42WAQE.js.map +1 -0
  585. package/dist/history-BNNHFURR.js +67 -0
  586. package/dist/history-BNNHFURR.js.map +1 -0
  587. package/dist/history-KBK5TP65.js +133 -0
  588. package/dist/history-KBK5TP65.js.map +1 -0
  589. package/dist/hubspot-GAAWWVLL.js +779 -0
  590. package/dist/hubspot-GAAWWVLL.js.map +1 -0
  591. package/dist/icon-OYTTSNSL.js +137 -0
  592. package/dist/icon-OYTTSNSL.js.map +1 -0
  593. package/dist/ideas-CELMD3BL.js +32 -0
  594. package/dist/ideas-CELMD3BL.js.map +1 -0
  595. package/dist/images-QHV4ECAP.js +90 -0
  596. package/dist/images-QHV4ECAP.js.map +1 -0
  597. package/dist/improve-W6GZNT2A.js +86 -0
  598. package/dist/improve-W6GZNT2A.js.map +1 -0
  599. package/dist/ingest-SH35YX6X.js +23 -0
  600. package/dist/ingest-SH35YX6X.js.map +1 -0
  601. package/dist/ingest-UWCGJZXV.js +107 -0
  602. package/dist/ingest-UWCGJZXV.js.map +1 -0
  603. package/dist/insights-IW7LGAWU.js +423 -0
  604. package/dist/insights-IW7LGAWU.js.map +1 -0
  605. package/dist/insights-QH54F56A.js +122 -0
  606. package/dist/insights-QH54F56A.js.map +1 -0
  607. package/dist/inspect-6Z6HEMBI.js +189 -0
  608. package/dist/inspect-6Z6HEMBI.js.map +1 -0
  609. package/dist/inspiration-RDQ3Y3N3.js +53 -0
  610. package/dist/inspiration-RDQ3Y3N3.js.map +1 -0
  611. package/dist/intent-5GSSCFZ2.js +95 -0
  612. package/dist/intent-5GSSCFZ2.js.map +1 -0
  613. package/dist/job-URVXJP75.js +202 -0
  614. package/dist/job-URVXJP75.js.map +1 -0
  615. package/dist/job-create-S4SECUVF.js +109 -0
  616. package/dist/job-create-S4SECUVF.js.map +1 -0
  617. package/dist/job-status-253SUCTJ.js +74 -0
  618. package/dist/job-status-253SUCTJ.js.map +1 -0
  619. package/dist/keep-GPSYDIGJ.js +78 -0
  620. package/dist/keep-GPSYDIGJ.js.map +1 -0
  621. package/dist/keyword-gap-NTFDX43B.js +130 -0
  622. package/dist/keyword-gap-NTFDX43B.js.map +1 -0
  623. package/dist/keyword-metrics-NKZRCF4L.js +197 -0
  624. package/dist/keyword-metrics-NKZRCF4L.js.map +1 -0
  625. package/dist/keywords-for-site-NQUPJNUR.js +128 -0
  626. package/dist/keywords-for-site-NQUPJNUR.js.map +1 -0
  627. package/dist/landing-AHNZSZHY.js +28 -0
  628. package/dist/landing-AHNZSZHY.js.map +1 -0
  629. package/dist/landings-NEF4PQL2.js +151 -0
  630. package/dist/landings-NEF4PQL2.js.map +1 -0
  631. package/dist/languages-3RDPPPTE.js +55 -0
  632. package/dist/languages-3RDPPPTE.js.map +1 -0
  633. package/dist/languages-CQX3YOIT.js +40 -0
  634. package/dist/languages-CQX3YOIT.js.map +1 -0
  635. package/dist/launches-GBHLJH5S.js +19 -0
  636. package/dist/launches-GBHLJH5S.js.map +1 -0
  637. package/dist/layerize-Q56C6LFG.js +190 -0
  638. package/dist/layerize-Q56C6LFG.js.map +1 -0
  639. package/dist/leads-5MUVPXA2.js +90 -0
  640. package/dist/leads-5MUVPXA2.js.map +1 -0
  641. package/dist/leads-JHUM6FYR.js +293 -0
  642. package/dist/leads-JHUM6FYR.js.map +1 -0
  643. package/dist/learn-EMV7RWTB.js +203 -0
  644. package/dist/learn-EMV7RWTB.js.map +1 -0
  645. package/dist/library-6VUFHTEK.js +109 -0
  646. package/dist/library-6VUFHTEK.js.map +1 -0
  647. package/dist/lighthouse-57U2GMPV.js +75 -0
  648. package/dist/lighthouse-57U2GMPV.js.map +1 -0
  649. package/dist/line-item-writes-GMIZYHLB.js +208 -0
  650. package/dist/line-item-writes-GMIZYHLB.js.map +1 -0
  651. package/dist/line-items-B5HAC47U.js +103 -0
  652. package/dist/line-items-B5HAC47U.js.map +1 -0
  653. package/dist/link-B6ZJFGFE.js +64 -0
  654. package/dist/link-B6ZJFGFE.js.map +1 -0
  655. package/dist/linkedin-FJ3OUYT2.js +1008 -0
  656. package/dist/linkedin-FJ3OUYT2.js.map +1 -0
  657. package/dist/list-2MBSU4ZX.js +63 -0
  658. package/dist/list-2MBSU4ZX.js.map +1 -0
  659. package/dist/list-EFUPHLG3.js +303 -0
  660. package/dist/list-EFUPHLG3.js.map +1 -0
  661. package/dist/list-G57ZO4PG.js +50 -0
  662. package/dist/list-G57ZO4PG.js.map +1 -0
  663. package/dist/list-JCSWZWDI.js +57 -0
  664. package/dist/list-JCSWZWDI.js.map +1 -0
  665. package/dist/list-QOSPRCH4.js +151 -0
  666. package/dist/list-QOSPRCH4.js.map +1 -0
  667. package/dist/list-RINCJOAC.js +76 -0
  668. package/dist/list-RINCJOAC.js.map +1 -0
  669. package/dist/list-SRNXHS6L.js +51 -0
  670. package/dist/list-SRNXHS6L.js.map +1 -0
  671. package/dist/list-YJSO4M5Q.js +65 -0
  672. package/dist/list-YJSO4M5Q.js.map +1 -0
  673. package/dist/locations-HW2Y5OJO.js +67 -0
  674. package/dist/locations-HW2Y5OJO.js.map +1 -0
  675. package/dist/locations-XOHI3VWI.js +40 -0
  676. package/dist/locations-XOHI3VWI.js.map +1 -0
  677. package/dist/log-SZDYUMM3.js +92 -0
  678. package/dist/log-SZDYUMM3.js.map +1 -0
  679. package/dist/logo-KXTGIYBI.js +18 -0
  680. package/dist/logo-KXTGIYBI.js.map +1 -0
  681. package/dist/lookup-X6O5UNJH.js +22 -0
  682. package/dist/lookup-X6O5UNJH.js.map +1 -0
  683. package/dist/make-SGCBJTRR.js +633 -0
  684. package/dist/make-SGCBJTRR.js.map +1 -0
  685. package/dist/map-ZK46VVL3.js +404 -0
  686. package/dist/map-ZK46VVL3.js.map +1 -0
  687. package/dist/mcp-NCM5TQUG.js +463 -0
  688. package/dist/mcp-NCM5TQUG.js.map +1 -0
  689. package/dist/media-MI4EE7L4.js +89 -0
  690. package/dist/media-MI4EE7L4.js.map +1 -0
  691. package/dist/media-QUTQOBA7.js +15 -0
  692. package/dist/media-QUTQOBA7.js.map +1 -0
  693. package/dist/media-sources-MS3RMQ6A.js +32 -0
  694. package/dist/media-sources-MS3RMQ6A.js.map +1 -0
  695. package/dist/members-IGHLTQKW.js +44 -0
  696. package/dist/members-IGHLTQKW.js.map +1 -0
  697. package/dist/meta-E3JOUOSS.js +69 -0
  698. package/dist/meta-E3JOUOSS.js.map +1 -0
  699. package/dist/metrics-HQ7XJAYQ.js +152 -0
  700. package/dist/metrics-HQ7XJAYQ.js.map +1 -0
  701. package/dist/models-PGX3FBHU.js +155 -0
  702. package/dist/models-PGX3FBHU.js.map +1 -0
  703. package/dist/normalize-FPJ6GSOY.js +806 -0
  704. package/dist/normalize-FPJ6GSOY.js.map +1 -0
  705. package/dist/normalize-LHD5LVFK.js +141 -0
  706. package/dist/normalize-LHD5LVFK.js.map +1 -0
  707. package/dist/options-CPHN3RMO.js +121 -0
  708. package/dist/options-CPHN3RMO.js.map +1 -0
  709. package/dist/output-GQFJ2T5B.js +24 -0
  710. package/dist/output-GQFJ2T5B.js.map +1 -0
  711. package/dist/page-VTTSBC6Y.js +105 -0
  712. package/dist/page-VTTSBC6Y.js.map +1 -0
  713. package/dist/pages-PMZVNVQM.js +66 -0
  714. package/dist/pages-PMZVNVQM.js.map +1 -0
  715. package/dist/performance-ECIJJEFV.js +24 -0
  716. package/dist/performance-ECIJJEFV.js.map +1 -0
  717. package/dist/pinterest-UDNGOWDM.js +96 -0
  718. package/dist/pinterest-UDNGOWDM.js.map +1 -0
  719. package/dist/pixels-OYZDGCH3.js +108 -0
  720. package/dist/pixels-OYZDGCH3.js.map +1 -0
  721. package/dist/pixels-XKGNTCFX.js +60 -0
  722. package/dist/pixels-XKGNTCFX.js.map +1 -0
  723. package/dist/plan-DZS3TVIJ.js +207 -0
  724. package/dist/plan-DZS3TVIJ.js.map +1 -0
  725. package/dist/preview-DR6MXOGI.js +169 -0
  726. package/dist/preview-DR6MXOGI.js.map +1 -0
  727. package/dist/profile-VOVZG44G.js +159 -0
  728. package/dist/profile-VOVZG44G.js.map +1 -0
  729. package/dist/promoted-tweet-writes-UJJI5SQL.js +180 -0
  730. package/dist/promoted-tweet-writes-UJJI5SQL.js.map +1 -0
  731. package/dist/promoted-tweets-O5RCETPX.js +119 -0
  732. package/dist/promoted-tweets-O5RCETPX.js.map +1 -0
  733. package/dist/properties-MKVF7MUK.js +101 -0
  734. package/dist/properties-MKVF7MUK.js.map +1 -0
  735. package/dist/publish-RRYU3NNX.js +322 -0
  736. package/dist/publish-RRYU3NNX.js.map +1 -0
  737. package/dist/query-CNWQ6STR.js +61 -0
  738. package/dist/query-CNWQ6STR.js.map +1 -0
  739. package/dist/query-DBSBZ73C.js +247 -0
  740. package/dist/query-DBSBZ73C.js.map +1 -0
  741. package/dist/query-QK4U4TEL.js +236 -0
  742. package/dist/query-QK4U4TEL.js.map +1 -0
  743. package/dist/questionnaire-OVJWNUVV.js +93 -0
  744. package/dist/questionnaire-OVJWNUVV.js.map +1 -0
  745. package/dist/read-L2QIVJTL.js +141 -0
  746. package/dist/read-L2QIVJTL.js.map +1 -0
  747. package/dist/reddit-K6CKJZRF.js +26 -0
  748. package/dist/reddit-K6CKJZRF.js.map +1 -0
  749. package/dist/refresh-IF4P57JJ.js +94 -0
  750. package/dist/refresh-IF4P57JJ.js.map +1 -0
  751. package/dist/release-H4EL3J6R.js +60 -0
  752. package/dist/release-H4EL3J6R.js.map +1 -0
  753. package/dist/relevant-pages-CRI2NLWG.js +99 -0
  754. package/dist/relevant-pages-CRI2NLWG.js.map +1 -0
  755. package/dist/remove-DKSHQRNS.js +50 -0
  756. package/dist/remove-DKSHQRNS.js.map +1 -0
  757. package/dist/remove-JKSCGKQG.js +48 -0
  758. package/dist/remove-JKSCGKQG.js.map +1 -0
  759. package/dist/reopen-B26V2GEJ.js +63 -0
  760. package/dist/reopen-B26V2GEJ.js.map +1 -0
  761. package/dist/rerun-6WKE4MPY.js +84 -0
  762. package/dist/rerun-6WKE4MPY.js.map +1 -0
  763. package/dist/research-O3IVF3MM.js +62 -0
  764. package/dist/research-O3IVF3MM.js.map +1 -0
  765. package/dist/research-SC7S6IPV.js +262 -0
  766. package/dist/research-SC7S6IPV.js.map +1 -0
  767. package/dist/reset-7HMOB2KE.js +54 -0
  768. package/dist/reset-7HMOB2KE.js.map +1 -0
  769. package/dist/reset-THPEXZDK.js +54 -0
  770. package/dist/reset-THPEXZDK.js.map +1 -0
  771. package/dist/resolve-HX5R52A3.js +121 -0
  772. package/dist/resolve-HX5R52A3.js.map +1 -0
  773. package/dist/retry-4ENRUJOJ.js +62 -0
  774. package/dist/retry-4ENRUJOJ.js.map +1 -0
  775. package/dist/retry-ELIMI7U5.js +60 -0
  776. package/dist/retry-ELIMI7U5.js.map +1 -0
  777. package/dist/retry-failed-2OYMCB55.js +45 -0
  778. package/dist/retry-failed-2OYMCB55.js.map +1 -0
  779. package/dist/run-CY4BAIQI.js +65 -0
  780. package/dist/run-CY4BAIQI.js.map +1 -0
  781. package/dist/run-GXPPPDGI.js +59 -0
  782. package/dist/run-GXPPPDGI.js.map +1 -0
  783. package/dist/scaffold-ad-X6VPBVTB.js +1548 -0
  784. package/dist/scaffold-ad-X6VPBVTB.js.map +1 -0
  785. package/dist/scaffold-static-ad-LKOOZSDP.js +971 -0
  786. package/dist/scaffold-static-ad-LKOOZSDP.js.map +1 -0
  787. package/dist/scaffold-video-NAOIFIM4.js +872 -0
  788. package/dist/scaffold-video-NAOIFIM4.js.map +1 -0
  789. package/dist/schedule-TLYT5UXM.js +66 -0
  790. package/dist/schedule-TLYT5UXM.js.map +1 -0
  791. package/dist/schedule-V654LLZ2.js +61 -0
  792. package/dist/schedule-V654LLZ2.js.map +1 -0
  793. package/dist/scheduled-agents-MJNUZYEK.js +49 -0
  794. package/dist/scheduled-agents-MJNUZYEK.js.map +1 -0
  795. package/dist/schema-DN4WKWUM.js +132 -0
  796. package/dist/schema-DN4WKWUM.js.map +1 -0
  797. package/dist/schema-MZTVCNP4.js +63 -0
  798. package/dist/schema-MZTVCNP4.js.map +1 -0
  799. package/dist/scrape-T3DA7ER7.js +2241 -0
  800. package/dist/scrape-T3DA7ER7.js.map +1 -0
  801. package/dist/screenshot-EIGC6SZB.js +102 -0
  802. package/dist/screenshot-EIGC6SZB.js.map +1 -0
  803. package/dist/search-2SVUDZIX.js +224 -0
  804. package/dist/search-2SVUDZIX.js.map +1 -0
  805. package/dist/search-34NFJ5F6.js +26 -0
  806. package/dist/search-34NFJ5F6.js.map +1 -0
  807. package/dist/search-BWE3OPOY.js +91 -0
  808. package/dist/search-BWE3OPOY.js.map +1 -0
  809. package/dist/search-EYYAOZND.js +92 -0
  810. package/dist/search-EYYAOZND.js.map +1 -0
  811. package/dist/search-EZZMYU4Y.js +174 -0
  812. package/dist/search-EZZMYU4Y.js.map +1 -0
  813. package/dist/search-copy-VKQ2OOBM.js +168 -0
  814. package/dist/search-copy-VKQ2OOBM.js.map +1 -0
  815. package/dist/seeds-HQYSVFIX.js +101 -0
  816. package/dist/seeds-HQYSVFIX.js.map +1 -0
  817. package/dist/select-3SIBANY6.js +94 -0
  818. package/dist/select-3SIBANY6.js.map +1 -0
  819. package/dist/sends-I7VQFE4S.js +309 -0
  820. package/dist/sends-I7VQFE4S.js.map +1 -0
  821. package/dist/sequences-JHSEJJGN.js +146 -0
  822. package/dist/sequences-JHSEJJGN.js.map +1 -0
  823. package/dist/set-prompt-RAG7RJOD.js +185 -0
  824. package/dist/set-prompt-RAG7RJOD.js.map +1 -0
  825. package/dist/setup-links-TNRBFS5Z.js +141 -0
  826. package/dist/setup-links-TNRBFS5Z.js.map +1 -0
  827. package/dist/{shared-6762QE6R.js → shared-AT3FXPAG.js} +8 -6
  828. package/dist/shared-AT3FXPAG.js.map +1 -0
  829. package/dist/shopify-LUETQ5NT.js +3819 -0
  830. package/dist/shopify-LUETQ5NT.js.map +1 -0
  831. package/dist/site-SDL6LF6D.js +177 -0
  832. package/dist/site-SDL6LF6D.js.map +1 -0
  833. package/dist/sitemaps-FG37N5EB.js +87 -0
  834. package/dist/sitemaps-FG37N5EB.js.map +1 -0
  835. package/dist/sites-FIXK4Y3O.js +101 -0
  836. package/dist/sites-FIXK4Y3O.js.map +1 -0
  837. package/dist/skills-OKVCVQVD.js +47 -0
  838. package/dist/skills-OKVCVQVD.js.map +1 -0
  839. package/dist/sources-ISAUZFRN.js +30 -0
  840. package/dist/sources-ISAUZFRN.js.map +1 -0
  841. package/dist/sources-LQTJXAJG.js +421 -0
  842. package/dist/sources-LQTJXAJG.js.map +1 -0
  843. package/dist/stale-2L7NTLC6.js +63 -0
  844. package/dist/stale-2L7NTLC6.js.map +1 -0
  845. package/dist/stats-ZWZ7BAHV.js +34 -0
  846. package/dist/stats-ZWZ7BAHV.js.map +1 -0
  847. package/dist/status-4QBSIHO7.js +62 -0
  848. package/dist/status-4QBSIHO7.js.map +1 -0
  849. package/dist/sticker-FLRZM3BI.js +94 -0
  850. package/dist/sticker-FLRZM3BI.js.map +1 -0
  851. package/dist/stock-2CSMWRWV.js +179 -0
  852. package/dist/stock-2CSMWRWV.js.map +1 -0
  853. package/dist/studio-TTTR6N7D.js +49 -0
  854. package/dist/studio-TTTR6N7D.js.map +1 -0
  855. package/dist/sync-DH7FTPGG.js +54 -0
  856. package/dist/sync-DH7FTPGG.js.map +1 -0
  857. package/dist/sync-G5CS2RYV.js +54 -0
  858. package/dist/sync-G5CS2RYV.js.map +1 -0
  859. package/dist/sync-UADA6M33.js +265 -0
  860. package/dist/sync-UADA6M33.js.map +1 -0
  861. package/dist/sync-definition-ATMMOJ37.js +52 -0
  862. package/dist/sync-definition-ATMMOJ37.js.map +1 -0
  863. package/dist/tag-manager-NK3ZHSJB.js +43 -0
  864. package/dist/tag-manager-NK3ZHSJB.js.map +1 -0
  865. package/dist/tags-4RBZWDHS.js +20 -0
  866. package/dist/tags-4RBZWDHS.js.map +1 -0
  867. package/dist/tags-M7ATU2R7.js +26 -0
  868. package/dist/tags-M7ATU2R7.js.map +1 -0
  869. package/dist/tags-MXJKIBL4.js +20 -0
  870. package/dist/tags-MXJKIBL4.js.map +1 -0
  871. package/dist/tags-YG5EGPBW.js +20 -0
  872. package/dist/tags-YG5EGPBW.js.map +1 -0
  873. package/dist/tags-ZP4O3I2F.js +224 -0
  874. package/dist/tags-ZP4O3I2F.js.map +1 -0
  875. package/dist/targeting-constants-ZGBX3VWU.js +118 -0
  876. package/dist/targeting-constants-ZGBX3VWU.js.map +1 -0
  877. package/dist/targeting-criteria-BTB2RVI4.js +113 -0
  878. package/dist/targeting-criteria-BTB2RVI4.js.map +1 -0
  879. package/dist/targets-DEGJD2N6.js +102 -0
  880. package/dist/targets-DEGJD2N6.js.map +1 -0
  881. package/dist/templates-FZDWQSTV.js +178 -0
  882. package/dist/templates-FZDWQSTV.js.map +1 -0
  883. package/dist/testimonials-TI5EDABS.js +32 -0
  884. package/dist/testimonials-TI5EDABS.js.map +1 -0
  885. package/dist/themes-3RV3HNNE.js +94 -0
  886. package/dist/themes-3RV3HNNE.js.map +1 -0
  887. package/dist/top-companies-OKH7UNKX.js +108 -0
  888. package/dist/top-companies-OKH7UNKX.js.map +1 -0
  889. package/dist/translate-IUQBBVE6.js +598 -0
  890. package/dist/translate-IUQBBVE6.js.map +1 -0
  891. package/dist/triggers-2NWMXQ5P.js +141 -0
  892. package/dist/triggers-2NWMXQ5P.js.map +1 -0
  893. package/dist/tweets-X64YDEAA.js +123 -0
  894. package/dist/tweets-X64YDEAA.js.map +1 -0
  895. package/dist/unfollow-PIONCSBL.js +46 -0
  896. package/dist/unfollow-PIONCSBL.js.map +1 -0
  897. package/dist/unlink-UAPLQMK6.js +67 -0
  898. package/dist/unlink-UAPLQMK6.js.map +1 -0
  899. package/dist/unstage-BJJ5M7MK.js +95 -0
  900. package/dist/unstage-BJJ5M7MK.js.map +1 -0
  901. package/dist/unstage-X2BYGH2S.js +84 -0
  902. package/dist/unstage-X2BYGH2S.js.map +1 -0
  903. package/dist/update-7YK3VSOK.js +142 -0
  904. package/dist/update-7YK3VSOK.js.map +1 -0
  905. package/dist/update-BHG7BTK3.js +155 -0
  906. package/dist/update-BHG7BTK3.js.map +1 -0
  907. package/dist/update-CDJXKEVA.js +63 -0
  908. package/dist/update-CDJXKEVA.js.map +1 -0
  909. package/dist/update-RZXDAMAG.js +98 -0
  910. package/dist/update-RZXDAMAG.js.map +1 -0
  911. package/dist/upload-DSZEXNHH.js +126 -0
  912. package/dist/upload-DSZEXNHH.js.map +1 -0
  913. package/dist/upload-IWFYKD7A.js +150 -0
  914. package/dist/upload-IWFYKD7A.js.map +1 -0
  915. package/dist/upscale-EYCEYRWE.js +109 -0
  916. package/dist/upscale-EYCEYRWE.js.map +1 -0
  917. package/dist/url-options-RA3XISLN.js +130 -0
  918. package/dist/url-options-RA3XISLN.js.map +1 -0
  919. package/dist/url-params-OGZXF6MT.js +98 -0
  920. package/dist/url-params-OGZXF6MT.js.map +1 -0
  921. package/dist/use-E2TA2K6J.js +95 -0
  922. package/dist/use-E2TA2K6J.js.map +1 -0
  923. package/dist/validate-C6HWDI6K.js +88 -0
  924. package/dist/validate-C6HWDI6K.js.map +1 -0
  925. package/dist/variant-ETHB6XUM.js +338 -0
  926. package/dist/variant-ETHB6XUM.js.map +1 -0
  927. package/dist/videos-A2X5AARB.js +39 -0
  928. package/dist/videos-A2X5AARB.js.map +1 -0
  929. package/dist/view-BVEZRRV2.js +121 -0
  930. package/dist/view-BVEZRRV2.js.map +1 -0
  931. package/dist/viewer-check-W4ICSBHO.js +68 -0
  932. package/dist/viewer-check-W4ICSBHO.js.map +1 -0
  933. package/dist/web-GJSFDBBE.js +140 -0
  934. package/dist/web-GJSFDBBE.js.map +1 -0
  935. package/dist/winners-MJDKCGEZ.js +113 -0
  936. package/dist/winners-MJDKCGEZ.js.map +1 -0
  937. package/dist/winning-ads-NNU5MM75.js +84 -0
  938. package/dist/winning-ads-NNU5MM75.js.map +1 -0
  939. package/dist/write-commands-5I5KY6ZS.js +1015 -0
  940. package/dist/write-commands-5I5KY6ZS.js.map +1 -0
  941. package/dist/write-commands-DA6FIFAO.js +737 -0
  942. package/dist/write-commands-DA6FIFAO.js.map +1 -0
  943. package/dist/write-commands-KTPISQRE.js +206 -0
  944. package/dist/write-commands-KTPISQRE.js.map +1 -0
  945. package/dist/write-commands-QBGIWU27.js +713 -0
  946. package/dist/write-commands-QBGIWU27.js.map +1 -0
  947. package/dist/x-VCL5VRXC.js +47 -0
  948. package/dist/x-VCL5VRXC.js.map +1 -0
  949. package/package.json +9 -2
  950. package/dist/chunk-HJEMOSPH.js +0 -1292
  951. package/dist/chunk-HJEMOSPH.js.map +0 -1
  952. package/dist/chunk-JHKW6IDX.js +0 -9989
  953. package/dist/chunk-JHKW6IDX.js.map +0 -1
  954. package/dist/chunk-MF7YA62W.js.map +0 -1
  955. package/dist/chunk-VZEDAFAR.js.map +0 -1
  956. package/dist/chunk-XHC4LMK4.js.map +0 -1
  957. package/dist/client-GR6YL3YX.js +0 -17
  958. package/dist/output-NMQXZF3Z.js +0 -18
  959. /package/dist/{chunk-WLDM2TRF.js.map → chunk-2UFRHW3T.js.map} +0 -0
  960. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  961. /package/dist/{env-4P5HOGNA.js.map → client-EURRWXPW.js.map} +0 -0
  962. /package/dist/{output-NMQXZF3Z.js.map → connect-6DQFYKGN.js.map} +0 -0
  963. /package/dist/{shared-6762QE6R.js.map → customers-FOPXEGCB.js.map} +0 -0
@@ -0,0 +1,34 @@
1
+ // src/lib/repeatedFlags.ts
2
+ function repeatedFlagValues(rawArgs, flag) {
3
+ const long = `--${flag}`;
4
+ const inline = `${long}=`;
5
+ const values = [];
6
+ for (let i = 0; i < rawArgs.length; i++) {
7
+ const arg = rawArgs[i];
8
+ if (arg === "--") break;
9
+ if (arg === long) {
10
+ const value = rawArgs[i + 1];
11
+ if (value !== void 0 && !value.startsWith("-")) {
12
+ values.push(value);
13
+ i++;
14
+ }
15
+ } else if (arg?.startsWith(inline)) {
16
+ values.push(arg.slice(inline.length));
17
+ }
18
+ }
19
+ return values;
20
+ }
21
+ function repeatedValues(rawArgs, flag, parsed) {
22
+ if (rawArgs !== void 0) {
23
+ const fromLine = repeatedFlagValues(rawArgs, flag);
24
+ if (fromLine.length > 0) return fromLine;
25
+ }
26
+ if (Array.isArray(parsed)) return parsed.filter((v) => typeof v === "string");
27
+ return typeof parsed === "string" && parsed.length > 0 ? [parsed] : [];
28
+ }
29
+
30
+ export {
31
+ repeatedFlagValues,
32
+ repeatedValues
33
+ };
34
+ //# sourceMappingURL=chunk-ERSX3MKH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/repeatedFlags.ts"],"sourcesContent":["/**\n * Every value a flag was given on the command line.\n *\n * citty declares no array arg type: it hands `util.parseArgs` its options\n * without `multiple: true`, so a repeated flag collapses to its LAST value.\n * `--param utm_source=linkedin --param utm_medium=paid` reaches `run` as the\n * single string `\"utm_medium=paid\"`, and code shaped like\n * `Array.isArray(raw) ? raw : [raw]` never takes its array branch.\n *\n * That is silent, and on a wholesale-replace write it is destructive: the\n * command reports success having staged one pair of the three it was given,\n * and publish then replaces the entity's whole parameter set with that one.\n * So every repeatable flag reads its values from `ctx.rawArgs` instead.\n *\n * Accepts both spellings (`--flag value` and `--flag=value`), stops at a bare\n * `--`, and ignores a trailing flag with no value — that is a malformed line,\n * not an empty value.\n */\nexport function repeatedFlagValues(rawArgs: readonly string[], flag: string): string[] {\n const long = `--${flag}`;\n const inline = `${long}=`;\n const values: string[] = [];\n for (let i = 0; i < rawArgs.length; i++) {\n const arg = rawArgs[i];\n if (arg === \"--\") break;\n if (arg === long) {\n const value = rawArgs[i + 1];\n if (value !== undefined && !value.startsWith(\"-\")) {\n values.push(value);\n i++;\n }\n } else if (arg?.startsWith(inline)) {\n values.push(arg.slice(inline.length));\n }\n }\n return values;\n}\n\n/**\n * The values of a repeatable flag, preferring the command line over the parsed\n * arg. `rawArgs` is absent in unit tests that call a payload builder directly\n * with an already-collected array, so the parsed value stays the fallback.\n */\nexport function repeatedValues(rawArgs: readonly string[] | undefined, flag: string, parsed: unknown): string[] {\n if (rawArgs !== undefined) {\n const fromLine = repeatedFlagValues(rawArgs, flag);\n if (fromLine.length > 0) return fromLine;\n }\n if (Array.isArray(parsed)) return parsed.filter((v): v is string => typeof v === \"string\");\n return typeof parsed === \"string\" && parsed.length > 0 ? [parsed] : [];\n}\n"],"mappings":";AAkBO,SAAS,mBAAmB,SAA4B,MAAwB;AACrF,QAAM,OAAO,KAAK,IAAI;AACtB,QAAM,SAAS,GAAG,IAAI;AACtB,QAAM,SAAmB,CAAC;AAC1B,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,MAAM,QAAQ,CAAC;AACrB,QAAI,QAAQ,KAAM;AAClB,QAAI,QAAQ,MAAM;AAChB,YAAM,QAAQ,QAAQ,IAAI,CAAC;AAC3B,UAAI,UAAU,UAAa,CAAC,MAAM,WAAW,GAAG,GAAG;AACjD,eAAO,KAAK,KAAK;AACjB;AAAA,MACF;AAAA,IACF,WAAW,KAAK,WAAW,MAAM,GAAG;AAClC,aAAO,KAAK,IAAI,MAAM,OAAO,MAAM,CAAC;AAAA,IACtC;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,eAAe,SAAwC,MAAc,QAA2B;AAC9G,MAAI,YAAY,QAAW;AACzB,UAAM,WAAW,mBAAmB,SAAS,IAAI;AACjD,QAAI,SAAS,SAAS,EAAG,QAAO;AAAA,EAClC;AACA,MAAI,MAAM,QAAQ,MAAM,EAAG,QAAO,OAAO,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ;AACzF,SAAO,OAAO,WAAW,YAAY,OAAO,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC;AACvE;","names":[]}
@@ -0,0 +1,67 @@
1
+ import {
2
+ parseXApiError
3
+ } from "./chunk-M6UNISGO.js";
4
+ import {
5
+ cacheGet,
6
+ cacheSet,
7
+ writeAdsJson,
8
+ writeAdsOutput
9
+ } from "./chunk-EIGXX6KI.js";
10
+ import {
11
+ ApiError,
12
+ apiGet
13
+ } from "./chunk-CUL3VB4L.js";
14
+
15
+ // src/commands/ads/x/run-list.ts
16
+ function buildCleanParams(opts) {
17
+ const out = {};
18
+ for (const [k, v] of Object.entries(opts.params)) {
19
+ if (v !== void 0 && v !== "") {
20
+ out[k] = v;
21
+ }
22
+ }
23
+ if (!opts.useCache) {
24
+ out["skip-cache"] = "true";
25
+ }
26
+ return out;
27
+ }
28
+ function emitFromCache(opts) {
29
+ if (!opts.useCache || opts.cacheTtlMs === void 0) return false;
30
+ const cached = cacheGet(opts.cacheCategory, opts.cacheKey);
31
+ if (!cached) return false;
32
+ writeAdsJson({ ok: true, data: cached.data, cached: true });
33
+ return true;
34
+ }
35
+ function emitData(opts, data) {
36
+ if (opts.format !== "json") {
37
+ writeAdsOutput(data, opts.format);
38
+ return;
39
+ }
40
+ writeAdsJson({ ok: true, data });
41
+ }
42
+ function emitError(opts, err) {
43
+ if (err instanceof ApiError) {
44
+ writeAdsJson(parseXApiError(err.message, opts.accountId ?? "\u2014"));
45
+ process.exit(1);
46
+ }
47
+ writeAdsJson({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error" } });
48
+ process.exit(1);
49
+ }
50
+ async function runListCommand(opts) {
51
+ if (emitFromCache(opts)) return;
52
+ const params = buildCleanParams(opts);
53
+ try {
54
+ const data = await apiGet(opts.path, params);
55
+ if (opts.useCache && opts.cacheTtlMs !== void 0) {
56
+ cacheSet(opts.cacheCategory, opts.cacheKey, data, opts.cacheTtlMs);
57
+ }
58
+ emitData(opts, data);
59
+ } catch (err) {
60
+ emitError(opts, err);
61
+ }
62
+ }
63
+
64
+ export {
65
+ runListCommand
66
+ };
67
+ //# sourceMappingURL=chunk-F7HRLPR5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/x/run-list.ts"],"sourcesContent":["import { ApiError, apiGet } from \"../../../client.ts\";\nimport { cacheGet, cacheSet } from \"../cache.ts\";\nimport { writeAdsJson, writeAdsOutput } from \"../output.ts\";\nimport { parseXApiError } from \"./error-parser.ts\";\n\ninterface ListParams {\n path: string;\n cacheCategory: string;\n cacheKey: string;\n cacheTtlMs?: number;\n params: Record<string, string | undefined>;\n format: string;\n accountId?: string;\n useCache: boolean;\n}\n\nfunction buildCleanParams(opts: ListParams): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(opts.params)) {\n if (v !== undefined && v !== \"\") {\n out[k] = v;\n }\n }\n if (!opts.useCache) {\n out[\"skip-cache\"] = \"true\";\n }\n return out;\n}\n\nfunction emitFromCache(opts: ListParams): boolean {\n if (!opts.useCache || opts.cacheTtlMs === undefined) return false;\n const cached = cacheGet<unknown[]>(opts.cacheCategory, opts.cacheKey);\n if (!cached) return false;\n writeAdsJson({ ok: true, data: cached.data, cached: true });\n return true;\n}\n\nfunction emitData(opts: ListParams, data: unknown[]): void {\n if (opts.format !== \"json\") {\n writeAdsOutput(data as Array<Record<string, unknown>>, opts.format);\n return;\n }\n writeAdsJson({ ok: true, data });\n}\n\nfunction emitError(opts: ListParams, err: unknown): never {\n if (err instanceof ApiError) {\n writeAdsJson(parseXApiError(err.message, opts.accountId ?? \"—\"));\n process.exit(1);\n }\n writeAdsJson({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\n/**\n * Shared GET-list flow: cache check → request → cache set → format-aware output.\n * Centralizing this keeps each CLI command file under Biome's complexity budget.\n */\nexport async function runListCommand(opts: ListParams): Promise<void> {\n if (emitFromCache(opts)) return;\n const params = buildCleanParams(opts);\n try {\n const data = await apiGet<unknown[]>(opts.path, params);\n if (opts.useCache && opts.cacheTtlMs !== undefined) {\n cacheSet(opts.cacheCategory, opts.cacheKey, data, opts.cacheTtlMs);\n }\n emitData(opts, data);\n } catch (err) {\n emitError(opts, err);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,SAAS,iBAAiB,MAA0C;AAClE,QAAM,MAA8B,CAAC;AACrC,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,MAAM,GAAG;AAChD,QAAI,MAAM,UAAa,MAAM,IAAI;AAC/B,UAAI,CAAC,IAAI;AAAA,IACX;AAAA,EACF;AACA,MAAI,CAAC,KAAK,UAAU;AAClB,QAAI,YAAY,IAAI;AAAA,EACtB;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAA2B;AAChD,MAAI,CAAC,KAAK,YAAY,KAAK,eAAe,OAAW,QAAO;AAC5D,QAAM,SAAS,SAAoB,KAAK,eAAe,KAAK,QAAQ;AACpE,MAAI,CAAC,OAAQ,QAAO;AACpB,eAAa,EAAE,IAAI,MAAM,MAAM,OAAO,MAAM,QAAQ,KAAK,CAAC;AAC1D,SAAO;AACT;AAEA,SAAS,SAAS,MAAkB,MAAuB;AACzD,MAAI,KAAK,WAAW,QAAQ;AAC1B,mBAAe,MAAwC,KAAK,MAAM;AAClE;AAAA,EACF;AACA,eAAa,EAAE,IAAI,MAAM,KAAK,CAAC;AACjC;AAEA,SAAS,UAAU,MAAkB,KAAqB;AACxD,MAAI,eAAe,UAAU;AAC3B,iBAAa,eAAe,IAAI,SAAS,KAAK,aAAa,QAAG,CAAC;AAC/D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,eAAa,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,iBAAiB,SAAS,mBAAmB,EAAE,CAAC;AACzF,UAAQ,KAAK,CAAC;AAChB;AAMA,eAAsB,eAAe,MAAiC;AACpE,MAAI,cAAc,IAAI,EAAG;AACzB,QAAM,SAAS,iBAAiB,IAAI;AACpC,MAAI;AACF,UAAM,OAAO,MAAM,OAAkB,KAAK,MAAM,MAAM;AACtD,QAAI,KAAK,YAAY,KAAK,eAAe,QAAW;AAClD,eAAS,KAAK,eAAe,KAAK,UAAU,MAAM,KAAK,UAAU;AAAA,IACnE;AACA,aAAS,MAAM,IAAI;AAAA,EACrB,SAAS,KAAK;AACZ,cAAU,MAAM,GAAG;AAAA,EACrB;AACF;","names":[]}
@@ -0,0 +1,84 @@
1
+ import {
2
+ findWorkspaceRoot
3
+ } from "./chunk-TNOSX3PJ.js";
4
+
5
+ // src/commands/canvas/unbilled-spend.ts
6
+ import { randomUUID } from "crypto";
7
+ import { mkdir, readdir, readFile, rename, unlink, writeFile } from "fs/promises";
8
+ import path from "path";
9
+ import { z } from "zod";
10
+ var DIR = "unbilled-spend";
11
+ var Held = z.array(
12
+ z.object({ model: z.string(), inputTokens: z.number(), outputTokens: z.number(), costUsd: z.number() })
13
+ );
14
+ async function holdUnbilledSpend(cacheDir, usage) {
15
+ if (usage.length === 0) return;
16
+ const dir = path.join(cacheDir, DIR);
17
+ await mkdir(dir, { recursive: true });
18
+ await writeFile(path.join(dir, `${Date.now()}-${randomUUID()}.json`), JSON.stringify(usage), "utf8");
19
+ }
20
+ async function holdWorkspaceSpend(usage) {
21
+ const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
22
+ await holdUnbilledSpend(path.join(root, "canvas", ".cache"), usage).catch(() => {
23
+ });
24
+ }
25
+ async function takeUnbilledSpend(cacheDir) {
26
+ const dir = path.join(cacheDir, DIR);
27
+ const files = await readdir(dir).catch(() => []);
28
+ const byModel = /* @__PURE__ */ new Map();
29
+ for (const file of files.filter((f) => f.endsWith(".json"))) {
30
+ const claimed = path.join(dir, `${file}.${randomUUID()}.taken`);
31
+ try {
32
+ await rename(path.join(dir, file), claimed);
33
+ } catch {
34
+ continue;
35
+ }
36
+ const parsed = Held.safeParse(await readFile(claimed, "utf8").then(JSON.parse, () => null).catch(() => null));
37
+ await unlink(claimed).catch(() => {
38
+ });
39
+ for (const call of parsed.success ? parsed.data : []) {
40
+ const sum = byModel.get(call.model);
41
+ byModel.set(
42
+ call.model,
43
+ sum ? {
44
+ model: call.model,
45
+ inputTokens: sum.inputTokens + call.inputTokens,
46
+ outputTokens: sum.outputTokens + call.outputTokens,
47
+ costUsd: sum.costUsd + call.costUsd
48
+ } : { ...call }
49
+ );
50
+ }
51
+ }
52
+ return [...byModel.values()];
53
+ }
54
+ async function sendBillingSpend(cacheDir, usage, send) {
55
+ try {
56
+ await send();
57
+ return null;
58
+ } catch (e) {
59
+ await holdUnbilledSpend(cacheDir, usage).catch(() => {
60
+ });
61
+ return e instanceof Error ? e.message : String(e);
62
+ }
63
+ }
64
+ function holdWhenSettled(cacheDir, spendOf) {
65
+ const pending = [];
66
+ return {
67
+ settled: (run, outputs) => {
68
+ pending.push(holdUnbilledSpend(cacheDir, spendOf(run, outputs)).catch(() => {
69
+ }));
70
+ },
71
+ drained: async () => {
72
+ await Promise.all(pending);
73
+ }
74
+ };
75
+ }
76
+
77
+ export {
78
+ holdUnbilledSpend,
79
+ holdWorkspaceSpend,
80
+ takeUnbilledSpend,
81
+ sendBillingSpend,
82
+ holdWhenSettled
83
+ };
84
+ //# sourceMappingURL=chunk-FEG6MN4H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/canvas/unbilled-spend.ts"],"sourcesContent":["/**\n * Gateway spend the CLI made with no run record to carry it: the viewer check run on its\n * own (`baker canvas viewer-check`) or one that refused the render before any run existed.\n *\n * The run record's `reviewUsage` is how a call made in the Runtime reaches the credits\n * ledger (`POST /api/canvas/runs` bills it once, when the terminal record is accepted). So\n * the spend waits here, in the workspace's canvas cache, and the next run record of this\n * workspace takes it. One file per hold and a rename to claim it: two processes never take\n * the same call, and a hold never overwrites another.\n */\nimport { randomUUID } from \"node:crypto\";\nimport { mkdir, readdir, readFile, rename, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport type { NodeRunRecord } from \"../../engine/engine/executor.ts\";\nimport type { ReviewUsage } from \"../../engine/nodes/local/lib/render-review.ts\";\nimport { findWorkspaceRoot } from \"./normalize-paths.ts\";\n\nconst DIR = \"unbilled-spend\";\n\nconst Held = z.array(\n z.object({ model: z.string(), inputTokens: z.number(), outputTokens: z.number(), costUsd: z.number() }),\n);\n\n/** Keep `usage` for the next run record of this workspace; nothing is written when it is empty. */\nexport async function holdUnbilledSpend(cacheDir: string, usage: readonly ReviewUsage[]): Promise<void> {\n if (usage.length === 0) return;\n const dir = path.join(cacheDir, DIR);\n await mkdir(dir, { recursive: true });\n await writeFile(path.join(dir, `${Date.now()}-${randomUUID()}.json`), JSON.stringify(usage), \"utf8\");\n}\n\n/**\n * One call made by a command with no canvas of its own (`baker actions create`, a feedback note,\n * a CRM file check), held in the workspace the command ran in. Never throws: a lost hold is a\n * call Baker absorbs, never a failed command.\n */\nexport async function holdWorkspaceSpend(usage: readonly ReviewUsage[]): Promise<void> {\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n await holdUnbilledSpend(path.join(root, \"canvas\", \".cache\"), usage).catch(() => {});\n}\n\n/** Every held call, claimed and removed, summed per model (one record entry each). */\nexport async function takeUnbilledSpend(cacheDir: string): Promise<ReviewUsage[]> {\n const dir = path.join(cacheDir, DIR);\n const files = await readdir(dir).catch(() => [] as string[]);\n const byModel = new Map<string, ReviewUsage>();\n for (const file of files.filter((f) => f.endsWith(\".json\"))) {\n const claimed = path.join(dir, `${file}.${randomUUID()}.taken`);\n try {\n await rename(path.join(dir, file), claimed);\n } catch {\n continue;\n }\n const parsed = Held.safeParse(await readFile(claimed, \"utf8\").then(JSON.parse, () => null).catch(() => null));\n await unlink(claimed).catch(() => {});\n for (const call of parsed.success ? parsed.data : []) {\n const sum = byModel.get(call.model);\n byModel.set(\n call.model,\n sum\n ? {\n model: call.model,\n inputTokens: sum.inputTokens + call.inputTokens,\n outputTokens: sum.outputTokens + call.outputTokens,\n costUsd: sum.costUsd + call.costUsd,\n }\n : { ...call },\n );\n }\n }\n return [...byModel.values()];\n}\n\n/**\n * Send the record that carries `usage`: null when it landed, else why not. When it never does, the\n * spend is held again for the next one; the failure is reported, never thrown, because a\n * record that did not land must not turn a finished render into a failed one.\n */\nexport async function sendBillingSpend(\n cacheDir: string,\n usage: readonly ReviewUsage[],\n send: () => Promise<void>,\n): Promise<string | null> {\n try {\n await send();\n return null;\n } catch (e) {\n await holdUnbilledSpend(cacheDir, usage).catch(() => {});\n return e instanceof Error ? e.message : String(e);\n }\n}\n\n/**\n * Hold what a node's own gateway calls cost the moment it settles, so the spend survives the\n * run failing or being stopped after it: the resumed run takes that node from the cache and\n * bills nothing for it. `spendOf` returns [] for a cached node or one that calls nothing.\n */\nexport function holdWhenSettled(\n cacheDir: string,\n spendOf: (run: NodeRunRecord, outputs: Record<string, unknown>) => readonly ReviewUsage[],\n): { settled: (run: NodeRunRecord, outputs: Record<string, unknown>) => void; drained: () => Promise<void> } {\n const pending: Promise<void>[] = [];\n return {\n settled: (run, outputs) => {\n pending.push(holdUnbilledSpend(cacheDir, spendOf(run, outputs)).catch(() => {}));\n },\n drained: async () => {\n await Promise.all(pending);\n },\n };\n}\n"],"mappings":";;;;;AAUA,SAAS,kBAAkB;AAC3B,SAAS,OAAO,SAAS,UAAU,QAAQ,QAAQ,iBAAiB;AACpE,OAAO,UAAU;AACjB,SAAS,SAAS;AAKlB,IAAM,MAAM;AAEZ,IAAM,OAAO,EAAE;AAAA,EACb,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,EAAE,OAAO,GAAG,cAAc,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC;AACxG;AAGA,eAAsB,kBAAkB,UAAkB,OAA8C;AACtG,MAAI,MAAM,WAAW,EAAG;AACxB,QAAM,MAAM,KAAK,KAAK,UAAU,GAAG;AACnC,QAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,QAAM,UAAU,KAAK,KAAK,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,GAAG,KAAK,UAAU,KAAK,GAAG,MAAM;AACrG;AAOA,eAAsB,mBAAmB,OAA8C;AACrF,QAAM,OAAO,kBAAkB,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI;AAC7D,QAAM,kBAAkB,KAAK,KAAK,MAAM,UAAU,QAAQ,GAAG,KAAK,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AACpF;AAGA,eAAsB,kBAAkB,UAA0C;AAChF,QAAM,MAAM,KAAK,KAAK,UAAU,GAAG;AACnC,QAAM,QAAQ,MAAM,QAAQ,GAAG,EAAE,MAAM,MAAM,CAAC,CAAa;AAC3D,QAAM,UAAU,oBAAI,IAAyB;AAC7C,aAAW,QAAQ,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC,GAAG;AAC3D,UAAM,UAAU,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,WAAW,CAAC,QAAQ;AAC9D,QAAI;AACF,YAAM,OAAO,KAAK,KAAK,KAAK,IAAI,GAAG,OAAO;AAAA,IAC5C,QAAQ;AACN;AAAA,IACF;AACA,UAAM,SAAS,KAAK,UAAU,MAAM,SAAS,SAAS,MAAM,EAAE,KAAK,KAAK,OAAO,MAAM,IAAI,EAAE,MAAM,MAAM,IAAI,CAAC;AAC5G,UAAM,OAAO,OAAO,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AACpC,eAAW,QAAQ,OAAO,UAAU,OAAO,OAAO,CAAC,GAAG;AACpD,YAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAClC,cAAQ;AAAA,QACN,KAAK;AAAA,QACL,MACI;AAAA,UACE,OAAO,KAAK;AAAA,UACZ,aAAa,IAAI,cAAc,KAAK;AAAA,UACpC,cAAc,IAAI,eAAe,KAAK;AAAA,UACtC,SAAS,IAAI,UAAU,KAAK;AAAA,QAC9B,IACA,EAAE,GAAG,KAAK;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACA,SAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B;AAOA,eAAsB,iBACpB,UACA,OACA,MACwB;AACxB,MAAI;AACF,UAAM,KAAK;AACX,WAAO;AAAA,EACT,SAAS,GAAG;AACV,UAAM,kBAAkB,UAAU,KAAK,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AACvD,WAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,EAClD;AACF;AAOO,SAAS,gBACd,UACA,SAC2G;AAC3G,QAAM,UAA2B,CAAC;AAClC,SAAO;AAAA,IACL,SAAS,CAAC,KAAK,YAAY;AACzB,cAAQ,KAAK,kBAAkB,UAAU,QAAQ,KAAK,OAAO,CAAC,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAC;AAAA,IACjF;AAAA,IACA,SAAS,YAAY;AACnB,YAAM,QAAQ,IAAI,OAAO;AAAA,IAC3B;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,126 @@
1
+ // src/commands/videos/videoPlatforms.ts
2
+ var PLATFORM_DOMAINS = {
3
+ youtube: ["youtube.com", "youtu.be"],
4
+ instagram: ["instagram.com", "ddinstagram.com"],
5
+ tiktok: ["tiktok.com"],
6
+ twitter: ["twitter.com", "x.com", "vxtwitter.com", "fixvx.com"],
7
+ facebook: ["facebook.com", "fb.watch", "fb.com"],
8
+ linkedin: ["linkedin.com", "lnkd.in"],
9
+ reddit: ["reddit.com", "redd.it"],
10
+ vimeo: ["vimeo.com"],
11
+ dailymotion: ["dailymotion.com", "dai.ly"],
12
+ twitch: ["twitch.tv"],
13
+ bluesky: ["bsky.app"],
14
+ bilibili: ["bilibili.com", "bilibili.tv", "b23.tv"],
15
+ vk: ["vk.com", "vk.ru", "vkvideo.ru"],
16
+ ok: ["ok.ru"],
17
+ pinterest: ["pinterest.com", "pin.it"],
18
+ tumblr: ["tumblr.com"],
19
+ snapchat: ["snapchat.com"],
20
+ loom: ["loom.com"],
21
+ streamable: ["streamable.com"],
22
+ newgrounds: ["newgrounds.com"],
23
+ rutube: ["rutube.ru"]
24
+ };
25
+ var VIDEO_PLATFORMS = Object.keys(PLATFORM_DOMAINS);
26
+ function platformFromUrl(rawUrl) {
27
+ let host;
28
+ try {
29
+ host = new URL(rawUrl).hostname.toLowerCase();
30
+ } catch {
31
+ return "url";
32
+ }
33
+ for (const [platform, domains] of Object.entries(PLATFORM_DOMAINS)) {
34
+ if (domains.some((domain) => host === domain || host.endsWith(`.${domain}`))) {
35
+ return platform;
36
+ }
37
+ }
38
+ return "url";
39
+ }
40
+
41
+ // src/commands/videos/ingestUrl.ts
42
+ var MAX_VIDEO_INGEST_BYTES = 16 * 1024 * 1024 * 1024;
43
+ var MAX_VIDEO_INGEST_SECONDS = 3 * 60 * 60;
44
+ function refuseByDuration(seconds, maxSeconds) {
45
+ if (seconds === void 0 || seconds <= maxSeconds) return null;
46
+ return `That video is ${(seconds / 3600).toFixed(1)} hours long \u2014 the limit is ${Math.round(maxSeconds / 3600)} hours.`;
47
+ }
48
+ var DOWNLOAD_TIMEOUT_FLOOR_MS = 10 * 60 * 1e3;
49
+ var DOWNLOAD_TIMEOUT_CEILING_MS = 15 * 60 * 1e3;
50
+ function downloadTimeoutMs(seconds) {
51
+ if (seconds === void 0) return DOWNLOAD_TIMEOUT_FLOOR_MS;
52
+ const scaled = seconds * 2 * 1e3;
53
+ return Math.min(Math.max(scaled, DOWNLOAD_TIMEOUT_FLOOR_MS), DOWNLOAD_TIMEOUT_CEILING_MS);
54
+ }
55
+ var DIRECT_MEDIA_EXTENSIONS = [".mp4", ".mov", ".webm", ".m4v", ".mkv", ".avi"];
56
+ function isDirectMediaUrl(rawUrl) {
57
+ const pathname = safePathname(rawUrl);
58
+ return DIRECT_MEDIA_EXTENSIONS.some((ext) => pathname.endsWith(ext));
59
+ }
60
+ function resolveIngestSource(explicit, rawUrl) {
61
+ if (explicit) return explicit;
62
+ return platformFromUrl(rawUrl);
63
+ }
64
+ var TOOLING_OR_BLOCK_SIGNATURES = [
65
+ "requested format is not available",
66
+ "only images are available",
67
+ "nsig",
68
+ "sign in to confirm",
69
+ // bot check — distinct from "Private video. Sign in if…"
70
+ "unable to download api page",
71
+ "http error 403",
72
+ // yt-dlp's own "the site changed under me" signature. It prints a GitHub issue
73
+ // link whenever a page parsed nothing like the shape the extractor expects —
74
+ // which is precisely a downloader that has aged out, not a bad link. Observed
75
+ // live on TikTok, which probed fine and then broke ninety minutes later from
76
+ // the same machine, identically through direct, datacenter and residential
77
+ // exits. Without this it fell through to "check the link is public", sending
78
+ // the reader to inspect a video that was never the problem.
79
+ "please report this issue"
80
+ ];
81
+ function isToolingOrBlockFailure(detail) {
82
+ const haystack = detail.toLowerCase();
83
+ return TOOLING_OR_BLOCK_SIGNATURES.some((signature) => haystack.includes(signature));
84
+ }
85
+ var REGION_BLOCK_SIGNATURES = [
86
+ "in your country",
87
+ "geo-restricted",
88
+ "geo restricted",
89
+ "not available from your location",
90
+ "blocked in your country"
91
+ ];
92
+ function isDrmProtected(detail) {
93
+ return detail.toLowerCase().includes("drm protected");
94
+ }
95
+ function isRegionBlocked(detail) {
96
+ const haystack = detail.toLowerCase();
97
+ return REGION_BLOCK_SIGNATURES.some((signature) => haystack.includes(signature));
98
+ }
99
+ function worthDownloadingInstead(errorCode) {
100
+ return errorCode === "VALIDATION_ERROR";
101
+ }
102
+ function directDedupeKey(source, rawUrl) {
103
+ return `${source}:${rawUrl}`;
104
+ }
105
+ function safePathname(rawUrl) {
106
+ try {
107
+ return new URL(rawUrl).pathname.toLowerCase();
108
+ } catch {
109
+ return "";
110
+ }
111
+ }
112
+
113
+ export {
114
+ MAX_VIDEO_INGEST_BYTES,
115
+ MAX_VIDEO_INGEST_SECONDS,
116
+ refuseByDuration,
117
+ downloadTimeoutMs,
118
+ isDirectMediaUrl,
119
+ resolveIngestSource,
120
+ isToolingOrBlockFailure,
121
+ isDrmProtected,
122
+ isRegionBlocked,
123
+ worthDownloadingInstead,
124
+ directDedupeKey
125
+ };
126
+ //# sourceMappingURL=chunk-FKOECEVC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/videos/videoPlatforms.ts","../src/commands/videos/ingestUrl.ts"],"sourcesContent":["/**\n * Which platform a video link came from.\n *\n * This exists for provenance, not for capability. The downloader already reaches\n * far more sites than are named here, so a platform missing from this table\n * still ingests — it is simply recorded as `url`. What the table buys is the\n * ability to answer \"where did this clip come from\" later: a competitor's TikTok,\n * a supplier's Vimeo and the client's own YouTube are different things to a\n * marketer, and collapsing all three into \"url\" throws that away at the only\n * moment it is knowable.\n *\n * Kept deliberately small. Naming every site the downloader supports would be a\n * list nobody can maintain and would still be missing the next one; these are the\n * platforms whose provenance actually changes how a clip gets used.\n */\n\n/** Registrable domains per platform. Subdomains match; lookalikes must not. */\nconst PLATFORM_DOMAINS = {\n youtube: [\"youtube.com\", \"youtu.be\"],\n instagram: [\"instagram.com\", \"ddinstagram.com\"],\n tiktok: [\"tiktok.com\"],\n twitter: [\"twitter.com\", \"x.com\", \"vxtwitter.com\", \"fixvx.com\"],\n facebook: [\"facebook.com\", \"fb.watch\", \"fb.com\"],\n linkedin: [\"linkedin.com\", \"lnkd.in\"],\n reddit: [\"reddit.com\", \"redd.it\"],\n vimeo: [\"vimeo.com\"],\n dailymotion: [\"dailymotion.com\", \"dai.ly\"],\n twitch: [\"twitch.tv\"],\n bluesky: [\"bsky.app\"],\n bilibili: [\"bilibili.com\", \"bilibili.tv\", \"b23.tv\"],\n vk: [\"vk.com\", \"vk.ru\", \"vkvideo.ru\"],\n ok: [\"ok.ru\"],\n pinterest: [\"pinterest.com\", \"pin.it\"],\n tumblr: [\"tumblr.com\"],\n snapchat: [\"snapchat.com\"],\n loom: [\"loom.com\"],\n streamable: [\"streamable.com\"],\n newgrounds: [\"newgrounds.com\"],\n rutube: [\"rutube.ru\"],\n} as const satisfies Record<string, readonly string[]>;\n\nexport type VideoPlatform = keyof typeof PLATFORM_DOMAINS;\n\n/** Every platform this can name; `platformFromUrl` returns one of these or `url`. */\nexport const VIDEO_PLATFORMS = Object.keys(PLATFORM_DOMAINS) as readonly VideoPlatform[];\n\n/**\n * The platform a URL belongs to, or `url` when it is not one we name.\n *\n * Matching is on the host, anchored at a dot boundary — never `includes`. That\n * is the whole security property of this function: `youtube.com.evil.test` and\n * `notyoutube.com` are attacker-controlled hosts that would otherwise inherit\n * YouTube's identity, and provenance that can be spoofed is worse than none,\n * because it is trusted.\n *\n * Pinterest is a deliberate omission from the country-mirror handling: cobalt\n * collapses `pinterest.co.uk` and friends, and doing the same here would mean\n * carrying a list of every ccTLD a platform has ever used. Those links resolve\n * as `url` and still ingest.\n */\nexport function platformFromUrl(rawUrl: string): VideoPlatform | \"url\" {\n let host: string;\n try {\n host = new URL(rawUrl).hostname.toLowerCase();\n } catch {\n return \"url\";\n }\n\n for (const [platform, domains] of Object.entries(PLATFORM_DOMAINS)) {\n if (domains.some((domain) => host === domain || host.endsWith(`.${domain}`))) {\n return platform as VideoPlatform;\n }\n }\n return \"url\";\n}\n","import { platformFromUrl } from \"./videoPlatforms.ts\";\n/**\n * URL classification for `baker videos ingest`. Pure so the routing decision —\n * hand the URL to Baker, or download it here first — is testable without a\n * network, a sandbox, or yt-dlp installed.\n */\n\n/**\n * Ceiling on the download path only. The direct path has no equivalent: Mux\n * fetches the file itself, so nothing is held in the Runtime's memory or disk.\n *\n * This was 2 GB, and it was never really a policy — it was a memory limit\n * wearing a policy's clothes. The upload read the whole file into a Buffer and\n * then copied it again into a `Uint8Array` (measured: that constructor does not\n * alias), so peak RAM was twice the file and an 8 GB Runtime would be OOM-killed\n * before the check ever fired. The file now streams from disk\n * (`lib/streamUpload.ts`), peak memory is one chunk regardless of length, and\n * this bounds the Runtime's *disk* — the last resource a download still spends\n * in proportion to how long the video is.\n *\n * The gate that does the real work is `refuseByDuration`, below: it turns away a\n * too-long video from its metadata, before a single byte is fetched.\n */\nexport const MAX_VIDEO_INGEST_BYTES = 16 * 1024 * 1024 * 1024;\n\n/** The longest video we will pull down, in seconds. */\nexport const MAX_VIDEO_INGEST_SECONDS = 3 * 60 * 60;\n\n/**\n * Whether a video is too long to ingest, phrased for whoever pasted the link.\n *\n * Duration rather than bytes, because duration is knowable *before* downloading\n * and a byte count is not: a watch page carries no `content-length`, an adaptive\n * stream has one per segment, and the merged file does not exist until it has\n * been muxed. So a byte cap can only be enforced after paying for the very\n * download it was supposed to avoid, while a duration cap costs one metadata\n * probe.\n *\n * An unknown duration is accepted, not refused. A live stream, or a site that\n * publishes no metadata, reports nothing — and treating silence as \"too long\"\n * would turn a missing field into a blocked ingest. The byte ceiling still\n * catches those on the way out.\n */\nexport function refuseByDuration(seconds: number | undefined, maxSeconds: number): string | null {\n if (seconds === undefined || seconds <= maxSeconds) return null;\n return `That video is ${(seconds / 3600).toFixed(1)} hours long — the limit is ${Math.round(maxSeconds / 3600)} hours.`;\n}\n\n/** Floor, and what an unknown duration gets: enough for any ordinary clip. */\nconst DOWNLOAD_TIMEOUT_FLOOR_MS = 10 * 60 * 1000;\n/**\n * Ceiling, and the binding constraint in practice.\n *\n * Set by what a person waiting in a chat will tolerate, not by what a download\n * might need: the turn is blocked for this whole time, and a chat that appears\n * frozen for three quarters of an hour is a worse outcome than a clip that did\n * not import. Fifteen minutes covers any ordinary clip even from a slow CDN,\n * and a video that cannot make it says so and points at `upload`.\n */\nconst DOWNLOAD_TIMEOUT_CEILING_MS = 15 * 60 * 1000;\n\n/**\n * How long a download may take, derived from how long the video is.\n *\n * These two numbers have to be related or they quietly contradict each other,\n * which is exactly what happened: the duration gate accepted up to three hours\n * while every download got a flat ten-minute window, so a 33-minute VK video —\n * served slowly, still transferring at 137 MB when the clock ran out — was\n * accepted by one rule and made impossible by another. It surfaced as\n * \"Unexpected error\", because a timeout throws a plain `Error` that the caller\n * discarded.\n *\n * Twice real-time is the budget: generous for a CDN serving faster than\n * playback, and still finite for one that is not. The ceiling matters more than\n * the ratio — without it a three-hour video would license a six-hour download.\n */\nexport function downloadTimeoutMs(seconds: number | undefined): number {\n if (seconds === undefined) return DOWNLOAD_TIMEOUT_FLOOR_MS;\n const scaled = seconds * 2 * 1000;\n return Math.min(Math.max(scaled, DOWNLOAD_TIMEOUT_FLOOR_MS), DOWNLOAD_TIMEOUT_CEILING_MS);\n}\n\nconst DIRECT_MEDIA_EXTENSIONS = [\".mp4\", \".mov\", \".webm\", \".m4v\", \".mkv\", \".avi\"] as const;\n\n/**\n * True when the URL's path ends in a media extension, which is the signal that\n * Mux can pull it directly. Deliberately conservative: a false negative only\n * costs an unnecessary download, while a false positive hands Mux a web page.\n */\nexport function isDirectMediaUrl(rawUrl: string): boolean {\n const pathname = safePathname(rawUrl);\n return DIRECT_MEDIA_EXTENSIONS.some((ext) => pathname.endsWith(ext));\n}\n\n/** Explicit `--source` always wins; otherwise infer provenance from the host. */\nexport function resolveIngestSource(explicit: string | undefined, rawUrl: string): string {\n if (explicit) return explicit;\n return platformFromUrl(rawUrl);\n}\n\n/**\n * Signatures of \"the site wouldn't hand over the video\", as opposed to \"this\n * link is private or gone\".\n *\n * They matter because the remediation is opposite. These all mean the downloader\n * could not read the page — nearly always because it has aged out against a site\n * that changed (YouTube rewrites its player every few weeks) or because the\n * request was blocked. Retrying is useless and the user's link is fine, so\n * telling them to check whether their public video is \"private\" sends them after\n * a problem that isn't theirs.\n */\nconst TOOLING_OR_BLOCK_SIGNATURES = [\n \"requested format is not available\",\n \"only images are available\",\n \"nsig\",\n \"sign in to confirm\", // bot check — distinct from \"Private video. Sign in if…\"\n \"unable to download api page\",\n \"http error 403\",\n // yt-dlp's own \"the site changed under me\" signature. It prints a GitHub issue\n // link whenever a page parsed nothing like the shape the extractor expects —\n // which is precisely a downloader that has aged out, not a bad link. Observed\n // live on TikTok, which probed fine and then broke ninety minutes later from\n // the same machine, identically through direct, datacenter and residential\n // exits. Without this it fell through to \"check the link is public\", sending\n // the reader to inspect a video that was never the problem.\n \"please report this issue\",\n] as const;\n\nexport function isToolingOrBlockFailure(detail: string): boolean {\n const haystack = detail.toLowerCase();\n return TOOLING_OR_BLOCK_SIGNATURES.some((signature) => haystack.includes(signature));\n}\n\n/**\n * Failures a *different country* could plausibly open — the only ones where\n * retrying with `--country` is worth suggesting.\n *\n * Deliberately narrow, and it is the narrowness that matters. Every rung of the\n * ladder already tries a different IP, so \"we were refused\" is not evidence that\n * geography was the reason; it is only evidence that geography *might* be. These\n * phrases are the ones where the site itself named the country.\n *\n * TikTok is the worked counter-example and the reason this is not a loose match\n * on \"blocked\": it answers with \"Your IP address is blocked from accessing this\n * post\", which reads exactly like a geo problem. Measured across six exits in\n * four countries — Spain direct, Spain datacenter, US, DE, SG, BR — that post\n * failed identically from all of them, while a different post succeeded from the\n * plain direct IP. Treating that string as regional would sell the agent a retry\n * that cannot work, once per country it thinks to try.\n */\nconst REGION_BLOCK_SIGNATURES = [\n \"in your country\",\n \"geo-restricted\",\n \"geo restricted\",\n \"not available from your location\",\n \"blocked in your country\",\n] as const;\n\n/**\n * The video's own encryption refusing us — a hard stop, not a hurdle.\n *\n * Kept separate from every other failure because it is the only one where the\n * honest answer is \"no, and no amount of retrying, signing in or changing\n * country will alter that\". Removing DRM is a different act from downloading\n * something published openly, so this never suggests a workaround.\n *\n * Checked *before* the tooling signatures, because a DRM video also emits\n * \"Requested format is not available\" as its second line — and that phrase is\n * read as a stale downloader, which would file a permanent property of the video\n * as a bug in our tooling. Measured: `--check-formats`, the remedy yt-dlp's own\n * message suggests, does not help when the audio track is the encrypted part.\n */\nexport function isDrmProtected(detail: string): boolean {\n return detail.toLowerCase().includes(\"drm protected\");\n}\n\nexport function isRegionBlocked(detail: string): boolean {\n const haystack = detail.toLowerCase();\n return REGION_BLOCK_SIGNATURES.some((signature) => haystack.includes(signature));\n}\n\n/**\n * Whether a failed direct ingest is worth retrying by downloading the file\n * ourselves.\n *\n * The subtlety that makes this necessary: the download route finishes by posting\n * to the *same* endpoint, with the same API key and the same `source`. So a\n * failure about the request rather than about the URL is guaranteed to fail\n * again identically, except now after pulling the whole video down first.\n *\n * An allow-list of one, and it has to be, because the codes here are the CLI's\n * (`mapHttpError`), not the backend's. That distinction was previously missed:\n * this listed backend names, so `apiError(\"BAD_REQUEST\")` — the code the route\n * raises when Mux refuses the source, and the only case this exists for —\n * arrived as `VALIDATION_ERROR` and was refused, while a backend 500 arrived as\n * `INTERNAL_ERROR`, matched nothing, and downloaded a whole video to replay the\n * identical failing request. Naming the outcome we want, rather than the ones we\n * don't, means a code nobody anticipated costs a missed retry instead of a\n * wasted download.\n *\n * `VALIDATION_ERROR` is unambiguous *here* only because the request body is zod\n * validated client-side before it is ever sent, so a 400 from this route is not\n * a malformed request — it is Baker saying it could not fetch that URL.\n */\nexport function worthDownloadingInstead(errorCode: string): boolean {\n return errorCode === \"VALIDATION_ERROR\";\n}\n\n/**\n * The dedupe key for a URL handed straight to Baker.\n *\n * The direct path never probes — that is the whole point of it — so there is no\n * provider id to key on and the URL is the only identifier available. That is\n * the same position the download path's *generic* extractor branch is in, and it\n * resolves it the same way, so a link filed directly and the same link filed via\n * the download fallback agree on one row instead of producing two.\n *\n * Keyed on the full URL rather than the filename: two unrelated clips are very\n * often both called `demo.mp4`, and a collision silently returns the wrong video\n * under a successful-looking response, which is far worse than a missed dedupe.\n * A signed URL carrying an expiring token simply never dedupes, which is the\n * harmless direction to fail in.\n */\nexport function directDedupeKey(source: string, rawUrl: string): string {\n return `${source}:${rawUrl}`;\n}\n\nfunction safePathname(rawUrl: string): string {\n try {\n return new URL(rawUrl).pathname.toLowerCase();\n } catch {\n return \"\";\n }\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-EIGXX6KI.js";
8
+ import {
9
+ ApiError,
10
+ apiGet
11
+ } from "./chunk-CUL3VB4L.js";
12
+ import {
13
+ getEnv
14
+ } from "./chunk-I4FTS5EE.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-FMGW2NZI.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,98 @@
1
+ import {
2
+ isRemoteUrl
3
+ } from "./chunk-VSU5R34H.js";
4
+ import {
5
+ detectImageContentType,
6
+ uploadLocalImage
7
+ } from "./chunk-AG62YO7C.js";
8
+ import {
9
+ IMAGE_GENERATE_MODELS,
10
+ MODEL_REGISTRY,
11
+ VIDEO_GENERATE_MODELS
12
+ } from "./chunk-CAMX6OHF.js";
13
+ import {
14
+ ApiError,
15
+ apiPost
16
+ } from "./chunk-CUL3VB4L.js";
17
+
18
+ // src/commands/studio/modelOptions.ts
19
+ function unionOfStringEnum(node, models, param) {
20
+ const values = /* @__PURE__ */ new Set();
21
+ for (const model of models) {
22
+ const schema = MODEL_REGISTRY[node][model]?.params[param];
23
+ if (schema?.kind === "string") for (const value of schema.enum ?? []) values.add(value);
24
+ }
25
+ return [...values];
26
+ }
27
+ function unionOfNumberEnum(node, models, param) {
28
+ const values = /* @__PURE__ */ new Set();
29
+ for (const model of models) {
30
+ const schema = MODEL_REGISTRY[node][model]?.params[param];
31
+ if (schema?.kind === "number") for (const value of schema.enum ?? []) values.add(value);
32
+ }
33
+ return [...values].sort((a, b) => a - b);
34
+ }
35
+ var IMAGE_MODEL_IDS = [...IMAGE_GENERATE_MODELS];
36
+ var VIDEO_MODEL_IDS = [...VIDEO_GENERATE_MODELS];
37
+ var IMAGE_SIZES = unionOfStringEnum("image_generate", IMAGE_GENERATE_MODELS, "image_size");
38
+ var IMAGE_QUALITIES = unionOfStringEnum("image_generate", IMAGE_GENERATE_MODELS, "quality");
39
+ var CLIP_RESOLUTIONS = unionOfStringEnum("video_generate", VIDEO_GENERATE_MODELS, "resolution");
40
+ var CLIP_DURATIONS = unionOfNumberEnum("video_generate", VIDEO_GENERATE_MODELS, "duration");
41
+ var CLIP_PERSON_GENERATION = unionOfStringEnum("video_generate", VIDEO_GENERATE_MODELS, "person_generation");
42
+
43
+ // src/commands/studio/references.ts
44
+ var LIBRARY_ID_RE = /^[a-z0-9]{16,}$/i;
45
+ var FILE_EXTENSION_RE = /\.[a-z0-9]{2,5}$/i;
46
+ var PATH_HINT_RE = /[/\\]/;
47
+ function classify(entry) {
48
+ if (isRemoteUrl(entry)) return { kind: "url", value: entry };
49
+ if (PATH_HINT_RE.test(entry) || FILE_EXTENSION_RE.test(entry)) return { kind: "path", value: entry };
50
+ if (LIBRARY_ID_RE.test(entry)) return { kind: "id", value: entry };
51
+ throw new ApiError(
52
+ "VALIDATION_ERROR",
53
+ `"${entry}" is not a library image id, a file path, or an image URL. Pass a comma-separated mix of those.`
54
+ );
55
+ }
56
+ function parseImageRefs(spec) {
57
+ return spec.split(",").map((entry) => entry.trim()).filter(Boolean).map(classify);
58
+ }
59
+ var defaultDeps = {
60
+ ingest: (url) => apiPost("/api/images/ingest", { url, source: "uploaded" }),
61
+ upload: (path) => uploadLocalImage({ file: path, contentType: detectImageContentType(path), source: "uploaded" })
62
+ };
63
+ async function resolveLibraryImageIds(spec, limit, deps = defaultDeps) {
64
+ const refs = parseImageRefs(spec);
65
+ if (limit && refs.length > limit.max) {
66
+ throw new ApiError("VALIDATION_ERROR", limit.refuse(refs.length));
67
+ }
68
+ const imageIds = [];
69
+ const added = [];
70
+ for (const ref of refs) {
71
+ if (ref.kind === "id") {
72
+ imageIds.push(ref.value);
73
+ continue;
74
+ }
75
+ const { imageId } = ref.kind === "url" ? await deps.ingest(ref.value) : await deps.upload(ref.value).catch(uploadFailure(ref.value));
76
+ imageIds.push(imageId);
77
+ added.push(imageId);
78
+ }
79
+ return { imageIds, added };
80
+ }
81
+ function uploadFailure(path) {
82
+ return (error) => {
83
+ if (error instanceof ApiError) throw error;
84
+ throw new ApiError("VALIDATION_ERROR", `Could not read "${path}" as an image.`);
85
+ };
86
+ }
87
+
88
+ export {
89
+ IMAGE_MODEL_IDS,
90
+ VIDEO_MODEL_IDS,
91
+ IMAGE_SIZES,
92
+ IMAGE_QUALITIES,
93
+ CLIP_RESOLUTIONS,
94
+ CLIP_DURATIONS,
95
+ CLIP_PERSON_GENERATION,
96
+ resolveLibraryImageIds
97
+ };
98
+ //# sourceMappingURL=chunk-FPZKKNDK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/studio/modelOptions.ts","../src/commands/studio/references.ts"],"sourcesContent":["import { IMAGE_GENERATE_MODELS, MODEL_REGISTRY, VIDEO_GENERATE_MODELS } from \"@baker/canvas-contract\";\n\n/**\n * What the curated roster accepts for one param, across every model that has it.\n *\n * Derived, never hand-copied: the contract registry is the source of truth for\n * which model takes which value, and a hand-written list in the CLI is a second\n * copy that goes stale the first time a model is added. `baker schema` reads\n * these, so the agent's picture of what is allowed comes from the same place the\n * backend's refusal does.\n *\n * The union is deliberately WIDER than any single model: `--quality 4k` is valid\n * on Seedance and `4K` on Veo (different providers, different casing), and both\n * belong in the advertised set. Whether the chosen model accepts the value the\n * caller picked is settled server-side, per model, with a message that names it.\n */\nfunction unionOfStringEnum(\n node: \"image_generate\" | \"video_generate\",\n models: readonly string[],\n param: string,\n): string[] {\n const values = new Set<string>();\n for (const model of models) {\n const schema = MODEL_REGISTRY[node][model]?.params[param];\n if (schema?.kind === \"string\") for (const value of schema.enum ?? []) values.add(value);\n }\n return [...values];\n}\n\n/** Every number the roster accepts for a param, ascending. */\nfunction unionOfNumberEnum(\n node: \"image_generate\" | \"video_generate\",\n models: readonly string[],\n param: string,\n): number[] {\n const values = new Set<number>();\n for (const model of models) {\n const schema = MODEL_REGISTRY[node][model]?.params[param];\n if (schema?.kind === \"number\") for (const value of schema.enum ?? []) values.add(value);\n }\n return [...values].sort((a, b) => a - b);\n}\n\nexport const IMAGE_MODEL_IDS = [...IMAGE_GENERATE_MODELS];\nexport const VIDEO_MODEL_IDS = [...VIDEO_GENERATE_MODELS];\n\nexport const IMAGE_SIZES = unionOfStringEnum(\"image_generate\", IMAGE_GENERATE_MODELS, \"image_size\");\nexport const IMAGE_QUALITIES = unionOfStringEnum(\"image_generate\", IMAGE_GENERATE_MODELS, \"quality\");\n\nexport const CLIP_RESOLUTIONS = unionOfStringEnum(\"video_generate\", VIDEO_GENERATE_MODELS, \"resolution\");\nexport const CLIP_DURATIONS = unionOfNumberEnum(\"video_generate\", VIDEO_GENERATE_MODELS, \"duration\");\nexport const CLIP_PERSON_GENERATION = unionOfStringEnum(\"video_generate\", VIDEO_GENERATE_MODELS, \"person_generation\");\n","import type { ImagesIngestResponse } from \"@baker/api\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { isRemoteUrl } from \"../../lib/image/io.ts\";\nimport { detectImageContentType, uploadLocalImage } from \"../images/api.ts\";\n\n/**\n * One entry of a `--reference` / `--image` spec, after classification.\n *\n * The studio takes LIBRARY image ids and nothing else: a reference has to be an\n * asset the dashboard can show next to the batch that used it, and inlined bytes\n * would put megabytes of base64 on a row the live feed reads. So the CLI accepts\n * the three things an agent actually has — an id it already knows, a file it just\n * wrote in the workspace, a URL it just found — and turns the last two into\n * library images before starting the batch. That also makes the reference\n * reusable: the next prompt can name the id.\n */\nexport type ImageRef = { kind: \"id\" | \"url\" | \"path\"; value: string };\n\n// Convex ids are long, unpadded alphanumerics with no separators and no\n// extension — distinguishable from both a filename and a prose fragment.\nconst LIBRARY_ID_RE = /^[a-z0-9]{16,}$/i;\nconst FILE_EXTENSION_RE = /\\.[a-z0-9]{2,5}$/i;\nconst PATH_HINT_RE = /[/\\\\]/;\n\nfunction classify(entry: string): ImageRef {\n if (isRemoteUrl(entry)) return { kind: \"url\", value: entry };\n if (PATH_HINT_RE.test(entry) || FILE_EXTENSION_RE.test(entry)) return { kind: \"path\", value: entry };\n if (LIBRARY_ID_RE.test(entry)) return { kind: \"id\", value: entry };\n throw new ApiError(\n \"VALIDATION_ERROR\",\n `\"${entry}\" is not a library image id, a file path, or an image URL. Pass a comma-separated mix of those.`,\n );\n}\n\n/**\n * Split a comma-separated spec and classify each entry. Order is preserved —\n * models read references positionally, and the first image is the frame a clip\n * starts from.\n */\nexport function parseImageRefs(spec: string): ImageRef[] {\n return spec\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean)\n .map(classify);\n}\n\nexport type ResolveLibraryImageDeps = {\n ingest: (url: string) => Promise<ImagesIngestResponse>;\n upload: (path: string) => Promise<{ imageId: string }>;\n};\n\nconst defaultDeps: ResolveLibraryImageDeps = {\n ingest: (url) => apiPost<ImagesIngestResponse>(\"/api/images/ingest\", { url, source: \"uploaded\" }),\n upload: (path) => uploadLocalImage({ file: path, contentType: detectImageContentType(path), source: \"uploaded\" }),\n};\n\n/** How many images the chosen model will take, and what to call them when it won't. */\nexport type ReferenceLimit = { max: number; refuse: (count: number) => string };\n\n/**\n * Turn a `--reference` / `--image` spec into the library image ids the studio\n * takes, adding anything that isn't already in the library.\n *\n * The batch is not started until every entry resolves: half a reference set is\n * a different brief, and paying for it is worse than failing the call.\n *\n * The count is checked FIRST, before a single upload or ingest. The backend\n * checks it too, but by the time it does the CLI has already downloaded and\n * described every image in a set it was always going to refuse — work the\n * caller pays for and then throws away.\n */\nexport async function resolveLibraryImageIds(\n spec: string,\n limit?: ReferenceLimit,\n deps: ResolveLibraryImageDeps = defaultDeps,\n): Promise<{ imageIds: string[]; added: string[] }> {\n const refs = parseImageRefs(spec);\n if (limit && refs.length > limit.max) {\n throw new ApiError(\"VALIDATION_ERROR\", limit.refuse(refs.length));\n }\n const imageIds: string[] = [];\n const added: string[] = [];\n for (const ref of refs) {\n if (ref.kind === \"id\") {\n imageIds.push(ref.value);\n continue;\n }\n const { imageId } =\n ref.kind === \"url\" ? await deps.ingest(ref.value) : await deps.upload(ref.value).catch(uploadFailure(ref.value));\n imageIds.push(imageId);\n added.push(imageId);\n }\n return { imageIds, added };\n}\n\nfunction uploadFailure(path: string): (error: unknown) => never {\n return (error) => {\n if (error instanceof ApiError) throw error;\n throw new ApiError(\"VALIDATION_ERROR\", `Could not read \"${path}\" as an image.`);\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,SAAS,kBACP,MACA,QACA,OACU;AACV,QAAM,SAAS,oBAAI,IAAY;AAC/B,aAAW,SAAS,QAAQ;AAC1B,UAAM,SAAS,eAAe,IAAI,EAAE,KAAK,GAAG,OAAO,KAAK;AACxD,QAAI,QAAQ,SAAS,SAAU,YAAW,SAAS,OAAO,QAAQ,CAAC,EAAG,QAAO,IAAI,KAAK;AAAA,EACxF;AACA,SAAO,CAAC,GAAG,MAAM;AACnB;AAGA,SAAS,kBACP,MACA,QACA,OACU;AACV,QAAM,SAAS,oBAAI,IAAY;AAC/B,aAAW,SAAS,QAAQ;AAC1B,UAAM,SAAS,eAAe,IAAI,EAAE,KAAK,GAAG,OAAO,KAAK;AACxD,QAAI,QAAQ,SAAS,SAAU,YAAW,SAAS,OAAO,QAAQ,CAAC,EAAG,QAAO,IAAI,KAAK;AAAA,EACxF;AACA,SAAO,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AACzC;AAEO,IAAM,kBAAkB,CAAC,GAAG,qBAAqB;AACjD,IAAM,kBAAkB,CAAC,GAAG,qBAAqB;AAEjD,IAAM,cAAc,kBAAkB,kBAAkB,uBAAuB,YAAY;AAC3F,IAAM,kBAAkB,kBAAkB,kBAAkB,uBAAuB,SAAS;AAE5F,IAAM,mBAAmB,kBAAkB,kBAAkB,uBAAuB,YAAY;AAChG,IAAM,iBAAiB,kBAAkB,kBAAkB,uBAAuB,UAAU;AAC5F,IAAM,yBAAyB,kBAAkB,kBAAkB,uBAAuB,mBAAmB;;;AC/BpH,IAAM,gBAAgB;AACtB,IAAM,oBAAoB;AAC1B,IAAM,eAAe;AAErB,SAAS,SAAS,OAAyB;AACzC,MAAI,YAAY,KAAK,EAAG,QAAO,EAAE,MAAM,OAAO,OAAO,MAAM;AAC3D,MAAI,aAAa,KAAK,KAAK,KAAK,kBAAkB,KAAK,KAAK,EAAG,QAAO,EAAE,MAAM,QAAQ,OAAO,MAAM;AACnG,MAAI,cAAc,KAAK,KAAK,EAAG,QAAO,EAAE,MAAM,MAAM,OAAO,MAAM;AACjE,QAAM,IAAI;AAAA,IACR;AAAA,IACA,IAAI,KAAK;AAAA,EACX;AACF;AAOO,SAAS,eAAe,MAA0B;AACvD,SAAO,KACJ,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,EACd,IAAI,QAAQ;AACjB;AAOA,IAAM,cAAuC;AAAA,EAC3C,QAAQ,CAAC,QAAQ,QAA8B,sBAAsB,EAAE,KAAK,QAAQ,WAAW,CAAC;AAAA,EAChG,QAAQ,CAAC,SAAS,iBAAiB,EAAE,MAAM,MAAM,aAAa,uBAAuB,IAAI,GAAG,QAAQ,WAAW,CAAC;AAClH;AAiBA,eAAsB,uBACpB,MACA,OACA,OAAgC,aACkB;AAClD,QAAM,OAAO,eAAe,IAAI;AAChC,MAAI,SAAS,KAAK,SAAS,MAAM,KAAK;AACpC,UAAM,IAAI,SAAS,oBAAoB,MAAM,OAAO,KAAK,MAAM,CAAC;AAAA,EAClE;AACA,QAAM,WAAqB,CAAC;AAC5B,QAAM,QAAkB,CAAC;AACzB,aAAW,OAAO,MAAM;AACtB,QAAI,IAAI,SAAS,MAAM;AACrB,eAAS,KAAK,IAAI,KAAK;AACvB;AAAA,IACF;AACA,UAAM,EAAE,QAAQ,IACd,IAAI,SAAS,QAAQ,MAAM,KAAK,OAAO,IAAI,KAAK,IAAI,MAAM,KAAK,OAAO,IAAI,KAAK,EAAE,MAAM,cAAc,IAAI,KAAK,CAAC;AACjH,aAAS,KAAK,OAAO;AACrB,UAAM,KAAK,OAAO;AAAA,EACpB;AACA,SAAO,EAAE,UAAU,MAAM;AAC3B;AAEA,SAAS,cAAc,MAAyC;AAC9D,SAAO,CAAC,UAAU;AAChB,QAAI,iBAAiB,SAAU,OAAM;AACrC,UAAM,IAAI,SAAS,oBAAoB,mBAAmB,IAAI,gBAAgB;AAAA,EAChF;AACF;","names":[]}