@koda-sl/baker-cli 0.442.0 → 0.443.0-dev.043c1d4ac

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 (1581) hide show
  1. package/README.md +38 -23
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-4H7QVBRK.js +80 -0
  5. package/dist/account-4H7QVBRK.js.map +1 -0
  6. package/dist/account-IEVEOFIK.js +49 -0
  7. package/dist/account-IEVEOFIK.js.map +1 -0
  8. package/dist/account-RDRK7NOE.js +79 -0
  9. package/dist/account-RDRK7NOE.js.map +1 -0
  10. package/dist/account-writes-AK42HGRM.js +66 -0
  11. package/dist/account-writes-AK42HGRM.js.map +1 -0
  12. package/dist/accounts-4CDRK4S4.js +75 -0
  13. package/dist/accounts-4CDRK4S4.js.map +1 -0
  14. package/dist/accounts-4TYIUVWY.js +77 -0
  15. package/dist/accounts-4TYIUVWY.js.map +1 -0
  16. package/dist/accounts-5QDKBZMH.js +115 -0
  17. package/dist/accounts-5QDKBZMH.js.map +1 -0
  18. package/dist/accounts-6COLJJHM.js +611 -0
  19. package/dist/accounts-6COLJJHM.js.map +1 -0
  20. package/dist/accounts-KYJO3JC6.js +114 -0
  21. package/dist/accounts-KYJO3JC6.js.map +1 -0
  22. package/dist/actions-PEI6ZQAG.js +55 -0
  23. package/dist/active-entities-YUSOUR5M.js +103 -0
  24. package/dist/active-entities-YUSOUR5M.js.map +1 -0
  25. package/dist/activities-ZVQOBHZH.js +74 -0
  26. package/dist/activities-ZVQOBHZH.js.map +1 -0
  27. package/dist/ad-group-writes-QQS4223F.js +170 -0
  28. package/dist/ad-group-writes-QQS4223F.js.map +1 -0
  29. package/dist/ad-groups-WGPDPUI2.js +68 -0
  30. package/dist/ad-groups-WGPDPUI2.js.map +1 -0
  31. package/dist/ad-writes-XE2IE4DS.js +174 -0
  32. package/dist/ad-writes-XE2IE4DS.js.map +1 -0
  33. package/dist/add-577QWMCF.js +97 -0
  34. package/dist/add-577QWMCF.js.map +1 -0
  35. package/dist/add-CUWAW7KG.js +105 -0
  36. package/dist/add-CUWAW7KG.js.map +1 -0
  37. package/dist/add-XDOQQCHS.js +104 -0
  38. package/dist/add-XDOQQCHS.js.map +1 -0
  39. package/dist/add-XEDSBYLM.js +280 -0
  40. package/dist/add-XEDSBYLM.js.map +1 -0
  41. package/dist/ads-BCOSQALY.js +77 -0
  42. package/dist/ads-BCOSQALY.js.map +1 -0
  43. package/dist/ads-H7GH7A26.js +113 -0
  44. package/dist/ads-H7GH7A26.js.map +1 -0
  45. package/dist/ads-TJ7ACFHG.js +40 -0
  46. package/dist/adsets-H7QT42U6.js +176 -0
  47. package/dist/adsets-H7QT42U6.js.map +1 -0
  48. package/dist/advertisers-WSNHNCBQ.js +116 -0
  49. package/dist/advertisers-WSNHNCBQ.js.map +1 -0
  50. package/dist/advertisers-YMHPZYNF.js +111 -0
  51. package/dist/advertisers-YMHPZYNF.js.map +1 -0
  52. package/dist/analytics-PT2GKCFU.js +1958 -0
  53. package/dist/analytics-PT2GKCFU.js.map +1 -0
  54. package/dist/analytics-ZVWUY66X.js +433 -0
  55. package/dist/analytics-ZVWUY66X.js.map +1 -0
  56. package/dist/animate-3Z7HXOLE.js +480 -0
  57. package/dist/animate-3Z7HXOLE.js.map +1 -0
  58. package/dist/assign-B26AJLGN.js +77 -0
  59. package/dist/assign-B26AJLGN.js.map +1 -0
  60. package/dist/audience-size-ZX565D5P.js +94 -0
  61. package/dist/audience-size-ZX565D5P.js.map +1 -0
  62. package/dist/audiences-HFRVIE2X.js +85 -0
  63. package/dist/audiences-HFRVIE2X.js.map +1 -0
  64. package/dist/audiences-JACGRBNN.js +78 -0
  65. package/dist/audiences-JACGRBNN.js.map +1 -0
  66. package/dist/audiences-TGD5US2M.js +268 -0
  67. package/dist/audiences-TGD5US2M.js.map +1 -0
  68. package/dist/audit-AD4ZZNJN.js +88 -0
  69. package/dist/audit-AD4ZZNJN.js.map +1 -0
  70. package/dist/audit-SAXVPGWS.js +151 -0
  71. package/dist/audit-SAXVPGWS.js.map +1 -0
  72. package/dist/autocomplete-6PYFCOMX.js +107 -0
  73. package/dist/autocomplete-6PYFCOMX.js.map +1 -0
  74. package/dist/avatars-2UQJXHPV.js +38 -0
  75. package/dist/bid-pricing-WSHACGX4.js +99 -0
  76. package/dist/bid-pricing-WSHACGX4.js.map +1 -0
  77. package/dist/brand-XBABUT52.js +22 -0
  78. package/dist/brief-KKNC32TA.js +478 -0
  79. package/dist/brief-KKNC32TA.js.map +1 -0
  80. package/dist/businesses-JBDQZZIG.js +53 -0
  81. package/dist/businesses-JBDQZZIG.js.map +1 -0
  82. package/dist/campaign-groups-G35366AW.js +95 -0
  83. package/dist/campaign-groups-G35366AW.js.map +1 -0
  84. package/dist/campaign-writes-SXLZFYF6.js +170 -0
  85. package/dist/campaign-writes-SXLZFYF6.js.map +1 -0
  86. package/dist/campaign-writes-ZQGN7FQ3.js +165 -0
  87. package/dist/campaign-writes-ZQGN7FQ3.js.map +1 -0
  88. package/dist/campaigns-GXUCHQ2S.js +109 -0
  89. package/dist/campaigns-GXUCHQ2S.js.map +1 -0
  90. package/dist/campaigns-WBEG5QA4.js +110 -0
  91. package/dist/campaigns-WBEG5QA4.js.map +1 -0
  92. package/dist/campaigns-WECN54WV.js +107 -0
  93. package/dist/campaigns-WECN54WV.js.map +1 -0
  94. package/dist/campaigns-YS3OGQXO.js +76 -0
  95. package/dist/campaigns-YS3OGQXO.js.map +1 -0
  96. package/dist/canvas-KEXE5P6S.js +46 -0
  97. package/dist/capabilities-74I5AQ36.js +144 -0
  98. package/dist/capabilities-74I5AQ36.js.map +1 -0
  99. package/dist/cards-4477BFEV.js +85 -0
  100. package/dist/cards-4477BFEV.js.map +1 -0
  101. package/dist/catalog-IQEQ5TGQ.js +66 -0
  102. package/dist/catalog-IQEQ5TGQ.js.map +1 -0
  103. package/dist/catalogs-BRXEDE56.js +128 -0
  104. package/dist/catalogs-BRXEDE56.js.map +1 -0
  105. package/dist/changes-6QBJMGJC.js +135 -0
  106. package/dist/changes-6QBJMGJC.js.map +1 -0
  107. package/dist/chatgpt-7W75X3ER.js +47 -0
  108. package/dist/chats-DWHF64IU.js +262 -0
  109. package/dist/chats-DWHF64IU.js.map +1 -0
  110. package/dist/chunk-27NMXSC3.js +486 -0
  111. package/dist/chunk-27NMXSC3.js.map +1 -0
  112. package/dist/chunk-2CD5ZP7M.js +6659 -0
  113. package/dist/chunk-2CD5ZP7M.js.map +1 -0
  114. package/dist/chunk-2TK4DEOE.js +74 -0
  115. package/dist/chunk-3RJ3VGJP.js +197 -0
  116. package/dist/chunk-3RJ3VGJP.js.map +1 -0
  117. package/dist/chunk-4NDCTLI5.js +191 -0
  118. package/dist/chunk-4NZ47VXO.js +137 -0
  119. package/dist/chunk-4NZ47VXO.js.map +1 -0
  120. package/dist/chunk-4SJDDGPV.js +1411 -0
  121. package/dist/chunk-4SJDDGPV.js.map +1 -0
  122. package/dist/chunk-5ARG3CQG.js +141 -0
  123. package/dist/chunk-5HYSKH77.js +315 -0
  124. package/dist/chunk-5HYSKH77.js.map +1 -0
  125. package/dist/chunk-5Z2KSVIV.js +67 -0
  126. package/dist/chunk-654U6NU6.js +534 -0
  127. package/dist/chunk-654U6NU6.js.map +1 -0
  128. package/dist/chunk-6B7VKFS4.js +172 -0
  129. package/dist/chunk-6G5K6ZC6.js +46 -0
  130. package/dist/chunk-73QKIIIR.js +23 -0
  131. package/dist/chunk-75FDTDLH.js +96 -0
  132. package/dist/chunk-75VNSKS3.js +455 -0
  133. package/dist/chunk-75VNSKS3.js.map +1 -0
  134. package/dist/chunk-7GPDUS3P.js +494 -0
  135. package/dist/chunk-7GPDUS3P.js.map +1 -0
  136. package/dist/chunk-7J6EHOH6.js +274 -0
  137. package/dist/chunk-7OFNN4CT.js +58 -0
  138. package/dist/chunk-7QJVPMVB.js +592 -0
  139. package/dist/chunk-7QJVPMVB.js.map +1 -0
  140. package/dist/chunk-AN447DQB.js +159 -0
  141. package/dist/chunk-AN447DQB.js.map +1 -0
  142. package/dist/chunk-BYDF22T4.js +346 -0
  143. package/dist/chunk-BYDF22T4.js.map +1 -0
  144. package/dist/chunk-C6U6UDHJ.js +106 -0
  145. package/dist/chunk-CLMM6P6B.js +1751 -0
  146. package/dist/chunk-CLMM6P6B.js.map +1 -0
  147. package/dist/chunk-DIY6QR3E.js +96 -0
  148. package/dist/chunk-EFSYTROP.js +94 -0
  149. package/dist/chunk-EIP4PYCL.js +496 -0
  150. package/dist/chunk-EIP4PYCL.js.map +1 -0
  151. package/dist/chunk-EZUG6WE2.js +60 -0
  152. package/dist/chunk-EZUG6WE2.js.map +1 -0
  153. package/dist/chunk-F2S5BLPE.js +97 -0
  154. package/dist/chunk-F2S5BLPE.js.map +1 -0
  155. package/dist/chunk-FEXDI4NM.js +103 -0
  156. package/dist/chunk-FHXIEMCG.js +382 -0
  157. package/dist/chunk-FTWJFDIN.js +23992 -0
  158. package/dist/chunk-FTWJFDIN.js.map +1 -0
  159. package/dist/chunk-FXED3VZK.js +174 -0
  160. package/dist/chunk-FXED3VZK.js.map +1 -0
  161. package/dist/chunk-GIJT3A5U.js +166 -0
  162. package/dist/chunk-GIJT3A5U.js.map +1 -0
  163. package/dist/chunk-H26L3OQY.js +42 -0
  164. package/dist/chunk-HIPDMQZ6.js +136 -0
  165. package/dist/chunk-HMEFD2CG.js +5163 -0
  166. package/dist/chunk-HMEFD2CG.js.map +1 -0
  167. package/dist/chunk-HO3IUJ4K.js +70 -0
  168. package/dist/chunk-HO3IUJ4K.js.map +1 -0
  169. package/dist/chunk-HXTGYOQC.js +813 -0
  170. package/dist/chunk-HXTGYOQC.js.map +1 -0
  171. package/dist/chunk-HYCIBVDW.js +98 -0
  172. package/dist/chunk-ICM2OXZV.js +304 -0
  173. package/dist/chunk-ICM2OXZV.js.map +1 -0
  174. package/dist/chunk-IFWP3ZDO.js +215 -0
  175. package/dist/chunk-IKGWQBKJ.js +422 -0
  176. package/dist/chunk-IKGWQBKJ.js.map +1 -0
  177. package/dist/chunk-IXKEWS7X.js +433 -0
  178. package/dist/chunk-JERXV5A3.js +26 -0
  179. package/dist/chunk-JM73NDCM.js +163 -0
  180. package/dist/chunk-JM73NDCM.js.map +1 -0
  181. package/dist/chunk-K3PN7TN5.js +84 -0
  182. package/dist/chunk-K3PN7TN5.js.map +1 -0
  183. package/dist/chunk-KLNKEVIY.js +136 -0
  184. package/dist/chunk-KNY76UGC.js +84 -0
  185. package/dist/chunk-KWAOTV7F.js +830 -0
  186. package/dist/chunk-L3OLEAJN.js +92 -0
  187. package/dist/chunk-L3OLEAJN.js.map +1 -0
  188. package/dist/chunk-LERTEZST.js +28 -0
  189. package/dist/chunk-LL2CD5WU.js +310 -0
  190. package/dist/chunk-LO6GEJ4Z.js +51 -0
  191. package/dist/chunk-LS5MTRFI.js +106 -0
  192. package/dist/chunk-LZ73CZGP.js +188 -0
  193. package/dist/chunk-MELOSESI.js +20 -0
  194. package/dist/chunk-MLU6STIN.js +66 -0
  195. package/dist/chunk-MLU6STIN.js.map +1 -0
  196. package/dist/chunk-MZL4H5PY.js +225 -0
  197. package/dist/chunk-MZL4H5PY.js.map +1 -0
  198. package/dist/chunk-NAWWC5I3.js +454 -0
  199. package/dist/chunk-NFSLRRIE.js +77 -0
  200. package/dist/chunk-NFSLRRIE.js.map +1 -0
  201. package/dist/chunk-NPE7EWBE.js +297 -0
  202. package/dist/chunk-NU7JSWVA.js +946 -0
  203. package/dist/chunk-NU7JSWVA.js.map +1 -0
  204. package/dist/chunk-OBDAYP2P.js +3155 -0
  205. package/dist/chunk-OBDAYP2P.js.map +1 -0
  206. package/dist/chunk-OC5IJSIW.js +420 -0
  207. package/dist/chunk-OC5IJSIW.js.map +1 -0
  208. package/dist/chunk-OKG6GX2F.js +169 -0
  209. package/dist/chunk-OTFHEHIU.js +1706 -0
  210. package/dist/chunk-OTFHEHIU.js.map +1 -0
  211. package/dist/chunk-PBA3YCZA.js +76 -0
  212. package/dist/chunk-PWGWMIIJ.js +25 -0
  213. package/dist/chunk-QHLB5V7J.js +19 -0
  214. package/dist/chunk-QJE6ZYGI.js +131 -0
  215. package/dist/chunk-QSN5MZGS.js +74 -0
  216. package/dist/chunk-QXZYAIWS.js +390 -0
  217. package/dist/chunk-QXZYAIWS.js.map +1 -0
  218. package/dist/chunk-RRUJQVWA.js +4372 -0
  219. package/dist/chunk-RRUJQVWA.js.map +1 -0
  220. package/dist/chunk-RSW6QJPH.js +217 -0
  221. package/dist/chunk-RX6F3GEA.js +610 -0
  222. package/dist/chunk-RX6F3GEA.js.map +1 -0
  223. package/dist/chunk-SBMIQDCX.js +175 -0
  224. package/dist/chunk-SJDPHVGE.js +363 -0
  225. package/dist/chunk-SJDPHVGE.js.map +1 -0
  226. package/dist/chunk-STIB5DR5.js +56 -0
  227. package/dist/chunk-TBEUMOEL.js +95 -0
  228. package/dist/chunk-TCNNOLVZ.js +207 -0
  229. package/dist/chunk-TCNNOLVZ.js.map +1 -0
  230. package/dist/chunk-TD2P4HBP.js +55 -0
  231. package/dist/chunk-URIYUZIN.js +111 -0
  232. package/dist/chunk-URIYUZIN.js.map +1 -0
  233. package/dist/chunk-VAJBWA2U.js +75 -0
  234. package/dist/chunk-VAJBWA2U.js.map +1 -0
  235. package/dist/chunk-VBHDZSI5.js +57 -0
  236. package/dist/chunk-VFIOJD5M.js +309 -0
  237. package/dist/chunk-VVZBBKRC.js +296 -0
  238. package/dist/chunk-VWCELTQE.js +1079 -0
  239. package/dist/chunk-VWCELTQE.js.map +1 -0
  240. package/dist/chunk-W3B4BHQU.js +31 -0
  241. package/dist/chunk-W3ZHJJVT.js +139 -0
  242. package/dist/chunk-W3ZHJJVT.js.map +1 -0
  243. package/dist/chunk-WS2GMOSG.js +74 -0
  244. package/dist/chunk-XBOK23HI.js +214 -0
  245. package/dist/chunk-XG3XCHN6.js +26 -0
  246. package/dist/chunk-XL3BMSYG.js +125 -0
  247. package/dist/chunk-XWH7CCBL.js +6065 -0
  248. package/dist/chunk-XWH7CCBL.js.map +1 -0
  249. package/dist/chunk-XYMPS526.js +622 -0
  250. package/dist/chunk-Y5ZGWLWP.js +2882 -0
  251. package/dist/chunk-Y5ZGWLWP.js.map +1 -0
  252. package/dist/chunk-YBMVHGY3.js +333 -0
  253. package/dist/chunk-ZJ47BR6X.js +337 -0
  254. package/dist/chunk-ZJ47BR6X.js.map +1 -0
  255. package/dist/chunk-ZNBDKK4Y.js +76 -0
  256. package/dist/chunk-ZNBDKK4Y.js.map +1 -0
  257. package/dist/chunk-ZXTW3TXY.js +133 -0
  258. package/dist/chunk-ZXTW3TXY.js.map +1 -0
  259. package/dist/claim-EIL4ZBSN.js +197 -0
  260. package/dist/claim-EIL4ZBSN.js.map +1 -0
  261. package/dist/cli.js +36 -37
  262. package/dist/cli.js.map +1 -1
  263. package/dist/client-VHN32ZRE.js +19 -0
  264. package/dist/code-YS6ZMGX3.js +76 -0
  265. package/dist/code-YS6ZMGX3.js.map +1 -0
  266. package/dist/companies-2UG7RDYN.js +195 -0
  267. package/dist/companies-2UG7RDYN.js.map +1 -0
  268. package/dist/complete-I4KRFYMD.js +81 -0
  269. package/dist/complete-I4KRFYMD.js.map +1 -0
  270. package/dist/config-CQN5FHMZ.js +88 -0
  271. package/dist/config-CQN5FHMZ.js.map +1 -0
  272. package/dist/connect-TA5W6YGW.js +36 -0
  273. package/dist/content-3ZPP4SW2.js +81 -0
  274. package/dist/content-3ZPP4SW2.js.map +1 -0
  275. package/dist/conversation-BJI54MI6.js +93 -0
  276. package/dist/conversation-BJI54MI6.js.map +1 -0
  277. package/dist/conversion-report-XQBJ6LG4.js +125 -0
  278. package/dist/conversion-report-XQBJ6LG4.js.map +1 -0
  279. package/dist/conversion-upload-command-JULHGVIR.js +438 -0
  280. package/dist/conversion-upload-command-JULHGVIR.js.map +1 -0
  281. package/dist/conversion-writes-UBCVXP2E.js +120 -0
  282. package/dist/conversion-writes-UBCVXP2E.js.map +1 -0
  283. package/dist/conversions-D236RTUK.js +76 -0
  284. package/dist/conversions-D236RTUK.js.map +1 -0
  285. package/dist/conversions-VJOJ5S4U.js +135 -0
  286. package/dist/conversions-VJOJ5S4U.js.map +1 -0
  287. package/dist/countries-FYHM3IMJ.js +82 -0
  288. package/dist/countries-FYHM3IMJ.js.map +1 -0
  289. package/dist/create-E7BIZNUC.js +130 -0
  290. package/dist/create-E7BIZNUC.js.map +1 -0
  291. package/dist/create-HKOO7O5L.js +59 -0
  292. package/dist/create-HKOO7O5L.js.map +1 -0
  293. package/dist/create-JLQCXAT2.js +207 -0
  294. package/dist/create-JLQCXAT2.js.map +1 -0
  295. package/dist/create-VY3RQXOY.js +235 -0
  296. package/dist/create-VY3RQXOY.js.map +1 -0
  297. package/dist/creatives-PSWCNY7U.js +87 -0
  298. package/dist/creatives-PSWCNY7U.js.map +1 -0
  299. package/dist/creatives-QXMBEA2V.js +51 -0
  300. package/dist/creatives-QXMBEA2V.js.map +1 -0
  301. package/dist/creatives-VXQQUH2F.js +182 -0
  302. package/dist/creatives-VXQQUH2F.js.map +1 -0
  303. package/dist/credentials-G5BJK7OR.js +1055 -0
  304. package/dist/credentials-G5BJK7OR.js.map +1 -0
  305. package/dist/critique-CMLAPVUB.js +1449 -0
  306. package/dist/critique-CMLAPVUB.js.map +1 -0
  307. package/dist/critique-O5VNNBPB.js +214 -0
  308. package/dist/critique-O5VNNBPB.js.map +1 -0
  309. package/dist/crm-CL7R67FT.js +224 -0
  310. package/dist/crm-CL7R67FT.js.map +1 -0
  311. package/dist/crm-GJCAM3DI.js +318 -0
  312. package/dist/crm-GJCAM3DI.js.map +1 -0
  313. package/dist/crop-2J4RKJ6B.js +113 -0
  314. package/dist/crop-2J4RKJ6B.js.map +1 -0
  315. package/dist/currency-DJDVIR3C.js +88 -0
  316. package/dist/currency-DJDVIR3C.js.map +1 -0
  317. package/dist/custom-conversions-6P555U2K.js +125 -0
  318. package/dist/custom-conversions-6P555U2K.js.map +1 -0
  319. package/dist/customers-4RJGRR2Y.js +56 -0
  320. package/dist/delete-3AV3ARMX.js +71 -0
  321. package/dist/delete-3AV3ARMX.js.map +1 -0
  322. package/dist/delete-4QXLTL24.js +63 -0
  323. package/dist/delete-4QXLTL24.js.map +1 -0
  324. package/dist/delete-A5XD52K4.js +69 -0
  325. package/dist/delete-A5XD52K4.js.map +1 -0
  326. package/dist/delete-IJNJTAGW.js +54 -0
  327. package/dist/delete-IJNJTAGW.js.map +1 -0
  328. package/dist/delete-MRM2S4Z5.js +71 -0
  329. package/dist/delete-MRM2S4Z5.js.map +1 -0
  330. package/dist/delete-R57JFJ3A.js +66 -0
  331. package/dist/delete-R57JFJ3A.js.map +1 -0
  332. package/dist/demographics-VMARSTTE.js +138 -0
  333. package/dist/demographics-VMARSTTE.js.map +1 -0
  334. package/dist/describe-6NVOWIBE.js +97 -0
  335. package/dist/describe-6NVOWIBE.js.map +1 -0
  336. package/dist/describe-P3PPIQME.js +97 -0
  337. package/dist/describe-P3PPIQME.js.map +1 -0
  338. package/dist/dimensions-EYAYO27I.js +101 -0
  339. package/dist/dimensions-EYAYO27I.js.map +1 -0
  340. package/dist/discard-Y2BKPW4Z.js +66 -0
  341. package/dist/discard-Y2BKPW4Z.js.map +1 -0
  342. package/dist/discover-M3ZKKFEL.js +172 -0
  343. package/dist/discover-M3ZKKFEL.js.map +1 -0
  344. package/dist/domain-YTHDTRWN.js +98 -0
  345. package/dist/domain-YTHDTRWN.js.map +1 -0
  346. package/dist/download-7T6HIJKD.js +299 -0
  347. package/dist/download-7T6HIJKD.js.map +1 -0
  348. package/dist/draft-ABGQYDHP.js +328 -0
  349. package/dist/draft-ABGQYDHP.js.map +1 -0
  350. package/dist/draft-BGUJDHXR.js +103 -0
  351. package/dist/draft-BGUJDHXR.js.map +1 -0
  352. package/dist/draft-KIBMVKSR.js +100 -0
  353. package/dist/draft-KIBMVKSR.js.map +1 -0
  354. package/dist/draft-KOLU5BRR.js +217 -0
  355. package/dist/draft-KOLU5BRR.js.map +1 -0
  356. package/dist/draft-MNFJ4G3C.js +281 -0
  357. package/dist/draft-MNFJ4G3C.js.map +1 -0
  358. package/dist/draft-U6CT6LCC.js +107 -0
  359. package/dist/draft-U6CT6LCC.js.map +1 -0
  360. package/dist/draft-YDY2Q2K6.js +233 -0
  361. package/dist/draft-YDY2Q2K6.js.map +1 -0
  362. package/dist/draft-ZVVUAMMQ.js +306 -0
  363. package/dist/draft-ZVVUAMMQ.js.map +1 -0
  364. package/dist/engine/index.d.ts +10 -0
  365. package/dist/engine/index.js +16 -17
  366. package/dist/env-KIP2J2UB.js +43 -0
  367. package/dist/experiment-LKK77YAN.js +1377 -0
  368. package/dist/experiment-LKK77YAN.js.map +1 -0
  369. package/dist/export-JQRMBJ7D.js +168 -0
  370. package/dist/export-JQRMBJ7D.js.map +1 -0
  371. package/dist/extract-7QKLME7Z.js +113 -0
  372. package/dist/extract-7QKLME7Z.js.map +1 -0
  373. package/dist/facets-UXN4MYPO.js +114 -0
  374. package/dist/facets-UXN4MYPO.js.map +1 -0
  375. package/dist/favorites-NSGF4OV5.js +178 -0
  376. package/dist/favorites-NSGF4OV5.js.map +1 -0
  377. package/dist/feed-RV4KPPXM.js +157 -0
  378. package/dist/feed-RV4KPPXM.js.map +1 -0
  379. package/dist/feedback-3FQYLADC.js +66 -0
  380. package/dist/feedback-3FQYLADC.js.map +1 -0
  381. package/dist/feedback-record-DTRZC73R.js +176 -0
  382. package/dist/feedback-record-DTRZC73R.js.map +1 -0
  383. package/dist/fetch-UTTJAOLC.js +171 -0
  384. package/dist/fetch-UTTJAOLC.js.map +1 -0
  385. package/dist/fetch-XF76JABV.js +139 -0
  386. package/dist/fetch-XF76JABV.js.map +1 -0
  387. package/dist/find-OTDIX6V4.js +134 -0
  388. package/dist/find-OTDIX6V4.js.map +1 -0
  389. package/dist/fit-KXHYKIA4.js +43 -0
  390. package/dist/flows-PB4K66NJ.js +244 -0
  391. package/dist/flows-PB4K66NJ.js.map +1 -0
  392. package/dist/follow-DUIEGDVK.js +82 -0
  393. package/dist/follow-DUIEGDVK.js.map +1 -0
  394. package/dist/follow-competitors-IT5ZVJPE.js +131 -0
  395. package/dist/follow-competitors-IT5ZVJPE.js.map +1 -0
  396. package/dist/following-RKC2FLHI.js +109 -0
  397. package/dist/following-RKC2FLHI.js.map +1 -0
  398. package/dist/fonts-NTOQS2KU.js +34 -0
  399. package/dist/forecast-RWDIDDWP.js +104 -0
  400. package/dist/forecast-RWDIDDWP.js.map +1 -0
  401. package/dist/funding-NYO65IMT.js +85 -0
  402. package/dist/funding-NYO65IMT.js.map +1 -0
  403. package/dist/funnel-XCKPRYTV.js +837 -0
  404. package/dist/funnel-XCKPRYTV.js.map +1 -0
  405. package/dist/ga4-UDQ2HA2J.js +55 -0
  406. package/dist/generate-DMQUS665.js +262 -0
  407. package/dist/generate-DMQUS665.js.map +1 -0
  408. package/dist/get-3L6W3E3T.js +59 -0
  409. package/dist/get-3L6W3E3T.js.map +1 -0
  410. package/dist/get-67IG7SZI.js +78 -0
  411. package/dist/get-67IG7SZI.js.map +1 -0
  412. package/dist/get-6WEYKOY6.js +63 -0
  413. package/dist/get-6WEYKOY6.js.map +1 -0
  414. package/dist/get-P743RPSI.js +63 -0
  415. package/dist/get-P743RPSI.js.map +1 -0
  416. package/dist/get-WO22OCMZ.js +54 -0
  417. package/dist/get-WO22OCMZ.js.map +1 -0
  418. package/dist/get-XN5ZGDIK.js +61 -0
  419. package/dist/get-XN5ZGDIK.js.map +1 -0
  420. package/dist/get-YIHTAMRT.js +92 -0
  421. package/dist/get-YIHTAMRT.js.map +1 -0
  422. package/dist/gif-53ULFVLR.js +94 -0
  423. package/dist/gif-53ULFVLR.js.map +1 -0
  424. package/dist/google-KIBLORXX.js +1872 -0
  425. package/dist/google-KIBLORXX.js.map +1 -0
  426. package/dist/google-KTO3PLEU.js +136 -0
  427. package/dist/google-KTO3PLEU.js.map +1 -0
  428. package/dist/group-EFZ3AJIE.js +43 -0
  429. package/dist/group-EFZ3AJIE.js.map +1 -0
  430. package/dist/group-GKWCCX66.js +43 -0
  431. package/dist/group-GKWCCX66.js.map +1 -0
  432. package/dist/gsc-P3QYGDV2.js +30 -0
  433. package/dist/history-PBFRKLU6.js +133 -0
  434. package/dist/history-PBFRKLU6.js.map +1 -0
  435. package/dist/history-Q3QCT64S.js +67 -0
  436. package/dist/history-Q3QCT64S.js.map +1 -0
  437. package/dist/hubspot-PMOZST7W.js +779 -0
  438. package/dist/hubspot-PMOZST7W.js.map +1 -0
  439. package/dist/icon-I43F77FV.js +137 -0
  440. package/dist/icon-I43F77FV.js.map +1 -0
  441. package/dist/ideas-PU7IAX6F.js +32 -0
  442. package/dist/images-QI2HTX6B.js +90 -0
  443. package/dist/improve-BCCU5AS6.js +86 -0
  444. package/dist/improve-BCCU5AS6.js.map +1 -0
  445. package/dist/ingest-BYJNFOOT.js +23 -0
  446. package/dist/ingest-ZQM47NVZ.js +107 -0
  447. package/dist/ingest-ZQM47NVZ.js.map +1 -0
  448. package/dist/insights-LNAXV2CG.js +122 -0
  449. package/dist/insights-LNAXV2CG.js.map +1 -0
  450. package/dist/insights-NZWSJKU4.js +423 -0
  451. package/dist/insights-NZWSJKU4.js.map +1 -0
  452. package/dist/inspect-CQH55Q6G.js +189 -0
  453. package/dist/inspect-CQH55Q6G.js.map +1 -0
  454. package/dist/inspiration-I4MMKAWA.js +53 -0
  455. package/dist/intent-ICKFJRT2.js +95 -0
  456. package/dist/intent-ICKFJRT2.js.map +1 -0
  457. package/dist/job-L7RJZMSG.js +202 -0
  458. package/dist/job-L7RJZMSG.js.map +1 -0
  459. package/dist/job-create-JUDAN52O.js +109 -0
  460. package/dist/job-create-JUDAN52O.js.map +1 -0
  461. package/dist/job-status-U43WE3RJ.js +74 -0
  462. package/dist/job-status-U43WE3RJ.js.map +1 -0
  463. package/dist/keep-55CPC7DG.js +78 -0
  464. package/dist/keep-55CPC7DG.js.map +1 -0
  465. package/dist/keyword-gap-NGPH32FN.js +130 -0
  466. package/dist/keyword-gap-NGPH32FN.js.map +1 -0
  467. package/dist/keyword-metrics-E3NJUSEQ.js +197 -0
  468. package/dist/keyword-metrics-E3NJUSEQ.js.map +1 -0
  469. package/dist/keywords-for-site-RH47P4GJ.js +124 -0
  470. package/dist/keywords-for-site-RH47P4GJ.js.map +1 -0
  471. package/dist/landing-4PA7GCPM.js +28 -0
  472. package/dist/landing-4PA7GCPM.js.map +1 -0
  473. package/dist/languages-JDYL2N5F.js +40 -0
  474. package/dist/languages-JDYL2N5F.js.map +1 -0
  475. package/dist/languages-JMVNOHMG.js +55 -0
  476. package/dist/languages-JMVNOHMG.js.map +1 -0
  477. package/dist/layerize-RPD6SNP6.js +190 -0
  478. package/dist/layerize-RPD6SNP6.js.map +1 -0
  479. package/dist/leads-7EVHMNUF.js +293 -0
  480. package/dist/leads-7EVHMNUF.js.map +1 -0
  481. package/dist/leads-I7BO5V7P.js +90 -0
  482. package/dist/leads-I7BO5V7P.js.map +1 -0
  483. package/dist/learn-HZU3QWNN.js +204 -0
  484. package/dist/library-ARKRLCNJ.js +109 -0
  485. package/dist/library-ARKRLCNJ.js.map +1 -0
  486. package/dist/lighthouse-NQBUCHTW.js +75 -0
  487. package/dist/lighthouse-NQBUCHTW.js.map +1 -0
  488. package/dist/line-item-writes-JSR53MID.js +208 -0
  489. package/dist/line-item-writes-JSR53MID.js.map +1 -0
  490. package/dist/line-items-2WFLKOOR.js +103 -0
  491. package/dist/line-items-2WFLKOOR.js.map +1 -0
  492. package/dist/link-AYXOJQDV.js +64 -0
  493. package/dist/link-AYXOJQDV.js.map +1 -0
  494. package/dist/linkedin-M2PVZYLV.js +1008 -0
  495. package/dist/linkedin-M2PVZYLV.js.map +1 -0
  496. package/dist/list-3OKEMUFD.js +151 -0
  497. package/dist/list-3OKEMUFD.js.map +1 -0
  498. package/dist/list-4MQC23JH.js +63 -0
  499. package/dist/list-4MQC23JH.js.map +1 -0
  500. package/dist/list-7MVBXOJT.js +51 -0
  501. package/dist/list-7MVBXOJT.js.map +1 -0
  502. package/dist/list-A5UCIR2J.js +65 -0
  503. package/dist/list-A5UCIR2J.js.map +1 -0
  504. package/dist/list-AL7N6X2P.js +50 -0
  505. package/dist/list-AL7N6X2P.js.map +1 -0
  506. package/dist/list-LI4OGQFW.js +57 -0
  507. package/dist/list-LI4OGQFW.js.map +1 -0
  508. package/dist/list-P7NAFN6J.js +76 -0
  509. package/dist/list-P7NAFN6J.js.map +1 -0
  510. package/dist/list-QGLIL7J6.js +303 -0
  511. package/dist/list-QGLIL7J6.js.map +1 -0
  512. package/dist/locations-2NKBJKBT.js +67 -0
  513. package/dist/locations-2NKBJKBT.js.map +1 -0
  514. package/dist/locations-S4U6IJIS.js +40 -0
  515. package/dist/locations-S4U6IJIS.js.map +1 -0
  516. package/dist/log-QHR2JNKW.js +92 -0
  517. package/dist/log-QHR2JNKW.js.map +1 -0
  518. package/dist/logo-2IP663QO.js +18 -0
  519. package/dist/lookup-XK45W2SH.js +22 -0
  520. package/dist/make-ANPR2D2L.js +516 -0
  521. package/dist/make-ANPR2D2L.js.map +1 -0
  522. package/dist/map-3BVFAP33.js +404 -0
  523. package/dist/map-3BVFAP33.js.map +1 -0
  524. package/dist/mcp-LH5KR6RO.js +476 -0
  525. package/dist/mcp-LH5KR6RO.js.map +1 -0
  526. package/dist/media-6CQYG4UY.js +89 -0
  527. package/dist/media-6CQYG4UY.js.map +1 -0
  528. package/dist/media-M7E6V2XU.js +15 -0
  529. package/dist/media-sources-3D246I3O.js +32 -0
  530. package/dist/members-4DUQHLZH.js +44 -0
  531. package/dist/members-4DUQHLZH.js.map +1 -0
  532. package/dist/meta-EZ4SY25M.js +69 -0
  533. package/dist/metrics-AY4RP54F.js +152 -0
  534. package/dist/metrics-AY4RP54F.js.map +1 -0
  535. package/dist/models-5NTC7A5G.js +155 -0
  536. package/dist/models-5NTC7A5G.js.map +1 -0
  537. package/dist/normalize-CD4PQRYY.js +138 -0
  538. package/dist/normalize-CD4PQRYY.js.map +1 -0
  539. package/dist/normalize-ICQF2AST.js +806 -0
  540. package/dist/normalize-ICQF2AST.js.map +1 -0
  541. package/dist/options-6TE5E34Z.js +121 -0
  542. package/dist/options-6TE5E34Z.js.map +1 -0
  543. package/dist/output-RAH3TSIL.js +24 -0
  544. package/dist/page-GS3WLT2C.js +105 -0
  545. package/dist/page-GS3WLT2C.js.map +1 -0
  546. package/dist/pages-FXYQLHSJ.js +66 -0
  547. package/dist/pages-FXYQLHSJ.js.map +1 -0
  548. package/dist/performance-7LQQCEAW.js +24 -0
  549. package/dist/pinterest-AUH7WBA7.js +96 -0
  550. package/dist/pinterest-AUH7WBA7.js.map +1 -0
  551. package/dist/pixels-TZPF746S.js +60 -0
  552. package/dist/pixels-TZPF746S.js.map +1 -0
  553. package/dist/pixels-ZFF4BGUH.js +108 -0
  554. package/dist/pixels-ZFF4BGUH.js.map +1 -0
  555. package/dist/preview-AD4GKYIA.js +169 -0
  556. package/dist/preview-AD4GKYIA.js.map +1 -0
  557. package/dist/promoted-tweet-writes-F76YIMB6.js +180 -0
  558. package/dist/promoted-tweet-writes-F76YIMB6.js.map +1 -0
  559. package/dist/promoted-tweets-EJL37P7K.js +119 -0
  560. package/dist/promoted-tweets-EJL37P7K.js.map +1 -0
  561. package/dist/properties-L2XIYQDS.js +101 -0
  562. package/dist/properties-L2XIYQDS.js.map +1 -0
  563. package/dist/publish-H5S2IKZP.js +322 -0
  564. package/dist/publish-H5S2IKZP.js.map +1 -0
  565. package/dist/query-CPZZNMDY.js +1341 -0
  566. package/dist/query-CPZZNMDY.js.map +1 -0
  567. package/dist/query-SGGBCHTF.js +236 -0
  568. package/dist/query-SGGBCHTF.js.map +1 -0
  569. package/dist/query-VTGVZQIO.js +247 -0
  570. package/dist/query-VTGVZQIO.js.map +1 -0
  571. package/dist/read-LSF7DYTG.js +140 -0
  572. package/dist/read-LSF7DYTG.js.map +1 -0
  573. package/dist/reddit-INGPFGP4.js +26 -0
  574. package/dist/refresh-MKSKISPX.js +94 -0
  575. package/dist/refresh-MKSKISPX.js.map +1 -0
  576. package/dist/release-J5LIAIZT.js +60 -0
  577. package/dist/release-J5LIAIZT.js.map +1 -0
  578. package/dist/relevant-pages-MTMFMBPD.js +99 -0
  579. package/dist/relevant-pages-MTMFMBPD.js.map +1 -0
  580. package/dist/remove-6LGGKMLJ.js +48 -0
  581. package/dist/remove-6LGGKMLJ.js.map +1 -0
  582. package/dist/remove-LYEK7VFV.js +50 -0
  583. package/dist/remove-LYEK7VFV.js.map +1 -0
  584. package/dist/reopen-FR4UBOG7.js +63 -0
  585. package/dist/reopen-FR4UBOG7.js.map +1 -0
  586. package/dist/rerun-3FEOYNG2.js +86 -0
  587. package/dist/rerun-3FEOYNG2.js.map +1 -0
  588. package/dist/research-PA53M335.js +59 -0
  589. package/dist/research-RPJSOWPT.js +226 -0
  590. package/dist/research-RPJSOWPT.js.map +1 -0
  591. package/dist/reset-H3ES4WV5.js +54 -0
  592. package/dist/reset-H3ES4WV5.js.map +1 -0
  593. package/dist/reset-RCYRE5WO.js +54 -0
  594. package/dist/reset-RCYRE5WO.js.map +1 -0
  595. package/dist/resolve-QIDQJCE6.js +121 -0
  596. package/dist/resolve-QIDQJCE6.js.map +1 -0
  597. package/dist/retry-PLLCFOJW.js +60 -0
  598. package/dist/retry-PLLCFOJW.js.map +1 -0
  599. package/dist/retry-WLVMR7XP.js +62 -0
  600. package/dist/retry-WLVMR7XP.js.map +1 -0
  601. package/dist/retry-failed-6HXPUVXJ.js +45 -0
  602. package/dist/retry-failed-6HXPUVXJ.js.map +1 -0
  603. package/dist/run-2IM2QOCI.js +61 -0
  604. package/dist/run-4D7ZCLMF.js +65 -0
  605. package/dist/run-4D7ZCLMF.js.map +1 -0
  606. package/dist/scaffold-ad-YYUVL4IP.js +1550 -0
  607. package/dist/scaffold-ad-YYUVL4IP.js.map +1 -0
  608. package/dist/scaffold-static-ad-SUEYXLOR.js +948 -0
  609. package/dist/scaffold-static-ad-SUEYXLOR.js.map +1 -0
  610. package/dist/scaffold-video-IBH2YJZD.js +874 -0
  611. package/dist/scaffold-video-IBH2YJZD.js.map +1 -0
  612. package/dist/schedule-O2K6M43V.js +66 -0
  613. package/dist/schedule-O2K6M43V.js.map +1 -0
  614. package/dist/schedule-RXUUCNNI.js +61 -0
  615. package/dist/schedule-RXUUCNNI.js.map +1 -0
  616. package/dist/scheduled-agents-2NCGSD76.js +49 -0
  617. package/dist/schema-6GR77VJG.js +63 -0
  618. package/dist/schema-6GR77VJG.js.map +1 -0
  619. package/dist/schema-SFODURN7.js +129 -0
  620. package/dist/schema-SFODURN7.js.map +1 -0
  621. package/dist/scrape-ETAMW43A.js +2241 -0
  622. package/dist/scrape-ETAMW43A.js.map +1 -0
  623. package/dist/screenshot-YCQF25ZB.js +102 -0
  624. package/dist/screenshot-YCQF25ZB.js.map +1 -0
  625. package/dist/search-742XSULP.js +224 -0
  626. package/dist/search-742XSULP.js.map +1 -0
  627. package/dist/search-7QVZOWSI.js +174 -0
  628. package/dist/search-7QVZOWSI.js.map +1 -0
  629. package/dist/search-MEEM4D3W.js +92 -0
  630. package/dist/search-MEEM4D3W.js.map +1 -0
  631. package/dist/search-OQNGSMUH.js +91 -0
  632. package/dist/search-OQNGSMUH.js.map +1 -0
  633. package/dist/search-XUIVHGAY.js +26 -0
  634. package/dist/seeds-N6FF5S4T.js +101 -0
  635. package/dist/seeds-N6FF5S4T.js.map +1 -0
  636. package/dist/select-ZWDEVAH2.js +95 -0
  637. package/dist/sends-WGJVQUMF.js +309 -0
  638. package/dist/sends-WGJVQUMF.js.map +1 -0
  639. package/dist/sequences-OIPVR7JL.js +146 -0
  640. package/dist/sequences-OIPVR7JL.js.map +1 -0
  641. package/dist/set-prompt-SBEOQGCF.js +187 -0
  642. package/dist/set-prompt-SBEOQGCF.js.map +1 -0
  643. package/dist/setup-links-XW4A6L2I.js +141 -0
  644. package/dist/setup-links-XW4A6L2I.js.map +1 -0
  645. package/dist/shared-HJDFNID4.js +31 -0
  646. package/dist/site-6UTQSYIK.js +177 -0
  647. package/dist/site-6UTQSYIK.js.map +1 -0
  648. package/dist/sitemaps-POPZJTAX.js +87 -0
  649. package/dist/sitemaps-POPZJTAX.js.map +1 -0
  650. package/dist/sites-262H6LM4.js +101 -0
  651. package/dist/sites-262H6LM4.js.map +1 -0
  652. package/dist/skills-6TQZLIMP.js +47 -0
  653. package/dist/skills-6TQZLIMP.js.map +1 -0
  654. package/dist/sources-QQNWQLUM.js +421 -0
  655. package/dist/sources-QQNWQLUM.js.map +1 -0
  656. package/dist/sources-UGMZFZ2E.js +30 -0
  657. package/dist/stale-QRO3M5R2.js +64 -0
  658. package/dist/stale-QRO3M5R2.js.map +1 -0
  659. package/dist/stats-NNXZMPZR.js +34 -0
  660. package/dist/status-NXGKJGH7.js +62 -0
  661. package/dist/status-NXGKJGH7.js.map +1 -0
  662. package/dist/sticker-4KMBSMP5.js +94 -0
  663. package/dist/sticker-4KMBSMP5.js.map +1 -0
  664. package/dist/stock-2YCDN3N6.js +179 -0
  665. package/dist/stock-2YCDN3N6.js.map +1 -0
  666. package/dist/studio-HUEBE6DS.js +49 -0
  667. package/dist/sync-CF7FVUQJ.js +54 -0
  668. package/dist/sync-CF7FVUQJ.js.map +1 -0
  669. package/dist/sync-RXS6BPLM.js +54 -0
  670. package/dist/sync-RXS6BPLM.js.map +1 -0
  671. package/dist/sync-ZSNUBYPM.js +265 -0
  672. package/dist/sync-ZSNUBYPM.js.map +1 -0
  673. package/dist/sync-definition-YBDM7D4M.js +54 -0
  674. package/dist/tag-manager-HREEYGVM.js +43 -0
  675. package/dist/tags-C65JB762.js +224 -0
  676. package/dist/tags-C65JB762.js.map +1 -0
  677. package/dist/tags-CMBKEXIZ.js +20 -0
  678. package/dist/tags-CMBKEXIZ.js.map +1 -0
  679. package/dist/tags-GFFQLLG2.js +20 -0
  680. package/dist/tags-GFFQLLG2.js.map +1 -0
  681. package/dist/tags-IJN2SPSM.js +20 -0
  682. package/dist/tags-IJN2SPSM.js.map +1 -0
  683. package/dist/tags-R3K35KTL.js +26 -0
  684. package/dist/targeting-constants-XJ2VOW7K.js +118 -0
  685. package/dist/targeting-constants-XJ2VOW7K.js.map +1 -0
  686. package/dist/targeting-criteria-IHBPLHSX.js +113 -0
  687. package/dist/targeting-criteria-IHBPLHSX.js.map +1 -0
  688. package/dist/targets-JH37NVJF.js +102 -0
  689. package/dist/targets-JH37NVJF.js.map +1 -0
  690. package/dist/templates-HXSHQ23T.js +178 -0
  691. package/dist/templates-HXSHQ23T.js.map +1 -0
  692. package/dist/testimonials-5QGCPZ6K.js +32 -0
  693. package/dist/top-companies-FJEFKVI7.js +108 -0
  694. package/dist/top-companies-FJEFKVI7.js.map +1 -0
  695. package/dist/translate-H7O5K3RC.js +457 -0
  696. package/dist/translate-H7O5K3RC.js.map +1 -0
  697. package/dist/triggers-SEOAAJSS.js +141 -0
  698. package/dist/triggers-SEOAAJSS.js.map +1 -0
  699. package/dist/tweets-ATP3FQAC.js +123 -0
  700. package/dist/tweets-ATP3FQAC.js.map +1 -0
  701. package/dist/unfollow-CBVPGPF7.js +46 -0
  702. package/dist/unfollow-CBVPGPF7.js.map +1 -0
  703. package/dist/unlink-UZDVSHBO.js +67 -0
  704. package/dist/unlink-UZDVSHBO.js.map +1 -0
  705. package/dist/unstage-4ZEULXEQ.js +95 -0
  706. package/dist/unstage-4ZEULXEQ.js.map +1 -0
  707. package/dist/unstage-CE5RRGM5.js +84 -0
  708. package/dist/unstage-CE5RRGM5.js.map +1 -0
  709. package/dist/update-DGZKEP6T.js +63 -0
  710. package/dist/update-DGZKEP6T.js.map +1 -0
  711. package/dist/update-JOS4ITAV.js +142 -0
  712. package/dist/update-JOS4ITAV.js.map +1 -0
  713. package/dist/update-JZ4I6WW7.js +98 -0
  714. package/dist/update-JZ4I6WW7.js.map +1 -0
  715. package/dist/update-ZXOG2V34.js +155 -0
  716. package/dist/update-ZXOG2V34.js.map +1 -0
  717. package/dist/upload-L5SYZB3X.js +150 -0
  718. package/dist/upload-L5SYZB3X.js.map +1 -0
  719. package/dist/upload-SSOPA7ZT.js +126 -0
  720. package/dist/upload-SSOPA7ZT.js.map +1 -0
  721. package/dist/upscale-YWRLFU22.js +109 -0
  722. package/dist/upscale-YWRLFU22.js.map +1 -0
  723. package/dist/url-options-QEWKRKZ3.js +127 -0
  724. package/dist/url-options-QEWKRKZ3.js.map +1 -0
  725. package/dist/url-params-OR5N5EWT.js +98 -0
  726. package/dist/url-params-OR5N5EWT.js.map +1 -0
  727. package/dist/use-UT2DIZOG.js +95 -0
  728. package/dist/use-UT2DIZOG.js.map +1 -0
  729. package/dist/validate-2PLHIP6I.js +90 -0
  730. package/dist/validate-2PLHIP6I.js.map +1 -0
  731. package/dist/variant-FLZJYGYL.js +338 -0
  732. package/dist/variant-FLZJYGYL.js.map +1 -0
  733. package/dist/videos-GIYDCCKR.js +39 -0
  734. package/dist/view-NPAG66QK.js +121 -0
  735. package/dist/view-NPAG66QK.js.map +1 -0
  736. package/dist/viewer-check-VN2JK2LW.js +70 -0
  737. package/dist/web-WUGLSULO.js +135 -0
  738. package/dist/web-WUGLSULO.js.map +1 -0
  739. package/dist/winners-I5BMATJZ.js +79 -0
  740. package/dist/winners-I5BMATJZ.js.map +1 -0
  741. package/dist/winning-ads-7QWEIMRU.js +62 -0
  742. package/dist/write-commands-ERKVRHTC.js +206 -0
  743. package/dist/write-commands-ERKVRHTC.js.map +1 -0
  744. package/dist/write-commands-SVJ43D7G.js +1015 -0
  745. package/dist/write-commands-SVJ43D7G.js.map +1 -0
  746. package/dist/write-commands-TAYGTJEZ.js +737 -0
  747. package/dist/write-commands-TAYGTJEZ.js.map +1 -0
  748. package/dist/write-commands-WTRSOSO3.js +713 -0
  749. package/dist/write-commands-WTRSOSO3.js.map +1 -0
  750. package/dist/x-OEAKQBB7.js +47 -0
  751. package/package.json +1 -1
  752. package/dist/account-5GT2BEST.js +0 -80
  753. package/dist/account-5GT2BEST.js.map +0 -1
  754. package/dist/account-S2RDGMMM.js +0 -81
  755. package/dist/account-S2RDGMMM.js.map +0 -1
  756. package/dist/account-YLZAL6W7.js +0 -50
  757. package/dist/account-YLZAL6W7.js.map +0 -1
  758. package/dist/account-writes-VBY7FJ7C.js +0 -67
  759. package/dist/account-writes-VBY7FJ7C.js.map +0 -1
  760. package/dist/accounts-4IIHAQGS.js +0 -116
  761. package/dist/accounts-4IIHAQGS.js.map +0 -1
  762. package/dist/accounts-E7TRNPFA.js +0 -115
  763. package/dist/accounts-E7TRNPFA.js.map +0 -1
  764. package/dist/accounts-GFJOGX7J.js +0 -613
  765. package/dist/accounts-GFJOGX7J.js.map +0 -1
  766. package/dist/accounts-INB4Z4LZ.js +0 -76
  767. package/dist/accounts-INB4Z4LZ.js.map +0 -1
  768. package/dist/accounts-NLL4QWKY.js +0 -78
  769. package/dist/accounts-NLL4QWKY.js.map +0 -1
  770. package/dist/actions-7XF5L4U3.js +0 -55
  771. package/dist/active-entities-IGQG5EZO.js +0 -104
  772. package/dist/active-entities-IGQG5EZO.js.map +0 -1
  773. package/dist/activities-MH4C4IVV.js +0 -75
  774. package/dist/activities-MH4C4IVV.js.map +0 -1
  775. package/dist/ad-group-writes-B64OBHQ4.js +0 -171
  776. package/dist/ad-group-writes-B64OBHQ4.js.map +0 -1
  777. package/dist/ad-groups-APCFB6SI.js +0 -69
  778. package/dist/ad-groups-APCFB6SI.js.map +0 -1
  779. package/dist/ad-writes-A7P772KD.js +0 -175
  780. package/dist/ad-writes-A7P772KD.js.map +0 -1
  781. package/dist/add-33WQDKGF.js +0 -106
  782. package/dist/add-33WQDKGF.js.map +0 -1
  783. package/dist/add-65OIGMD7.js +0 -99
  784. package/dist/add-65OIGMD7.js.map +0 -1
  785. package/dist/add-EW276CKL.js +0 -282
  786. package/dist/add-EW276CKL.js.map +0 -1
  787. package/dist/add-EXKVB5KR.js +0 -107
  788. package/dist/add-EXKVB5KR.js.map +0 -1
  789. package/dist/ads-A2HP6UVG.js +0 -114
  790. package/dist/ads-A2HP6UVG.js.map +0 -1
  791. package/dist/ads-H6NPLMNX.js +0 -78
  792. package/dist/ads-H6NPLMNX.js.map +0 -1
  793. package/dist/ads-IRE5RZCS.js +0 -40
  794. package/dist/adsets-UZJTGQQM.js +0 -153
  795. package/dist/adsets-UZJTGQQM.js.map +0 -1
  796. package/dist/advertisers-CFS2JAYJ.js +0 -113
  797. package/dist/advertisers-CFS2JAYJ.js.map +0 -1
  798. package/dist/advertisers-WQBPBK4D.js +0 -117
  799. package/dist/advertisers-WQBPBK4D.js.map +0 -1
  800. package/dist/analytics-L46XME7Y.js +0 -434
  801. package/dist/analytics-L46XME7Y.js.map +0 -1
  802. package/dist/analytics-UT7FQ6XA.js +0 -1959
  803. package/dist/analytics-UT7FQ6XA.js.map +0 -1
  804. package/dist/animate-S6ZU3723.js +0 -482
  805. package/dist/animate-S6ZU3723.js.map +0 -1
  806. package/dist/assign-XHHVXXOL.js +0 -79
  807. package/dist/assign-XHHVXXOL.js.map +0 -1
  808. package/dist/audience-size-6FR7WFVU.js +0 -95
  809. package/dist/audience-size-6FR7WFVU.js.map +0 -1
  810. package/dist/audiences-BN2LT7E6.js +0 -86
  811. package/dist/audiences-BN2LT7E6.js.map +0 -1
  812. package/dist/audiences-HQS6V7EV.js +0 -269
  813. package/dist/audiences-HQS6V7EV.js.map +0 -1
  814. package/dist/audiences-JVEXHN67.js +0 -79
  815. package/dist/audiences-JVEXHN67.js.map +0 -1
  816. package/dist/audit-7UDFEGZV.js +0 -152
  817. package/dist/audit-7UDFEGZV.js.map +0 -1
  818. package/dist/audit-YTRTNTAK.js +0 -89
  819. package/dist/audit-YTRTNTAK.js.map +0 -1
  820. package/dist/autocomplete-LAZ6FFG6.js +0 -108
  821. package/dist/autocomplete-LAZ6FFG6.js.map +0 -1
  822. package/dist/avatars-G54K55J3.js +0 -38
  823. package/dist/bid-pricing-EQKORHAA.js +0 -100
  824. package/dist/bid-pricing-EQKORHAA.js.map +0 -1
  825. package/dist/brand-ODTHWWFL.js +0 -22
  826. package/dist/brief-EA4DWOJW.js +0 -479
  827. package/dist/brief-EA4DWOJW.js.map +0 -1
  828. package/dist/businesses-QHNI7MSK.js +0 -54
  829. package/dist/businesses-QHNI7MSK.js.map +0 -1
  830. package/dist/campaign-groups-EJEGKHQD.js +0 -96
  831. package/dist/campaign-groups-EJEGKHQD.js.map +0 -1
  832. package/dist/campaign-writes-DZE43ZOC.js +0 -166
  833. package/dist/campaign-writes-DZE43ZOC.js.map +0 -1
  834. package/dist/campaign-writes-OX62FCEH.js +0 -171
  835. package/dist/campaign-writes-OX62FCEH.js.map +0 -1
  836. package/dist/campaigns-APRWHCGF.js +0 -111
  837. package/dist/campaigns-APRWHCGF.js.map +0 -1
  838. package/dist/campaigns-D2LYKUO2.js +0 -108
  839. package/dist/campaigns-D2LYKUO2.js.map +0 -1
  840. package/dist/campaigns-E3H4POUU.js +0 -77
  841. package/dist/campaigns-E3H4POUU.js.map +0 -1
  842. package/dist/campaigns-OPLRDMJW.js +0 -110
  843. package/dist/campaigns-OPLRDMJW.js.map +0 -1
  844. package/dist/canvas-M5HAG7VA.js +0 -46
  845. package/dist/capabilities-4Q4CMVIE.js +0 -146
  846. package/dist/capabilities-4Q4CMVIE.js.map +0 -1
  847. package/dist/cards-L37M7Q3L.js +0 -86
  848. package/dist/cards-L37M7Q3L.js.map +0 -1
  849. package/dist/catalog-HOWAUW2V.js +0 -67
  850. package/dist/catalog-HOWAUW2V.js.map +0 -1
  851. package/dist/catalogs-XBIQ4PNK.js +0 -129
  852. package/dist/catalogs-XBIQ4PNK.js.map +0 -1
  853. package/dist/changes-HCOPS4FF.js +0 -136
  854. package/dist/changes-HCOPS4FF.js.map +0 -1
  855. package/dist/chatgpt-PLKNBNVL.js +0 -47
  856. package/dist/chats-HELZHJO4.js +0 -264
  857. package/dist/chats-HELZHJO4.js.map +0 -1
  858. package/dist/chunk-3KQ5R3H7.js +0 -45
  859. package/dist/chunk-3KQ5R3H7.js.map +0 -1
  860. package/dist/chunk-4MU3U3SO.js +0 -103
  861. package/dist/chunk-4VKV3DNC.js +0 -23992
  862. package/dist/chunk-4VKV3DNC.js.map +0 -1
  863. package/dist/chunk-5HH4RGC4.js +0 -136
  864. package/dist/chunk-5HH4RGC4.js.map +0 -1
  865. package/dist/chunk-5NQIFCNX.js +0 -141
  866. package/dist/chunk-6CCDQO2F.js +0 -225
  867. package/dist/chunk-6CCDQO2F.js.map +0 -1
  868. package/dist/chunk-6FBZ5E6L.js +0 -96
  869. package/dist/chunk-6YWRJMGR.js +0 -309
  870. package/dist/chunk-73MCYA5Z.js +0 -310
  871. package/dist/chunk-7DQAVVUA.js +0 -130
  872. package/dist/chunk-7DQAVVUA.js.map +0 -1
  873. package/dist/chunk-A3PEJ3V3.js +0 -95
  874. package/dist/chunk-A57AHUNA.js +0 -28
  875. package/dist/chunk-ABELDLY3.js +0 -594
  876. package/dist/chunk-ABELDLY3.js.map +0 -1
  877. package/dist/chunk-AWICKT2B.js +0 -25
  878. package/dist/chunk-AYC2WM4P.js +0 -106
  879. package/dist/chunk-AYC2WM4P.js.map +0 -1
  880. package/dist/chunk-BDD2ILIT.js +0 -56
  881. package/dist/chunk-BSFTG66P.js +0 -2743
  882. package/dist/chunk-BSFTG66P.js.map +0 -1
  883. package/dist/chunk-BSUN6JMU.js +0 -215
  884. package/dist/chunk-CBEL3P22.js +0 -57
  885. package/dist/chunk-CSADPKPC.js +0 -161
  886. package/dist/chunk-CSADPKPC.js.map +0 -1
  887. package/dist/chunk-DPEQVHTX.js +0 -26
  888. package/dist/chunk-DQLBKU7G.js +0 -469
  889. package/dist/chunk-DQLBKU7G.js.map +0 -1
  890. package/dist/chunk-ECXNE6RJ.js +0 -622
  891. package/dist/chunk-EDFVATFW.js +0 -211
  892. package/dist/chunk-EDFVATFW.js.map +0 -1
  893. package/dist/chunk-EPK2GYLV.js +0 -214
  894. package/dist/chunk-EYO62URT.js +0 -172
  895. package/dist/chunk-F3WFP75M.js +0 -94
  896. package/dist/chunk-F6NJAHAZ.js +0 -19
  897. package/dist/chunk-F7HBCFUA.js +0 -188
  898. package/dist/chunk-FCTWXNRC.js +0 -365
  899. package/dist/chunk-FCTWXNRC.js.map +0 -1
  900. package/dist/chunk-FFZBW4CC.js +0 -297
  901. package/dist/chunk-FR345TDN.js +0 -577
  902. package/dist/chunk-FR345TDN.js.map +0 -1
  903. package/dist/chunk-FRVROFI6.js +0 -98
  904. package/dist/chunk-G32FXVQ6.js +0 -31
  905. package/dist/chunk-HA5D6US2.js +0 -26
  906. package/dist/chunk-HWWPDUZM.js +0 -217
  907. package/dist/chunk-IEULFYA2.js +0 -174
  908. package/dist/chunk-IEULFYA2.js.map +0 -1
  909. package/dist/chunk-IMZIECST.js +0 -830
  910. package/dist/chunk-IPF4P6ZQ.js +0 -392
  911. package/dist/chunk-IPF4P6ZQ.js.map +0 -1
  912. package/dist/chunk-IRHNWYDT.js +0 -106
  913. package/dist/chunk-JH7NHC5W.js +0 -169
  914. package/dist/chunk-JIHG6K7N.js +0 -30
  915. package/dist/chunk-JIHG6K7N.js.map +0 -1
  916. package/dist/chunk-JKDITP62.js +0 -1380
  917. package/dist/chunk-JKDITP62.js.map +0 -1
  918. package/dist/chunk-JMXBUIVI.js +0 -84
  919. package/dist/chunk-KHCN2QXV.js +0 -346
  920. package/dist/chunk-KHCN2QXV.js.map +0 -1
  921. package/dist/chunk-KY4MPR6R.js +0 -3155
  922. package/dist/chunk-KY4MPR6R.js.map +0 -1
  923. package/dist/chunk-L4DOL7L7.js +0 -125
  924. package/dist/chunk-L6PDFIND.js +0 -496
  925. package/dist/chunk-L6PDFIND.js.map +0 -1
  926. package/dist/chunk-L7HPNEKW.js +0 -304
  927. package/dist/chunk-L7HPNEKW.js.map +0 -1
  928. package/dist/chunk-LB3VYIS2.js +0 -141
  929. package/dist/chunk-LB3VYIS2.js.map +0 -1
  930. package/dist/chunk-LDVMMLRA.js +0 -106
  931. package/dist/chunk-LQ4HBQ2B.js +0 -433
  932. package/dist/chunk-LXUEWTHJ.js +0 -788
  933. package/dist/chunk-LXUEWTHJ.js.map +0 -1
  934. package/dist/chunk-LYZVLKRA.js +0 -175
  935. package/dist/chunk-MBKCUSMR.js +0 -6078
  936. package/dist/chunk-MBKCUSMR.js.map +0 -1
  937. package/dist/chunk-MPI3SWIT.js +0 -536
  938. package/dist/chunk-MPI3SWIT.js.map +0 -1
  939. package/dist/chunk-MXPFUDFR.js +0 -1024
  940. package/dist/chunk-MXPFUDFR.js.map +0 -1
  941. package/dist/chunk-N5SQSMMR.js +0 -229
  942. package/dist/chunk-N5SQSMMR.js.map +0 -1
  943. package/dist/chunk-NEONVKMJ.js +0 -455
  944. package/dist/chunk-NEONVKMJ.js.map +0 -1
  945. package/dist/chunk-NFSV3CDO.js +0 -6198
  946. package/dist/chunk-NFSV3CDO.js.map +0 -1
  947. package/dist/chunk-NGT6MARJ.js +0 -274
  948. package/dist/chunk-NGYKF4T6.js +0 -20
  949. package/dist/chunk-NMMKTPGI.js +0 -136
  950. package/dist/chunk-O4AXPEOE.js +0 -923
  951. package/dist/chunk-O4AXPEOE.js.map +0 -1
  952. package/dist/chunk-OPEMWO6C.js +0 -5096
  953. package/dist/chunk-OPEMWO6C.js.map +0 -1
  954. package/dist/chunk-OZLBLXTK.js +0 -74
  955. package/dist/chunk-PB4LQHL2.js +0 -4341
  956. package/dist/chunk-PB4LQHL2.js.map +0 -1
  957. package/dist/chunk-PDJZMQ7F.js +0 -316
  958. package/dist/chunk-PDJZMQ7F.js.map +0 -1
  959. package/dist/chunk-PNHDM76R.js +0 -74
  960. package/dist/chunk-PNHDM76R.js.map +0 -1
  961. package/dist/chunk-Q7UF4ERB.js +0 -74
  962. package/dist/chunk-QRXTDXMX.js +0 -129
  963. package/dist/chunk-QRXTDXMX.js.map +0 -1
  964. package/dist/chunk-QTERC4PG.js +0 -1700
  965. package/dist/chunk-QTERC4PG.js.map +0 -1
  966. package/dist/chunk-QYOPQRLI.js +0 -296
  967. package/dist/chunk-R34LJSPM.js +0 -42
  968. package/dist/chunk-R4ODZS43.js +0 -492
  969. package/dist/chunk-R4ODZS43.js.map +0 -1
  970. package/dist/chunk-RJAQEZVD.js +0 -23
  971. package/dist/chunk-RPFBZHHE.js +0 -55
  972. package/dist/chunk-SXRSLUW7.js +0 -454
  973. package/dist/chunk-T5RKIWPQ.js +0 -352
  974. package/dist/chunk-T5RKIWPQ.js.map +0 -1
  975. package/dist/chunk-TCSPJQ2X.js +0 -136
  976. package/dist/chunk-TD44SXQX.js +0 -58
  977. package/dist/chunk-TQAXOBKJ.js +0 -364
  978. package/dist/chunk-TQAXOBKJ.js.map +0 -1
  979. package/dist/chunk-TTFTS2SO.js +0 -131
  980. package/dist/chunk-UA5EUJXV.js +0 -51
  981. package/dist/chunk-W7OFLOZB.js +0 -46
  982. package/dist/chunk-WAQYXH2U.js +0 -76
  983. package/dist/chunk-WWD4PITU.js +0 -333
  984. package/dist/chunk-WZ5YRUQU.js +0 -12
  985. package/dist/chunk-WZ5YRUQU.js.map +0 -1
  986. package/dist/chunk-XEVVAGAG.js +0 -422
  987. package/dist/chunk-XEVVAGAG.js.map +0 -1
  988. package/dist/chunk-Y4JR4RDM.js +0 -74
  989. package/dist/chunk-YMOVI3WT.js +0 -382
  990. package/dist/chunk-YS6PCTPS.js +0 -96
  991. package/dist/chunk-YUP46PWY.js +0 -199
  992. package/dist/chunk-YUP46PWY.js.map +0 -1
  993. package/dist/chunk-Z4NYXXTP.js +0 -42
  994. package/dist/chunk-Z4NYXXTP.js.map +0 -1
  995. package/dist/chunk-Z5AUNK6P.js +0 -1709
  996. package/dist/chunk-Z5AUNK6P.js.map +0 -1
  997. package/dist/chunk-ZAFR46HG.js +0 -67
  998. package/dist/chunk-ZHW3O25C.js +0 -191
  999. package/dist/claim-CG2IMTHK.js +0 -199
  1000. package/dist/claim-CG2IMTHK.js.map +0 -1
  1001. package/dist/client-XKDFFS7O.js +0 -20
  1002. package/dist/code-JWIOO2AJ.js +0 -78
  1003. package/dist/code-JWIOO2AJ.js.map +0 -1
  1004. package/dist/companies-LQN4HUUH.js +0 -196
  1005. package/dist/companies-LQN4HUUH.js.map +0 -1
  1006. package/dist/complete-MKB27QP7.js +0 -82
  1007. package/dist/complete-MKB27QP7.js.map +0 -1
  1008. package/dist/config-LJOEAYFZ.js +0 -89
  1009. package/dist/config-LJOEAYFZ.js.map +0 -1
  1010. package/dist/connect-ATGYJNG4.js +0 -37
  1011. package/dist/content-Y2BJSXG6.js +0 -83
  1012. package/dist/content-Y2BJSXG6.js.map +0 -1
  1013. package/dist/conversation-EFNQM435.js +0 -94
  1014. package/dist/conversation-EFNQM435.js.map +0 -1
  1015. package/dist/conversion-report-EUSTSHPV.js +0 -126
  1016. package/dist/conversion-report-EUSTSHPV.js.map +0 -1
  1017. package/dist/conversion-upload-command-677OT5NZ.js +0 -432
  1018. package/dist/conversion-upload-command-677OT5NZ.js.map +0 -1
  1019. package/dist/conversion-writes-E7M6VHGB.js +0 -121
  1020. package/dist/conversion-writes-E7M6VHGB.js.map +0 -1
  1021. package/dist/conversions-BXZLEXHU.js +0 -136
  1022. package/dist/conversions-BXZLEXHU.js.map +0 -1
  1023. package/dist/conversions-FERAOXWG.js +0 -77
  1024. package/dist/conversions-FERAOXWG.js.map +0 -1
  1025. package/dist/countries-TKPX2GDH.js +0 -83
  1026. package/dist/countries-TKPX2GDH.js.map +0 -1
  1027. package/dist/create-HGMIWFVX.js +0 -132
  1028. package/dist/create-HGMIWFVX.js.map +0 -1
  1029. package/dist/create-LBJV3NPD.js +0 -209
  1030. package/dist/create-LBJV3NPD.js.map +0 -1
  1031. package/dist/create-QTPZ7PP7.js +0 -117
  1032. package/dist/create-QTPZ7PP7.js.map +0 -1
  1033. package/dist/create-SBIHEG25.js +0 -60
  1034. package/dist/create-SBIHEG25.js.map +0 -1
  1035. package/dist/creatives-CIOOFE3T.js +0 -88
  1036. package/dist/creatives-CIOOFE3T.js.map +0 -1
  1037. package/dist/creatives-MIUJAK4E.js +0 -49
  1038. package/dist/creatives-MIUJAK4E.js.map +0 -1
  1039. package/dist/creatives-QXR7QDXM.js +0 -183
  1040. package/dist/creatives-QXR7QDXM.js.map +0 -1
  1041. package/dist/credentials-CMVAKAUL.js +0 -1057
  1042. package/dist/credentials-CMVAKAUL.js.map +0 -1
  1043. package/dist/critique-LUB35ORK.js +0 -213
  1044. package/dist/critique-LUB35ORK.js.map +0 -1
  1045. package/dist/critique-XXCM7YAV.js +0 -1477
  1046. package/dist/critique-XXCM7YAV.js.map +0 -1
  1047. package/dist/crm-EGNVKQHB.js +0 -279
  1048. package/dist/crm-EGNVKQHB.js.map +0 -1
  1049. package/dist/crm-I6IQ5M55.js +0 -226
  1050. package/dist/crm-I6IQ5M55.js.map +0 -1
  1051. package/dist/crop-ES2IDPUL.js +0 -115
  1052. package/dist/crop-ES2IDPUL.js.map +0 -1
  1053. package/dist/currency-VFKYXFBM.js +0 -89
  1054. package/dist/currency-VFKYXFBM.js.map +0 -1
  1055. package/dist/custom-conversions-WPTEXOWR.js +0 -126
  1056. package/dist/custom-conversions-WPTEXOWR.js.map +0 -1
  1057. package/dist/customers-ACRYXALZ.js +0 -58
  1058. package/dist/delete-3AHBFPQJ.js +0 -68
  1059. package/dist/delete-3AHBFPQJ.js.map +0 -1
  1060. package/dist/delete-E7WYQN2L.js +0 -73
  1061. package/dist/delete-E7WYQN2L.js.map +0 -1
  1062. package/dist/delete-EJCB5MHV.js +0 -71
  1063. package/dist/delete-EJCB5MHV.js.map +0 -1
  1064. package/dist/delete-J677F4BG.js +0 -64
  1065. package/dist/delete-J677F4BG.js.map +0 -1
  1066. package/dist/delete-LVQ7R6DI.js +0 -73
  1067. package/dist/delete-LVQ7R6DI.js.map +0 -1
  1068. package/dist/delete-U4K6NIOE.js +0 -55
  1069. package/dist/delete-U4K6NIOE.js.map +0 -1
  1070. package/dist/demographics-RY6R6VWA.js +0 -139
  1071. package/dist/demographics-RY6R6VWA.js.map +0 -1
  1072. package/dist/describe-N36XDO4P.js +0 -99
  1073. package/dist/describe-N36XDO4P.js.map +0 -1
  1074. package/dist/describe-Q5OAJDYH.js +0 -99
  1075. package/dist/describe-Q5OAJDYH.js.map +0 -1
  1076. package/dist/dimensions-YIWQVFTO.js +0 -103
  1077. package/dist/dimensions-YIWQVFTO.js.map +0 -1
  1078. package/dist/discard-UO4DJNP3.js +0 -67
  1079. package/dist/discard-UO4DJNP3.js.map +0 -1
  1080. package/dist/discover-IASOLBUQ.js +0 -173
  1081. package/dist/discover-IASOLBUQ.js.map +0 -1
  1082. package/dist/domain-QBF4TBGL.js +0 -100
  1083. package/dist/domain-QBF4TBGL.js.map +0 -1
  1084. package/dist/download-DKFYGXEH.js +0 -301
  1085. package/dist/download-DKFYGXEH.js.map +0 -1
  1086. package/dist/draft-5ZZOTJZR.js +0 -282
  1087. package/dist/draft-5ZZOTJZR.js.map +0 -1
  1088. package/dist/draft-DKMUTG4F.js +0 -104
  1089. package/dist/draft-DKMUTG4F.js.map +0 -1
  1090. package/dist/draft-FMOQUVPP.js +0 -219
  1091. package/dist/draft-FMOQUVPP.js.map +0 -1
  1092. package/dist/draft-KFXJCKCH.js +0 -234
  1093. package/dist/draft-KFXJCKCH.js.map +0 -1
  1094. package/dist/draft-KJ6SH67P.js +0 -101
  1095. package/dist/draft-KJ6SH67P.js.map +0 -1
  1096. package/dist/draft-QW7EYFFU.js +0 -329
  1097. package/dist/draft-QW7EYFFU.js.map +0 -1
  1098. package/dist/draft-URMXE4U4.js +0 -101
  1099. package/dist/draft-URMXE4U4.js.map +0 -1
  1100. package/dist/draft-ZU7MZLIT.js +0 -300
  1101. package/dist/draft-ZU7MZLIT.js.map +0 -1
  1102. package/dist/env-ODWJOKNV.js +0 -44
  1103. package/dist/experiment-TUKKH6UJ.js +0 -1378
  1104. package/dist/experiment-TUKKH6UJ.js.map +0 -1
  1105. package/dist/export-WXFUVX6F.js +0 -170
  1106. package/dist/export-WXFUVX6F.js.map +0 -1
  1107. package/dist/extract-PY3J3WVF.js +0 -115
  1108. package/dist/extract-PY3J3WVF.js.map +0 -1
  1109. package/dist/facets-NUEIHCKA.js +0 -115
  1110. package/dist/facets-NUEIHCKA.js.map +0 -1
  1111. package/dist/favorites-JDFIYSV2.js +0 -180
  1112. package/dist/favorites-JDFIYSV2.js.map +0 -1
  1113. package/dist/feed-CYFNDBJS.js +0 -159
  1114. package/dist/feed-CYFNDBJS.js.map +0 -1
  1115. package/dist/feedback-E2P3NB7H.js +0 -68
  1116. package/dist/feedback-E2P3NB7H.js.map +0 -1
  1117. package/dist/feedback-record-IMCTEDOX.js +0 -137
  1118. package/dist/feedback-record-IMCTEDOX.js.map +0 -1
  1119. package/dist/fetch-ELSDT3NZ.js +0 -141
  1120. package/dist/fetch-ELSDT3NZ.js.map +0 -1
  1121. package/dist/fetch-NM7MD3CN.js +0 -172
  1122. package/dist/fetch-NM7MD3CN.js.map +0 -1
  1123. package/dist/find-HYMLZCKA.js +0 -136
  1124. package/dist/find-HYMLZCKA.js.map +0 -1
  1125. package/dist/fit-5WZ6NVSF.js +0 -44
  1126. package/dist/flows-ZEUUIXCS.js +0 -246
  1127. package/dist/flows-ZEUUIXCS.js.map +0 -1
  1128. package/dist/follow-RGJ76HHD.js +0 -84
  1129. package/dist/follow-RGJ76HHD.js.map +0 -1
  1130. package/dist/follow-competitors-JMNOP2ZT.js +0 -133
  1131. package/dist/follow-competitors-JMNOP2ZT.js.map +0 -1
  1132. package/dist/following-5GINRDTL.js +0 -111
  1133. package/dist/following-5GINRDTL.js.map +0 -1
  1134. package/dist/fonts-7U7I2TWV.js +0 -27
  1135. package/dist/forecast-PGDYFFKQ.js +0 -105
  1136. package/dist/forecast-PGDYFFKQ.js.map +0 -1
  1137. package/dist/funding-ED6PDKJF.js +0 -86
  1138. package/dist/funding-ED6PDKJF.js.map +0 -1
  1139. package/dist/funnel-IML4F5ZP.js +0 -838
  1140. package/dist/funnel-IML4F5ZP.js.map +0 -1
  1141. package/dist/ga4-QPEXE6YG.js +0 -55
  1142. package/dist/generate-VVTQCJRI.js +0 -264
  1143. package/dist/generate-VVTQCJRI.js.map +0 -1
  1144. package/dist/get-CZSESEHU.js +0 -61
  1145. package/dist/get-CZSESEHU.js.map +0 -1
  1146. package/dist/get-DEGOS3R6.js +0 -63
  1147. package/dist/get-DEGOS3R6.js.map +0 -1
  1148. package/dist/get-L3ZGUJJB.js +0 -65
  1149. package/dist/get-L3ZGUJJB.js.map +0 -1
  1150. package/dist/get-NX5DGSRP.js +0 -65
  1151. package/dist/get-NX5DGSRP.js.map +0 -1
  1152. package/dist/get-TL6UET23.js +0 -56
  1153. package/dist/get-TL6UET23.js.map +0 -1
  1154. package/dist/get-UNZMYRB6.js +0 -80
  1155. package/dist/get-UNZMYRB6.js.map +0 -1
  1156. package/dist/get-ZVRRZDUU.js +0 -94
  1157. package/dist/get-ZVRRZDUU.js.map +0 -1
  1158. package/dist/gif-MNBSPA64.js +0 -96
  1159. package/dist/gif-MNBSPA64.js.map +0 -1
  1160. package/dist/google-C2Z4XWRL.js +0 -1866
  1161. package/dist/google-C2Z4XWRL.js.map +0 -1
  1162. package/dist/google-LJSSLBP3.js +0 -138
  1163. package/dist/google-LJSSLBP3.js.map +0 -1
  1164. package/dist/group-7BGYA6LK.js +0 -44
  1165. package/dist/group-7BGYA6LK.js.map +0 -1
  1166. package/dist/group-MPYAKBH5.js +0 -44
  1167. package/dist/group-MPYAKBH5.js.map +0 -1
  1168. package/dist/gsc-LC5ADBA3.js +0 -30
  1169. package/dist/history-GPQE2ZYR.js +0 -68
  1170. package/dist/history-GPQE2ZYR.js.map +0 -1
  1171. package/dist/history-XTSLGMK6.js +0 -135
  1172. package/dist/history-XTSLGMK6.js.map +0 -1
  1173. package/dist/hubspot-GPTEZD3A.js +0 -781
  1174. package/dist/hubspot-GPTEZD3A.js.map +0 -1
  1175. package/dist/icon-YKMRIU7A.js +0 -139
  1176. package/dist/icon-YKMRIU7A.js.map +0 -1
  1177. package/dist/ideas-NEBJBIBM.js +0 -31
  1178. package/dist/images-ASWWS5TH.js +0 -90
  1179. package/dist/improve-VXDJGXTG.js +0 -88
  1180. package/dist/improve-VXDJGXTG.js.map +0 -1
  1181. package/dist/ingest-AW37RWJN.js +0 -109
  1182. package/dist/ingest-AW37RWJN.js.map +0 -1
  1183. package/dist/ingest-X7UPOCKP.js +0 -24
  1184. package/dist/insights-MHUV75RQ.js +0 -424
  1185. package/dist/insights-MHUV75RQ.js.map +0 -1
  1186. package/dist/insights-NLQXAW3F.js +0 -123
  1187. package/dist/insights-NLQXAW3F.js.map +0 -1
  1188. package/dist/inspect-TXVKPBAR.js +0 -191
  1189. package/dist/inspect-TXVKPBAR.js.map +0 -1
  1190. package/dist/inspiration-64DY3QWN.js +0 -53
  1191. package/dist/intent-3HY6DRHW.js +0 -96
  1192. package/dist/intent-3HY6DRHW.js.map +0 -1
  1193. package/dist/job-L73KC4TC.js +0 -203
  1194. package/dist/job-L73KC4TC.js.map +0 -1
  1195. package/dist/job-create-LR3EHWKO.js +0 -110
  1196. package/dist/job-create-LR3EHWKO.js.map +0 -1
  1197. package/dist/job-status-MSL4EAJT.js +0 -75
  1198. package/dist/job-status-MSL4EAJT.js.map +0 -1
  1199. package/dist/keep-XUATLR5B.js +0 -80
  1200. package/dist/keep-XUATLR5B.js.map +0 -1
  1201. package/dist/keyword-gap-DJAYVD4U.js +0 -131
  1202. package/dist/keyword-gap-DJAYVD4U.js.map +0 -1
  1203. package/dist/keyword-metrics-4FEFFTQO.js +0 -198
  1204. package/dist/keyword-metrics-4FEFFTQO.js.map +0 -1
  1205. package/dist/keywords-for-site-HIMEQY63.js +0 -125
  1206. package/dist/keywords-for-site-HIMEQY63.js.map +0 -1
  1207. package/dist/landing-KU3ILVB3.js +0 -28
  1208. package/dist/landing-KU3ILVB3.js.map +0 -1
  1209. package/dist/languages-4QYK5DMW.js +0 -56
  1210. package/dist/languages-4QYK5DMW.js.map +0 -1
  1211. package/dist/languages-L5E7WS77.js +0 -41
  1212. package/dist/languages-L5E7WS77.js.map +0 -1
  1213. package/dist/layerize-YAVLAXYM.js +0 -192
  1214. package/dist/layerize-YAVLAXYM.js.map +0 -1
  1215. package/dist/leads-DR3EK77T.js +0 -91
  1216. package/dist/leads-DR3EK77T.js.map +0 -1
  1217. package/dist/leads-PFPQOCBR.js +0 -286
  1218. package/dist/leads-PFPQOCBR.js.map +0 -1
  1219. package/dist/learn-D4D75X2Y.js +0 -204
  1220. package/dist/library-E2SJS7PT.js +0 -111
  1221. package/dist/library-E2SJS7PT.js.map +0 -1
  1222. package/dist/lighthouse-QMECKX4R.js +0 -76
  1223. package/dist/lighthouse-QMECKX4R.js.map +0 -1
  1224. package/dist/line-item-writes-XMDA7AZQ.js +0 -209
  1225. package/dist/line-item-writes-XMDA7AZQ.js.map +0 -1
  1226. package/dist/line-items-YGKTYKVE.js +0 -104
  1227. package/dist/line-items-YGKTYKVE.js.map +0 -1
  1228. package/dist/link-AOB3WGGN.js +0 -65
  1229. package/dist/link-AOB3WGGN.js.map +0 -1
  1230. package/dist/linkedin-WRJNY6NY.js +0 -1002
  1231. package/dist/linkedin-WRJNY6NY.js.map +0 -1
  1232. package/dist/list-66VKYGKM.js +0 -52
  1233. package/dist/list-66VKYGKM.js.map +0 -1
  1234. package/dist/list-6DZWRLDN.js +0 -59
  1235. package/dist/list-6DZWRLDN.js.map +0 -1
  1236. package/dist/list-6KJWGPPS.js +0 -67
  1237. package/dist/list-6KJWGPPS.js.map +0 -1
  1238. package/dist/list-GXCKA2AN.js +0 -153
  1239. package/dist/list-GXCKA2AN.js.map +0 -1
  1240. package/dist/list-KNHZPT7L.js +0 -65
  1241. package/dist/list-KNHZPT7L.js.map +0 -1
  1242. package/dist/list-LPETG6A6.js +0 -78
  1243. package/dist/list-LPETG6A6.js.map +0 -1
  1244. package/dist/list-WHJNWHSZ.js +0 -53
  1245. package/dist/list-WHJNWHSZ.js.map +0 -1
  1246. package/dist/list-YV5Z2J6U.js +0 -305
  1247. package/dist/list-YV5Z2J6U.js.map +0 -1
  1248. package/dist/locations-4FZYKG2A.js +0 -68
  1249. package/dist/locations-4FZYKG2A.js.map +0 -1
  1250. package/dist/locations-W32YE2KS.js +0 -41
  1251. package/dist/locations-W32YE2KS.js.map +0 -1
  1252. package/dist/log-YVW46HL7.js +0 -94
  1253. package/dist/log-YVW46HL7.js.map +0 -1
  1254. package/dist/logo-7O7VW5R3.js +0 -19
  1255. package/dist/lookup-Z2X5WAO6.js +0 -23
  1256. package/dist/make-Q6BQ7LNT.js +0 -505
  1257. package/dist/make-Q6BQ7LNT.js.map +0 -1
  1258. package/dist/map-VZM5C6DA.js +0 -406
  1259. package/dist/map-VZM5C6DA.js.map +0 -1
  1260. package/dist/mcp-KSJDALG6.js +0 -478
  1261. package/dist/mcp-KSJDALG6.js.map +0 -1
  1262. package/dist/media-7P66TUIR.js +0 -15
  1263. package/dist/media-JBQKYSRQ.js +0 -90
  1264. package/dist/media-JBQKYSRQ.js.map +0 -1
  1265. package/dist/media-sources-427U333M.js +0 -32
  1266. package/dist/members-ABGEFALK.js +0 -46
  1267. package/dist/members-ABGEFALK.js.map +0 -1
  1268. package/dist/meta-JH4FHVNX.js +0 -69
  1269. package/dist/metrics-ALSPX6EQ.js +0 -153
  1270. package/dist/metrics-ALSPX6EQ.js.map +0 -1
  1271. package/dist/models-7BM5BKXX.js +0 -157
  1272. package/dist/models-7BM5BKXX.js.map +0 -1
  1273. package/dist/normalize-DFK3DGGZ.js +0 -808
  1274. package/dist/normalize-DFK3DGGZ.js.map +0 -1
  1275. package/dist/normalize-NDR7YEQE.js +0 -140
  1276. package/dist/normalize-NDR7YEQE.js.map +0 -1
  1277. package/dist/options-G5VGH22X.js +0 -123
  1278. package/dist/options-G5VGH22X.js.map +0 -1
  1279. package/dist/output-ZLXBAA4O.js +0 -25
  1280. package/dist/page-L7BBMINT.js +0 -107
  1281. package/dist/page-L7BBMINT.js.map +0 -1
  1282. package/dist/pages-NBV35ECG.js +0 -67
  1283. package/dist/pages-NBV35ECG.js.map +0 -1
  1284. package/dist/performance-SOMZNPIG.js +0 -25
  1285. package/dist/pinterest-KXAZTRDP.js +0 -98
  1286. package/dist/pinterest-KXAZTRDP.js.map +0 -1
  1287. package/dist/pixels-DYWHXAJT.js +0 -109
  1288. package/dist/pixels-DYWHXAJT.js.map +0 -1
  1289. package/dist/pixels-UMS2QBUG.js +0 -61
  1290. package/dist/pixels-UMS2QBUG.js.map +0 -1
  1291. package/dist/preview-C5FER5SU.js +0 -170
  1292. package/dist/preview-C5FER5SU.js.map +0 -1
  1293. package/dist/promoted-tweet-writes-3PECZLQA.js +0 -181
  1294. package/dist/promoted-tweet-writes-3PECZLQA.js.map +0 -1
  1295. package/dist/promoted-tweets-GMV6WIWV.js +0 -120
  1296. package/dist/promoted-tweets-GMV6WIWV.js.map +0 -1
  1297. package/dist/properties-YAJQF577.js +0 -102
  1298. package/dist/properties-YAJQF577.js.map +0 -1
  1299. package/dist/publish-5WDUTTG5.js +0 -355
  1300. package/dist/publish-5WDUTTG5.js.map +0 -1
  1301. package/dist/query-TBWL52JI.js +0 -1342
  1302. package/dist/query-TBWL52JI.js.map +0 -1
  1303. package/dist/query-VESQSTQI.js +0 -237
  1304. package/dist/query-VESQSTQI.js.map +0 -1
  1305. package/dist/query-XZQSY62P.js +0 -248
  1306. package/dist/query-XZQSY62P.js.map +0 -1
  1307. package/dist/read-UMAWDVKX.js +0 -141
  1308. package/dist/read-UMAWDVKX.js.map +0 -1
  1309. package/dist/reddit-OPHQFRRC.js +0 -27
  1310. package/dist/refresh-U56RE7DI.js +0 -96
  1311. package/dist/refresh-U56RE7DI.js.map +0 -1
  1312. package/dist/release-P66DYNKQ.js +0 -61
  1313. package/dist/release-P66DYNKQ.js.map +0 -1
  1314. package/dist/relevant-pages-DSQQU6F7.js +0 -100
  1315. package/dist/relevant-pages-DSQQU6F7.js.map +0 -1
  1316. package/dist/remove-GRLXSDZC.js +0 -50
  1317. package/dist/remove-GRLXSDZC.js.map +0 -1
  1318. package/dist/remove-IRIP4OKM.js +0 -52
  1319. package/dist/remove-IRIP4OKM.js.map +0 -1
  1320. package/dist/reopen-PMIO7NJJ.js +0 -65
  1321. package/dist/reopen-PMIO7NJJ.js.map +0 -1
  1322. package/dist/rerun-V4O6TKBY.js +0 -84
  1323. package/dist/rerun-V4O6TKBY.js.map +0 -1
  1324. package/dist/research-MG3MESKH.js +0 -59
  1325. package/dist/research-RFPBKIVP.js +0 -228
  1326. package/dist/research-RFPBKIVP.js.map +0 -1
  1327. package/dist/reset-3HKXFAV7.js +0 -56
  1328. package/dist/reset-3HKXFAV7.js.map +0 -1
  1329. package/dist/reset-LQZA3CIB.js +0 -56
  1330. package/dist/reset-LQZA3CIB.js.map +0 -1
  1331. package/dist/resolve-H33CQAY4.js +0 -122
  1332. package/dist/resolve-H33CQAY4.js.map +0 -1
  1333. package/dist/retry-6F3YAVYQ.js +0 -64
  1334. package/dist/retry-6F3YAVYQ.js.map +0 -1
  1335. package/dist/retry-QWD3HWFP.js +0 -62
  1336. package/dist/retry-QWD3HWFP.js.map +0 -1
  1337. package/dist/retry-failed-7OAJ5TMD.js +0 -47
  1338. package/dist/retry-failed-7OAJ5TMD.js.map +0 -1
  1339. package/dist/run-CGZIVYLV.js +0 -67
  1340. package/dist/run-CGZIVYLV.js.map +0 -1
  1341. package/dist/run-PZF26R6H.js +0 -59
  1342. package/dist/scaffold-ad-AI6R4GDU.js +0 -1458
  1343. package/dist/scaffold-ad-AI6R4GDU.js.map +0 -1
  1344. package/dist/scaffold-static-ad-T7ZDHRB3.js +0 -944
  1345. package/dist/scaffold-static-ad-T7ZDHRB3.js.map +0 -1
  1346. package/dist/scaffold-video-R24U2WC7.js +0 -840
  1347. package/dist/scaffold-video-R24U2WC7.js.map +0 -1
  1348. package/dist/schedule-BK44B77G.js +0 -68
  1349. package/dist/schedule-BK44B77G.js.map +0 -1
  1350. package/dist/schedule-F2EEY4UK.js +0 -63
  1351. package/dist/schedule-F2EEY4UK.js.map +0 -1
  1352. package/dist/scheduled-agents-CIEAOWM6.js +0 -49
  1353. package/dist/schema-3B6FDPBF.js +0 -131
  1354. package/dist/schema-3B6FDPBF.js.map +0 -1
  1355. package/dist/schema-4FOZ5W35.js +0 -65
  1356. package/dist/schema-4FOZ5W35.js.map +0 -1
  1357. package/dist/scrape-P46M2J43.js +0 -2243
  1358. package/dist/scrape-P46M2J43.js.map +0 -1
  1359. package/dist/screenshot-6F7G3LN5.js +0 -104
  1360. package/dist/screenshot-6F7G3LN5.js.map +0 -1
  1361. package/dist/search-23LREBOG.js +0 -94
  1362. package/dist/search-23LREBOG.js.map +0 -1
  1363. package/dist/search-DNYAA6TT.js +0 -176
  1364. package/dist/search-DNYAA6TT.js.map +0 -1
  1365. package/dist/search-FORHMB7P.js +0 -27
  1366. package/dist/search-KQMPPO3X.js +0 -226
  1367. package/dist/search-KQMPPO3X.js.map +0 -1
  1368. package/dist/search-X4AKUB2K.js +0 -93
  1369. package/dist/search-X4AKUB2K.js.map +0 -1
  1370. package/dist/seeds-K4CHZ2HU.js +0 -103
  1371. package/dist/seeds-K4CHZ2HU.js.map +0 -1
  1372. package/dist/select-52K6KZGY.js +0 -95
  1373. package/dist/sends-UH2MZGCD.js +0 -310
  1374. package/dist/sends-UH2MZGCD.js.map +0 -1
  1375. package/dist/sequences-BXGO3NPA.js +0 -148
  1376. package/dist/sequences-BXGO3NPA.js.map +0 -1
  1377. package/dist/set-prompt-3IXP42AK.js +0 -186
  1378. package/dist/set-prompt-3IXP42AK.js.map +0 -1
  1379. package/dist/setup-links-OV6ALAUU.js +0 -143
  1380. package/dist/setup-links-OV6ALAUU.js.map +0 -1
  1381. package/dist/shared-VMV44VPB.js +0 -32
  1382. package/dist/site-MQ5ORTKV.js +0 -179
  1383. package/dist/site-MQ5ORTKV.js.map +0 -1
  1384. package/dist/sitemaps-LKCTG2WM.js +0 -88
  1385. package/dist/sitemaps-LKCTG2WM.js.map +0 -1
  1386. package/dist/sites-YHUF7G4Z.js +0 -102
  1387. package/dist/sites-YHUF7G4Z.js.map +0 -1
  1388. package/dist/skills-CG674XHN.js +0 -49
  1389. package/dist/skills-CG674XHN.js.map +0 -1
  1390. package/dist/sources-44THTN2Y.js +0 -422
  1391. package/dist/sources-44THTN2Y.js.map +0 -1
  1392. package/dist/sources-BQNCLGWT.js +0 -30
  1393. package/dist/stale-JGLP7BAC.js +0 -63
  1394. package/dist/stale-JGLP7BAC.js.map +0 -1
  1395. package/dist/stats-TO3J2FU6.js +0 -34
  1396. package/dist/status-NJ3SMBGS.js +0 -64
  1397. package/dist/status-NJ3SMBGS.js.map +0 -1
  1398. package/dist/sticker-YBOWSWMR.js +0 -96
  1399. package/dist/sticker-YBOWSWMR.js.map +0 -1
  1400. package/dist/stock-E6NMDSVI.js +0 -181
  1401. package/dist/stock-E6NMDSVI.js.map +0 -1
  1402. package/dist/studio-LHH62SZC.js +0 -49
  1403. package/dist/sync-2R5UKTHN.js +0 -56
  1404. package/dist/sync-2R5UKTHN.js.map +0 -1
  1405. package/dist/sync-AZRR5JNS.js +0 -266
  1406. package/dist/sync-AZRR5JNS.js.map +0 -1
  1407. package/dist/sync-ML7E5J22.js +0 -56
  1408. package/dist/sync-ML7E5J22.js.map +0 -1
  1409. package/dist/sync-definition-LBPI7P5F.js +0 -48
  1410. package/dist/tag-manager-D3YNI7JG.js +0 -43
  1411. package/dist/tags-BYGKXDDS.js +0 -21
  1412. package/dist/tags-BYGKXDDS.js.map +0 -1
  1413. package/dist/tags-OOQV4G2Y.js +0 -26
  1414. package/dist/tags-TKYXWGN4.js +0 -21
  1415. package/dist/tags-TKYXWGN4.js.map +0 -1
  1416. package/dist/tags-V732MEES.js +0 -226
  1417. package/dist/tags-V732MEES.js.map +0 -1
  1418. package/dist/tags-YLC46IXM.js +0 -21
  1419. package/dist/tags-YLC46IXM.js.map +0 -1
  1420. package/dist/targeting-constants-XT56MOGP.js +0 -119
  1421. package/dist/targeting-constants-XT56MOGP.js.map +0 -1
  1422. package/dist/targeting-criteria-24X3IIJS.js +0 -114
  1423. package/dist/targeting-criteria-24X3IIJS.js.map +0 -1
  1424. package/dist/targets-AKAN2HFY.js +0 -104
  1425. package/dist/targets-AKAN2HFY.js.map +0 -1
  1426. package/dist/templates-7MRVQTB2.js +0 -180
  1427. package/dist/templates-7MRVQTB2.js.map +0 -1
  1428. package/dist/testimonials-OIZMXEYZ.js +0 -32
  1429. package/dist/top-companies-3IG5FRQ2.js +0 -109
  1430. package/dist/top-companies-3IG5FRQ2.js.map +0 -1
  1431. package/dist/triggers-ZHNWHJG4.js +0 -143
  1432. package/dist/triggers-ZHNWHJG4.js.map +0 -1
  1433. package/dist/tweets-V5R5DUA2.js +0 -124
  1434. package/dist/tweets-V5R5DUA2.js.map +0 -1
  1435. package/dist/unfollow-RYDJDDAV.js +0 -48
  1436. package/dist/unfollow-RYDJDDAV.js.map +0 -1
  1437. package/dist/unlink-CS7QNOU2.js +0 -68
  1438. package/dist/unlink-CS7QNOU2.js.map +0 -1
  1439. package/dist/unstage-DDZ5F2Z6.js +0 -86
  1440. package/dist/unstage-DDZ5F2Z6.js.map +0 -1
  1441. package/dist/unstage-KPLOFKU5.js +0 -96
  1442. package/dist/unstage-KPLOFKU5.js.map +0 -1
  1443. package/dist/update-ASY63WIK.js +0 -157
  1444. package/dist/update-ASY63WIK.js.map +0 -1
  1445. package/dist/update-HA5IQCJ2.js +0 -99
  1446. package/dist/update-HA5IQCJ2.js.map +0 -1
  1447. package/dist/update-R3VD5DC3.js +0 -143
  1448. package/dist/update-R3VD5DC3.js.map +0 -1
  1449. package/dist/update-WMCBSNSD.js +0 -64
  1450. package/dist/update-WMCBSNSD.js.map +0 -1
  1451. package/dist/upload-ADEYBWTV.js +0 -152
  1452. package/dist/upload-ADEYBWTV.js.map +0 -1
  1453. package/dist/upload-WBNPIOVR.js +0 -128
  1454. package/dist/upload-WBNPIOVR.js.map +0 -1
  1455. package/dist/upscale-WYTZPUIA.js +0 -111
  1456. package/dist/upscale-WYTZPUIA.js.map +0 -1
  1457. package/dist/url-options-DOCH5AWX.js +0 -128
  1458. package/dist/url-options-DOCH5AWX.js.map +0 -1
  1459. package/dist/url-params-IYTU3MVV.js +0 -99
  1460. package/dist/url-params-IYTU3MVV.js.map +0 -1
  1461. package/dist/use-RGJMULXG.js +0 -97
  1462. package/dist/use-RGJMULXG.js.map +0 -1
  1463. package/dist/validate-T22BKIFK.js +0 -89
  1464. package/dist/validate-T22BKIFK.js.map +0 -1
  1465. package/dist/variant-3DBL2RDV.js +0 -339
  1466. package/dist/variant-3DBL2RDV.js.map +0 -1
  1467. package/dist/videos-7SB2CLZW.js +0 -39
  1468. package/dist/view-5QDCP7HF.js +0 -123
  1469. package/dist/view-5QDCP7HF.js.map +0 -1
  1470. package/dist/viewer-check-NGIMC2BR.js +0 -66
  1471. package/dist/web-IRWXTGE2.js +0 -136
  1472. package/dist/web-IRWXTGE2.js.map +0 -1
  1473. package/dist/winners-JSI4N26Y.js +0 -81
  1474. package/dist/winners-JSI4N26Y.js.map +0 -1
  1475. package/dist/winning-ads-XQZ6HEX5.js +0 -62
  1476. package/dist/write-commands-3C3TV2YC.js +0 -714
  1477. package/dist/write-commands-3C3TV2YC.js.map +0 -1
  1478. package/dist/write-commands-7WIG5UDU.js +0 -731
  1479. package/dist/write-commands-7WIG5UDU.js.map +0 -1
  1480. package/dist/write-commands-G7HHGAEE.js +0 -1009
  1481. package/dist/write-commands-G7HHGAEE.js.map +0 -1
  1482. package/dist/write-commands-ROQSZFXR.js +0 -207
  1483. package/dist/write-commands-ROQSZFXR.js.map +0 -1
  1484. package/dist/x-BLTCL6L3.js +0 -47
  1485. /package/dist/{actions-7XF5L4U3.js.map → actions-PEI6ZQAG.js.map} +0 -0
  1486. /package/dist/{ads-IRE5RZCS.js.map → ads-TJ7ACFHG.js.map} +0 -0
  1487. /package/dist/{avatars-G54K55J3.js.map → avatars-2UQJXHPV.js.map} +0 -0
  1488. /package/dist/{brand-ODTHWWFL.js.map → brand-XBABUT52.js.map} +0 -0
  1489. /package/dist/{canvas-M5HAG7VA.js.map → canvas-KEXE5P6S.js.map} +0 -0
  1490. /package/dist/{chatgpt-PLKNBNVL.js.map → chatgpt-7W75X3ER.js.map} +0 -0
  1491. /package/dist/{chunk-OZLBLXTK.js.map → chunk-2TK4DEOE.js.map} +0 -0
  1492. /package/dist/{chunk-ZHW3O25C.js.map → chunk-4NDCTLI5.js.map} +0 -0
  1493. /package/dist/{chunk-5NQIFCNX.js.map → chunk-5ARG3CQG.js.map} +0 -0
  1494. /package/dist/{chunk-ZAFR46HG.js.map → chunk-5Z2KSVIV.js.map} +0 -0
  1495. /package/dist/{chunk-EYO62URT.js.map → chunk-6B7VKFS4.js.map} +0 -0
  1496. /package/dist/{chunk-W7OFLOZB.js.map → chunk-6G5K6ZC6.js.map} +0 -0
  1497. /package/dist/{chunk-RJAQEZVD.js.map → chunk-73QKIIIR.js.map} +0 -0
  1498. /package/dist/{chunk-YS6PCTPS.js.map → chunk-75FDTDLH.js.map} +0 -0
  1499. /package/dist/{chunk-NGT6MARJ.js.map → chunk-7J6EHOH6.js.map} +0 -0
  1500. /package/dist/{chunk-TD44SXQX.js.map → chunk-7OFNN4CT.js.map} +0 -0
  1501. /package/dist/{chunk-LDVMMLRA.js.map → chunk-C6U6UDHJ.js.map} +0 -0
  1502. /package/dist/{chunk-6FBZ5E6L.js.map → chunk-DIY6QR3E.js.map} +0 -0
  1503. /package/dist/{chunk-F3WFP75M.js.map → chunk-EFSYTROP.js.map} +0 -0
  1504. /package/dist/{chunk-4MU3U3SO.js.map → chunk-FEXDI4NM.js.map} +0 -0
  1505. /package/dist/{chunk-YMOVI3WT.js.map → chunk-FHXIEMCG.js.map} +0 -0
  1506. /package/dist/{chunk-R34LJSPM.js.map → chunk-H26L3OQY.js.map} +0 -0
  1507. /package/dist/{chunk-NMMKTPGI.js.map → chunk-HIPDMQZ6.js.map} +0 -0
  1508. /package/dist/{chunk-FRVROFI6.js.map → chunk-HYCIBVDW.js.map} +0 -0
  1509. /package/dist/{chunk-BSUN6JMU.js.map → chunk-IFWP3ZDO.js.map} +0 -0
  1510. /package/dist/{chunk-LQ4HBQ2B.js.map → chunk-IXKEWS7X.js.map} +0 -0
  1511. /package/dist/{chunk-DPEQVHTX.js.map → chunk-JERXV5A3.js.map} +0 -0
  1512. /package/dist/{chunk-TCSPJQ2X.js.map → chunk-KLNKEVIY.js.map} +0 -0
  1513. /package/dist/{chunk-JMXBUIVI.js.map → chunk-KNY76UGC.js.map} +0 -0
  1514. /package/dist/{chunk-IMZIECST.js.map → chunk-KWAOTV7F.js.map} +0 -0
  1515. /package/dist/{chunk-A57AHUNA.js.map → chunk-LERTEZST.js.map} +0 -0
  1516. /package/dist/{chunk-73MCYA5Z.js.map → chunk-LL2CD5WU.js.map} +0 -0
  1517. /package/dist/{chunk-UA5EUJXV.js.map → chunk-LO6GEJ4Z.js.map} +0 -0
  1518. /package/dist/{chunk-IRHNWYDT.js.map → chunk-LS5MTRFI.js.map} +0 -0
  1519. /package/dist/{chunk-F7HBCFUA.js.map → chunk-LZ73CZGP.js.map} +0 -0
  1520. /package/dist/{chunk-NGYKF4T6.js.map → chunk-MELOSESI.js.map} +0 -0
  1521. /package/dist/{chunk-SXRSLUW7.js.map → chunk-NAWWC5I3.js.map} +0 -0
  1522. /package/dist/{chunk-FFZBW4CC.js.map → chunk-NPE7EWBE.js.map} +0 -0
  1523. /package/dist/{chunk-JH7NHC5W.js.map → chunk-OKG6GX2F.js.map} +0 -0
  1524. /package/dist/{chunk-WAQYXH2U.js.map → chunk-PBA3YCZA.js.map} +0 -0
  1525. /package/dist/{chunk-AWICKT2B.js.map → chunk-PWGWMIIJ.js.map} +0 -0
  1526. /package/dist/{chunk-F6NJAHAZ.js.map → chunk-QHLB5V7J.js.map} +0 -0
  1527. /package/dist/{chunk-TTFTS2SO.js.map → chunk-QJE6ZYGI.js.map} +0 -0
  1528. /package/dist/{chunk-Y4JR4RDM.js.map → chunk-QSN5MZGS.js.map} +0 -0
  1529. /package/dist/{chunk-HWWPDUZM.js.map → chunk-RSW6QJPH.js.map} +0 -0
  1530. /package/dist/{chunk-LYZVLKRA.js.map → chunk-SBMIQDCX.js.map} +0 -0
  1531. /package/dist/{chunk-BDD2ILIT.js.map → chunk-STIB5DR5.js.map} +0 -0
  1532. /package/dist/{chunk-A3PEJ3V3.js.map → chunk-TBEUMOEL.js.map} +0 -0
  1533. /package/dist/{chunk-RPFBZHHE.js.map → chunk-TD2P4HBP.js.map} +0 -0
  1534. /package/dist/{chunk-CBEL3P22.js.map → chunk-VBHDZSI5.js.map} +0 -0
  1535. /package/dist/{chunk-6YWRJMGR.js.map → chunk-VFIOJD5M.js.map} +0 -0
  1536. /package/dist/{chunk-QYOPQRLI.js.map → chunk-VVZBBKRC.js.map} +0 -0
  1537. /package/dist/{chunk-G32FXVQ6.js.map → chunk-W3B4BHQU.js.map} +0 -0
  1538. /package/dist/{chunk-Q7UF4ERB.js.map → chunk-WS2GMOSG.js.map} +0 -0
  1539. /package/dist/{chunk-EPK2GYLV.js.map → chunk-XBOK23HI.js.map} +0 -0
  1540. /package/dist/{chunk-HA5D6US2.js.map → chunk-XG3XCHN6.js.map} +0 -0
  1541. /package/dist/{chunk-L4DOL7L7.js.map → chunk-XL3BMSYG.js.map} +0 -0
  1542. /package/dist/{chunk-ECXNE6RJ.js.map → chunk-XYMPS526.js.map} +0 -0
  1543. /package/dist/{chunk-WWD4PITU.js.map → chunk-YBMVHGY3.js.map} +0 -0
  1544. /package/dist/{client-XKDFFS7O.js.map → client-VHN32ZRE.js.map} +0 -0
  1545. /package/dist/{connect-ATGYJNG4.js.map → connect-TA5W6YGW.js.map} +0 -0
  1546. /package/dist/{customers-ACRYXALZ.js.map → customers-4RJGRR2Y.js.map} +0 -0
  1547. /package/dist/{env-ODWJOKNV.js.map → env-KIP2J2UB.js.map} +0 -0
  1548. /package/dist/{fit-5WZ6NVSF.js.map → fit-KXHYKIA4.js.map} +0 -0
  1549. /package/dist/{fonts-7U7I2TWV.js.map → fonts-NTOQS2KU.js.map} +0 -0
  1550. /package/dist/{ga4-QPEXE6YG.js.map → ga4-UDQ2HA2J.js.map} +0 -0
  1551. /package/dist/{gsc-LC5ADBA3.js.map → gsc-P3QYGDV2.js.map} +0 -0
  1552. /package/dist/{ideas-NEBJBIBM.js.map → ideas-PU7IAX6F.js.map} +0 -0
  1553. /package/dist/{images-ASWWS5TH.js.map → images-QI2HTX6B.js.map} +0 -0
  1554. /package/dist/{ingest-X7UPOCKP.js.map → ingest-BYJNFOOT.js.map} +0 -0
  1555. /package/dist/{inspiration-64DY3QWN.js.map → inspiration-I4MMKAWA.js.map} +0 -0
  1556. /package/dist/{learn-D4D75X2Y.js.map → learn-HZU3QWNN.js.map} +0 -0
  1557. /package/dist/{logo-7O7VW5R3.js.map → logo-2IP663QO.js.map} +0 -0
  1558. /package/dist/{lookup-Z2X5WAO6.js.map → lookup-XK45W2SH.js.map} +0 -0
  1559. /package/dist/{media-7P66TUIR.js.map → media-M7E6V2XU.js.map} +0 -0
  1560. /package/dist/{media-sources-427U333M.js.map → media-sources-3D246I3O.js.map} +0 -0
  1561. /package/dist/{meta-JH4FHVNX.js.map → meta-EZ4SY25M.js.map} +0 -0
  1562. /package/dist/{output-ZLXBAA4O.js.map → output-RAH3TSIL.js.map} +0 -0
  1563. /package/dist/{performance-SOMZNPIG.js.map → performance-7LQQCEAW.js.map} +0 -0
  1564. /package/dist/{reddit-OPHQFRRC.js.map → reddit-INGPFGP4.js.map} +0 -0
  1565. /package/dist/{research-MG3MESKH.js.map → research-PA53M335.js.map} +0 -0
  1566. /package/dist/{run-PZF26R6H.js.map → run-2IM2QOCI.js.map} +0 -0
  1567. /package/dist/{scheduled-agents-CIEAOWM6.js.map → scheduled-agents-2NCGSD76.js.map} +0 -0
  1568. /package/dist/{search-FORHMB7P.js.map → search-XUIVHGAY.js.map} +0 -0
  1569. /package/dist/{select-52K6KZGY.js.map → select-ZWDEVAH2.js.map} +0 -0
  1570. /package/dist/{shared-VMV44VPB.js.map → shared-HJDFNID4.js.map} +0 -0
  1571. /package/dist/{sources-BQNCLGWT.js.map → sources-UGMZFZ2E.js.map} +0 -0
  1572. /package/dist/{stats-TO3J2FU6.js.map → stats-NNXZMPZR.js.map} +0 -0
  1573. /package/dist/{studio-LHH62SZC.js.map → studio-HUEBE6DS.js.map} +0 -0
  1574. /package/dist/{sync-definition-LBPI7P5F.js.map → sync-definition-YBDM7D4M.js.map} +0 -0
  1575. /package/dist/{tag-manager-D3YNI7JG.js.map → tag-manager-HREEYGVM.js.map} +0 -0
  1576. /package/dist/{tags-OOQV4G2Y.js.map → tags-R3K35KTL.js.map} +0 -0
  1577. /package/dist/{testimonials-OIZMXEYZ.js.map → testimonials-5QGCPZ6K.js.map} +0 -0
  1578. /package/dist/{videos-7SB2CLZW.js.map → videos-GIYDCCKR.js.map} +0 -0
  1579. /package/dist/{viewer-check-NGIMC2BR.js.map → viewer-check-VN2JK2LW.js.map} +0 -0
  1580. /package/dist/{winning-ads-XQZ6HEX5.js.map → winning-ads-7QWEIMRU.js.map} +0 -0
  1581. /package/dist/{x-BLTCL6L3.js.map → x-OEAKQBB7.js.map} +0 -0
@@ -1,3155 +0,0 @@
1
- import {
2
- __commonJS,
3
- __toESM
4
- } from "./chunk-YQSBHWOI.js";
5
-
6
- // ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
7
- var require_safe_stable_stringify = __commonJS({
8
- "../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js"(exports, module) {
9
- "use strict";
10
- var { hasOwnProperty } = Object.prototype;
11
- var stringify = configure2();
12
- stringify.configure = configure2;
13
- stringify.stringify = stringify;
14
- stringify.default = stringify;
15
- exports.stringify = stringify;
16
- exports.configure = configure2;
17
- module.exports = stringify;
18
- var strEscapeSequencesRegExp = /[\u0000-\u001f\u0022\u005c\ud800-\udfff]/;
19
- function strEscape(str) {
20
- if (str.length < 5e3 && !strEscapeSequencesRegExp.test(str)) {
21
- return `"${str}"`;
22
- }
23
- return JSON.stringify(str);
24
- }
25
- function sort(array, comparator) {
26
- if (array.length > 200 || comparator) {
27
- return array.sort(comparator);
28
- }
29
- for (let i = 1; i < array.length; i++) {
30
- const currentValue = array[i];
31
- let position = i;
32
- while (position !== 0 && array[position - 1] > currentValue) {
33
- array[position] = array[position - 1];
34
- position--;
35
- }
36
- array[position] = currentValue;
37
- }
38
- return array;
39
- }
40
- var typedArrayPrototypeGetSymbolToStringTag = Object.getOwnPropertyDescriptor(
41
- Object.getPrototypeOf(
42
- Object.getPrototypeOf(
43
- new Int8Array()
44
- )
45
- ),
46
- Symbol.toStringTag
47
- ).get;
48
- function isTypedArrayWithEntries(value) {
49
- return typedArrayPrototypeGetSymbolToStringTag.call(value) !== void 0 && value.length !== 0;
50
- }
51
- function stringifyTypedArray(array, separator, maximumBreadth) {
52
- if (array.length < maximumBreadth) {
53
- maximumBreadth = array.length;
54
- }
55
- const whitespace = separator === "," ? "" : " ";
56
- let res = `"0":${whitespace}${array[0]}`;
57
- for (let i = 1; i < maximumBreadth; i++) {
58
- res += `${separator}"${i}":${whitespace}${array[i]}`;
59
- }
60
- return res;
61
- }
62
- function getCircularValueOption(options) {
63
- if (hasOwnProperty.call(options, "circularValue")) {
64
- const circularValue = options.circularValue;
65
- if (typeof circularValue === "string") {
66
- return `"${circularValue}"`;
67
- }
68
- if (circularValue == null) {
69
- return circularValue;
70
- }
71
- if (circularValue === Error || circularValue === TypeError) {
72
- return {
73
- toString() {
74
- throw new TypeError("Converting circular structure to JSON");
75
- }
76
- };
77
- }
78
- throw new TypeError('The "circularValue" argument must be of type string or the value null or undefined');
79
- }
80
- return '"[Circular]"';
81
- }
82
- function getDeterministicOption(options) {
83
- let value;
84
- if (hasOwnProperty.call(options, "deterministic")) {
85
- value = options.deterministic;
86
- if (typeof value !== "boolean" && typeof value !== "function") {
87
- throw new TypeError('The "deterministic" argument must be of type boolean or comparator function');
88
- }
89
- }
90
- return value === void 0 ? true : value;
91
- }
92
- function getBooleanOption(options, key) {
93
- let value;
94
- if (hasOwnProperty.call(options, key)) {
95
- value = options[key];
96
- if (typeof value !== "boolean") {
97
- throw new TypeError(`The "${key}" argument must be of type boolean`);
98
- }
99
- }
100
- return value === void 0 ? true : value;
101
- }
102
- function getPositiveIntegerOption(options, key) {
103
- let value;
104
- if (hasOwnProperty.call(options, key)) {
105
- value = options[key];
106
- if (typeof value !== "number") {
107
- throw new TypeError(`The "${key}" argument must be of type number`);
108
- }
109
- if (!Number.isInteger(value)) {
110
- throw new TypeError(`The "${key}" argument must be an integer`);
111
- }
112
- if (value < 1) {
113
- throw new RangeError(`The "${key}" argument must be >= 1`);
114
- }
115
- }
116
- return value === void 0 ? Infinity : value;
117
- }
118
- function getItemCount(number) {
119
- if (number === 1) {
120
- return "1 item";
121
- }
122
- return `${number} items`;
123
- }
124
- function getUniqueReplacerSet(replacerArray) {
125
- const replacerSet = /* @__PURE__ */ new Set();
126
- for (const value of replacerArray) {
127
- if (typeof value === "string" || typeof value === "number") {
128
- replacerSet.add(String(value));
129
- }
130
- }
131
- return replacerSet;
132
- }
133
- function getStrictOption(options) {
134
- if (hasOwnProperty.call(options, "strict")) {
135
- const value = options.strict;
136
- if (typeof value !== "boolean") {
137
- throw new TypeError('The "strict" argument must be of type boolean');
138
- }
139
- if (value) {
140
- return (value2) => {
141
- let message = `Object can not safely be stringified. Received type ${typeof value2}`;
142
- if (typeof value2 !== "function") message += ` (${value2.toString()})`;
143
- throw new Error(message);
144
- };
145
- }
146
- }
147
- }
148
- function configure2(options) {
149
- options = { ...options };
150
- const fail = getStrictOption(options);
151
- if (fail) {
152
- if (options.bigint === void 0) {
153
- options.bigint = false;
154
- }
155
- if (!("circularValue" in options)) {
156
- options.circularValue = Error;
157
- }
158
- }
159
- const circularValue = getCircularValueOption(options);
160
- const bigint = getBooleanOption(options, "bigint");
161
- const deterministic = getDeterministicOption(options);
162
- const comparator = typeof deterministic === "function" ? deterministic : void 0;
163
- const maximumDepth = getPositiveIntegerOption(options, "maximumDepth");
164
- const maximumBreadth = getPositiveIntegerOption(options, "maximumBreadth");
165
- function stringifyFnReplacer(key, parent, stack, replacer, spacer, indentation) {
166
- let value = parent[key];
167
- if (typeof value === "object" && value !== null && typeof value.toJSON === "function") {
168
- value = value.toJSON(key);
169
- }
170
- value = replacer.call(parent, key, value);
171
- switch (typeof value) {
172
- case "string":
173
- return strEscape(value);
174
- case "object": {
175
- if (value === null) {
176
- return "null";
177
- }
178
- if (stack.indexOf(value) !== -1) {
179
- return circularValue;
180
- }
181
- let res = "";
182
- let join = ",";
183
- const originalIndentation = indentation;
184
- if (Array.isArray(value)) {
185
- if (value.length === 0) {
186
- return "[]";
187
- }
188
- if (maximumDepth < stack.length + 1) {
189
- return '"[Array]"';
190
- }
191
- stack.push(value);
192
- if (spacer !== "") {
193
- indentation += spacer;
194
- res += `
195
- ${indentation}`;
196
- join = `,
197
- ${indentation}`;
198
- }
199
- const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
200
- let i = 0;
201
- for (; i < maximumValuesToStringify - 1; i++) {
202
- const tmp2 = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation);
203
- res += tmp2 !== void 0 ? tmp2 : "null";
204
- res += join;
205
- }
206
- const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation);
207
- res += tmp !== void 0 ? tmp : "null";
208
- if (value.length - 1 > maximumBreadth) {
209
- const removedKeys = value.length - maximumBreadth - 1;
210
- res += `${join}"... ${getItemCount(removedKeys)} not stringified"`;
211
- }
212
- if (spacer !== "") {
213
- res += `
214
- ${originalIndentation}`;
215
- }
216
- stack.pop();
217
- return `[${res}]`;
218
- }
219
- let keys = Object.keys(value);
220
- const keyLength = keys.length;
221
- if (keyLength === 0) {
222
- return "{}";
223
- }
224
- if (maximumDepth < stack.length + 1) {
225
- return '"[Object]"';
226
- }
227
- let whitespace = "";
228
- let separator = "";
229
- if (spacer !== "") {
230
- indentation += spacer;
231
- join = `,
232
- ${indentation}`;
233
- whitespace = " ";
234
- }
235
- const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
236
- if (deterministic && !isTypedArrayWithEntries(value)) {
237
- keys = sort(keys, comparator);
238
- }
239
- stack.push(value);
240
- for (let i = 0; i < maximumPropertiesToStringify; i++) {
241
- const key2 = keys[i];
242
- const tmp = stringifyFnReplacer(key2, value, stack, replacer, spacer, indentation);
243
- if (tmp !== void 0) {
244
- res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
245
- separator = join;
246
- }
247
- }
248
- if (keyLength > maximumBreadth) {
249
- const removedKeys = keyLength - maximumBreadth;
250
- res += `${separator}"...":${whitespace}"${getItemCount(removedKeys)} not stringified"`;
251
- separator = join;
252
- }
253
- if (spacer !== "" && separator.length > 1) {
254
- res = `
255
- ${indentation}${res}
256
- ${originalIndentation}`;
257
- }
258
- stack.pop();
259
- return `{${res}}`;
260
- }
261
- case "number":
262
- return isFinite(value) ? String(value) : fail ? fail(value) : "null";
263
- case "boolean":
264
- return value === true ? "true" : "false";
265
- case "undefined":
266
- return void 0;
267
- case "bigint":
268
- if (bigint) {
269
- return String(value);
270
- }
271
- // fallthrough
272
- default:
273
- return fail ? fail(value) : void 0;
274
- }
275
- }
276
- function stringifyArrayReplacer(key, value, stack, replacer, spacer, indentation) {
277
- if (typeof value === "object" && value !== null && typeof value.toJSON === "function") {
278
- value = value.toJSON(key);
279
- }
280
- switch (typeof value) {
281
- case "string":
282
- return strEscape(value);
283
- case "object": {
284
- if (value === null) {
285
- return "null";
286
- }
287
- if (stack.indexOf(value) !== -1) {
288
- return circularValue;
289
- }
290
- const originalIndentation = indentation;
291
- let res = "";
292
- let join = ",";
293
- if (Array.isArray(value)) {
294
- if (value.length === 0) {
295
- return "[]";
296
- }
297
- if (maximumDepth < stack.length + 1) {
298
- return '"[Array]"';
299
- }
300
- stack.push(value);
301
- if (spacer !== "") {
302
- indentation += spacer;
303
- res += `
304
- ${indentation}`;
305
- join = `,
306
- ${indentation}`;
307
- }
308
- const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
309
- let i = 0;
310
- for (; i < maximumValuesToStringify - 1; i++) {
311
- const tmp2 = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation);
312
- res += tmp2 !== void 0 ? tmp2 : "null";
313
- res += join;
314
- }
315
- const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation);
316
- res += tmp !== void 0 ? tmp : "null";
317
- if (value.length - 1 > maximumBreadth) {
318
- const removedKeys = value.length - maximumBreadth - 1;
319
- res += `${join}"... ${getItemCount(removedKeys)} not stringified"`;
320
- }
321
- if (spacer !== "") {
322
- res += `
323
- ${originalIndentation}`;
324
- }
325
- stack.pop();
326
- return `[${res}]`;
327
- }
328
- stack.push(value);
329
- let whitespace = "";
330
- if (spacer !== "") {
331
- indentation += spacer;
332
- join = `,
333
- ${indentation}`;
334
- whitespace = " ";
335
- }
336
- let separator = "";
337
- for (const key2 of replacer) {
338
- const tmp = stringifyArrayReplacer(key2, value[key2], stack, replacer, spacer, indentation);
339
- if (tmp !== void 0) {
340
- res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
341
- separator = join;
342
- }
343
- }
344
- if (spacer !== "" && separator.length > 1) {
345
- res = `
346
- ${indentation}${res}
347
- ${originalIndentation}`;
348
- }
349
- stack.pop();
350
- return `{${res}}`;
351
- }
352
- case "number":
353
- return isFinite(value) ? String(value) : fail ? fail(value) : "null";
354
- case "boolean":
355
- return value === true ? "true" : "false";
356
- case "undefined":
357
- return void 0;
358
- case "bigint":
359
- if (bigint) {
360
- return String(value);
361
- }
362
- // fallthrough
363
- default:
364
- return fail ? fail(value) : void 0;
365
- }
366
- }
367
- function stringifyIndent(key, value, stack, spacer, indentation) {
368
- switch (typeof value) {
369
- case "string":
370
- return strEscape(value);
371
- case "object": {
372
- if (value === null) {
373
- return "null";
374
- }
375
- if (typeof value.toJSON === "function") {
376
- value = value.toJSON(key);
377
- if (typeof value !== "object") {
378
- return stringifyIndent(key, value, stack, spacer, indentation);
379
- }
380
- if (value === null) {
381
- return "null";
382
- }
383
- }
384
- if (stack.indexOf(value) !== -1) {
385
- return circularValue;
386
- }
387
- const originalIndentation = indentation;
388
- if (Array.isArray(value)) {
389
- if (value.length === 0) {
390
- return "[]";
391
- }
392
- if (maximumDepth < stack.length + 1) {
393
- return '"[Array]"';
394
- }
395
- stack.push(value);
396
- indentation += spacer;
397
- let res2 = `
398
- ${indentation}`;
399
- const join2 = `,
400
- ${indentation}`;
401
- const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
402
- let i = 0;
403
- for (; i < maximumValuesToStringify - 1; i++) {
404
- const tmp2 = stringifyIndent(String(i), value[i], stack, spacer, indentation);
405
- res2 += tmp2 !== void 0 ? tmp2 : "null";
406
- res2 += join2;
407
- }
408
- const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation);
409
- res2 += tmp !== void 0 ? tmp : "null";
410
- if (value.length - 1 > maximumBreadth) {
411
- const removedKeys = value.length - maximumBreadth - 1;
412
- res2 += `${join2}"... ${getItemCount(removedKeys)} not stringified"`;
413
- }
414
- res2 += `
415
- ${originalIndentation}`;
416
- stack.pop();
417
- return `[${res2}]`;
418
- }
419
- let keys = Object.keys(value);
420
- const keyLength = keys.length;
421
- if (keyLength === 0) {
422
- return "{}";
423
- }
424
- if (maximumDepth < stack.length + 1) {
425
- return '"[Object]"';
426
- }
427
- indentation += spacer;
428
- const join = `,
429
- ${indentation}`;
430
- let res = "";
431
- let separator = "";
432
- let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
433
- if (isTypedArrayWithEntries(value)) {
434
- res += stringifyTypedArray(value, join, maximumBreadth);
435
- keys = keys.slice(value.length);
436
- maximumPropertiesToStringify -= value.length;
437
- separator = join;
438
- }
439
- if (deterministic) {
440
- keys = sort(keys, comparator);
441
- }
442
- stack.push(value);
443
- for (let i = 0; i < maximumPropertiesToStringify; i++) {
444
- const key2 = keys[i];
445
- const tmp = stringifyIndent(key2, value[key2], stack, spacer, indentation);
446
- if (tmp !== void 0) {
447
- res += `${separator}${strEscape(key2)}: ${tmp}`;
448
- separator = join;
449
- }
450
- }
451
- if (keyLength > maximumBreadth) {
452
- const removedKeys = keyLength - maximumBreadth;
453
- res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"`;
454
- separator = join;
455
- }
456
- if (separator !== "") {
457
- res = `
458
- ${indentation}${res}
459
- ${originalIndentation}`;
460
- }
461
- stack.pop();
462
- return `{${res}}`;
463
- }
464
- case "number":
465
- return isFinite(value) ? String(value) : fail ? fail(value) : "null";
466
- case "boolean":
467
- return value === true ? "true" : "false";
468
- case "undefined":
469
- return void 0;
470
- case "bigint":
471
- if (bigint) {
472
- return String(value);
473
- }
474
- // fallthrough
475
- default:
476
- return fail ? fail(value) : void 0;
477
- }
478
- }
479
- function stringifySimple(key, value, stack) {
480
- switch (typeof value) {
481
- case "string":
482
- return strEscape(value);
483
- case "object": {
484
- if (value === null) {
485
- return "null";
486
- }
487
- if (typeof value.toJSON === "function") {
488
- value = value.toJSON(key);
489
- if (typeof value !== "object") {
490
- return stringifySimple(key, value, stack);
491
- }
492
- if (value === null) {
493
- return "null";
494
- }
495
- }
496
- if (stack.indexOf(value) !== -1) {
497
- return circularValue;
498
- }
499
- let res = "";
500
- const hasLength = value.length !== void 0;
501
- if (hasLength && Array.isArray(value)) {
502
- if (value.length === 0) {
503
- return "[]";
504
- }
505
- if (maximumDepth < stack.length + 1) {
506
- return '"[Array]"';
507
- }
508
- stack.push(value);
509
- const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
510
- let i = 0;
511
- for (; i < maximumValuesToStringify - 1; i++) {
512
- const tmp2 = stringifySimple(String(i), value[i], stack);
513
- res += tmp2 !== void 0 ? tmp2 : "null";
514
- res += ",";
515
- }
516
- const tmp = stringifySimple(String(i), value[i], stack);
517
- res += tmp !== void 0 ? tmp : "null";
518
- if (value.length - 1 > maximumBreadth) {
519
- const removedKeys = value.length - maximumBreadth - 1;
520
- res += `,"... ${getItemCount(removedKeys)} not stringified"`;
521
- }
522
- stack.pop();
523
- return `[${res}]`;
524
- }
525
- let keys = Object.keys(value);
526
- const keyLength = keys.length;
527
- if (keyLength === 0) {
528
- return "{}";
529
- }
530
- if (maximumDepth < stack.length + 1) {
531
- return '"[Object]"';
532
- }
533
- let separator = "";
534
- let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
535
- if (hasLength && isTypedArrayWithEntries(value)) {
536
- res += stringifyTypedArray(value, ",", maximumBreadth);
537
- keys = keys.slice(value.length);
538
- maximumPropertiesToStringify -= value.length;
539
- separator = ",";
540
- }
541
- if (deterministic) {
542
- keys = sort(keys, comparator);
543
- }
544
- stack.push(value);
545
- for (let i = 0; i < maximumPropertiesToStringify; i++) {
546
- const key2 = keys[i];
547
- const tmp = stringifySimple(key2, value[key2], stack);
548
- if (tmp !== void 0) {
549
- res += `${separator}${strEscape(key2)}:${tmp}`;
550
- separator = ",";
551
- }
552
- }
553
- if (keyLength > maximumBreadth) {
554
- const removedKeys = keyLength - maximumBreadth;
555
- res += `${separator}"...":"${getItemCount(removedKeys)} not stringified"`;
556
- }
557
- stack.pop();
558
- return `{${res}}`;
559
- }
560
- case "number":
561
- return isFinite(value) ? String(value) : fail ? fail(value) : "null";
562
- case "boolean":
563
- return value === true ? "true" : "false";
564
- case "undefined":
565
- return void 0;
566
- case "bigint":
567
- if (bigint) {
568
- return String(value);
569
- }
570
- // fallthrough
571
- default:
572
- return fail ? fail(value) : void 0;
573
- }
574
- }
575
- function stringify2(value, replacer, space) {
576
- if (arguments.length > 1) {
577
- let spacer = "";
578
- if (typeof space === "number") {
579
- spacer = " ".repeat(Math.min(space, 10));
580
- } else if (typeof space === "string") {
581
- spacer = space.slice(0, 10);
582
- }
583
- if (replacer != null) {
584
- if (typeof replacer === "function") {
585
- return stringifyFnReplacer("", { "": value }, [], replacer, spacer, "");
586
- }
587
- if (Array.isArray(replacer)) {
588
- return stringifyArrayReplacer("", value, [], getUniqueReplacerSet(replacer), spacer, "");
589
- }
590
- }
591
- if (spacer.length !== 0) {
592
- return stringifyIndent("", value, [], spacer, "");
593
- }
594
- }
595
- return stringifySimple("", value, []);
596
- }
597
- return stringify2;
598
- }
599
- }
600
- });
601
-
602
- // ../canvas-contract/src/adPlacements.ts
603
- var AD_PLATFORMS = [
604
- "meta",
605
- "google_display",
606
- "google_pmax",
607
- "google_demandgen",
608
- "google_search",
609
- "youtube",
610
- "linkedin",
611
- "tiktok",
612
- "x",
613
- "reddit",
614
- "pinterest",
615
- "snapchat",
616
- "chatgpt"
617
- ];
618
- var FEED_MARGIN = { top: 0.04, bottom: 0.04, left: 0.04, right: 0.04 };
619
- var size = (width, height, required = true) => ({ width, height, required });
620
- var AD_PLACEMENTS = [
621
- {
622
- id: "meta_feed",
623
- platform: "meta",
624
- name: "Facebook and Instagram feeds",
625
- sizes: [size(1080, 1350), size(1080, 1080, false)],
626
- safe: FEED_MARGIN,
627
- source: "https://www.facebook.com/business/ads-guide/update/image/instagram-feed"
628
- },
629
- {
630
- id: "meta_stories",
631
- platform: "meta",
632
- name: "Facebook and Instagram Stories",
633
- sizes: [size(1080, 1920)],
634
- safe: { top: 0.16, bottom: 0.22, left: 0.04, right: 0.04 },
635
- cover: { top: 0.09, bottom: 0.15 },
636
- source: "https://www.facebook.com/business/ads-guide/update/image/instagram-story"
637
- },
638
- {
639
- id: "meta_reels",
640
- platform: "meta",
641
- name: "Facebook and Instagram Reels",
642
- sizes: [size(1080, 1920)],
643
- safe: { top: 0.16, bottom: 0.37, left: 0.04, right: 0.04 },
644
- cover: { top: 0.09, bottom: 0.32, rail: { width: 0.08, from: 0.6 } },
645
- railMargin: { width: 0.1, from: 0.55 },
646
- source: "https://www.facebook.com/business/ads-guide/update/image/instagram-reels"
647
- },
648
- {
649
- id: "meta_right_column",
650
- platform: "meta",
651
- name: "Facebook right column, Marketplace and search results",
652
- sizes: [size(1080, 1080), size(1200, 628, false)],
653
- safe: FEED_MARGIN,
654
- source: "https://www.facebook.com/business/ads-guide/update/image/facebook-right-column"
655
- },
656
- {
657
- id: "google_display_responsive",
658
- platform: "google_display",
659
- name: "Responsive display ads (Google Display Network)",
660
- sizes: [size(1200, 628), size(1200, 1200), size(900, 1600, false)],
661
- safe: FEED_MARGIN,
662
- rule: "Text may cover at most 20% of the image; Google crops up to 5% from each side.",
663
- source: "https://support.google.com/google-ads/answer/9823397"
664
- },
665
- {
666
- id: "google_display_banners",
667
- platform: "google_display",
668
- name: "Uploaded display banners",
669
- sizes: [
670
- size(300, 250),
671
- size(728, 90),
672
- size(320, 50),
673
- size(336, 280, false),
674
- size(300, 600, false),
675
- size(160, 600, false),
676
- size(320, 100, false),
677
- size(970, 250, false)
678
- ],
679
- safe: FEED_MARGIN,
680
- rule: "Each banner is exactly its pixel size, 150 KB at most.",
681
- source: "https://support.google.com/google-ads/answer/7031480"
682
- },
683
- {
684
- id: "google_pmax",
685
- platform: "google_pmax",
686
- name: "Performance Max asset group",
687
- sizes: [size(1200, 628), size(1200, 1200), size(960, 1200, false)],
688
- safe: FEED_MARGIN,
689
- rule: "Google crops up to 5% from each side; keep text and logos off the edges.",
690
- source: "https://support.google.com/google-ads/answer/13676244"
691
- },
692
- {
693
- id: "google_demandgen",
694
- platform: "google_demandgen",
695
- name: "Demand Gen (YouTube, Discover, Gmail)",
696
- sizes: [size(1200, 628), size(1200, 1200), size(960, 1200, false)],
697
- safe: FEED_MARGIN,
698
- source: "https://support.google.com/google-ads/answer/13547298"
699
- },
700
- {
701
- id: "google_search_images",
702
- platform: "google_search",
703
- name: "Image assets on Search ads",
704
- sizes: [size(1200, 1200), size(1200, 628, false)],
705
- safe: FEED_MARGIN,
706
- rule: "No overlaid text, logos or buttons on the image.",
707
- source: "https://support.google.com/google-ads/answer/12118270"
708
- },
709
- {
710
- id: "youtube_feed",
711
- platform: "youtube",
712
- name: "YouTube home and watch-next feeds",
713
- sizes: [size(1200, 628), size(1200, 1200, false)],
714
- safe: FEED_MARGIN,
715
- source: "https://support.google.com/google-ads/answer/13547298"
716
- },
717
- {
718
- id: "youtube_shorts",
719
- platform: "youtube",
720
- name: "YouTube Shorts",
721
- sizes: [size(1080, 1920)],
722
- safe: { top: 0.12, bottom: 0.35, left: 0.05, right: 0.05 },
723
- cover: { top: 0.08, bottom: 0.3, rail: { width: 0.14, from: 0.45 } },
724
- railMargin: { width: 0.16, from: 0.4 },
725
- source: "https://support.google.com/youtube/answer/10059070"
726
- },
727
- {
728
- id: "linkedin_feed",
729
- platform: "linkedin",
730
- name: "LinkedIn feed (single image)",
731
- sizes: [size(1200, 1200), size(1200, 627, false), size(720, 900, false)],
732
- safe: FEED_MARGIN,
733
- source: "https://www.linkedin.com/help/lms/answer/a426534"
734
- },
735
- {
736
- id: "tiktok_feed",
737
- platform: "tiktok",
738
- name: "TikTok For You feed",
739
- sizes: [size(1080, 1920)],
740
- safe: { top: 0.1, bottom: 0.3, left: 0.06, right: 0.06 },
741
- cover: { top: 0.07, bottom: 0.25, rail: { width: 0.13, from: 0.45 } },
742
- railMargin: { width: 0.15, from: 0.4 },
743
- source: "https://ads.tiktok.com/help/article/tiktok-ads-safe-zone"
744
- },
745
- {
746
- id: "x_timeline",
747
- platform: "x",
748
- name: "X timeline (image and website card)",
749
- sizes: [size(1200, 628), size(1200, 1200, false)],
750
- safe: FEED_MARGIN,
751
- source: "https://business.x.com/en/help/campaign-setup/creative-ad-specifications"
752
- },
753
- {
754
- id: "reddit_feed",
755
- platform: "reddit",
756
- name: "Reddit feed and conversation pages",
757
- sizes: [size(1080, 1080), size(1080, 1350, false), size(1200, 628, false)],
758
- safe: FEED_MARGIN,
759
- source: "https://business.reddithelp.com/s/article/image-ad-specs"
760
- },
761
- {
762
- id: "pinterest_feed",
763
- platform: "pinterest",
764
- name: "Pinterest home feed and search (standard pin)",
765
- sizes: [size(1e3, 1500), size(1e3, 1e3, false)],
766
- safe: FEED_MARGIN,
767
- source: "https://help.pinterest.com/en/business/article/pinterest-product-specs"
768
- },
769
- {
770
- id: "snapchat_snap_ads",
771
- platform: "snapchat",
772
- name: "Snapchat Snap Ads",
773
- sizes: [size(1080, 1920)],
774
- safe: { top: 0.11, bottom: 0.21, left: 0.04, right: 0.04 },
775
- cover: { top: 0.08, bottom: 0.18 },
776
- source: "https://businesshelp.snapchat.com/s/article/single-image-video-specs"
777
- },
778
- {
779
- id: "chatgpt_card",
780
- platform: "chatgpt",
781
- name: "ChatGPT sponsored card",
782
- sizes: [size(1200, 1200)],
783
- safe: FEED_MARGIN,
784
- rule: "The card shows a square of the image; keep everything that matters inside it.",
785
- source: "https://help.openai.com/en/articles/chatgpt-ads"
786
- }
787
- ];
788
- var RATIOS = [
789
- ["1:1", 1],
790
- ["4:5", 4 / 5],
791
- ["9:16", 9 / 16],
792
- ["16:9", 16 / 9],
793
- ["1.91:1", 1.91],
794
- ["2:3", 2 / 3],
795
- ["3:4", 3 / 4],
796
- ["4:3", 4 / 3]
797
- ];
798
- function ratioLabel(width, height) {
799
- const r = width / height;
800
- const known = RATIOS.find(([, value]) => Math.abs(Math.log(r / value)) < 0.01);
801
- return known ? known[0] : `${width}x${height}`;
802
- }
803
- function placementsFor(names) {
804
- const placements = [];
805
- const unknown = [];
806
- for (const raw of names) {
807
- const name = raw.trim().toLowerCase();
808
- if (!name) continue;
809
- const found = AD_PLACEMENTS.filter((p) => p.platform === name || p.id === name);
810
- if (found.length === 0) unknown.push(raw.trim());
811
- for (const p of found) if (!placements.includes(p)) placements.push(p);
812
- }
813
- return { placements, unknown };
814
- }
815
- function addSize(into, format, size2, placement) {
816
- const existing = into.find((f) => f.format === format);
817
- if (!existing) {
818
- into.push({ format, width: size2.width, height: size2.height, placements: [placement] });
819
- return;
820
- }
821
- if (!existing.placements.includes(placement)) existing.placements.push(placement);
822
- if (size2.width > existing.width) Object.assign(existing, { width: size2.width, height: size2.height });
823
- }
824
- function deliverySet(names) {
825
- const { placements, unknown } = placementsFor(names);
826
- const formats = [];
827
- const banners = [];
828
- for (const placement of placements) {
829
- for (const s of placement.sizes.filter((x) => x.required)) {
830
- const format = ratioLabel(s.width, s.height);
831
- addSize(format.includes("x") ? banners : formats, format, s, placement.id);
832
- }
833
- }
834
- return { formats, banners, unknown };
835
- }
836
- function verticalCover(placementIds) {
837
- const covering = AD_PLACEMENTS.filter((p) => placementIds.includes(p.id) && p.cover);
838
- if (covering.length === 0) return null;
839
- const max = (pick) => Math.max(...covering.map((p) => pick(p) ?? 0));
840
- const rails = covering.filter((p) => p.cover?.rail);
841
- const margins = covering.filter((p) => p.railMargin);
842
- return {
843
- top: max((p) => p.cover?.top),
844
- bottom: max((p) => p.cover?.bottom),
845
- ...rails.length > 0 ? {
846
- rail: {
847
- width: max((p) => p.cover?.rail?.width),
848
- from: Math.min(...rails.map((p) => p.cover?.rail?.from ?? 1))
849
- }
850
- } : {},
851
- ...margins.length > 0 ? {
852
- railMargin: {
853
- width: max((p) => p.railMargin?.width),
854
- from: Math.min(...margins.map((p) => p.railMargin?.from ?? 1))
855
- }
856
- } : {},
857
- safe: {
858
- top: max((p) => p.safe.top),
859
- bottom: max((p) => p.safe.bottom),
860
- left: max((p) => p.safe.left),
861
- right: max((p) => p.safe.right)
862
- }
863
- };
864
- }
865
-
866
- // ../canvas-contract/src/adPlatformFormats.ts
867
- var AD_FORMAT_PLATFORMS = [
868
- "meta_feed",
869
- "meta_feed_stories",
870
- "meta_all",
871
- "linkedin",
872
- "google_search",
873
- "google_demandgen",
874
- "tiktok",
875
- "youtube"
876
- ];
877
- var AD_PLATFORM_FORMAT_PRESETS = {
878
- meta_feed: { formats: ["4:5"], note: "Meta/Instagram feed static." },
879
- meta_feed_stories: { formats: ["4:5", "9:16"], note: "Meta feed + Stories/Reels." },
880
- meta_all: { formats: ["4:5", "9:16", "1:1"], note: "Meta feed + Stories/Reels + square." },
881
- linkedin: { formats: ["1:1"], note: "LinkedIn single-image feed (square)." },
882
- google_search: {
883
- // Search image assets: 1:1 is the required one, 1.91:1 the optional landscape.
884
- // 16:9 is rendered only as the crop source for that landscape — Search never serves 16:9 itself.
885
- formats: ["1:1", "16:9"],
886
- offGrid: ["1.91:1"],
887
- note: "Google Search image assets (the image extension on a text ad); 1:1 required, 1.91:1 landscape \u2014 crop that from the rendered 16:9. Stage 3+ per campaign."
888
- },
889
- google_demandgen: {
890
- // Renders 16:9 too so the off-grid 1.91:1 landscape has a native source to crop from.
891
- formats: ["1:1", "4:5", "16:9"],
892
- offGrid: ["1.91:1"],
893
- note: "Google Demand Gen; also wants 1.91:1 landscape \u2014 crop that from the rendered 16:9."
894
- },
895
- tiktok: { formats: ["9:16"], note: "TikTok full-screen vertical." },
896
- youtube: { formats: ["16:9"], note: "YouTube in-stream / companion display." }
897
- };
898
- function platformFormats(platform) {
899
- return AD_PLATFORM_FORMAT_PRESETS[platform].formats;
900
- }
901
- function resolveAdaptFormats(params) {
902
- if (params.platform) return platformFormats(params.platform);
903
- return params.formats ?? [];
904
- }
905
-
906
- // ../canvas-contract/src/castName.ts
907
- function withoutCastName(text, names) {
908
- let out = text;
909
- for (const name of names) {
910
- const token = name.trim();
911
- if (token.length < 3) continue;
912
- const pattern = new RegExp(`(?<![\\p{L}\\p{N}])${escapeForPattern(token)}(?![\\p{L}\\p{N}])`, "giu");
913
- out = out.replace(pattern, "the person in the reference");
914
- }
915
- return out;
916
- }
917
- function escapeForPattern(value) {
918
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
919
- }
920
-
921
- // ../canvas-contract/src/registry.ts
922
- var OPENROUTER_ROUTE = { provider: "openrouter" };
923
- var USAGE_BILLED = { kind: "usage" };
924
- var MIN_BILLED_SECONDS = 5;
925
- var SEEDANCE_FACE_RECOVERY_ROUTE = {
926
- provider: "fal",
927
- wireModel: "bytedance/seedance-2.5/reference-to-video"
928
- };
929
- var OPENROUTER_IMAGE_AR = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"];
930
- var OPENROUTER_IMAGE_AR_EXTREME = [...OPENROUTER_IMAGE_AR, "1:4", "4:1", "1:8", "8:1"];
931
- var OPENROUTER_IMAGE_AR_GPT = ["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "21:9"];
932
- var GPT_IMAGE_PROMPT_MAX = 32e3;
933
- var RECRAFT_PROMPT_MAX = 1e4;
934
- var SEEDANCE_PROMPT_MAX = 4e3;
935
- var KLING_PROMPT_MAX = 2500;
936
- var UINT32_MAX = 4294967295;
937
- var VEO_SEED_MAX = UINT32_MAX;
938
- var GPT_IMAGE_MAX_REFERENCES = 16;
939
- var GEMINI_IMAGE_MAX_REFERENCES = 14;
940
- var RECRAFT_MAX_REFERENCES = 1;
941
- var SEEDANCE_MAX_REFERENCES = 9;
942
- var OPENROUTER_IMAGE_SIZE = ["1K", "2K", "4K"];
943
- var OPENROUTER_IMAGE_SIZES = ["0.5K", ...OPENROUTER_IMAGE_SIZE];
944
- var OPENROUTER_IMAGE_SIZE_EXTENDED = OPENROUTER_IMAGE_SIZES;
945
- var GEMINI_LITE_IMAGE_SIZE = ["1K"];
946
- var OPENROUTER_IMAGE_QUALITY = ["auto", "low", "medium", "high"];
947
- var OPENROUTER_IMAGE_QUALITY_25 = ["auto", "low", "medium", "high", "xhigh", "max"];
948
- var OPENROUTER_IMAGE_N = { kind: "number", integer: true, min: 1, max: 10 };
949
- var RECRAFT_IMAGE_AR = ["1:1", "4:3", "3:4", "16:9", "9:16"];
950
- var SEEDANCE_DURATIONS = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
951
- var SEEDANCE_25_DURATIONS = [
952
- 4,
953
- 5,
954
- 6,
955
- 7,
956
- 8,
957
- 9,
958
- 10,
959
- 11,
960
- 12,
961
- 13,
962
- 14,
963
- 15,
964
- 16,
965
- 17,
966
- 18,
967
- 19,
968
- 20,
969
- 21,
970
- 22,
971
- 23,
972
- 24,
973
- 25,
974
- 26,
975
- 27,
976
- 28,
977
- 29,
978
- 30
979
- ];
980
- var SEEDANCE_25_ASPECT_RATIOS = ["1:1", "3:4", "9:16", "4:3", "16:9", "21:9"];
981
- var SEEDANCE_25_RESOLUTIONS = ["480p", "720p"];
982
- var SEEDANCE_25_MAX_IMAGE_REFERENCES = 30;
983
- var SEEDANCE_25_MAX_VIDEO_REFERENCES = 10;
984
- var SEEDANCE_25_MAX_AUDIO_REFERENCES = 10;
985
- var KLING_DURATIONS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
986
- var GEMINI_OMNI_DURATIONS = [3, 4, 5, 6, 7, 8, 9, 10];
987
- var GEMINI_OMNI_ASPECT_RATIOS = ["16:9", "9:16"];
988
- var GEMINI_OMNI_RESOLUTIONS = ["360p", "720p", "1080p", "4k"];
989
- var GEMINI_OMNI_IMAGE_MIMES = ["image/png", "image/jpeg", "image/webp"];
990
- var GROK_IMAGINE_DURATIONS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
991
- var WAN_27_DURATIONS = [2, 3, 4, 5, 6, 7, 8, 9, 10];
992
- var HAPPYHORSE_DURATIONS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
993
- var WAN_30_DURATIONS = [
994
- 2,
995
- 3,
996
- 4,
997
- 5,
998
- 6,
999
- 7,
1000
- 8,
1001
- 9,
1002
- 10,
1003
- 11,
1004
- 12,
1005
- 13,
1006
- 14,
1007
- 15,
1008
- 16,
1009
- 17,
1010
- 18,
1011
- 19,
1012
- 20,
1013
- 21,
1014
- 22,
1015
- 23,
1016
- 24,
1017
- 25,
1018
- 26,
1019
- 27,
1020
- 28,
1021
- 29,
1022
- 30
1023
- ];
1024
- var GROK_IMAGINE_15_DURATIONS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
1025
- var RUNWAY_45_DURATIONS = [2, 3, 4, 5, 6, 7, 8, 9, 10];
1026
- var ELEVENLABS_OUTPUT_FORMATS = [
1027
- "mp3_22050_32",
1028
- "mp3_44100_32",
1029
- "mp3_44100_64",
1030
- "mp3_44100_96",
1031
- "mp3_44100_128",
1032
- "mp3_44100_192"
1033
- ];
1034
- var ELEVENLABS_MAX_TEXT_CHARS = 45454;
1035
- var ELEVENLABS_MAX_MUSIC_LENGTH_MS = 454545;
1036
- var ELEVENLABS_MUSIC_ENGINE = "music_v2";
1037
- var OPENROUTER_IMAGE_MIMES = ["image/png", "image/jpeg", "image/webp", "image/gif"];
1038
- var OPENROUTER_VIDEO_REFERENCE_MIMES = ["video/mp4", "video/quicktime", "video/webm"];
1039
- var OPENROUTER_AUDIO_REFERENCE_MIMES = ["audio/mpeg", "audio/mp3", "audio/wav"];
1040
- var REPLICATE_IMAGE_MIMES = ["image/png", "image/jpeg", "image/webp"];
1041
- var REPLICATE_VIDEO_MIMES = ["video/mp4", "video/webm", "video/quicktime"];
1042
- var DECONSTRUCT_VIDEO_MIMES = ["video/mp4", "video/webm", "video/quicktime"];
1043
- var REPLICATE_AUDIO_MIMES = ["audio/wav", "audio/mpeg", "audio/mp3"];
1044
- var IMAGE_GENERATE_MODELS = [
1045
- "openai/gpt-image-2.5-sunburst",
1046
- "openai/gpt-image-2",
1047
- "openai/gpt-5.4-image-2",
1048
- "google/gemini-3.1-flash-image",
1049
- "google/gemini-3.1-flash-lite-image",
1050
- "google/gemini-3-pro-image",
1051
- "recraft/recraft-v4.1-pro-vector",
1052
- // LEGACY — the preview ids the Gemini image models shipped under until they went GA
1053
- // on 2026-06-18. Kept so every canvas written with them still validates and re-runs;
1054
- // never pick them for new work.
1055
- "google/gemini-3.1-flash-image-preview",
1056
- "google/gemini-3-pro-image-preview"
1057
- ];
1058
- var DEFAULT_IMAGE_GENERATE_MODEL = "google/gemini-3.1-flash-image";
1059
- var IMAGE_PRICE_TIER = {
1060
- "openai/gpt-image-2.5-sunburst": "standard",
1061
- "openai/gpt-image-2": "standard",
1062
- "openai/gpt-5.4-image-2": "standard",
1063
- "google/gemini-3.1-flash-image": "standard",
1064
- "google/gemini-3.1-flash-lite-image": "standard",
1065
- "google/gemini-3-pro-image": "pro",
1066
- "recraft/recraft-v4.1-pro-vector": "standard",
1067
- "google/gemini-3.1-flash-image-preview": "standard",
1068
- "google/gemini-3-pro-image-preview": "pro"
1069
- };
1070
- var IMAGE_TIER_CREDITS = { pro: 20, standard: 5 };
1071
- function imagePictureCredits(model) {
1072
- const tier = IMAGE_PRICE_TIER[model] ?? "standard";
1073
- return IMAGE_TIER_CREDITS[tier];
1074
- }
1075
- var VIDEO_GENERATE_MODELS = [
1076
- "bytedance/seedance-2.0",
1077
- "bytedance/seedance-2.5",
1078
- "google/gemini-omni-1.1-flash",
1079
- "google/gemini-omni-flash",
1080
- "google/veo-3.1",
1081
- "google/veo-3.1-fast",
1082
- "google/veo-3.1-lite",
1083
- "kwaivgi/kling-v3.0-pro",
1084
- "x-ai/grok-imagine-video",
1085
- "x-ai/grok-imagine-video-1.5",
1086
- "alibaba/wan-2.7",
1087
- "alibaba/wan-3.0",
1088
- "runway/gen-4.5",
1089
- "alibaba/happyhorse-1.1"
1090
- ];
1091
- var DEFAULT_VIDEO_GENERATE_MODEL = "google/gemini-omni-1.1-flash";
1092
- var REFERENCE_TO_VIDEO_MODELS = [
1093
- "bytedance/seedance-2.0",
1094
- "bytedance/seedance-2.5",
1095
- "google/gemini-omni-1.1-flash",
1096
- "google/gemini-omni-flash",
1097
- "x-ai/grok-imagine-video",
1098
- "alibaba/wan-2.7",
1099
- "alibaba/happyhorse-1.1"
1100
- ];
1101
- function supportsReferenceToVideo(model) {
1102
- return REFERENCE_TO_VIDEO_MODELS.includes(model);
1103
- }
1104
- var DEFAULT_AVATAR_VIDEO_MODEL = "x-ai/grok-imagine-video";
1105
- function isGeminiOmniModel(model) {
1106
- return model.startsWith("google/gemini-omni");
1107
- }
1108
- var GEMINI_OMNI_PREVIEW_MODEL = "google/gemini-omni-flash";
1109
- function isGeminiOmniPreviewModel(model) {
1110
- return model === GEMINI_OMNI_PREVIEW_MODEL;
1111
- }
1112
- function isSeedance25Model(model) {
1113
- return model === "bytedance/seedance-2.5";
1114
- }
1115
- var LAST_FRAME_TO_VIDEO_MODELS = [
1116
- "bytedance/seedance-2.0",
1117
- "bytedance/seedance-2.5",
1118
- "google/veo-3.1",
1119
- "google/veo-3.1-fast",
1120
- "kwaivgi/kling-v3.0-pro"
1121
- ];
1122
- function supportsLastFrame(model) {
1123
- return LAST_FRAME_TO_VIDEO_MODELS.includes(model);
1124
- }
1125
- var MODEL_REGISTRY = {
1126
- text_generate: {
1127
- "~google/gemini-flash-latest": {
1128
- label: "Google Gemini Flash (latest)",
1129
- route: OPENROUTER_ROUTE,
1130
- billing: USAGE_BILLED,
1131
- inputs: [],
1132
- required: ["prompt"],
1133
- params: {
1134
- prompt: { kind: "string" },
1135
- system: { kind: "string" },
1136
- response_format: { kind: "string", enum: ["text", "json_object"] },
1137
- web_search: { kind: "boolean" },
1138
- temperature: { kind: "number", min: 0, max: 2 },
1139
- max_tokens: { kind: "number", min: 1 }
1140
- }
1141
- },
1142
- "~google/gemini-pro-latest": {
1143
- label: "Google Gemini Pro (latest)",
1144
- route: OPENROUTER_ROUTE,
1145
- billing: USAGE_BILLED,
1146
- inputs: [],
1147
- required: ["prompt"],
1148
- params: {
1149
- prompt: { kind: "string" },
1150
- system: { kind: "string" },
1151
- response_format: { kind: "string", enum: ["text", "json_object"] },
1152
- web_search: { kind: "boolean" },
1153
- temperature: { kind: "number", min: 0, max: 2 },
1154
- max_tokens: { kind: "number", min: 1 }
1155
- }
1156
- }
1157
- },
1158
- image_describe: {
1159
- // Vision extraction — the Visual Architect system prompt lives on the
1160
- // backend, so there is no `prompt` param; `focus` appends emphasis only.
1161
- "~google/gemini-pro-latest": {
1162
- label: "Google Gemini Pro (latest, Vision)",
1163
- route: OPENROUTER_ROUTE,
1164
- billing: USAGE_BILLED,
1165
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1166
- required: [],
1167
- params: {
1168
- focus: { kind: "string" },
1169
- context: { kind: "string" },
1170
- temperature: { kind: "number", min: 0, max: 2 },
1171
- max_tokens: { kind: "number", min: 1 }
1172
- }
1173
- },
1174
- "~google/gemini-flash-latest": {
1175
- label: "Google Gemini Flash (latest, Vision)",
1176
- route: OPENROUTER_ROUTE,
1177
- billing: USAGE_BILLED,
1178
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1179
- required: [],
1180
- params: {
1181
- focus: { kind: "string" },
1182
- context: { kind: "string" },
1183
- temperature: { kind: "number", min: 0, max: 2 },
1184
- max_tokens: { kind: "number", min: 1 }
1185
- }
1186
- }
1187
- },
1188
- image_select: {
1189
- // Vision judgement — the selection contract (numbered images, JSON
1190
- // response) is baked into the backend prompt; `prompt` carries only the
1191
- // selection criteria. `count` has an engine-side default of 1, so it is
1192
- // not registry-required.
1193
- "~google/gemini-flash-latest": {
1194
- label: "Google Gemini Flash (latest, Vision)",
1195
- route: OPENROUTER_ROUTE,
1196
- billing: USAGE_BILLED,
1197
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1198
- required: ["prompt"],
1199
- params: {
1200
- prompt: { kind: "string" },
1201
- count: { kind: "number", min: 1 },
1202
- temperature: { kind: "number", min: 0, max: 2 },
1203
- max_tokens: { kind: "number", min: 1 }
1204
- }
1205
- },
1206
- "~google/gemini-pro-latest": {
1207
- label: "Google Gemini Pro (latest, Vision)",
1208
- route: OPENROUTER_ROUTE,
1209
- billing: USAGE_BILLED,
1210
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1211
- required: ["prompt"],
1212
- params: {
1213
- prompt: { kind: "string" },
1214
- count: { kind: "number", min: 1 },
1215
- temperature: { kind: "number", min: 0, max: 2 },
1216
- max_tokens: { kind: "number", min: 1 }
1217
- }
1218
- }
1219
- },
1220
- image_generate: {
1221
- // `seed` is omitted on every entry — OpenRouter's `image_config` schema
1222
- // has no `seed` slot for image-gen (different from video-gen), so passing
1223
- // it would be a silent no-op.
1224
- // The direct image model, not the `gpt-5.4-image-2` chat model that emitted
1225
- // images as a side effect. Notable capability gaps vs the Gemini entries:
1226
- // no `image_size` (OpenAI picks the pixel dimensions from the ratio, and a
1227
- // `resolution` is silently ignored) and the narrower `..._AR_GPT` ratio set.
1228
- "openai/gpt-image-2.5-sunburst": {
1229
- // Identical to the gpt-image-2 entry below except for the quality ladder and `n`
1230
- // (several images from one call) — the ratio set, the 16-reference ceiling, the missing `image_size` and the reasons
1231
- // `background` / `output_compression` stay undeclared all carry over unchanged.
1232
- label: "OpenAI GPT Image 2.5",
1233
- route: OPENROUTER_ROUTE,
1234
- billing: USAGE_BILLED,
1235
- inputs: [],
1236
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GPT_IMAGE_MAX_REFERENCES }],
1237
- required: ["prompt"],
1238
- params: {
1239
- prompt: { kind: "string", maxLength: GPT_IMAGE_PROMPT_MAX },
1240
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_GPT },
1241
- quality: { kind: "string", enum: OPENROUTER_IMAGE_QUALITY_25 },
1242
- n: OPENROUTER_IMAGE_N
1243
- }
1244
- },
1245
- "openai/gpt-image-2": {
1246
- // Its live endpoint also advertises `background` (auto|opaque) and
1247
- // `output_compression` (0-100), which we deliberately do not declare. Not an
1248
- // oversight: a registry param is a promise the whole system keeps — the
1249
- // canvas node schema, the dashboard control, the CLI flag and the cost model
1250
- // all have to carry it — and neither knob changes what the picture IS.
1251
- // Declaring them would widen four surfaces to expose a file-size dial.
1252
- label: "OpenAI GPT Image 2",
1253
- route: OPENROUTER_ROUTE,
1254
- billing: USAGE_BILLED,
1255
- inputs: [],
1256
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GPT_IMAGE_MAX_REFERENCES }],
1257
- required: ["prompt"],
1258
- params: {
1259
- prompt: { kind: "string", maxLength: GPT_IMAGE_PROMPT_MAX },
1260
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_GPT },
1261
- quality: { kind: "string", enum: OPENROUTER_IMAGE_QUALITY }
1262
- }
1263
- },
1264
- // LEGACY — kept so canvases authored before the gpt-image-2 switch still
1265
- // validate and re-run unchanged (`baker canvas run --slug` restores a recorded
1266
- // canvas verbatim, so dropping this model would break every stored creative
1267
- // that used it). Its param surface is the ORIGINAL one on purpose: unlike
1268
- // gpt-image-2 it still honors 4:5/5:4, and `image_size` is accepted-then-
1269
- // ignored upstream rather than rejected. Verified live on /api/v1/images.
1270
- // Don't reach for it in new work — the scaffolders default to gpt-image-2.
1271
- "openai/gpt-5.4-image-2": {
1272
- label: "OpenAI GPT-5.4 Image 2 (legacy)",
1273
- route: OPENROUTER_ROUTE,
1274
- billing: USAGE_BILLED,
1275
- inputs: [],
1276
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GPT_IMAGE_MAX_REFERENCES }],
1277
- required: ["prompt"],
1278
- params: {
1279
- prompt: { kind: "string", maxLength: GPT_IMAGE_PROMPT_MAX },
1280
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR },
1281
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE },
1282
- quality: { kind: "string", enum: OPENROUTER_IMAGE_QUALITY }
1283
- }
1284
- },
1285
- // The GA Nano Banana ids (2026-06-18). Same surface as the preview entries they
1286
- // replace — read off GET /api/v1/images/models/google/gemini-3.1-flash-image/endpoints
1287
- // and .../gemini-3-pro-image/endpoints — so a canvas moves between them unchanged.
1288
- "google/gemini-3.1-flash-image": {
1289
- label: "Google Gemini 3.1 Flash Image (Nano Banana 2)",
1290
- route: OPENROUTER_ROUTE,
1291
- billing: USAGE_BILLED,
1292
- inputs: [],
1293
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
1294
- required: ["prompt"],
1295
- params: {
1296
- prompt: { kind: "string" },
1297
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_EXTREME },
1298
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
1299
- }
1300
- },
1301
- "google/gemini-3-pro-image": {
1302
- label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
1303
- route: OPENROUTER_ROUTE,
1304
- billing: USAGE_BILLED,
1305
- inputs: [],
1306
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
1307
- required: ["prompt"],
1308
- params: {
1309
- prompt: { kind: "string" },
1310
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR },
1311
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
1312
- }
1313
- },
1314
- // LEGACY preview ids — see IMAGE_GENERATE_MODELS.
1315
- "google/gemini-3.1-flash-image-preview": {
1316
- label: "Google Gemini 3.1 Flash Image (Preview)",
1317
- route: OPENROUTER_ROUTE,
1318
- billing: USAGE_BILLED,
1319
- inputs: [],
1320
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
1321
- required: ["prompt"],
1322
- params: {
1323
- prompt: { kind: "string" },
1324
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_EXTREME },
1325
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
1326
- }
1327
- },
1328
- "google/gemini-3.1-flash-lite-image": {
1329
- // Nano Banana 2 Lite. Same Gemini image family as the flash tier — same
1330
- // extreme aspect-ratio set, same reference editing — at HALF the output-token
1331
- // price ($0.00003 vs $0.00006 per output image token), which makes it the
1332
- // cheap-iteration tier for image work the way `veo-3.1-fast` is for video.
1333
- //
1334
- // The one thing it gives up is resolution: it renders 1K and nothing else.
1335
- // That is a hard provider 400, not a soft clamp, so it is gated here rather
1336
- // than discovered at dispatch. A 2K/4K hero frame belongs on the flash or pro
1337
- // tier. Unlike gpt-image it keeps 4:5 and 5:4, so Meta/Instagram portrait
1338
- // formats still come straight out of it.
1339
- //
1340
- // Reached through the normal OpenRouter image gateway (Google Vertex and
1341
- // Google AI Studio both serve it) — no direct-provider exception needed.
1342
- // Source: GET /api/v1/images/models/google/gemini-3.1-flash-lite-image/endpoints.
1343
- label: "Google Gemini 3.1 Flash Lite Image",
1344
- route: OPENROUTER_ROUTE,
1345
- billing: USAGE_BILLED,
1346
- inputs: [],
1347
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
1348
- required: ["prompt"],
1349
- params: {
1350
- prompt: { kind: "string" },
1351
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_EXTREME },
1352
- image_size: { kind: "string", enum: GEMINI_LITE_IMAGE_SIZE }
1353
- }
1354
- },
1355
- "google/gemini-3-pro-image-preview": {
1356
- label: "Google Gemini 3 Pro Image (Preview)",
1357
- route: OPENROUTER_ROUTE,
1358
- billing: USAGE_BILLED,
1359
- inputs: [],
1360
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: GEMINI_IMAGE_MAX_REFERENCES }],
1361
- required: ["prompt"],
1362
- params: {
1363
- prompt: { kind: "string" },
1364
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR },
1365
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
1366
- // No `quality`: OpenRouter's per-endpoint schema lists it for gpt-image and
1367
- // for NO Gemini image model, pro included. It is accepted-then-dropped, so
1368
- // declaring it invites the scaffolder to emit a param that does nothing.
1369
- }
1370
- },
1371
- "recraft/recraft-v4.1-pro-vector": {
1372
- // The vector/logo tier, and the odd one out of this roster in three ways.
1373
- // All three are read off its live endpoint schema, and all three are the
1374
- // kind of fact that only shows up as a billed 400 if it is guessed:
1375
- // - it renders FIVE ratios (no 4:5 / 5:4 / 2:3 / 3:2 / 21:9), so portrait
1376
- // ad shapes snap to 3:4 rather than being sent as-is;
1377
- // - it has NO resolution knob (`supported_parameters` lists none), so
1378
- // `image_size` is refused here instead of accepted and ignored;
1379
- // - it takes exactly ONE reference image, against 14-16 everywhere else.
1380
- // Its palette levers are real but arrive as provider passthrough
1381
- // (`controls`), which is why they are `json` rather than typed enums; the
1382
- // backend adapter builds that block in `buildImageGenBody`.
1383
- label: "Recraft v4.1 Pro Vector",
1384
- route: OPENROUTER_ROUTE,
1385
- billing: USAGE_BILLED,
1386
- inputs: [],
1387
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: RECRAFT_MAX_REFERENCES }],
1388
- required: ["prompt"],
1389
- params: {
1390
- prompt: { kind: "string", maxLength: RECRAFT_PROMPT_MAX },
1391
- aspect_ratio: { kind: "string", enum: RECRAFT_IMAGE_AR },
1392
- strength: { kind: "number", min: 0, max: 1 },
1393
- rgb_colors: { kind: "json" },
1394
- background_rgb_color: { kind: "json" }
1395
- }
1396
- }
1397
- },
1398
- image_reference_sheet: {
1399
- // Multi-view subject reference sheets (turnaround grids). The sheet prompt
1400
- // is baked into the backend handler — params here are semantic levers
1401
- // only. Both models consume MULTIPLE reference images via the `references`
1402
- // input slot (required: a sheet without source images is just image_generate).
1403
- "google/gemini-3-pro-image": {
1404
- label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
1405
- route: OPENROUTER_ROUTE,
1406
- billing: USAGE_BILLED,
1407
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1408
- required: ["subject_description", "subject_type"],
1409
- params: {
1410
- subject_description: { kind: "string" },
1411
- subject_type: { kind: "string", enum: ["character", "person", "product", "location"] },
1412
- views: { kind: "json" },
1413
- style: { kind: "string" },
1414
- prompt_override: { kind: "string" },
1415
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR },
1416
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
1417
- }
1418
- },
1419
- "google/gemini-3.1-flash-image": {
1420
- label: "Google Gemini 3.1 Flash Image (Nano Banana 2)",
1421
- route: OPENROUTER_ROUTE,
1422
- billing: USAGE_BILLED,
1423
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1424
- required: ["subject_description", "subject_type"],
1425
- params: {
1426
- subject_description: { kind: "string" },
1427
- subject_type: { kind: "string", enum: ["character", "person", "product", "location"] },
1428
- views: { kind: "json" },
1429
- style: { kind: "string" },
1430
- prompt_override: { kind: "string" },
1431
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_EXTREME },
1432
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
1433
- }
1434
- },
1435
- // LEGACY preview ids, kept so existing canvases re-run.
1436
- "google/gemini-3-pro-image-preview": {
1437
- label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
1438
- route: OPENROUTER_ROUTE,
1439
- billing: USAGE_BILLED,
1440
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1441
- required: ["subject_description", "subject_type"],
1442
- params: {
1443
- subject_description: { kind: "string" },
1444
- subject_type: { kind: "string", enum: ["character", "person", "product", "location"] },
1445
- views: { kind: "json" },
1446
- style: { kind: "string" },
1447
- prompt_override: { kind: "string" },
1448
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR },
1449
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
1450
- }
1451
- },
1452
- "google/gemini-3.1-flash-image-preview": {
1453
- label: "Google Gemini 3.1 Flash Image (Preview)",
1454
- route: OPENROUTER_ROUTE,
1455
- billing: USAGE_BILLED,
1456
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1457
- required: ["subject_description", "subject_type"],
1458
- params: {
1459
- subject_description: { kind: "string" },
1460
- subject_type: { kind: "string", enum: ["character", "person", "product", "location"] },
1461
- views: { kind: "json" },
1462
- style: { kind: "string" },
1463
- prompt_override: { kind: "string" },
1464
- aspect_ratio: { kind: "string", enum: OPENROUTER_IMAGE_AR_EXTREME },
1465
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
1466
- }
1467
- }
1468
- },
1469
- image_aspect_adapt: {
1470
- // Multi-format adaptation of one creative. The recomposition prompt is
1471
- // baked into the backend handler. The target ratios come from EITHER an
1472
- // explicit `formats` list OR a `platform` preset that expands to the
1473
- // canonical set; exactly one of the two is required — that "one of" gate,
1474
- // and per-element ratio validation, live in the node's Zod schema (the
1475
- // registry can't express "one of" or gate array elements), so `formats`
1476
- // is not listed as registry-required. The source creative is a required
1477
- // input slot. `copy` (the exact lines the ad carries) and `safe_areas` (per
1478
- // format, the fractions each edge's interface covers) are set by the static
1479
- // scaffold so the reframe keeps every word, once, where the platform shows it.
1480
- "google/gemini-3-pro-image": {
1481
- label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
1482
- route: OPENROUTER_ROUTE,
1483
- billing: USAGE_BILLED,
1484
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1485
- required: [],
1486
- params: {
1487
- formats: { kind: "json" },
1488
- platform: { kind: "string", enum: AD_FORMAT_PLATFORMS },
1489
- guidance: { kind: "string" },
1490
- copy: { kind: "json" },
1491
- safe_areas: { kind: "json" },
1492
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
1493
- }
1494
- },
1495
- "google/gemini-3.1-flash-image": {
1496
- label: "Google Gemini 3.1 Flash Image (Nano Banana 2)",
1497
- route: OPENROUTER_ROUTE,
1498
- billing: USAGE_BILLED,
1499
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1500
- required: [],
1501
- params: {
1502
- formats: { kind: "json" },
1503
- platform: { kind: "string", enum: AD_FORMAT_PLATFORMS },
1504
- guidance: { kind: "string" },
1505
- copy: { kind: "json" },
1506
- safe_areas: { kind: "json" },
1507
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
1508
- }
1509
- },
1510
- // LEGACY preview ids, kept so existing canvases re-run.
1511
- "google/gemini-3-pro-image-preview": {
1512
- label: "Google Gemini 3 Pro Image (Nano Banana Pro)",
1513
- route: OPENROUTER_ROUTE,
1514
- billing: USAGE_BILLED,
1515
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1516
- required: [],
1517
- params: {
1518
- formats: { kind: "json" },
1519
- platform: { kind: "string", enum: AD_FORMAT_PLATFORMS },
1520
- guidance: { kind: "string" },
1521
- copy: { kind: "json" },
1522
- safe_areas: { kind: "json" },
1523
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE }
1524
- }
1525
- },
1526
- "google/gemini-3.1-flash-image-preview": {
1527
- label: "Google Gemini 3.1 Flash Image (Preview)",
1528
- route: OPENROUTER_ROUTE,
1529
- billing: USAGE_BILLED,
1530
- inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1531
- required: [],
1532
- params: {
1533
- formats: { kind: "json" },
1534
- platform: { kind: "string", enum: AD_FORMAT_PLATFORMS },
1535
- guidance: { kind: "string" },
1536
- copy: { kind: "json" },
1537
- safe_areas: { kind: "json" },
1538
- image_size: { kind: "string", enum: OPENROUTER_IMAGE_SIZE_EXTENDED }
1539
- }
1540
- }
1541
- },
1542
- video_generate: {
1543
- "bytedance/seedance-2.0": {
1544
- // Routed via Replicate's official `bytedance/seedance-2.0` model. NOTE:
1545
- // ByteDance's upstream likeness filter blocks photoreal human faces on ANY
1546
- // reseller, and it does NOT care whether the person is real: it classifies
1547
- // pixels, so an AI-generated face that looks photographic is refused
1548
- // exactly like a photograph (E005 / content_policy_blocked). Confirmed in
1549
- // production against faces we generated ourselves. The only escape is Veo
1550
- // — NOT a synthetic presenter, which an earlier version of this note
1551
- // wrongly recommended and which sends you round the same loop.
1552
- label: "ByteDance Seedance 2.0",
1553
- route: { provider: "replicate" },
1554
- billing: { kind: "formula", formula: "seedance-2.0" },
1555
- inputs: [],
1556
- optional_inputs: [{ kind: "image", mimes: REPLICATE_IMAGE_MIMES, max: SEEDANCE_MAX_REFERENCES }],
1557
- required: ["prompt"],
1558
- params: {
1559
- // Replicate's Seedance wrapper hard-caps the prompt at 4000 chars; gate
1560
- // it here so an over-length prompt fails validate (free) not the billed call.
1561
- prompt: { kind: "string", maxLength: SEEDANCE_PROMPT_MAX },
1562
- aspect_ratio: {
1563
- kind: "string",
1564
- enum: ["1:1", "3:4", "9:16", "4:3", "16:9", "21:9", "9:21"]
1565
- },
1566
- resolution: { kind: "string", enum: ["480p", "720p", "1080p", "4k"] },
1567
- duration: { kind: "number", enum: SEEDANCE_DURATIONS },
1568
- // Replicate types this `integer`, and a fractional seed is a schema
1569
- // rejection rather than a rounded one. No range is advertised, so none is
1570
- // invented — see `InputSpec.max` on why absent must stay ungated.
1571
- seed: { kind: "number", integer: true },
1572
- generate_audio: { kind: "boolean" }
1573
- }
1574
- },
1575
- "bytedance/seedance-2.5": {
1576
- // Seedance 2.5 — the LONG-FORM, MULTIMODAL tier, and the only curated video
1577
- // model reached through OpenRouter that is not frame-only.
1578
- //
1579
- // Routed through OpenRouter's video gateway (provider `seed`), NOT through
1580
- // Replicate like 2.0 — the gateway carries the multimodal reference surface
1581
- // 2.5 exists for, and Replicate's 2.0 wrapper only has `reference_images`.
1582
- // The backend branches on the exact 2.0 id for the Replicate path, so this
1583
- // model must never be folded into a `startsWith("bytedance/seedance")`
1584
- // routing test: that is one character away from sending 2.5 to a wrapper
1585
- // that cannot express half of what it is being asked to do.
1586
- //
1587
- // Same upstream likeness filter as 2.0 — ByteDance classifies PIXELS, so an
1588
- // AI-generated face that reads photographic is refused exactly like a
1589
- // photograph (content_policy_blocked). A reference-guided clip refused that
1590
- // way is re-rendered on fal, which serves the same model under a licence that
1591
- // takes faces; a frame-started one is reported, never moved to another model.
1592
- //
1593
- // No published prompt cap on this route, so none is invented: OpenRouter's
1594
- // request schema declares no `maxLength` and the model is sold on long,
1595
- // multi-shot briefs. A ceiling we made up would refuse the exact prompts
1596
- // this tier exists to render.
1597
- label: "ByteDance Seedance 2.5",
1598
- route: OPENROUTER_ROUTE,
1599
- billing: { kind: "formula", formula: "seedance-2.5" },
1600
- recoveryRoute: SEEDANCE_FACE_RECOVERY_ROUTE,
1601
- inputs: [],
1602
- optional_inputs: [
1603
- { kind: "image", mimes: OPENROUTER_IMAGE_MIMES, max: SEEDANCE_25_MAX_IMAGE_REFERENCES },
1604
- { kind: "video", mimes: OPENROUTER_VIDEO_REFERENCE_MIMES, max: SEEDANCE_25_MAX_VIDEO_REFERENCES },
1605
- { kind: "audio", mimes: OPENROUTER_AUDIO_REFERENCE_MIMES, max: SEEDANCE_25_MAX_AUDIO_REFERENCES }
1606
- ],
1607
- required: ["prompt"],
1608
- params: {
1609
- prompt: { kind: "string" },
1610
- aspect_ratio: { kind: "string", enum: SEEDANCE_25_ASPECT_RATIOS },
1611
- resolution: { kind: "string", enum: SEEDANCE_25_RESOLUTIONS },
1612
- duration: { kind: "number", enum: SEEDANCE_25_DURATIONS },
1613
- seed: { kind: "number", integer: true, min: 0, max: UINT32_MAX },
1614
- generate_audio: { kind: "boolean" },
1615
- // A visible AI watermark on an ad creative is a defect, and this is the
1616
- // only curated model that lets us turn one off: `watermark` is named in
1617
- // the model's own `allowed_passthrough_parameters`, so it rides as a
1618
- // top-level body field exactly like Kling's `cfg_scale` does.
1619
- watermark: { kind: "boolean" }
1620
- }
1621
- },
1622
- "google/gemini-omni-1.1-flash": {
1623
- // Google Gemini Omni 1.1 Flash — the DEFAULT video model. Natively
1624
- // multimodal: it reasons over text + images and renders video WITH
1625
- // synchronized audio in one call, and it is the only curated model that
1626
- // takes reference images through its own first-party API (task
1627
- // `reference_to_video`).
1628
- //
1629
- // It is a SEPARATE entry from `google/gemini-omni-flash` (the preview),
1630
- // not a rolling upgrade of it, because the two do not render the same
1631
- // things: 1.1 takes a `resolution` and the preview does not, and 1.1 bills
1632
- // the seconds it renders where the preview bills its whole 10s window. One
1633
- // shared key would have to promise the union of those, which means a canvas
1634
- // could ask the preview for 360p and be quoted a third of what it charges.
1635
- //
1636
- // NOT on OpenRouter. `GET /api/v1/videos/models` lists 17 video models and
1637
- // no Gemini Omni at either version, so this is the sanctioned direct-provider
1638
- // exception (see `convex/lib/geminiOmni.ts`): Google's Interactions API,
1639
- // `POST /v1beta/interactions`. Its own `generateContent` endpoint refuses it
1640
- // ("This model only supports Interactions API"), so the Veo `predictLongRunning`
1641
- // shape does not apply either.
1642
- //
1643
- // The param set below is deliberately short and was read off the live API,
1644
- // not off the docs — the knobs absent here are rejected with a pre-dispatch
1645
- // 400 (`Unknown parameter '<name>'`): no `seed`, no `negative_prompt`, no
1646
- // `generate_audio`, no `person_generation` / `enhance_prompt` /
1647
- // `conditioning_scale`. Audio is always on and cannot be turned off.
1648
- // Widening this list does not widen the model; it just moves a free
1649
- // validation error into a billed one.
1650
- //
1651
- // `duration` is the odd one out: Omni has no duration FIELD at any nesting
1652
- // level, but it honours a length named in the prompt (3-10s), so the adapter
1653
- // turns this param into a prompt directive. It is a real, billable knob.
1654
- //
1655
- // NO VIDEO INPUT SLOT, and that is a gate on our project rather than a gap
1656
- // in the model or a mistake in how we ask. 1.1 advertises video references,
1657
- // `edit` and `extend`, and every request carrying a video comes back 400
1658
- // `content_blocked`.
1659
- //
1660
- // The controlled version, run through the shape Google's own docs use
1661
- // (`{"type":"document","uri":<Files API uri>}`, no generation_config),
1662
- // changing only the uploaded file: an IMAGE returns 200 and renders a clip;
1663
- // a VIDEO returns `content_blocked`. Same route, same structure. So the
1664
- // request shape is right and video input specifically is refused. Also
1665
- // measured across inline base64, all three tasks, video AND text output,
1666
- // synthetic clips, Omni's own output, real camera footage, and both our
1667
- // keys. Full probe log: `.context/omni-1.1-measurements.md`.
1668
- //
1669
- // Adding `{ kind: "video", mimes: … }` below is the ONE line that turns the
1670
- // whole feature on — the "Build on" control, the reference picker taking an
1671
- // MP4, the drop target and the source-clip cost premium are all driven off
1672
- // this slot. Add it the day the 400 stops, not before: until then it offers
1673
- // a control whose every use is refused.
1674
- label: "Google Gemini Omni 1.1 Flash",
1675
- route: { provider: "google-interactions", wireModel: "gemini-omni-1.1-flash" },
1676
- billing: { kind: "formula", formula: "gemini-omni" },
1677
- inputs: [],
1678
- optional_inputs: [{ kind: "image", mimes: GEMINI_OMNI_IMAGE_MIMES }],
1679
- required: ["prompt"],
1680
- params: {
1681
- prompt: { kind: "string" },
1682
- aspect_ratio: { kind: "string", enum: GEMINI_OMNI_ASPECT_RATIOS },
1683
- resolution: { kind: "string", enum: GEMINI_OMNI_RESOLUTIONS },
1684
- duration: { kind: "number", enum: GEMINI_OMNI_DURATIONS }
1685
- }
1686
- },
1687
- "google/gemini-omni-flash": {
1688
- // LEGACY — the Omni PREVIEW (`gemini-omni-flash-preview`), superseded by
1689
- // `google/gemini-omni-1.1-flash` above. Kept so canvases authored before 1.1
1690
- // still validate and re-run unchanged (`baker canvas run --slug` restores a
1691
- // recorded canvas verbatim, so dropping this model would break every stored
1692
- // creative that used it). Don't reach for it in new work.
1693
- //
1694
- // Its param surface is the ORIGINAL one on purpose, and the omission that
1695
- // matters is `resolution`. This model renders 720p / 24fps and nothing else.
1696
- //
1697
- // It does NOT reject the field, which is the trap and the reason this is
1698
- // enforced here rather than left to the provider: asked for `360p` it
1699
- // returns HTTP 200, a 1280x720 clip, and a bill of 17,376 video tokens —
1700
- // the 720p rate, three times the 5,793 that tier costs on 1.1. Accepted,
1701
- // ignored, and charged for. Copying 1.1's enum across to make the two
1702
- // entries match would hand a canvas a quality dial that does nothing and a
1703
- // quote a third of the real charge.
1704
- label: "Google Gemini Omni Flash (legacy preview)",
1705
- route: { provider: "google-interactions", wireModel: "gemini-omni-flash-preview" },
1706
- billing: { kind: "formula", formula: "gemini-omni" },
1707
- inputs: [],
1708
- optional_inputs: [{ kind: "image", mimes: GEMINI_OMNI_IMAGE_MIMES }],
1709
- required: ["prompt"],
1710
- params: {
1711
- prompt: { kind: "string" },
1712
- aspect_ratio: { kind: "string", enum: GEMINI_OMNI_ASPECT_RATIOS },
1713
- duration: { kind: "number", enum: GEMINI_OMNI_DURATIONS }
1714
- }
1715
- },
1716
- "google/veo-3.1": {
1717
- // Photoreal CINE CEILING + the real-face fallback (Veo generates adult
1718
- // humans from a keyframe, dodging ByteDance's real-person filter). Same
1719
- // OpenRouter google-vertex routing as the fast tier; the quality dial is
1720
- // `resolution: 1080p` + `generate_audio` + a real `negative_prompt`, not a
1721
- // separate provider knob. Reach for this for hero beats and any clip that
1722
- // must carry a real human likeness.
1723
- label: "Google Veo 3.1",
1724
- route: OPENROUTER_ROUTE,
1725
- billing: {
1726
- kind: "per_second",
1727
- // Veo prices 4K far above the base tier, and 4K is a selectable resolution,
1728
- // so folding it into the base rate under-quotes the dearest clip we can make.
1729
- // A QUOTE only: the charge is the usage OpenRouter reports for the call.
1730
- usd: { silent: 0.2, audio: 0.4, byResolution: { "4K": { silent: 0.4, audio: 0.6 } } }
1731
- },
1732
- inputs: [],
1733
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1734
- required: ["prompt"],
1735
- params: {
1736
- prompt: { kind: "string" },
1737
- negative_prompt: { kind: "string" },
1738
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16"] },
1739
- resolution: { kind: "string", enum: ["720p", "1080p", "4K"] },
1740
- duration: { kind: "number", enum: [4, 6, 8] },
1741
- // Vertex declares `seed` a uint32: "accepted range 0-4294967295".
1742
- seed: { kind: "number", integer: true, min: 0, max: VEO_SEED_MAX },
1743
- generate_audio: { kind: "boolean" },
1744
- person_generation: { kind: "string", enum: ["allow_all", "allow_adult"] },
1745
- enhance_prompt: { kind: "boolean" },
1746
- conditioning_scale: { kind: "number" }
1747
- }
1748
- },
1749
- "kwaivgi/kling-v3.0-pro": {
1750
- // Motion-transfer / dynamic multi-shot beats. Reachable through the default
1751
- // OpenRouter gateway (generic video body — no google-vertex block), so it
1752
- // needs no direct-provider exception. `cfg_scale` trades prompt adherence
1753
- // vs motion freedom; higher = closer to prompt.
1754
- //
1755
- // Params below are the ones OpenRouter actually advertises for this model
1756
- // (GET /api/v1/videos/models). Three were wrong before and each was a free
1757
- // 400 or a silently unsupported knob: it renders 720p ONLY (1080p was
1758
- // offered and rejected), it takes ANY duration from 3-15s (we allowed just
1759
- // 5 and 10), and it does not support `seed` at all.
1760
- label: "Kling 3.0",
1761
- route: OPENROUTER_ROUTE,
1762
- billing: {
1763
- kind: "per_second",
1764
- // One flat rate across every resolution and mode.
1765
- usd: { silent: 0.112, audio: 0.168 }
1766
- },
1767
- inputs: [],
1768
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1769
- required: ["prompt"],
1770
- params: {
1771
- // Kling caps the prompt shorter than Seedance; gate it here so an
1772
- // over-length prompt fails validate (free) not the billed call. Its
1773
- // negative prompt is a SEPARATE 2,500 budget, not a shared one.
1774
- prompt: { kind: "string", maxLength: KLING_PROMPT_MAX },
1775
- negative_prompt: { kind: "string", maxLength: KLING_PROMPT_MAX },
1776
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16", "1:1"] },
1777
- resolution: { kind: "string", enum: ["720p"] },
1778
- duration: { kind: "number", enum: KLING_DURATIONS },
1779
- generate_audio: { kind: "boolean" },
1780
- cfg_scale: { kind: "number", min: 0, max: 1 }
1781
- }
1782
- },
1783
- "x-ai/grok-imagine-video": {
1784
- // The avatar workhorse. Measured best of the reference-capable models on
1785
- // identity retention AND aspect-ratio obedience, at the lowest rate of any
1786
- // video model we carry ($0.05/s at 480p). No audio at all — `generate_audio`
1787
- // is absent from its OpenRouter listing, so a talking head goes to Wan 2.7.
1788
- // NOTE: `x-ai/grok-imagine-video-1.5` is NOT a drop-in upgrade — it is
1789
- // described as plain image-to-video and drops the reference conditioning
1790
- // this entry exists for.
1791
- label: "Grok Imagine Video",
1792
- route: OPENROUTER_ROUTE,
1793
- billing: {
1794
- kind: "per_second",
1795
- usd: {
1796
- silent: 0.07,
1797
- audio: 0.07,
1798
- byResolution: { "480p": { silent: 0.05, audio: 0.05 }, "720p": { silent: 0.07, audio: 0.07 } }
1799
- }
1800
- },
1801
- inputs: [],
1802
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1803
- required: ["prompt"],
1804
- params: {
1805
- prompt: { kind: "string" },
1806
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3"] },
1807
- resolution: { kind: "string", enum: ["480p", "720p"] },
1808
- duration: { kind: "number", enum: GROK_IMAGINE_DURATIONS }
1809
- }
1810
- },
1811
- "alibaba/wan-2.7": {
1812
- // Reference-to-video AND native audio — the only model we carry with both,
1813
- // which makes it the landscape talking-head option.
1814
- //
1815
- // LANDSCAPE ONLY, measured. It advertises 9:16, 1:1, 4:3 and 3:4, and
1816
- // delivers 16:9 regardless: asked for vertical via `aspect_ratio: "9:16"`
1817
- // it returned 1280x720, and asked again via an explicit
1818
- // `size: "720x1280"` from its own `supported_sizes` it returned 1280x720
1819
- // again. The enum below is therefore what it DOES, not what it claims, so
1820
- // nobody pays for a vertical clip that comes back landscape. For a vertical
1821
- // avatar clip use `x-ai/grok-imagine-video` (silent) or animate a generated
1822
- // still with `google/veo-3.1-lite` (native audio, honours 9:16).
1823
- label: "Alibaba Wan 2.7",
1824
- route: OPENROUTER_ROUTE,
1825
- billing: {
1826
- kind: "per_second",
1827
- // Flat $0.10/s across resolutions and modes, audio included.
1828
- usd: { silent: 0.1, audio: 0.1 },
1829
- minBilledSeconds: MIN_BILLED_SECONDS
1830
- },
1831
- inputs: [],
1832
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1833
- required: ["prompt"],
1834
- params: {
1835
- prompt: { kind: "string" },
1836
- negative_prompt: { kind: "string" },
1837
- aspect_ratio: { kind: "string", enum: ["16:9"] },
1838
- resolution: { kind: "string", enum: ["720p", "1080p"] },
1839
- duration: { kind: "number", enum: WAN_27_DURATIONS },
1840
- seed: { kind: "number" },
1841
- generate_audio: { kind: "boolean" }
1842
- }
1843
- },
1844
- "x-ai/grok-imagine-video-1.5": {
1845
- // NOT a replacement for the entry above, and deliberately absent from
1846
- // `AVATAR_VIDEO_MODELS` and `REFERENCE_TO_VIDEO_MODELS`: OpenRouter describes the
1847
- // older Grok as "text-, image-, and reference-conditioned" and 1.5 as taking "an
1848
- // optional starting image". Reference conditioning is the whole reason Grok carries
1849
- // avatars — it is what holds a face from the identity sheet — so swapping them
1850
- // would quietly cost every avatar clip its likeness.
1851
- //
1852
- // What it adds over the older one: 1080p, and 15s rather than 10.
1853
- label: "Grok Imagine Video 1.5",
1854
- route: OPENROUTER_ROUTE,
1855
- billing: {
1856
- kind: "per_second",
1857
- // `cents_per_video_output_second_*`: 8c, 14c and 25c. No audio, so both
1858
- // columns are the same rate rather than one being wrong.
1859
- usd: {
1860
- silent: 0.14,
1861
- audio: 0.14,
1862
- byResolution: {
1863
- "480p": { silent: 0.08, audio: 0.08 },
1864
- "720p": { silent: 0.14, audio: 0.14 },
1865
- "1080p": { silent: 0.25, audio: 0.25 }
1866
- }
1867
- }
1868
- },
1869
- inputs: [],
1870
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1871
- required: ["prompt"],
1872
- params: {
1873
- prompt: { kind: "string" },
1874
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3"] },
1875
- resolution: { kind: "string", enum: ["480p", "720p", "1080p"] },
1876
- duration: { kind: "number", enum: GROK_IMAGINE_15_DURATIONS }
1877
- }
1878
- },
1879
- "alibaba/wan-3.0": {
1880
- // 2.7's successor on every axis that matters: 2–30s against 2–10, 1080p and 480p
1881
- // as well as 720p, and it keeps the native audio that made 2.7 the landscape
1882
- // talking-head option.
1883
- //
1884
- // The ratios are what it ADVERTISES. 2.7 advertised five and delivered 16:9 for
1885
- // all of them — measured, twice, which is why its enum here is a single value. That
1886
- // was a different model and this one is not gated on its predecessor's lie, but
1887
- // the first vertical clip anyone renders here is worth looking at before a campaign
1888
- // is built on it.
1889
- //
1890
- // No `last_frame`: 2.7 takes one and 3.0 does not, so a canvas that ends a shot on
1891
- // a chosen frame stays on 2.7.
1892
- label: "Alibaba Wan 3.0",
1893
- route: OPENROUTER_ROUTE,
1894
- billing: {
1895
- kind: "per_second",
1896
- // Priced per resolution where 2.7 was flat, and the rate still includes
1897
- // audio: there is no separate audio SKU. `duration_seconds_480p|720p|1080p`.
1898
- usd: {
1899
- silent: 0.1,
1900
- audio: 0.1,
1901
- byResolution: {
1902
- "480p": { silent: 0.05, audio: 0.05 },
1903
- "720p": { silent: 0.1, audio: 0.1 },
1904
- "1080p": { silent: 0.2, audio: 0.2 }
1905
- }
1906
- }
1907
- },
1908
- inputs: [],
1909
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1910
- required: ["prompt"],
1911
- params: {
1912
- prompt: { kind: "string" },
1913
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16", "1:1", "4:3", "3:4"] },
1914
- resolution: { kind: "string", enum: ["480p", "720p", "1080p"] },
1915
- duration: { kind: "number", enum: WAN_30_DURATIONS },
1916
- seed: { kind: "number" },
1917
- generate_audio: { kind: "boolean" }
1918
- }
1919
- },
1920
- "runway/gen-4.5": {
1921
- // One resolution, two shapes, and silent — `generate_audio: false` in its listing,
1922
- // so a talking head belongs on Wan or Omni. First frame only, no reference.
1923
- label: "Runway Gen-4.5",
1924
- route: OPENROUTER_ROUTE,
1925
- billing: {
1926
- kind: "per_second",
1927
- // One flat rate, one resolution: `cents_per_second_output: 12`. Silent.
1928
- usd: { silent: 0.12, audio: 0.12 }
1929
- },
1930
- inputs: [],
1931
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1932
- required: ["prompt"],
1933
- params: {
1934
- prompt: { kind: "string" },
1935
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16"] },
1936
- resolution: { kind: "string", enum: ["720p"] },
1937
- duration: { kind: "number", enum: RUNWAY_45_DURATIONS },
1938
- seed: { kind: "number" }
1939
- }
1940
- },
1941
- "alibaba/happyhorse-1.1": {
1942
- // Third reference-capable option: strong identity, correct ratios, no audio.
1943
- // First-frame only (no `last_frame`), so it cannot close a beat on a
1944
- // specified end pose the way Wan and Veo can.
1945
- label: "Alibaba HappyHorse 1.1",
1946
- route: OPENROUTER_ROUTE,
1947
- billing: {
1948
- kind: "per_second",
1949
- usd: { silent: 0.1278, audio: 0.1278, byResolution: { "720p": { silent: 0.0988, audio: 0.0988 } } },
1950
- minBilledSeconds: MIN_BILLED_SECONDS
1951
- },
1952
- inputs: [],
1953
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1954
- required: ["prompt"],
1955
- params: {
1956
- prompt: { kind: "string" },
1957
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "9:21"] },
1958
- resolution: { kind: "string", enum: ["720p", "1080p"] },
1959
- duration: { kind: "number", enum: HAPPYHORSE_DURATIONS },
1960
- seed: { kind: "number" }
1961
- }
1962
- },
1963
- "google/veo-3.1-lite": {
1964
- // The cheapest way to animate a still that carries a real face: same Veo
1965
- // family and the same escape from ByteDance's filter, at $0.05/s with audio
1966
- // at 720p against Veo 3.1's $0.40. That 8x is the difference between an
1967
- // avatar clip you iterate on and one you think twice about.
1968
- label: "Google Veo 3.1 Lite",
1969
- route: OPENROUTER_ROUTE,
1970
- billing: {
1971
- kind: "per_second",
1972
- usd: { silent: 0.05, audio: 0.08, byResolution: { "720p": { silent: 0.03, audio: 0.05 } } }
1973
- },
1974
- inputs: [],
1975
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
1976
- required: ["prompt"],
1977
- params: {
1978
- prompt: { kind: "string" },
1979
- negative_prompt: { kind: "string" },
1980
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16"] },
1981
- resolution: { kind: "string", enum: ["720p", "1080p"] },
1982
- duration: { kind: "number", enum: [4, 6, 8] },
1983
- seed: { kind: "number" },
1984
- generate_audio: { kind: "boolean" },
1985
- person_generation: { kind: "string", enum: ["allow_all", "allow_adult"] },
1986
- enhance_prompt: { kind: "boolean" },
1987
- conditioning_scale: { kind: "number" }
1988
- }
1989
- },
1990
- "google/veo-3.1-fast": {
1991
- // Cheap test/iteration model. Forwarded by the backend via
1992
- // `provider.options.google-vertex.parameters` (camelCased on the wire).
1993
- label: "Google Veo 3.1 Fast",
1994
- route: OPENROUTER_ROUTE,
1995
- billing: {
1996
- kind: "per_second",
1997
- usd: {
1998
- silent: 0.1,
1999
- audio: 0.12,
2000
- byResolution: { "720p": { silent: 0.08, audio: 0.1 }, "4K": { silent: 0.25, audio: 0.3 } }
2001
- }
2002
- },
2003
- inputs: [],
2004
- optional_inputs: [{ kind: "image", mimes: OPENROUTER_IMAGE_MIMES }],
2005
- required: ["prompt"],
2006
- params: {
2007
- prompt: { kind: "string" },
2008
- negative_prompt: { kind: "string" },
2009
- aspect_ratio: { kind: "string", enum: ["16:9", "9:16"] },
2010
- resolution: { kind: "string", enum: ["720p", "1080p", "4K"] },
2011
- duration: { kind: "number", enum: [4, 6, 8] },
2012
- seed: { kind: "number", integer: true, min: 0, max: VEO_SEED_MAX },
2013
- generate_audio: { kind: "boolean" },
2014
- // Image-to-video and EU/UK/CH/MENA regions cap this at `allow_adult`;
2015
- // `allow_all` is text-to-video only. Allow both so an image-conditioned
2016
- // Veo clip (the real-face fallback) validates.
2017
- person_generation: { kind: "string", enum: ["allow_all", "allow_adult"] },
2018
- enhance_prompt: { kind: "boolean" },
2019
- conditioning_scale: { kind: "number" }
2020
- }
2021
- }
2022
- },
2023
- video_deconstruct: {
2024
- // Replication-grade video extraction — the forensic system prompts live on
2025
- // the backend; `focus` appends emphasis only. Frames ride on a throwaway
2026
- // Mux asset; analysis runs on Gemini with the video as a file part.
2027
- "~google/gemini-flash-latest": {
2028
- label: "Google Gemini Flash (latest, Video)",
2029
- route: OPENROUTER_ROUTE,
2030
- billing: USAGE_BILLED,
2031
- inputs: [{ kind: "video", mimes: DECONSTRUCT_VIDEO_MIMES }],
2032
- required: [],
2033
- params: {
2034
- mode: { kind: "string", enum: ["full", "index"] },
2035
- language: { kind: "string" },
2036
- max_scenes: { kind: "number", min: 1, max: 60 },
2037
- focus: { kind: "string" },
2038
- start_s: { kind: "number", min: 0 },
2039
- end_s: { kind: "number", min: 0 },
2040
- max_clip_s: { kind: "number", min: 1, max: 60 },
2041
- transcriber: { kind: "string", enum: ["groq", "deepgram"] },
2042
- // Real visual shot-cut timestamps (seconds) from local PySceneDetect;
2043
- // scene boundaries snap onto them so frames never straddle a hard cut.
2044
- // Shape (number[]) is enforced by the node + backend Zod schemas.
2045
- shot_cuts: { kind: "json" }
2046
- }
2047
- },
2048
- "~google/gemini-pro-latest": {
2049
- label: "Google Gemini Pro (latest, Video)",
2050
- route: OPENROUTER_ROUTE,
2051
- billing: USAGE_BILLED,
2052
- inputs: [{ kind: "video", mimes: DECONSTRUCT_VIDEO_MIMES }],
2053
- required: [],
2054
- params: {
2055
- mode: { kind: "string", enum: ["full", "index"] },
2056
- language: { kind: "string" },
2057
- max_scenes: { kind: "number", min: 1, max: 60 },
2058
- focus: { kind: "string" },
2059
- start_s: { kind: "number", min: 0 },
2060
- end_s: { kind: "number", min: 0 },
2061
- max_clip_s: { kind: "number", min: 1, max: 60 },
2062
- transcriber: { kind: "string", enum: ["groq", "deepgram"] },
2063
- // See gemini-flash-latest above — local PySceneDetect shot-cut timestamps.
2064
- shot_cuts: { kind: "json" }
2065
- }
2066
- }
2067
- },
2068
- video_lipsync: {
2069
- // Formerly `fal/veed-lipsync`, which named a provider and a model it had stopped
2070
- // running on; that id stays accepted through `MODEL_ALIASES`.
2071
- "replicate/sync-lipsync-2": {
2072
- label: "Sync Labs Lipsync 2 (Replicate)",
2073
- route: { provider: "replicate", wireModel: "sync/lipsync-2" },
2074
- billing: { kind: "formula", formula: "lipsync-minutes" },
2075
- inputs: [
2076
- { kind: "video", mimes: REPLICATE_VIDEO_MIMES },
2077
- { kind: "audio", mimes: REPLICATE_AUDIO_MIMES }
2078
- ],
2079
- required: [],
2080
- params: {}
2081
- }
2082
- },
2083
- tts: {
2084
- "elevenlabs/eleven_v3": {
2085
- // eleven_v3 does NOT yet support context stitching
2086
- // (previous_text/next_text/*_request_ids). ElevenLabs returns a clean
2087
- // `unsupported_model` 400 if you pass them.
2088
- label: "ElevenLabs Eleven v3",
2089
- route: { provider: "elevenlabs", wireModel: "eleven_v3" },
2090
- billing: { kind: "formula", formula: "elevenlabs-characters" },
2091
- inputs: [],
2092
- required: ["text", "voice"],
2093
- params: {
2094
- text: { kind: "string", maxLength: ELEVENLABS_MAX_TEXT_CHARS },
2095
- voice: { kind: "string" },
2096
- language_code: { kind: "string" },
2097
- stability: { kind: "number", min: 0, max: 1 },
2098
- similarity_boost: { kind: "number", min: 0, max: 1 },
2099
- voice_settings: { kind: "json" },
2100
- seed: { kind: "number", min: 0, max: 4294967295 },
2101
- pronunciation_dictionary_locators: { kind: "json" },
2102
- apply_text_normalization: { kind: "string", enum: ["auto", "on", "off"] },
2103
- apply_language_text_normalization: { kind: "boolean" },
2104
- with_timestamps: { kind: "boolean" },
2105
- output_format: { kind: "string", enum: ELEVENLABS_OUTPUT_FORMATS }
2106
- }
2107
- }
2108
- },
2109
- audio_voice_convert: {
2110
- "elevenlabs/eleven_multilingual_sts_v2": {
2111
- // Speech-to-speech / Voice Changer: re-voice an existing audio clip in the
2112
- // TARGET voice, preserving timing/prosody. Used to normalize a talking-head
2113
- // clip's native (generator-chosen) voice into ONE consistent brand voice.
2114
- label: "ElevenLabs Voice Changer (multilingual STS v2)",
2115
- route: { provider: "elevenlabs", wireModel: "eleven_multilingual_sts_v2" },
2116
- billing: { kind: "formula", formula: "elevenlabs-voice-convert-minutes" },
2117
- inputs: [{ kind: "audio", mimes: REPLICATE_AUDIO_MIMES }],
2118
- required: ["voice"],
2119
- params: {
2120
- voice: { kind: "string" },
2121
- output_format: { kind: "string", enum: ELEVENLABS_OUTPUT_FORMATS },
2122
- remove_background_noise: { kind: "boolean" }
2123
- }
2124
- }
2125
- },
2126
- music: {
2127
- "elevenlabs/music-v1": {
2128
- label: "ElevenLabs Music v1 (Compose)",
2129
- route: { provider: "elevenlabs", wireModel: ELEVENLABS_MUSIC_ENGINE },
2130
- billing: { kind: "formula", formula: "elevenlabs-music-seconds" },
2131
- inputs: [],
2132
- required: [],
2133
- params: {
2134
- prompt: { kind: "string" },
2135
- composition_plan: { kind: "json" },
2136
- music_length_ms: { kind: "number", min: 3e3, max: ELEVENLABS_MAX_MUSIC_LENGTH_MS },
2137
- seed: { kind: "number" },
2138
- force_instrumental: { kind: "boolean" },
2139
- respect_sections_durations: { kind: "boolean" },
2140
- with_timestamps: { kind: "boolean" },
2141
- output_format: { kind: "string", enum: ELEVENLABS_OUTPUT_FORMATS }
2142
- }
2143
- },
2144
- "elevenlabs/video-background-music-v1": {
2145
- label: "ElevenLabs Video Background Music v1",
2146
- route: { provider: "elevenlabs", wireModel: ELEVENLABS_MUSIC_ENGINE },
2147
- billing: { kind: "formula", formula: "elevenlabs-music-seconds" },
2148
- inputs: [{ kind: "video", mimes: REPLICATE_VIDEO_MIMES }],
2149
- required: [],
2150
- params: {
2151
- description: { kind: "string" },
2152
- tags: { kind: "json" },
2153
- output_format: { kind: "string", enum: ELEVENLABS_OUTPUT_FORMATS }
2154
- }
2155
- }
2156
- },
2157
- dialogue: {
2158
- "elevenlabs/eleven_v3": {
2159
- label: "ElevenLabs Eleven v3 (Dialogue)",
2160
- route: { provider: "elevenlabs", wireModel: "eleven_v3" },
2161
- billing: { kind: "formula", formula: "elevenlabs-characters" },
2162
- inputs: [],
2163
- required: ["inputs"],
2164
- params: {
2165
- inputs: { kind: "json" },
2166
- language_code: { kind: "string" },
2167
- settings: { kind: "json" },
2168
- seed: { kind: "number", min: 0, max: 4294967295 },
2169
- apply_text_normalization: { kind: "string", enum: ["auto", "on", "off"] },
2170
- with_timestamps: { kind: "boolean" },
2171
- output_format: { kind: "string", enum: ELEVENLABS_OUTPUT_FORMATS }
2172
- }
2173
- }
2174
- },
2175
- sound_effect: {
2176
- "elevenlabs/eleven_text_to_sound_v2": {
2177
- label: "ElevenLabs Text-to-Sound v2",
2178
- route: { provider: "elevenlabs", wireModel: "eleven_text_to_sound_v2" },
2179
- billing: { kind: "formula", formula: "elevenlabs-sound-effect-seconds" },
2180
- inputs: [],
2181
- required: ["text"],
2182
- params: {
2183
- text: { kind: "string" },
2184
- duration_seconds: { kind: "number", min: 0.5, max: 30 },
2185
- prompt_influence: { kind: "number", min: 0, max: 1 },
2186
- loop: { kind: "boolean" },
2187
- output_format: { kind: "string", enum: ELEVENLABS_OUTPUT_FORMATS }
2188
- }
2189
- }
2190
- }
2191
- };
2192
- var MODEL_ALIASES = {
2193
- "fal/veed-lipsync": "replicate/sync-lipsync-2",
2194
- "fal/veed-video-background-removal": "replicate/birefnet-video",
2195
- "fal/birefnet-v2": "replicate/birefnet"
2196
- };
2197
- function canonicalModelId(model) {
2198
- return Object.keys(MODEL_ALIASES).includes(model) ? MODEL_ALIASES[model] : model;
2199
- }
2200
- function modelIdsAccepted(canonical) {
2201
- return [canonical, ...Object.keys(MODEL_ALIASES).filter((legacy) => MODEL_ALIASES[legacy] === canonical)];
2202
- }
2203
- function perSecondBilling(model) {
2204
- const billing = MODEL_REGISTRY.video_generate[model]?.billing;
2205
- return billing?.kind === "per_second" ? billing : void 0;
2206
- }
2207
- var MODEL_ROLES = {
2208
- /** Ad frames and static-ad plates: the most faithful text and identity reproduction. */
2209
- adImage: { kind: "image_generate", model: "openai/gpt-image-2.5-sunburst" },
2210
- /**
2211
- * The multi-view reference sheet a recurring element is fused on. Gemini 3 Pro makes
2212
- * the cleanest, best-labelled turnaround, worth it for the ONE reference every frame
2213
- * of an ad grounds on.
2214
- */
2215
- referenceSheet: { kind: "image_reference_sheet", model: "google/gemini-3-pro-image" },
2216
- /** Re-framing a static ad whose copy is baked into the pixels. */
2217
- aspectAdapt: { kind: "image_aspect_adapt", model: "google/gemini-3-pro-image" },
2218
- /**
2219
- * The judge comparing candidate plates. Flash, not Pro: Pro measured 5 credits for
2220
- * one pick, a tenth of the render it judges.
2221
- */
2222
- plateJudge: { kind: "image_select", model: "~google/gemini-flash-latest" },
2223
- /** The static-ad blueprint extraction: the densest read, so Pro. */
2224
- adDescribe: { kind: "image_describe", model: "~google/gemini-pro-latest" },
2225
- /** The element-selection and layout passes over a blueprint. */
2226
- blueprintAnalysis: { kind: "text_generate", model: "~google/gemini-flash-latest" },
2227
- /**
2228
- * The viewer an ad reaches, played before a static ad renders (`baker canvas viewer-check`):
2229
- * says from the copy and the scene what is offered, to whom, and what to do next. Text
2230
- * only and asked once per ad and viewer, so Flash; the calibration set (E8) decides.
2231
- */
2232
- viewerCheck: { kind: "text_generate", model: "~google/gemini-flash-latest" },
2233
- /**
2234
- * Picks the customer truths out of reviews, testimonials and threads (`baker research
2235
- * customers`): returns exact spans the code then checks against the source. Text only and
2236
- * one call per batch, so Flash.
2237
- */
2238
- customerInsights: { kind: "text_generate", model: "~google/gemini-flash-latest" },
2239
- /**
2240
- * The same viewer shown the FINISHED static ad at phone size for about three seconds, with no
2241
- * brand and no brief: what is sold, whether it is for them, what to do next, what stopped them
2242
- * (`glance-check.ts`). One small picture per run, so Flash.
2243
- */
2244
- glanceCheck: { kind: "image_describe", model: "~google/gemini-flash-latest" },
2245
- /**
2246
- * Reads every line of text and the logo of a finished static ad WITH its box, for the
2247
- * copy and safe-area checks. Bench E10 (2026-09-30): word F1 0.994, box IoU 0.937, 4.3 s,
2248
- * about $0.005 an image on `google/gemini-3.8-flash`, which this alias resolves to;
2249
- * tesseract and PaddleOCR missed the 0.95 F1 gate.
2250
- */
2251
- textBoxReader: { kind: "image_describe", model: "~google/gemini-flash-latest" },
2252
- /**
2253
- * Scene-by-scene video extraction. Flash: ~2-3x faster per call than Pro, which keeps
2254
- * each per-scene step inside the action time budget.
2255
- */
2256
- videoDeconstruct: { kind: "video_deconstruct", model: "~google/gemini-flash-latest" },
2257
- /** The backend `image_search` agent loop that picks search tools and queries. */
2258
- imageSearch: { kind: "text_generate", model: "~google/gemini-flash-latest" },
2259
- voiceover: { kind: "tts", model: "elevenlabs/eleven_v3" },
2260
- soundEffect: { kind: "sound_effect", model: "elevenlabs/eleven_text_to_sound_v2" },
2261
- musicBed: { kind: "music", model: "elevenlabs/music-v1" },
2262
- /** Re-voices a talking clip's native audio into one consistent brand voice. */
2263
- voiceConvert: { kind: "audio_voice_convert", model: "elevenlabs/eleven_multilingual_sts_v2" },
2264
- /** The scored video router's candidates, one per job it can route to. */
2265
- videoRouterWorkhorse: { kind: "video_generate", model: "bytedance/seedance-2.0" },
2266
- videoRouterRealFace: { kind: "video_generate", model: "google/veo-3.1" },
2267
- videoRouterRealFaceEconomy: { kind: "video_generate", model: "google/veo-3.1-fast" },
2268
- videoRouterMotion: { kind: "video_generate", model: "kwaivgi/kling-v3.0-pro" },
2269
- imageDefault: { kind: "image_generate", model: DEFAULT_IMAGE_GENERATE_MODEL },
2270
- videoDefault: { kind: "video_generate", model: DEFAULT_VIDEO_GENERATE_MODEL },
2271
- avatarVideo: { kind: "video_generate", model: DEFAULT_AVATAR_VIDEO_MODEL }
2272
- };
2273
- var AD_IMAGE_MODEL = MODEL_ROLES.adImage.model;
2274
- var REFERENCE_SHEET_MODEL = MODEL_ROLES.referenceSheet.model;
2275
- var ASPECT_ADAPT_MODEL = MODEL_ROLES.aspectAdapt.model;
2276
- var PLATE_JUDGE_MODEL = MODEL_ROLES.plateJudge.model;
2277
- var AD_DESCRIBE_MODEL = MODEL_ROLES.adDescribe.model;
2278
- var BLUEPRINT_ANALYSIS_MODEL = MODEL_ROLES.blueprintAnalysis.model;
2279
- var VIEWER_CHECK_MODEL = MODEL_ROLES.viewerCheck.model;
2280
- var CUSTOMER_INSIGHTS_MODEL = MODEL_ROLES.customerInsights.model;
2281
- var GLANCE_CHECK_MODEL = MODEL_ROLES.glanceCheck.model;
2282
- var TEXT_BOX_READER_MODEL = MODEL_ROLES.textBoxReader.model;
2283
- var VIDEO_DECONSTRUCT_MODEL = MODEL_ROLES.videoDeconstruct.model;
2284
- var IMAGE_SEARCH_MODEL = MODEL_ROLES.imageSearch.model;
2285
- var VOICEOVER_MODEL = MODEL_ROLES.voiceover.model;
2286
- var SOUND_EFFECT_MODEL = MODEL_ROLES.soundEffect.model;
2287
- var MUSIC_BED_MODEL = MODEL_ROLES.musicBed.model;
2288
- var VOICE_CONVERT_MODEL = MODEL_ROLES.voiceConvert.model;
2289
- function isRegisteredModel(kind, model) {
2290
- return MODEL_REGISTRY[kind]?.[canonicalModelId(model)] !== void 0;
2291
- }
2292
- function imageGenerateAspectRatios() {
2293
- const seen = /* @__PURE__ */ new Set();
2294
- for (const model of IMAGE_GENERATE_MODELS) {
2295
- for (const ratio of supportedAspectRatios("image_generate", model) ?? []) seen.add(ratio);
2296
- }
2297
- return [...seen];
2298
- }
2299
- function supportsParam(kind, model, param) {
2300
- return MODEL_REGISTRY[kind]?.[model]?.params[param] !== void 0;
2301
- }
2302
- var DEFAULT_CLIP_DURATION_S = 5;
2303
- var SPOKEN_WORDS_PER_SECOND = 2.5;
2304
- var SPOKEN_LINE = new RegExp(`(?<![\\p{L}\\p{N}])['"\\u201c\\u201d\\u2018\\u2019]((?:[^'"\\u201c\\u201d\\u2018\\u2019]|(?<=\\p{L})['\\u2019](?=\\p{L})){8,})['"\\u201c\\u201d\\u2018\\u2019](?![\\p{L}\\p{N}])`, "gu");
2305
- function spokenWordsIn(prompt) {
2306
- if (!prompt) return 0;
2307
- const quoted = [...prompt.matchAll(SPOKEN_LINE)].map((m) => m[1] ?? "");
2308
- const text = quoted.join(" ").trim();
2309
- return text ? text.split(/\s+/).filter(Boolean).length : 0;
2310
- }
2311
- var SPOKEN_CLIP_DURATION_S = 8;
2312
- function nearestClipDuration(model, preferred) {
2313
- const schema = MODEL_REGISTRY.video_generate[model]?.params.duration;
2314
- const allowed = schema?.kind === "number" ? schema.enum : void 0;
2315
- if (!allowed?.length || allowed.includes(preferred)) return preferred;
2316
- return [...allowed].sort((a, b) => Math.abs(a - preferred) - Math.abs(b - preferred) || a - b)[0];
2317
- }
2318
- var SILENT_VIDEO_MODELS = /* @__PURE__ */ new Set([
2319
- "runway/gen-4.5",
2320
- "x-ai/grok-imagine-video",
2321
- "x-ai/grok-imagine-video-1.5",
2322
- "alibaba/happyhorse-1.1"
2323
- ]);
2324
- function clipAudioMode(model) {
2325
- if (supportsParam("video_generate", model, "generate_audio")) return "toggle";
2326
- return SILENT_VIDEO_MODELS.has(model) ? "never" : "always";
2327
- }
2328
- function clipDurationsFor(model) {
2329
- const schema = MODEL_REGISTRY.video_generate[model]?.params.duration;
2330
- const allowed = schema?.kind === "number" ? schema.enum : void 0;
2331
- return allowed?.length ? [...allowed].sort((a, b) => a - b) : void 0;
2332
- }
2333
- function maxClipSeconds(model) {
2334
- const allowed = clipDurationsFor(model);
2335
- return allowed ? allowed[allowed.length - 1] : void 0;
2336
- }
2337
- function splitScriptFor(words, model) {
2338
- const maxSeconds = maxClipSeconds(model);
2339
- if (!maxSeconds) return null;
2340
- const perClip = Math.floor(maxSeconds * SPOKEN_WORDS_PER_SECOND);
2341
- if (words <= perClip) return null;
2342
- const clips = Math.ceil(words / perClip);
2343
- return { clips, wordsPerClip: Math.ceil(words / clips), maxSeconds };
2344
- }
2345
- function promptMaxLength(kind, model) {
2346
- const schema = MODEL_REGISTRY[kind]?.[model]?.params.prompt;
2347
- return schema?.kind === "string" ? schema.maxLength : void 0;
2348
- }
2349
- function inputSlot(kind, model, inputKind) {
2350
- const spec = MODEL_REGISTRY[kind]?.[model];
2351
- return spec?.optional_inputs?.find((input) => input.kind === inputKind) ?? spec?.inputs.find((input) => input.kind === inputKind);
2352
- }
2353
- function maxInputSlot(kind, model, inputKind) {
2354
- return inputSlot(kind, model, inputKind)?.max;
2355
- }
2356
- function maxInputReferences(kind, model) {
2357
- return maxInputSlot(kind, model, "image");
2358
- }
2359
- function supportedQualities(kind, model) {
2360
- const schema = MODEL_REGISTRY[kind]?.[model]?.params.quality;
2361
- return schema?.kind === "string" ? schema.enum : void 0;
2362
- }
2363
- function bestSupportedQuality(kind, model, want) {
2364
- const supported = supportedQualities(kind, model);
2365
- if (!supported) return void 0;
2366
- if (supported.includes(want)) return want;
2367
- const ladder = supported.filter((step) => step !== "auto");
2368
- const ceiling = ladder.indexOf(want);
2369
- const reachable = ceiling === -1 ? ladder : ladder.slice(0, ceiling);
2370
- return reachable[reachable.length - 1];
2371
- }
2372
- function supportedAspectRatios(kind, model) {
2373
- const schema = MODEL_REGISTRY[kind]?.[model]?.params.aspect_ratio;
2374
- return schema?.kind === "string" ? schema.enum : void 0;
2375
- }
2376
- function ratioValue(ratio) {
2377
- const [w, h] = ratio.split(":").map(Number);
2378
- if (!w || !h || !Number.isFinite(w) || !Number.isFinite(h)) return null;
2379
- return w / h;
2380
- }
2381
- function nearestSupportedAspectRatio(kind, model, target) {
2382
- const supported = supportedAspectRatios(kind, model);
2383
- if (!supported || supported.includes(target)) return target;
2384
- const wanted = ratioValue(target);
2385
- if (wanted === null) return target;
2386
- let best = target;
2387
- let bestDistance = Number.POSITIVE_INFINITY;
2388
- for (const candidate of supported) {
2389
- const value = ratioValue(candidate);
2390
- if (value === null) continue;
2391
- const distance = Math.abs(Math.log(value / wanted));
2392
- if (distance < bestDistance) {
2393
- bestDistance = distance;
2394
- best = candidate;
2395
- }
2396
- }
2397
- return best;
2398
- }
2399
- function supportedImageSizes(kind, model) {
2400
- const schema = MODEL_REGISTRY[kind]?.[model]?.params.image_size;
2401
- return schema?.kind === "string" ? schema.enum : void 0;
2402
- }
2403
- var IMAGE_SIZE_ORDER = ["0.5K", "1K", "2K", "4K"];
2404
- function nearestSupportedImageSize(kind, model, target) {
2405
- const supported = supportedImageSizes(kind, model);
2406
- if (!supported || supported.includes(target)) return target;
2407
- const wanted = IMAGE_SIZE_ORDER.indexOf(target);
2408
- if (wanted < 0) return target;
2409
- const ranked = supported.filter((s) => IMAGE_SIZE_ORDER.includes(s)).sort((a, b) => IMAGE_SIZE_ORDER.indexOf(a) - IMAGE_SIZE_ORDER.indexOf(b));
2410
- if (ranked.length === 0) return target;
2411
- const belowOrEqual = ranked.filter((s) => IMAGE_SIZE_ORDER.indexOf(s) <= wanted);
2412
- return belowOrEqual.length > 0 ? belowOrEqual[belowOrEqual.length - 1] : ranked[0];
2413
- }
2414
-
2415
- // ../canvas-contract/src/credits.ts
2416
- var CREDITS_PER_USD = 100;
2417
- function usdToCredits(usd) {
2418
- if (!(usd > 0)) return 0;
2419
- return Math.ceil(Number((usd * CREDITS_PER_USD).toFixed(6)));
2420
- }
2421
-
2422
- // ../canvas-contract/src/videoCost.ts
2423
- var OPENING_FRAME_CREDITS = usdToCredits(0.03);
2424
- var SEEDANCE_USD_PER_SECOND = {
2425
- "480p": 0.18,
2426
- "720p": 0.5,
2427
- "1080p": 0.62,
2428
- "4k": 0.62
2429
- };
2430
- var DEFAULT_VIDEO_RESOLUTION = "720p";
2431
- var DEFAULT_VIDEO_DURATION_S = 5;
2432
- function isSeedanceModel(model) {
2433
- return model.startsWith("bytedance/seedance");
2434
- }
2435
- var SEEDANCE_25_USD_PER_SECOND = {
2436
- "480p": 0.1075,
2437
- "720p": 0.2326
2438
- };
2439
- var SEEDANCE_25_FALLBACK_USD_PER_SECOND = 0.2326;
2440
- function seedance25UsdPerSecond(resolution) {
2441
- return SEEDANCE_25_USD_PER_SECOND[resolution ?? DEFAULT_VIDEO_RESOLUTION] ?? SEEDANCE_25_FALLBACK_USD_PER_SECOND;
2442
- }
2443
- var FALLBACK_USD_PER_SECOND = 0.5;
2444
- function billedSeconds(model, duration) {
2445
- const floor = perSecondBilling(model)?.minBilledSeconds;
2446
- return floor === void 0 ? duration : Math.max(duration, floor);
2447
- }
2448
- function seedanceUsdPerSecond(resolution) {
2449
- return SEEDANCE_USD_PER_SECOND[resolution ?? DEFAULT_VIDEO_RESOLUTION] ?? FALLBACK_USD_PER_SECOND;
2450
- }
2451
- var GEMINI_OMNI_USD_PER_1M_VIDEO_TOKENS = 17.5;
2452
- var GEMINI_OMNI_VIDEO_TOKENS_PER_SECOND = 5792;
2453
- var GEMINI_OMNI_RESOLUTION_MULTIPLIER = {
2454
- "360p": 1 / 3,
2455
- "720p": 1,
2456
- "1080p": 1.5,
2457
- "4k": 3
2458
- };
2459
- var GEMINI_OMNI_DEFAULT_RESOLUTION = "720p";
2460
- var GEMINI_OMNI_OVERHEAD_TOKENS = 600;
2461
- var GEMINI_OMNI_WINDOW_SECONDS = 10;
2462
- var GEMINI_OMNI_USD_PER_SECOND = GEMINI_OMNI_VIDEO_TOKENS_PER_SECOND * GEMINI_OMNI_USD_PER_1M_VIDEO_TOKENS / 1e6;
2463
- function geminiOmniUsdPerSecond(resolution) {
2464
- const multiplier = GEMINI_OMNI_RESOLUTION_MULTIPLIER[resolution ?? GEMINI_OMNI_DEFAULT_RESOLUTION] ?? 1;
2465
- return GEMINI_OMNI_USD_PER_SECOND * multiplier;
2466
- }
2467
- var VIDEO_SOURCE_COST_MULTIPLIER = 2.5;
2468
- var FAL_SEEDANCE_USD_PER_1K_TOKENS = 0.0214;
2469
- var SEEDANCE_SOURCE_CLIP_DISCOUNT = 0.6;
2470
- var SEEDANCE_DEAREST_FRAME = {
2471
- "480p": { width: 992, height: 432 },
2472
- "720p": { width: 1112, height: 834 }
2473
- };
2474
- function falSeedanceUsdPerSecond(resolution, buildsOnSourceClip = false) {
2475
- const frame = SEEDANCE_DEAREST_FRAME[resolution ?? DEFAULT_VIDEO_RESOLUTION] ?? SEEDANCE_DEAREST_FRAME["720p"];
2476
- const tokensPerSecond = (frame?.width ?? 1112) * (frame?.height ?? 834) * 24 / 1024;
2477
- const rate = tokensPerSecond * FAL_SEEDANCE_USD_PER_1K_TOKENS / 1e3;
2478
- return buildsOnSourceClip ? rate * SEEDANCE_SOURCE_CLIP_DISCOUNT : rate;
2479
- }
2480
- function geminiOmniCostUsd(model, duration, resolution) {
2481
- const tier = isGeminiOmniPreviewModel(model) ? GEMINI_OMNI_DEFAULT_RESOLUTION : resolution;
2482
- const footage = geminiOmniUsdPerSecond(tier) * (duration ?? GEMINI_OMNI_WINDOW_SECONDS);
2483
- return footage + GEMINI_OMNI_OVERHEAD_TOKENS * GEMINI_OMNI_USD_PER_1M_VIDEO_TOKENS / 1e6;
2484
- }
2485
- function seedance20CostUsd(resolution, seconds, mayRouteToFal) {
2486
- const viaReplicate = seedanceUsdPerSecond(resolution) * seconds;
2487
- if (!mayRouteToFal) return viaReplicate;
2488
- const falTier = resolution === "480p" || resolution === "720p" ? resolution : void 0;
2489
- return Math.max(viaReplicate, falSeedanceUsdPerSecond(falTier) * seconds);
2490
- }
2491
- function estimateVideoCostUsd(input) {
2492
- const { model, duration, resolution, generateAudio, buildsOnSourceClip } = input;
2493
- const seconds = billedSeconds(model, duration ?? DEFAULT_VIDEO_DURATION_S);
2494
- const sourceClipPremium = buildsOnSourceClip ? VIDEO_SOURCE_COST_MULTIPLIER : 1;
2495
- if (isGeminiOmniModel(model)) return geminiOmniCostUsd(model, duration, resolution);
2496
- if (isSeedance25Model(model)) {
2497
- const viaOpenRouter = seedance25UsdPerSecond(resolution) * seconds * sourceClipPremium;
2498
- if (!input.mayRouteToFal) return viaOpenRouter;
2499
- return Math.max(viaOpenRouter, falSeedanceUsdPerSecond(resolution, buildsOnSourceClip) * seconds);
2500
- }
2501
- if (isSeedanceModel(model)) return seedance20CostUsd(resolution, seconds, input.mayRouteToFal === true);
2502
- const published = perSecondBilling(model)?.usd;
2503
- if (published) {
2504
- const rate = (resolution ? published.byResolution?.[resolution] : void 0) ?? published;
2505
- return (generateAudio ? rate.audio : rate.silent) * seconds;
2506
- }
2507
- const dearestKnownRate = Math.max(...Object.values(SEEDANCE_USD_PER_SECOND));
2508
- return dearestKnownRate * seconds;
2509
- }
2510
- function estimateVideoCredits(input) {
2511
- return usdToCredits(estimateVideoCostUsd(input));
2512
- }
2513
-
2514
- // ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/esm/wrapper.js
2515
- var import__ = __toESM(require_safe_stable_stringify(), 1);
2516
- var configure = import__.default.configure;
2517
- var wrapper_default = import__.default;
2518
-
2519
- // ../canvas-contract/src/canonical.ts
2520
- function canonicalize(value) {
2521
- const normalized = normalizeForCanonical(value);
2522
- const out = wrapper_default(normalized);
2523
- if (out === void 0) {
2524
- throw new Error("canonicalize: value serialized to undefined (top-level undefined?)");
2525
- }
2526
- return out;
2527
- }
2528
- function normalizeForCanonical(value) {
2529
- if (value === null) return null;
2530
- if (typeof value === "string") return value.normalize("NFC");
2531
- if (typeof value === "number") {
2532
- if (!Number.isFinite(value)) {
2533
- throw new Error(`canonicalize: non-finite number ${value}`);
2534
- }
2535
- return value;
2536
- }
2537
- if (typeof value === "boolean") return value;
2538
- if (typeof value === "bigint") {
2539
- throw new Error("canonicalize: bigint not supported");
2540
- }
2541
- if (Array.isArray(value)) {
2542
- return value.map(normalizeForCanonical);
2543
- }
2544
- if (typeof value === "object") {
2545
- const out = {};
2546
- for (const [k, v] of Object.entries(value)) {
2547
- if (v === void 0) continue;
2548
- out[k.normalize("NFC")] = normalizeForCanonical(v);
2549
- }
2550
- return out;
2551
- }
2552
- return void 0;
2553
- }
2554
-
2555
- // ../canvas-contract/src/clipWeight.ts
2556
- var MB_PER_SECOND_720P = 2.13;
2557
- var RESOLUTION_WEIGHT = {
2558
- "360p": 0.25,
2559
- "480p": 0.44,
2560
- "720p": 1,
2561
- "1080p": 2.25,
2562
- "4k": 9,
2563
- "4K": 9
2564
- };
2565
- var MAX_CLIP_INGEST_MB = 120;
2566
- function estimateClipMb(durationSeconds, resolution) {
2567
- const weight = RESOLUTION_WEIGHT[resolution ?? "720p"] ?? 1;
2568
- return durationSeconds * MB_PER_SECOND_720P * weight;
2569
- }
2570
- function clipTooHeavyToIngest(durationSeconds, resolution) {
2571
- if (!durationSeconds) return null;
2572
- const mb = estimateClipMb(durationSeconds, resolution);
2573
- if (mb <= MAX_CLIP_INGEST_MB) return null;
2574
- const fits = Math.floor(MAX_CLIP_INGEST_MB / (estimateClipMb(1, resolution) || 1));
2575
- return `A ${durationSeconds}s clip at ${resolution ?? "720p"} comes to roughly ${Math.round(mb)} MB, more than the ${MAX_CLIP_INGEST_MB} MB we can take in \u2014 it would render, bill, and then fail on the way into the library. Shorten it to about ${fits}s at this resolution, or drop the resolution and keep the length.`;
2576
- }
2577
-
2578
- // ../canvas-contract/src/frameRealism.ts
2579
- function frameRealismDirection(opts = {}) {
2580
- return " Everything obeys real-world physics: paper, card and screens are OPAQUE with nothing showing through from behind, every object is at believable real-world scale next to the people handling it, and every object has its real-world form and construction \u2014 a phone has ONE screen and it is on the front." + // The worst of the three failures behind this, because the viewer reads the number: a
2581
- // model invents one whenever a screen or a document is in shot, and it contradicts the
2582
- // script it sits under. Frames simply do not get legible text; the captions carry the
2583
- // numbers.
2584
- //
2585
- // Default ON, and asked for explicitly rather than inferred: an ad frame with no
2586
- // person in it still sits under a script for an invented number to argue with. Only a
2587
- // plain Studio picture opts out — it has no script, and it may BE the poster somebody
2588
- // asked for, which the model picker sells GPT Image 2.5 on being able to render.
2589
- (opts.readableText === "allowed" ? "" : " NO readable text or numbers anywhere in frame \u2014 phone screens, documents and signage stay illegible or out of focus, because any figure the model invents will contradict the script.") + // Measured: one finished ad reported malformed hands or limbs in 8 of 12 sampled frames;
2590
- // another, a woman with an extra right arm and an unattached hand gripping a panel.
2591
- // Fiddly work at close range is where a video model breaks, every time.
2592
- " Hands are kept simple: no close-up of fingers manipulating small parts, no hand gripping the edge of an object, and each person has exactly TWO arms and TWO legs, all attached and all visible or all out of frame. Anyone working does so the way the trade actually does it: nobody stands or kneels on the equipment being installed, nothing is fitted overhanging an edge or floating unsupported, and every part rests on the structure that would really carry it." + // The newest clause, and the one no route had. A testimonial came back with the customer
2593
- // repairing the panel herself: nothing said she was not the installer, so the model cast
2594
- // her as one. Who someone IS in the picture has to be stated, or it is guessed.
2595
- (opts.role ? ` The person on camera is ${opts.role} \u2014 they are shown as that and never doing somebody else's job.` : "") + (opts.currency ? ` If a currency is unavoidably visible it is ${opts.currency}.` : "");
2596
- }
2597
-
2598
- // ../canvas-contract/src/nodeCost.ts
2599
- var ELEVENLABS_USD_PER_CHARACTER = 22e-5;
2600
- var ELEVENLABS_MUSIC_USD_PER_SECOND = 0.022;
2601
- var ELEVENLABS_SOUND_EFFECT_USD_PER_SECOND = 0.022;
2602
- var ELEVENLABS_STS_USD_PER_MINUTE = 1e3 * ELEVENLABS_USD_PER_CHARACTER;
2603
- var FALAI_LIPSYNC_PER_MIN_USD = 0.4;
2604
- var FALAI_VIDEO_BG_REMOVE_REFINED_USD_PER_30_FRAMES = 0.012;
2605
- var FALAI_VIDEO_BG_REMOVE_FAST_USD_PER_30_FRAMES = 8e-3;
2606
- var FALAI_IMAGE_BG_REMOVE_USD_PER_CALL = 1e-3;
2607
- var GROQ_WHISPER_COST_PER_HOUR = 0.04;
2608
- var GROQ_WHISPER_MINIMUM_SECONDS = 10;
2609
- var DEEPGRAM_NOVA3_COST_PER_MINUTE = 43e-4;
2610
- var FIRECRAWL_COST_PER_SCRAPE = 1e-3;
2611
- var DEFAULT_MUSIC_SECONDS = 30;
2612
- var DEFAULT_SOUND_EFFECT_SECONDS = 5;
2613
- var DEFAULT_BACKGROUND_REMOVE_SECONDS = 30;
2614
- var DEFAULT_MEDIA_SECONDS = 60;
2615
- function ttsCharactersUsd(characters) {
2616
- return characters * ELEVENLABS_USD_PER_CHARACTER;
2617
- }
2618
- function musicSecondsUsd(seconds) {
2619
- return seconds * ELEVENLABS_MUSIC_USD_PER_SECOND;
2620
- }
2621
- function soundEffectSecondsUsd(seconds) {
2622
- return seconds * ELEVENLABS_SOUND_EFFECT_USD_PER_SECOND;
2623
- }
2624
- function voiceConvertMinutes(durationMs) {
2625
- return Math.max(durationMs / 6e4, 0.1);
2626
- }
2627
- function voiceConvertUsd(minutes) {
2628
- return minutes * ELEVENLABS_STS_USD_PER_MINUTE;
2629
- }
2630
- function lipsyncMinutes(audioMs, videoMs) {
2631
- const durationMs = Math.max(audioMs ?? 0, videoMs ?? 0);
2632
- return durationMs > 0 ? durationMs / 6e4 : 1;
2633
- }
2634
- function lipsyncUsd(minutes) {
2635
- return minutes * FALAI_LIPSYNC_PER_MIN_USD;
2636
- }
2637
- function backgroundRemoveFrames(durationSeconds) {
2638
- return Math.max(30, Math.ceil((durationSeconds ?? DEFAULT_BACKGROUND_REMOVE_SECONDS) * 30));
2639
- }
2640
- function videoBackgroundRemoveUsd(durationSeconds, edgeRefinement) {
2641
- const unit = edgeRefinement ? FALAI_VIDEO_BG_REMOVE_REFINED_USD_PER_30_FRAMES : FALAI_VIDEO_BG_REMOVE_FAST_USD_PER_30_FRAMES;
2642
- return backgroundRemoveFrames(durationSeconds) / 30 * unit;
2643
- }
2644
- function transcriptionUsd(transcriber, seconds) {
2645
- if (seconds <= 0) return 0;
2646
- if (transcriber === "deepgram") return seconds / 60 * DEEPGRAM_NOVA3_COST_PER_MINUTE;
2647
- return Math.max(seconds, GROQ_WHISPER_MINIMUM_SECONDS) / 3600 * GROQ_WHISPER_COST_PER_HOUR;
2648
- }
2649
- function asBag(value) {
2650
- return value && typeof value === "object" && !Array.isArray(value) ? value : {};
2651
- }
2652
- function num(value) {
2653
- return typeof value === "number" && Number.isFinite(value) ? value : void 0;
2654
- }
2655
- function inputDurationMs(inputs, slot) {
2656
- const ref = asBag(inputs[slot]);
2657
- return num(ref.duration_ms) ?? num(asBag(ref.metadata).duration_ms);
2658
- }
2659
- function slotCount(inputs, slot) {
2660
- const value = inputs[slot];
2661
- if (Array.isArray(value)) return value.length;
2662
- return value ? 1 : 0;
2663
- }
2664
- function textLength(value) {
2665
- return typeof value === "string" ? value.length : 0;
2666
- }
2667
- function estimateVideoGenerateUsd(params, inputs, preferFal) {
2668
- const model = params.model;
2669
- if (typeof model !== "string") return null;
2670
- const referenceOnly = slotCount(inputs, "references") > 0 && !inputs.first_frame;
2671
- return estimateVideoCostUsd({
2672
- model,
2673
- duration: num(params.duration),
2674
- resolution: typeof params.resolution === "string" ? params.resolution : void 0,
2675
- generateAudio: typeof params.generate_audio === "boolean" ? params.generate_audio : void 0,
2676
- buildsOnSourceClip: slotCount(inputs, "video_references") > 0,
2677
- mayRouteToFal: isSeedanceModel(model) && (preferFal || referenceOnly)
2678
- });
2679
- }
2680
- function estimateMusicUsd(params, inputs) {
2681
- const pinnedMs = num(params.music_length_ms);
2682
- const scoredMs = params.model === "elevenlabs/video-background-music-v1" ? inputDurationMs(inputs, "video") : void 0;
2683
- const seconds = (pinnedMs ?? scoredMs ?? DEFAULT_MUSIC_SECONDS * 1e3) / 1e3;
2684
- return musicSecondsUsd(seconds);
2685
- }
2686
- function estimateDialogueUsd(params) {
2687
- if (!Array.isArray(params.inputs)) return null;
2688
- const characters = params.inputs.reduce((sum, line) => sum + textLength(asBag(line).text), 0);
2689
- return ttsCharactersUsd(characters);
2690
- }
2691
- function estimateNodeCostUsd(input) {
2692
- const params = asBag(input.params);
2693
- const inputs = asBag(input.inputs);
2694
- switch (input.nodeType) {
2695
- case "video_generate":
2696
- return estimateVideoGenerateUsd(params, inputs, input.preferFal === true);
2697
- case "tts":
2698
- return typeof params.text === "string" ? ttsCharactersUsd(params.text.length) : null;
2699
- case "dialogue":
2700
- return estimateDialogueUsd(params);
2701
- case "music":
2702
- return estimateMusicUsd(params, inputs);
2703
- case "sound_effect":
2704
- return soundEffectSecondsUsd(num(params.duration_seconds) ?? DEFAULT_SOUND_EFFECT_SECONDS);
2705
- case "audio_voice_convert": {
2706
- const ms = inputDurationMs(inputs, "audio") ?? DEFAULT_MEDIA_SECONDS * 1e3;
2707
- return voiceConvertUsd(voiceConvertMinutes(ms));
2708
- }
2709
- case "video_lipsync":
2710
- return lipsyncUsd(lipsyncMinutes(inputDurationMs(inputs, "audio"), inputDurationMs(inputs, "video")));
2711
- case "video_background_remove": {
2712
- const ms = inputDurationMs(inputs, "video");
2713
- return videoBackgroundRemoveUsd(ms === void 0 ? void 0 : ms / 1e3, params.edge_refinement !== false);
2714
- }
2715
- case "image_background_remove":
2716
- return FALAI_IMAGE_BG_REMOVE_USD_PER_CALL;
2717
- case "video_transcribe": {
2718
- const ms = inputDurationMs(inputs, "video") ?? DEFAULT_MEDIA_SECONDS * 1e3;
2719
- return transcriptionUsd(params.transcriber === "deepgram" ? "deepgram" : "groq", ms / 1e3);
2720
- }
2721
- case "ingest":
2722
- return params.strategy === "firecrawl" ? FIRECRAWL_COST_PER_SCRAPE : 0;
2723
- case "voice_select":
2724
- case "load_artifact":
2725
- case "save_artifact":
2726
- case "resize":
2727
- case "crop":
2728
- return 0;
2729
- default:
2730
- return null;
2731
- }
2732
- }
2733
- function estimateNodeCredits(input) {
2734
- const usd = estimateNodeCostUsd(input);
2735
- return usd === null ? null : usdToCredits(usd);
2736
- }
2737
-
2738
- // ../canvas-contract/src/personRealism.ts
2739
- var PHONE_CAMERA = "Shot on a phone, an iPhone or a Samsung Galaxy, with the main camera in the default photo mode (not portrait mode): slightly wide angle, held by a friend about a metre away or at arm's length, the background mostly in focus the way phone photos are, the phone's own processing \u2014 HDR evening out a bright window, a touch of over-sharpening, smoothed noise in the shadows, punchy everyday colour. Slightly imperfect framing. Not a professional camera: no bokeh or creamy background blur, no lens compression, no studio or flash lighting, no colour grade.";
2740
- var REAL_SKIN = "Real skin and a real face: visible pores, fine lines, uneven tone, small marks, stray hairs, slight asymmetry. Clothes with real creases.";
2741
- var NOT_A_MODEL = "Not stock photography, not a model or an influencer: no beauty retouching, no glowing or plastic skin, no perfectly symmetrical features.";
2742
- function candidPersonPortraitPrompt(p) {
2743
- return [
2744
- `An unretouched candid phone photo of one ordinary, real person: ${p.subject}`,
2745
- p.wardrobe?.trim() ? `Wearing: ${p.wardrobe.trim()}` : null,
2746
- `Where: ${p.setting?.trim() || "an everyday place that fits who they are, in daylight"}, available light only. They look toward the lens mid-conversation with a relaxed, unposed expression. Framed from the head to mid-torso, face clearly visible.`,
2747
- PHONE_CAMERA,
2748
- REAL_SKIN,
2749
- NOT_A_MODEL,
2750
- "No text, logos or watermarks. One person only."
2751
- ].filter((line) => line !== null).join("\n");
2752
- }
2753
-
2754
- // ../canvas-contract/src/validateParams.ts
2755
- function isManagedNodeKind(nodeType) {
2756
- return Object.keys(MODEL_REGISTRY).includes(nodeType);
2757
- }
2758
- function checkRequiredParams(spec, params, model) {
2759
- const errors = [];
2760
- for (const req of spec.required) {
2761
- if (params[req] === void 0 || params[req] === null) {
2762
- errors.push({
2763
- code: "missing_required_param",
2764
- param: req,
2765
- message: `missing required param "${req}" for model "${model}"`
2766
- });
2767
- }
2768
- }
2769
- return errors;
2770
- }
2771
- function checkParamValues(spec, params, model) {
2772
- const errors = [];
2773
- for (const [key, value] of Object.entries(params)) {
2774
- if (key === "model") continue;
2775
- if (value === void 0) continue;
2776
- const schema = spec.params[key];
2777
- if (!schema) {
2778
- errors.push({
2779
- code: "unknown_param",
2780
- param: key,
2781
- message: `param "${key}" is not supported by model "${model}"`
2782
- });
2783
- continue;
2784
- }
2785
- const valueErr = validateValue(key, value, schema, model);
2786
- if (valueErr) errors.push(valueErr);
2787
- }
2788
- return errors;
2789
- }
2790
- function validateModelParams(nodeType, model, params) {
2791
- const spec = MODEL_REGISTRY[nodeType][canonicalModelId(model)];
2792
- if (!spec) {
2793
- return {
2794
- ok: false,
2795
- errors: [{ code: "unknown_model", message: `unknown model "${model}" for node "${nodeType}"` }]
2796
- };
2797
- }
2798
- const errors = [...checkRequiredParams(spec, params, model), ...checkParamValues(spec, params, model)];
2799
- if (errors.length > 0) return { ok: false, errors };
2800
- if (nodeType === "video_generate") {
2801
- const tooHeavy = clipTooHeavyToIngest(
2802
- typeof params.duration === "number" ? params.duration : void 0,
2803
- typeof params.resolution === "string" ? params.resolution : void 0
2804
- );
2805
- if (tooHeavy) return { ok: false, errors: [{ code: "clip_too_heavy", message: tooHeavy }] };
2806
- }
2807
- return { ok: true };
2808
- }
2809
- function validateModelInputs(nodeType, model, providedKinds) {
2810
- const spec = MODEL_REGISTRY[nodeType][canonicalModelId(model)];
2811
- if (!spec) {
2812
- return {
2813
- ok: false,
2814
- errors: [{ code: "unknown_model", message: `unknown model "${model}" for node "${nodeType}"` }]
2815
- };
2816
- }
2817
- const have = new Set(providedKinds);
2818
- const errors = [];
2819
- for (const inputSpec of spec.inputs) {
2820
- if (!have.has(inputSpec.kind)) {
2821
- errors.push({
2822
- code: "missing_input",
2823
- input: inputSpec.kind,
2824
- message: `model "${model}" requires input of kind "${inputSpec.kind}"`
2825
- });
2826
- }
2827
- }
2828
- if (errors.length > 0) return { ok: false, errors };
2829
- return { ok: true };
2830
- }
2831
- function validateStringValue(key, value, schema, model) {
2832
- if (typeof value !== "string") {
2833
- return { code: "invalid_value", param: key, message: `${key}: expected string, got ${typeof value}` };
2834
- }
2835
- if (schema.enum && !schema.enum.includes(value)) {
2836
- return {
2837
- code: "invalid_value",
2838
- param: key,
2839
- message: `${key}: "${value}" not allowed by "${model}" (allowed: ${schema.enum.join(", ")})`
2840
- };
2841
- }
2842
- if (schema.maxLength !== void 0 && value.length > schema.maxLength) {
2843
- return {
2844
- code: "invalid_value",
2845
- param: key,
2846
- message: `${key}: ${value.length} characters exceeds max ${schema.maxLength} for "${model}"`
2847
- };
2848
- }
2849
- return null;
2850
- }
2851
- function validateNumberValue(key, value, schema, model) {
2852
- if (typeof value !== "number" || Number.isNaN(value)) {
2853
- return { code: "invalid_value", param: key, message: `${key}: expected number, got ${typeof value}` };
2854
- }
2855
- if (schema.enum && !schema.enum.includes(value)) {
2856
- return {
2857
- code: "invalid_value",
2858
- param: key,
2859
- message: `${key}: ${value} not allowed by "${model}" (allowed: ${schema.enum.join(", ")})`
2860
- };
2861
- }
2862
- if (schema.integer && !Number.isInteger(value)) {
2863
- return { code: "invalid_value", param: key, message: `${key}: ${value} must be a whole number` };
2864
- }
2865
- if (schema.min !== void 0 && value < schema.min) {
2866
- return { code: "invalid_value", param: key, message: `${key}: ${value} below min ${schema.min}` };
2867
- }
2868
- if (schema.max !== void 0 && value > schema.max) {
2869
- return { code: "invalid_value", param: key, message: `${key}: ${value} above max ${schema.max}` };
2870
- }
2871
- return null;
2872
- }
2873
- function validateValue(key, value, schema, model) {
2874
- switch (schema.kind) {
2875
- case "string":
2876
- return validateStringValue(key, value, schema, model);
2877
- case "number":
2878
- return validateNumberValue(key, value, schema, model);
2879
- case "boolean":
2880
- if (typeof value !== "boolean") {
2881
- return { code: "invalid_value", param: key, message: `${key}: expected boolean, got ${typeof value}` };
2882
- }
2883
- return null;
2884
- case "json":
2885
- return null;
2886
- default: {
2887
- const _exhaustive = schema;
2888
- return _exhaustive;
2889
- }
2890
- }
2891
- }
2892
-
2893
- // ../canvas-contract/src/videoBlueprint.ts
2894
- import { z } from "zod";
2895
- var FrameAssetSchema = z.object({ url: z.string().optional() }).loose().optional();
2896
- var BlueprintDialogueLineSchema = z.object({
2897
- speaker: z.string().optional(),
2898
- line: z.string().optional(),
2899
- // Absolute seconds on the source timeline (the deconstruct emits both).
2900
- start_s: z.number().optional(),
2901
- end_s: z.number().optional(),
2902
- delivery: z.string().optional(),
2903
- voice_description: z.string().optional(),
2904
- // DECON-supplied: is this speaker's FACE visibly speaking in THIS scene? Element
2905
- // presence alone can't answer that — a founder pictured in a polaroid close-up is
2906
- // "present" yet the line is voiceover, and treating it as on-camera produced a
2907
- // native Seedance lip-sync clip of a still photograph. `false` pins the line to
2908
- // the VO path; absent keeps the presence-based decision (old blueprints).
2909
- on_camera: z.boolean().optional()
2910
- }).loose();
2911
- var SfxSchema = z.object({
2912
- at_s: z.number().optional(),
2913
- duration_s: z.number().optional(),
2914
- sound_effect_prompt: z.string().optional(),
2915
- description: z.string().optional()
2916
- }).loose();
2917
- var CompositionRegionSchema = z.object({
2918
- // full | top | bottom | left | right | inset
2919
- panel: z.string().optional(),
2920
- // 9-grid anchor for an `inset` presenter box.
2921
- position: z.string().optional(),
2922
- is_presenter: z.boolean().optional(),
2923
- // The cast id shown/speaking in this region (routes lip-sync + element refs).
2924
- cast_ref: z.string().optional(),
2925
- // What the region's content IS: camera | screen_capture | static_graphic |
2926
- // generated. Authoritative for routing when present (regex-over-prose fallback
2927
- // otherwise): screen_capture/static_graphic are rebuilt from REAL surfaces on the
2928
- // overlay layer, never AI-generated.
2929
- kind: z.string().optional(),
2930
- // Opaque id naming the SPECIFIC on-screen document/note/app-state this
2931
- // screen_capture region shows. Two scenes share it only when they show the SAME
2932
- // recording continuing (scrolling/typing/waiting within it) — a genuinely
2933
- // DIFFERENT document/note/recording (a source video splicing two screen captures)
2934
- // gets a different id. Breaks a persistent-layout run into separate surface stubs
2935
- // instead of asking the operator for one screenshot that can't cover both.
2936
- surface_id: z.string().optional(),
2937
- // Camera bubble(s)/inset(s) embedded INSIDE this region's surface (a Loom-style
2938
- // presenter bubble inside a screen recording) — video-in-video the reproduction
2939
- // must re-composite, not paint into the surface.
2940
- nested: z.array(z.object({}).loose()).optional(),
2941
- summary: z.string().optional(),
2942
- frame_prompt: z.string().optional(),
2943
- motion_prompt: z.string().optional()
2944
- }).loose();
2945
- var SceneCompositionSchema = z.object({
2946
- // full_frame (default) | split_screen | pip | keyed_overlay
2947
- layout: z.string().optional(),
2948
- // split_screen only: vertical (top/bottom) | horizontal (left/right).
2949
- split_axis: z.string().optional(),
2950
- regions: z.array(CompositionRegionSchema).optional()
2951
- }).loose();
2952
- var CameraMotionSchema = z.object({ movement: z.string().optional(), detail: z.string().optional() }).loose();
2953
- var TranscriptWordSchema = z.object({ text: z.string().optional() }).loose();
2954
- var SCENE_ROUTE_HINTS = ["brand_card"];
2955
- var VideoSceneSchema = z.object({
2956
- start_s: z.number().optional(),
2957
- end_s: z.number().optional(),
2958
- duration_s: z.number().optional(),
2959
- summary: z.string().optional(),
2960
- action_detail: z.string().optional(),
2961
- // The scene's spatial layout. Absent/full_frame ⇒ one uncut shot (default path).
2962
- // A layered layout (split_screen/pip/keyed_overlay) with regions ⇒ the scaffold
2963
- // builds one clip per region and stacks/overlays them into the scene picture.
2964
- composition: SceneCompositionSchema.optional(),
2965
- // The capture "look" for this scene — selected from the ad-native shoot-mode
2966
- // grammar (the CLI's scaffold/lib/shoot-modes.ts). When absent the scaffold
2967
- // auto-derives a UGC/product mode; a human can override per scene by setting this.
2968
- shoot_mode: z.string().optional(),
2969
- // Diegetic ambient the clip's native audio should carry (no music). When
2970
- // absent the scene falls back to its shoot mode's default ambience.
2971
- ambient: z.string().optional(),
2972
- camera_motion: CameraMotionSchema.optional(),
2973
- start_frame_prompt: z.string().optional(),
2974
- end_frame_prompt: z.string().optional(),
2975
- motion_prompt: z.string().optional(),
2976
- // The scene's role in the ad's persuasion arc (DECON-supplied); drives the
2977
- // script re-craft checklist. Inferred from position when absent.
2978
- narrative_role: z.string().optional(),
2979
- // See `SceneRouteHint`.
2980
- route_hint: z.enum(SCENE_ROUTE_HINTS).optional(),
2981
- // DECON-supplied on the HOOK scene: the engineered physical/emotional state that
2982
- // makes the first frame stop the scroll (sweaty/breathless/urgent …). Injected
2983
- // into the hook's start-frame description so the generator renders that state,
2984
- // not a calm influencer (CCA-11).
2985
- hook_mechanic: z.object({ mechanic: z.string().optional(), why_it_stops_scroll: z.string().optional() }).loose().optional(),
2986
- // DECON-supplied per-scene location (so a gym hook isn't flattened to "home").
2987
- scene_setting: z.string().optional(),
2988
- // How this scene cuts to the next (DECON-supplied). A recognized non-cut type
2989
- // (fade/whip/zoom/dissolve/swipe) is reproduced as an ffmpeg xfade at the
2990
- // boundary; cut/match_cut/none/other stay hard cuts. The last scene's value is
2991
- // ignored (nothing follows it).
2992
- transition_out: z.object({ type: z.string().optional(), description: z.string().optional() }).loose().optional(),
2993
- dialogue: z.array(BlueprintDialogueLineSchema).optional(),
2994
- sfx: z.array(SfxSchema).optional(),
2995
- // Parsed element by element where they are read (`BlueprintOverlaySchema`,
2996
- // `BlueprintFloatingElementSchema`), so one malformed graphic never rejects the scene.
2997
- overlays: z.array(z.unknown()).optional(),
2998
- floating_elements: z.array(z.unknown()).optional(),
2999
- // DECON-supplied: how much the picture itself moves within the shot. Gates the
3000
- // flash-hold optimization — a sub-2s b-roll flash with REAL subject motion
3001
- // (pouring, spreading, hands working) must stay a real clip; freezing it turns
3002
- // a montage into a slideshow. Absent (old blueprints) keeps the cheap still.
3003
- motion_level: z.enum(["static", "subtle", "dynamic"]).optional(),
3004
- transcript_slice: z.array(TranscriptWordSchema).optional(),
3005
- start_frame_asset: FrameAssetSchema,
3006
- end_frame_asset: FrameAssetSchema,
3007
- // DECON-supplied: true when this scene is a length-split CONTINUATION of the
3008
- // previous one (the SAME physical shot, broken up only because it exceeded the
3009
- // clip ceiling). The scaffold then shares the splice keyframe — this scene's
3010
- // start frame IS the previous scene's end frame — so the join is seamless.
3011
- continues_previous: z.boolean().optional()
3012
- }).loose();
3013
- var VideoBlueprintSchema = z.object({
3014
- source: z.object({ aspect_ratio: z.string().optional(), duration_s: z.number().optional() }).loose().optional(),
3015
- global: z.object({
3016
- music: z.object({
3017
- present: z.boolean().optional(),
3018
- music_prompt: z.string().optional(),
3019
- // Absolute second the music enters in the reference (the bed often
3020
- // kicks in mid-ad, after the hook). We start the regenerated track here
3021
- // instead of at 0 so the timing matches.
3022
- starts_at_s: z.number().optional(),
3023
- // Populated by the deconstruct when AudD (Shazam-style) recognizes the
3024
- // reference track. We never reuse it — only style the regenerated bed.
3025
- identified_track: z.object({ title: z.string().optional(), artist: z.string().optional() }).loose().nullish()
3026
- }).loose().optional(),
3027
- cast: z.array(
3028
- z.object({
3029
- id: z.string().optional(),
3030
- description: z.string().optional(),
3031
- // The deconstruct's note on the target-market localization (e.g. "native
3032
- // French speaker") — read to derive the spoken-track language code.
3033
- market_localization_note: z.string().optional()
3034
- }).loose()
3035
- ).optional(),
3036
- voiceover: z.object({
3037
- // on_camera | mixed → mouths are on screen (lip-sync candidates);
3038
- // voiceover | none → narration over the picture (no lip-sync).
3039
- mode: z.string().optional(),
3040
- // Which variety of the language the speech is in. Stated because the model
3041
- // picks one otherwise: ads set in Spain came back in Latin American Spanish,
3042
- // and the pinned peninsular voice could not undo it — the re-voicing is
3043
- // speech-to-speech, so it carries the accent across and swaps only the timbre.
3044
- accent: z.string().optional(),
3045
- voice_description: z.string().optional(),
3046
- persona: z.string().optional()
3047
- }).loose().optional(),
3048
- // Visual palette — read only to colour a clean brand-card/CTA plate (the
3049
- // first hex is the dominant brand colour); never to drive frame generation.
3050
- style: z.object({ palette: z.array(z.object({ hex: z.string().optional() }).loose()).optional() }).loose().optional(),
3051
- // Written by `scaffold-ad` (the deconstruct names its own fields, e.g. `branding.brand_name`):
3052
- // the whole script as one string, where the ad is set, and the brand it closes on.
3053
- transcript: z.string().optional(),
3054
- market: z.string().optional(),
3055
- branding: z.object({ name: z.string().optional(), logo_path: z.string().optional() }).loose().optional()
3056
- }).loose().optional(),
3057
- // Written by `scaffold-ad`: what the beats add up to, so a short ad is caught before it renders.
3058
- estimated_duration_s: z.number().optional(),
3059
- scenes: z.array(VideoSceneSchema).min(1)
3060
- }).loose();
3061
- var OverlayStyleSchema = z.object({ color_hex: z.string().optional(), background: z.string().optional(), size: z.string().optional() }).loose();
3062
- var BlueprintOverlaySchema = z.object({
3063
- text: z.string().optional(),
3064
- appears_at_s: z.number().optional(),
3065
- duration_s: z.number().optional(),
3066
- position: z.string().optional(),
3067
- role: z.string().optional(),
3068
- animation: z.string().optional(),
3069
- animation_detail: z.string().optional(),
3070
- style: OverlayStyleSchema.optional()
3071
- }).loose();
3072
- var BlueprintFloatingElementSchema = z.object({
3073
- kind: z.string().optional(),
3074
- description: z.string().optional(),
3075
- brand_name: z.string().nullish(),
3076
- what_it_represents: z.string().optional(),
3077
- appears_at_s: z.number().optional(),
3078
- duration_s: z.number().optional(),
3079
- position: z.string().optional()
3080
- }).loose();
3081
-
3082
- export {
3083
- AD_PLATFORMS,
3084
- AD_PLACEMENTS,
3085
- deliverySet,
3086
- verticalCover,
3087
- AD_FORMAT_PLATFORMS,
3088
- platformFormats,
3089
- resolveAdaptFormats,
3090
- canonicalize,
3091
- withoutCastName,
3092
- frameRealismDirection,
3093
- OPENROUTER_IMAGE_SIZES,
3094
- SEEDANCE_DURATIONS,
3095
- ELEVENLABS_OUTPUT_FORMATS,
3096
- ELEVENLABS_MAX_TEXT_CHARS,
3097
- ELEVENLABS_MAX_MUSIC_LENGTH_MS,
3098
- IMAGE_GENERATE_MODELS,
3099
- DEFAULT_IMAGE_GENERATE_MODEL,
3100
- IMAGE_TIER_CREDITS,
3101
- imagePictureCredits,
3102
- VIDEO_GENERATE_MODELS,
3103
- DEFAULT_VIDEO_GENERATE_MODEL,
3104
- supportsReferenceToVideo,
3105
- supportsLastFrame,
3106
- MODEL_REGISTRY,
3107
- modelIdsAccepted,
3108
- MODEL_ROLES,
3109
- AD_IMAGE_MODEL,
3110
- REFERENCE_SHEET_MODEL,
3111
- ASPECT_ADAPT_MODEL,
3112
- PLATE_JUDGE_MODEL,
3113
- AD_DESCRIBE_MODEL,
3114
- BLUEPRINT_ANALYSIS_MODEL,
3115
- VIEWER_CHECK_MODEL,
3116
- CUSTOMER_INSIGHTS_MODEL,
3117
- GLANCE_CHECK_MODEL,
3118
- TEXT_BOX_READER_MODEL,
3119
- VIDEO_DECONSTRUCT_MODEL,
3120
- VOICEOVER_MODEL,
3121
- SOUND_EFFECT_MODEL,
3122
- MUSIC_BED_MODEL,
3123
- VOICE_CONVERT_MODEL,
3124
- isRegisteredModel,
3125
- imageGenerateAspectRatios,
3126
- supportsParam,
3127
- DEFAULT_CLIP_DURATION_S,
3128
- SPOKEN_WORDS_PER_SECOND,
3129
- spokenWordsIn,
3130
- SPOKEN_CLIP_DURATION_S,
3131
- nearestClipDuration,
3132
- clipAudioMode,
3133
- clipDurationsFor,
3134
- maxClipSeconds,
3135
- splitScriptFor,
3136
- promptMaxLength,
3137
- maxInputSlot,
3138
- maxInputReferences,
3139
- bestSupportedQuality,
3140
- supportedAspectRatios,
3141
- nearestSupportedAspectRatio,
3142
- nearestSupportedImageSize,
3143
- estimateVideoCredits,
3144
- DEFAULT_MUSIC_SECONDS,
3145
- DEFAULT_SOUND_EFFECT_SECONDS,
3146
- estimateNodeCredits,
3147
- candidPersonPortraitPrompt,
3148
- isManagedNodeKind,
3149
- validateModelParams,
3150
- validateModelInputs,
3151
- VideoBlueprintSchema,
3152
- BlueprintOverlaySchema,
3153
- BlueprintFloatingElementSchema
3154
- };
3155
- //# sourceMappingURL=chunk-KY4MPR6R.js.map