@nodaro/sdk 2.29.0 → 2.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (716) hide show
  1. package/README.md +31 -0
  2. package/dist/chunk-2DZWWIJ4.cjs +32 -0
  3. package/dist/chunk-2DZWWIJ4.cjs.map +1 -0
  4. package/dist/chunk-34PU2DAT.cjs +118 -0
  5. package/dist/chunk-34PU2DAT.cjs.map +1 -0
  6. package/dist/chunk-37Y5QAVA.js +3 -0
  7. package/dist/chunk-37Y5QAVA.js.map +1 -0
  8. package/dist/chunk-37YCKZX4.cjs +4 -0
  9. package/dist/chunk-37YCKZX4.cjs.map +1 -0
  10. package/dist/chunk-3B47IHB3.cjs +65 -0
  11. package/dist/chunk-3B47IHB3.cjs.map +1 -0
  12. package/dist/chunk-3BELHJBN.cjs +4 -0
  13. package/dist/chunk-3BELHJBN.cjs.map +1 -0
  14. package/dist/chunk-3PPSGM5X.js +3 -0
  15. package/dist/chunk-3PPSGM5X.js.map +1 -0
  16. package/dist/chunk-3QBH2VE2.cjs +80 -0
  17. package/dist/chunk-3QBH2VE2.cjs.map +1 -0
  18. package/dist/chunk-3QFTP5P5.js +102 -0
  19. package/dist/chunk-3QFTP5P5.js.map +1 -0
  20. package/dist/chunk-43FVH6LJ.cjs +123 -0
  21. package/dist/chunk-43FVH6LJ.cjs.map +1 -0
  22. package/dist/chunk-43NO4SGC.cjs +4 -0
  23. package/dist/chunk-43NO4SGC.cjs.map +1 -0
  24. package/dist/chunk-45CK55BH.cjs +4 -0
  25. package/dist/chunk-45CK55BH.cjs.map +1 -0
  26. package/dist/chunk-4NLVBYMW.js +280 -0
  27. package/dist/chunk-4NLVBYMW.js.map +1 -0
  28. package/dist/chunk-4WRDR4GN.js +102 -0
  29. package/dist/chunk-4WRDR4GN.js.map +1 -0
  30. package/dist/chunk-4WWSHV5G.cjs +4 -0
  31. package/dist/chunk-4WWSHV5G.cjs.map +1 -0
  32. package/dist/chunk-53SXNN3A.js +80 -0
  33. package/dist/chunk-53SXNN3A.js.map +1 -0
  34. package/dist/chunk-5ALNFATQ.cjs +27 -0
  35. package/dist/chunk-5ALNFATQ.cjs.map +1 -0
  36. package/dist/chunk-5UQNMNUE.cjs +4 -0
  37. package/dist/chunk-5UQNMNUE.cjs.map +1 -0
  38. package/dist/chunk-5WAI7VGO.js +184 -0
  39. package/dist/chunk-5WAI7VGO.js.map +1 -0
  40. package/dist/chunk-65E3JBFZ.js +52 -0
  41. package/dist/chunk-65E3JBFZ.js.map +1 -0
  42. package/dist/chunk-6JFNBAKV.js +3 -0
  43. package/dist/chunk-6JFNBAKV.js.map +1 -0
  44. package/dist/chunk-6OC6OKLY.cjs +4 -0
  45. package/dist/chunk-6OC6OKLY.cjs.map +1 -0
  46. package/dist/chunk-6OGGJQVA.js +25 -0
  47. package/dist/chunk-6OGGJQVA.js.map +1 -0
  48. package/dist/chunk-7A7HYFGM.js +3 -0
  49. package/dist/chunk-7A7HYFGM.js.map +1 -0
  50. package/dist/chunk-7ISSKQ6S.cjs +106 -0
  51. package/dist/chunk-7ISSKQ6S.cjs.map +1 -0
  52. package/dist/chunk-7LSFG2AF.js +194 -0
  53. package/dist/chunk-7LSFG2AF.js.map +1 -0
  54. package/dist/chunk-7MYKT2L4.cjs +4 -0
  55. package/dist/chunk-7MYKT2L4.cjs.map +1 -0
  56. package/dist/chunk-7QOCWJKD.cjs +25 -0
  57. package/dist/chunk-7QOCWJKD.cjs.map +1 -0
  58. package/dist/chunk-A2ZAFAWC.cjs +4 -0
  59. package/dist/chunk-A2ZAFAWC.cjs.map +1 -0
  60. package/dist/chunk-A3S55XGF.cjs +54 -0
  61. package/dist/chunk-A3S55XGF.cjs.map +1 -0
  62. package/dist/chunk-A3THLBFG.js +3 -0
  63. package/dist/chunk-A3THLBFG.js.map +1 -0
  64. package/dist/chunk-AJVSMNPZ.js +78 -0
  65. package/dist/chunk-AJVSMNPZ.js.map +1 -0
  66. package/dist/chunk-ALSLZG3U.js +124 -0
  67. package/dist/chunk-ALSLZG3U.js.map +1 -0
  68. package/dist/chunk-ALUUBPDG.cjs +4 -0
  69. package/dist/chunk-ALUUBPDG.cjs.map +1 -0
  70. package/dist/chunk-AO3W45LT.cjs +4 -0
  71. package/dist/chunk-AO3W45LT.cjs.map +1 -0
  72. package/dist/chunk-AUDHV3OE.js +3 -0
  73. package/dist/chunk-AUDHV3OE.js.map +1 -0
  74. package/dist/chunk-BAL576G2.cjs +4 -0
  75. package/dist/chunk-BAL576G2.cjs.map +1 -0
  76. package/dist/chunk-BFMKPELU.cjs +212 -0
  77. package/dist/chunk-BFMKPELU.cjs.map +1 -0
  78. package/dist/chunk-BKP6F2IX.js +3 -0
  79. package/dist/chunk-BKP6F2IX.js.map +1 -0
  80. package/dist/chunk-BLA44UCM.js +32 -0
  81. package/dist/chunk-BLA44UCM.js.map +1 -0
  82. package/dist/chunk-BPWUWUZ3.cjs +20 -0
  83. package/dist/chunk-BPWUWUZ3.cjs.map +1 -0
  84. package/dist/chunk-BRV7Z4GD.cjs +17 -0
  85. package/dist/chunk-BRV7Z4GD.cjs.map +1 -0
  86. package/dist/chunk-BU5A6K4C.js +122 -0
  87. package/dist/chunk-BU5A6K4C.js.map +1 -0
  88. package/dist/chunk-C22RJDW3.js +3 -0
  89. package/dist/chunk-C22RJDW3.js.map +1 -0
  90. package/dist/chunk-CGNVHN4V.js +3 -0
  91. package/dist/chunk-CGNVHN4V.js.map +1 -0
  92. package/dist/chunk-CJFIOVBA.js +3 -0
  93. package/dist/chunk-CJFIOVBA.js.map +1 -0
  94. package/dist/chunk-CJLLIVSB.cjs +4 -0
  95. package/dist/chunk-CJLLIVSB.cjs.map +1 -0
  96. package/dist/chunk-CK3AMMSC.js +194 -0
  97. package/dist/chunk-CK3AMMSC.js.map +1 -0
  98. package/dist/chunk-COCKKMNP.cjs +205 -0
  99. package/dist/chunk-COCKKMNP.cjs.map +1 -0
  100. package/dist/chunk-CR5E2SF3.cjs +212 -0
  101. package/dist/chunk-CR5E2SF3.cjs.map +1 -0
  102. package/dist/chunk-CRCPRZFN.js +3 -0
  103. package/dist/chunk-CRCPRZFN.js.map +1 -0
  104. package/dist/chunk-CYRFD6KR.cjs +4 -0
  105. package/dist/chunk-CYRFD6KR.cjs.map +1 -0
  106. package/dist/chunk-D3PW7AHZ.js +3 -0
  107. package/dist/chunk-D3PW7AHZ.js.map +1 -0
  108. package/dist/chunk-DKEYSJCE.cjs +82 -0
  109. package/dist/chunk-DKEYSJCE.cjs.map +1 -0
  110. package/dist/chunk-DPSMVOM3.js +15 -0
  111. package/dist/chunk-DPSMVOM3.js.map +1 -0
  112. package/dist/chunk-E2ZXHS6E.js +20 -0
  113. package/dist/chunk-E2ZXHS6E.js.map +1 -0
  114. package/dist/chunk-E37CVHWW.js +33 -0
  115. package/dist/chunk-E37CVHWW.js.map +1 -0
  116. package/dist/chunk-E5BM4BLO.js +78 -0
  117. package/dist/chunk-E5BM4BLO.js.map +1 -0
  118. package/dist/chunk-EHRWTYGR.cjs +4 -0
  119. package/dist/chunk-EHRWTYGR.cjs.map +1 -0
  120. package/dist/chunk-EJSGJDZY.js +212 -0
  121. package/dist/chunk-EJSGJDZY.js.map +1 -0
  122. package/dist/chunk-ELSOVJPF.js +3 -0
  123. package/dist/chunk-ELSOVJPF.js.map +1 -0
  124. package/dist/chunk-ERLXU47J.js +29 -0
  125. package/dist/chunk-ERLXU47J.js.map +1 -0
  126. package/dist/chunk-ES2E65HT.js +3 -0
  127. package/dist/chunk-ES2E65HT.js.map +1 -0
  128. package/dist/chunk-EXLAHZKF.js +3 -0
  129. package/dist/chunk-EXLAHZKF.js.map +1 -0
  130. package/dist/chunk-FHEYAW5H.js +3 -0
  131. package/dist/chunk-FHEYAW5H.js.map +1 -0
  132. package/dist/chunk-GA4LZZKQ.cjs +104 -0
  133. package/dist/chunk-GA4LZZKQ.cjs.map +1 -0
  134. package/dist/chunk-GAZJ2PA3.js +3 -0
  135. package/dist/chunk-GAZJ2PA3.js.map +1 -0
  136. package/dist/chunk-GB6C5OEZ.cjs +32 -0
  137. package/dist/chunk-GB6C5OEZ.cjs.map +1 -0
  138. package/dist/chunk-GD24ZRFD.js +3 -0
  139. package/dist/chunk-GD24ZRFD.js.map +1 -0
  140. package/dist/chunk-GI7LROLL.cjs +4 -0
  141. package/dist/chunk-GI7LROLL.cjs.map +1 -0
  142. package/dist/chunk-GRFLPEM2.cjs +16 -0
  143. package/dist/chunk-GRFLPEM2.cjs.map +1 -0
  144. package/dist/chunk-GVIFLUYZ.cjs +40 -0
  145. package/dist/chunk-GVIFLUYZ.cjs.map +1 -0
  146. package/dist/chunk-H7VQTG4M.js +35 -0
  147. package/dist/chunk-H7VQTG4M.js.map +1 -0
  148. package/dist/chunk-HAKYPZLB.cjs +242 -0
  149. package/dist/chunk-HAKYPZLB.cjs.map +1 -0
  150. package/dist/chunk-HFBR6G36.js +3 -0
  151. package/dist/chunk-HFBR6G36.js.map +1 -0
  152. package/dist/chunk-HGCVWOGK.cjs +209 -0
  153. package/dist/chunk-HGCVWOGK.cjs.map +1 -0
  154. package/dist/chunk-HLHR3R4P.js +3 -0
  155. package/dist/chunk-HLHR3R4P.js.map +1 -0
  156. package/dist/chunk-HRXXGGSJ.js +3 -0
  157. package/dist/chunk-HRXXGGSJ.js.map +1 -0
  158. package/dist/chunk-I3TYBAOX.js +3 -0
  159. package/dist/chunk-I3TYBAOX.js.map +1 -0
  160. package/dist/chunk-I4A5VJRL.js +352 -0
  161. package/dist/chunk-I4A5VJRL.js.map +1 -0
  162. package/dist/chunk-I6CXC345.js +102 -0
  163. package/dist/chunk-I6CXC345.js.map +1 -0
  164. package/dist/chunk-IGOPUMEX.cjs +4 -0
  165. package/dist/chunk-IGOPUMEX.cjs.map +1 -0
  166. package/dist/chunk-IHKIYVZQ.js +30 -0
  167. package/dist/chunk-IHKIYVZQ.js.map +1 -0
  168. package/dist/chunk-IMC2M5YM.cjs +12 -0
  169. package/dist/chunk-IMC2M5YM.cjs.map +1 -0
  170. package/dist/chunk-IQ6KWSXP.js +3 -0
  171. package/dist/chunk-IQ6KWSXP.js.map +1 -0
  172. package/dist/chunk-IS26FJO7.cjs +4 -0
  173. package/dist/chunk-IS26FJO7.cjs.map +1 -0
  174. package/dist/chunk-J4WFSKY6.js +50 -0
  175. package/dist/chunk-J4WFSKY6.js.map +1 -0
  176. package/dist/chunk-J5LGGCAS.cjs +126 -0
  177. package/dist/chunk-J5LGGCAS.cjs.map +1 -0
  178. package/dist/chunk-JDEZHITT.js +43 -0
  179. package/dist/chunk-JDEZHITT.js.map +1 -0
  180. package/dist/chunk-JGS6YBDW.js +260 -0
  181. package/dist/chunk-JGS6YBDW.js.map +1 -0
  182. package/dist/chunk-JMOKD6ZP.js +46 -0
  183. package/dist/chunk-JMOKD6ZP.js.map +1 -0
  184. package/dist/chunk-JOX5BJ6K.cjs +4 -0
  185. package/dist/chunk-JOX5BJ6K.cjs.map +1 -0
  186. package/dist/chunk-JTAW54UM.js +116 -0
  187. package/dist/chunk-JTAW54UM.js.map +1 -0
  188. package/dist/chunk-K4RQOSJH.js +203 -0
  189. package/dist/chunk-K4RQOSJH.js.map +1 -0
  190. package/dist/chunk-KAIE6WJB.cjs +4 -0
  191. package/dist/chunk-KAIE6WJB.cjs.map +1 -0
  192. package/dist/chunk-KEDPGWIK.cjs +4 -0
  193. package/dist/chunk-KEDPGWIK.cjs.map +1 -0
  194. package/dist/chunk-KG4R454Z.js +18 -0
  195. package/dist/chunk-KG4R454Z.js.map +1 -0
  196. package/dist/chunk-KGKCAGRD.cjs +22 -0
  197. package/dist/chunk-KGKCAGRD.cjs.map +1 -0
  198. package/dist/chunk-KNMW722T.cjs +48 -0
  199. package/dist/chunk-KNMW722T.cjs.map +1 -0
  200. package/dist/chunk-KTTL7BND.cjs +4 -0
  201. package/dist/chunk-KTTL7BND.cjs.map +1 -0
  202. package/dist/chunk-KXEWTYS4.cjs +80 -0
  203. package/dist/chunk-KXEWTYS4.cjs.map +1 -0
  204. package/dist/chunk-KZQKFBRN.js +3 -0
  205. package/dist/chunk-KZQKFBRN.js.map +1 -0
  206. package/dist/chunk-LAWYFC4G.cjs +37 -0
  207. package/dist/chunk-LAWYFC4G.cjs.map +1 -0
  208. package/dist/chunk-LHP2CWHD.js +228 -0
  209. package/dist/chunk-LHP2CWHD.js.map +1 -0
  210. package/dist/chunk-LHRQXWI5.js +3 -0
  211. package/dist/chunk-LHRQXWI5.js.map +1 -0
  212. package/dist/chunk-LKH5M44B.cjs +114 -0
  213. package/dist/chunk-LKH5M44B.cjs.map +1 -0
  214. package/dist/chunk-LLNNHLCE.cjs +4 -0
  215. package/dist/chunk-LLNNHLCE.cjs.map +1 -0
  216. package/dist/chunk-LWZLWSXD.cjs +4 -0
  217. package/dist/chunk-LWZLWSXD.cjs.map +1 -0
  218. package/dist/chunk-M6Y5TOYE.js +3 -0
  219. package/dist/chunk-M6Y5TOYE.js.map +1 -0
  220. package/dist/chunk-MBFUMWI5.cjs +31 -0
  221. package/dist/chunk-MBFUMWI5.cjs.map +1 -0
  222. package/dist/chunk-MEKI37WI.js +3 -0
  223. package/dist/chunk-MEKI37WI.js.map +1 -0
  224. package/dist/chunk-MQ74AKA2.cjs +200 -0
  225. package/dist/chunk-MQ74AKA2.cjs.map +1 -0
  226. package/dist/chunk-N6GLZOE4.cjs +282 -0
  227. package/dist/chunk-N6GLZOE4.cjs.map +1 -0
  228. package/dist/chunk-NBVARNVA.cjs +38 -0
  229. package/dist/chunk-NBVARNVA.cjs.map +1 -0
  230. package/dist/chunk-NCCBS6GU.js +42 -0
  231. package/dist/chunk-NCCBS6GU.js.map +1 -0
  232. package/dist/chunk-NGKODS3J.cjs +52 -0
  233. package/dist/chunk-NGKODS3J.cjs.map +1 -0
  234. package/dist/chunk-NJVSKUL2.cjs +4 -0
  235. package/dist/chunk-NJVSKUL2.cjs.map +1 -0
  236. package/dist/chunk-NLQQHJ25.cjs +104 -0
  237. package/dist/chunk-NLQQHJ25.cjs.map +1 -0
  238. package/dist/chunk-NNHWH7ER.js +181 -0
  239. package/dist/chunk-NNHWH7ER.js.map +1 -0
  240. package/dist/chunk-NX67YIF3.js +3 -0
  241. package/dist/chunk-NX67YIF3.js.map +1 -0
  242. package/dist/chunk-OA6FWYZF.cjs +4 -0
  243. package/dist/chunk-OA6FWYZF.cjs.map +1 -0
  244. package/dist/chunk-OJDBSKC2.js +3 -0
  245. package/dist/chunk-OJDBSKC2.js.map +1 -0
  246. package/dist/chunk-OLPA44QJ.js +3 -0
  247. package/dist/chunk-OLPA44QJ.js.map +1 -0
  248. package/dist/chunk-OMH7ATOQ.js +3 -0
  249. package/dist/chunk-OMH7ATOQ.js.map +1 -0
  250. package/dist/chunk-OPR4TULG.js +3 -0
  251. package/dist/chunk-OPR4TULG.js.map +1 -0
  252. package/dist/chunk-OSX2GVZ2.cjs +34 -0
  253. package/dist/chunk-OSX2GVZ2.cjs.map +1 -0
  254. package/dist/chunk-OXQKE5EG.cjs +282 -0
  255. package/dist/chunk-OXQKE5EG.cjs.map +1 -0
  256. package/dist/chunk-P6E4QDJN.js +30 -0
  257. package/dist/chunk-P6E4QDJN.js.map +1 -0
  258. package/dist/chunk-PEMLIAPZ.cjs +64 -0
  259. package/dist/chunk-PEMLIAPZ.cjs.map +1 -0
  260. package/dist/chunk-PGYQ754I.js +3 -0
  261. package/dist/chunk-PGYQ754I.js.map +1 -0
  262. package/dist/chunk-PHKYIWE4.cjs +16 -0
  263. package/dist/chunk-PHKYIWE4.cjs.map +1 -0
  264. package/dist/chunk-PMTM26LL.js +3 -0
  265. package/dist/chunk-PMTM26LL.js.map +1 -0
  266. package/dist/chunk-PY4OEKNX.cjs +4 -0
  267. package/dist/chunk-PY4OEKNX.cjs.map +1 -0
  268. package/dist/chunk-PZS2EXDR.cjs +4 -0
  269. package/dist/chunk-PZS2EXDR.cjs.map +1 -0
  270. package/dist/chunk-QITJGSFA.js +210 -0
  271. package/dist/chunk-QITJGSFA.js.map +1 -0
  272. package/dist/chunk-QRHJEITQ.cjs +4 -0
  273. package/dist/chunk-QRHJEITQ.cjs.map +1 -0
  274. package/dist/chunk-QUFU5RJ7.cjs +4 -0
  275. package/dist/chunk-QUFU5RJ7.cjs.map +1 -0
  276. package/dist/chunk-QVQCKOBM.js +3 -0
  277. package/dist/chunk-QVQCKOBM.js.map +1 -0
  278. package/dist/chunk-R63TTR35.cjs +200 -0
  279. package/dist/chunk-R63TTR35.cjs.map +1 -0
  280. package/dist/chunk-RA42NMWV.cjs +4 -0
  281. package/dist/chunk-RA42NMWV.cjs.map +1 -0
  282. package/dist/chunk-RAZN6C5R.cjs +12 -0
  283. package/dist/chunk-RAZN6C5R.cjs.map +1 -0
  284. package/dist/chunk-REUFPWM7.cjs +233 -0
  285. package/dist/chunk-REUFPWM7.cjs.map +1 -0
  286. package/dist/chunk-RHETJOUM.cjs +4 -0
  287. package/dist/chunk-RHETJOUM.cjs.map +1 -0
  288. package/dist/chunk-RJIJVVXS.js +3 -0
  289. package/dist/chunk-RJIJVVXS.js.map +1 -0
  290. package/dist/chunk-RKVRCNMB.js +3 -0
  291. package/dist/chunk-RKVRCNMB.js.map +1 -0
  292. package/dist/chunk-SBV5MWEL.cjs +53 -0
  293. package/dist/chunk-SBV5MWEL.cjs.map +1 -0
  294. package/dist/chunk-SFB4YLCS.js +121 -0
  295. package/dist/chunk-SFB4YLCS.js.map +1 -0
  296. package/dist/chunk-SLPD47SR.js +3 -0
  297. package/dist/chunk-SLPD47SR.js.map +1 -0
  298. package/dist/chunk-SS3B6PHT.cjs +35 -0
  299. package/dist/chunk-SS3B6PHT.cjs.map +1 -0
  300. package/dist/chunk-SUCHGNYT.js +3 -0
  301. package/dist/chunk-SUCHGNYT.js.map +1 -0
  302. package/dist/chunk-SYVNY3AH.cjs +44 -0
  303. package/dist/chunk-SYVNY3AH.cjs.map +1 -0
  304. package/dist/chunk-T3SYREY4.js +29 -0
  305. package/dist/chunk-T3SYREY4.js.map +1 -0
  306. package/dist/chunk-T7N7DFQJ.js +198 -0
  307. package/dist/chunk-T7N7DFQJ.js.map +1 -0
  308. package/dist/chunk-TRCENAIY.cjs +4 -0
  309. package/dist/chunk-TRCENAIY.cjs.map +1 -0
  310. package/dist/chunk-TVENC6PH.js +186 -0
  311. package/dist/chunk-TVENC6PH.js.map +1 -0
  312. package/dist/chunk-U4T3Z3K7.cjs +325 -0
  313. package/dist/chunk-U4T3Z3K7.cjs.map +1 -0
  314. package/dist/chunk-UI2NXUML.cjs +187 -0
  315. package/dist/chunk-UI2NXUML.cjs.map +1 -0
  316. package/dist/chunk-UIFFNTUX.js +3 -0
  317. package/dist/chunk-UIFFNTUX.js.map +1 -0
  318. package/dist/chunk-V4GPQ6Y2.js +3 -0
  319. package/dist/chunk-V4GPQ6Y2.js.map +1 -0
  320. package/dist/chunk-VGTRKXF2.js +93 -0
  321. package/dist/chunk-VGTRKXF2.js.map +1 -0
  322. package/dist/chunk-VGWOIWRQ.cjs +202 -0
  323. package/dist/chunk-VGWOIWRQ.cjs.map +1 -0
  324. package/dist/chunk-VLCNNA76.cjs +4 -0
  325. package/dist/chunk-VLCNNA76.cjs.map +1 -0
  326. package/dist/chunk-VPAUN75Q.js +3 -0
  327. package/dist/chunk-VPAUN75Q.js.map +1 -0
  328. package/dist/chunk-VT237QF2.js +3 -0
  329. package/dist/chunk-VT237QF2.js.map +1 -0
  330. package/dist/chunk-VV4TZG5S.js +321 -0
  331. package/dist/chunk-VV4TZG5S.js.map +1 -0
  332. package/dist/chunk-VYK6MBL4.cjs +4 -0
  333. package/dist/chunk-VYK6MBL4.cjs.map +1 -0
  334. package/dist/chunk-W33CKW6Q.cjs +4 -0
  335. package/dist/chunk-W33CKW6Q.cjs.map +1 -0
  336. package/dist/chunk-W5VHATSR.cjs +31 -0
  337. package/dist/chunk-W5VHATSR.cjs.map +1 -0
  338. package/dist/chunk-W7YI5UT3.js +3 -0
  339. package/dist/chunk-W7YI5UT3.js.map +1 -0
  340. package/dist/chunk-WEQWU2IC.js +34 -0
  341. package/dist/chunk-WEQWU2IC.js.map +1 -0
  342. package/dist/chunk-WK4VXPPZ.cjs +104 -0
  343. package/dist/chunk-WK4VXPPZ.cjs.map +1 -0
  344. package/dist/chunk-WSA4LMWR.cjs +96 -0
  345. package/dist/chunk-WSA4LMWR.cjs.map +1 -0
  346. package/dist/chunk-WUIEZ6Z4.cjs +360 -0
  347. package/dist/chunk-WUIEZ6Z4.cjs.map +1 -0
  348. package/dist/chunk-WUKIJJG2.cjs +45 -0
  349. package/dist/chunk-WUKIJJG2.cjs.map +1 -0
  350. package/dist/chunk-WVFAQBS7.js +29 -0
  351. package/dist/chunk-WVFAQBS7.js.map +1 -0
  352. package/dist/chunk-X7RDNMN7.js +3 -0
  353. package/dist/chunk-X7RDNMN7.js.map +1 -0
  354. package/dist/chunk-X7XP5WBP.cjs +4 -0
  355. package/dist/chunk-X7XP5WBP.cjs.map +1 -0
  356. package/dist/chunk-XQAIEPAZ.js +104 -0
  357. package/dist/chunk-XQAIEPAZ.js.map +1 -0
  358. package/dist/chunk-XWKNE6DH.cjs +4 -0
  359. package/dist/chunk-XWKNE6DH.cjs.map +1 -0
  360. package/dist/chunk-Y6V6CBY5.js +23 -0
  361. package/dist/chunk-Y6V6CBY5.js.map +1 -0
  362. package/dist/chunk-Y6VDCZPB.js +62 -0
  363. package/dist/chunk-Y6VDCZPB.js.map +1 -0
  364. package/dist/chunk-YDRXBRW2.cjs +184 -0
  365. package/dist/chunk-YDRXBRW2.cjs.map +1 -0
  366. package/dist/chunk-YFS2LMG4.cjs +124 -0
  367. package/dist/chunk-YFS2LMG4.cjs.map +1 -0
  368. package/dist/chunk-YN6CBIIB.js +63 -0
  369. package/dist/chunk-YN6CBIIB.js.map +1 -0
  370. package/dist/chunk-YOJ2XNQX.cjs +4 -0
  371. package/dist/chunk-YOJ2XNQX.cjs.map +1 -0
  372. package/dist/chunk-YOOZB4RL.js +3 -0
  373. package/dist/chunk-YOOZB4RL.js.map +1 -0
  374. package/dist/chunk-YVU2M7MI.js +34 -0
  375. package/dist/chunk-YVU2M7MI.js.map +1 -0
  376. package/dist/chunk-YXBZRB5H.cjs +4 -0
  377. package/dist/chunk-YXBZRB5H.cjs.map +1 -0
  378. package/dist/chunk-Z3ZKFI2M.js +43 -0
  379. package/dist/chunk-Z3ZKFI2M.js.map +1 -0
  380. package/dist/chunk-Z5GLY4R3.js +112 -0
  381. package/dist/chunk-Z5GLY4R3.js.map +1 -0
  382. package/dist/chunk-Z5OMWAQX.js +3 -0
  383. package/dist/chunk-Z5OMWAQX.js.map +1 -0
  384. package/dist/chunk-Z7LGWNI7.js +38 -0
  385. package/dist/chunk-Z7LGWNI7.js.map +1 -0
  386. package/dist/chunk-ZCWKX4V6.cjs +38 -0
  387. package/dist/chunk-ZCWKX4V6.cjs.map +1 -0
  388. package/dist/chunk-ZE5RISBZ.cjs +4 -0
  389. package/dist/chunk-ZE5RISBZ.cjs.map +1 -0
  390. package/dist/chunk-ZH4F2P2G.js +3 -0
  391. package/dist/chunk-ZH4F2P2G.js.map +1 -0
  392. package/dist/chunk-ZJGFLJ2Z.cjs +4 -0
  393. package/dist/chunk-ZJGFLJ2Z.cjs.map +1 -0
  394. package/dist/chunk-ZKBHD27K.cjs +4 -0
  395. package/dist/chunk-ZKBHD27K.cjs.map +1 -0
  396. package/dist/chunk-ZQPLRNKX.cjs +4 -0
  397. package/dist/chunk-ZQPLRNKX.cjs.map +1 -0
  398. package/dist/chunk-ZQQABQMH.cjs +31 -0
  399. package/dist/chunk-ZQQABQMH.cjs.map +1 -0
  400. package/dist/chunk-ZXJQSFIA.js +200 -0
  401. package/dist/chunk-ZXJQSFIA.js.map +1 -0
  402. package/dist/developer-apps-zSQXWmEG.d.cts +294 -0
  403. package/dist/developer-apps-zSQXWmEG.d.ts +294 -0
  404. package/dist/entries/apps.cjs +13 -0
  405. package/dist/entries/apps.cjs.map +1 -0
  406. package/dist/entries/apps.d.cts +300 -0
  407. package/dist/entries/apps.d.ts +300 -0
  408. package/dist/entries/apps.js +4 -0
  409. package/dist/entries/apps.js.map +1 -0
  410. package/dist/entries/audio.cjs +13 -0
  411. package/dist/entries/audio.cjs.map +1 -0
  412. package/dist/entries/audio.d.cts +200 -0
  413. package/dist/entries/audio.d.ts +200 -0
  414. package/dist/entries/audio.js +4 -0
  415. package/dist/entries/audio.js.map +1 -0
  416. package/dist/entries/billing.cjs +13 -0
  417. package/dist/entries/billing.cjs.map +1 -0
  418. package/dist/entries/billing.d.cts +208 -0
  419. package/dist/entries/billing.d.ts +208 -0
  420. package/dist/entries/billing.js +4 -0
  421. package/dist/entries/billing.js.map +1 -0
  422. package/dist/entries/catalogs.cjs +13 -0
  423. package/dist/entries/catalogs.cjs.map +1 -0
  424. package/dist/entries/catalogs.d.cts +82 -0
  425. package/dist/entries/catalogs.d.ts +82 -0
  426. package/dist/entries/catalogs.js +4 -0
  427. package/dist/entries/catalogs.js.map +1 -0
  428. package/dist/entries/characters.cjs +45 -0
  429. package/dist/entries/characters.cjs.map +1 -0
  430. package/dist/entries/characters.d.cts +741 -0
  431. package/dist/entries/characters.d.ts +741 -0
  432. package/dist/entries/characters.js +4 -0
  433. package/dist/entries/characters.js.map +1 -0
  434. package/dist/entries/client.cjs +78 -0
  435. package/dist/entries/client.cjs.map +1 -0
  436. package/dist/entries/client.d.cts +147 -0
  437. package/dist/entries/client.d.ts +147 -0
  438. package/dist/entries/client.js +53 -0
  439. package/dist/entries/client.js.map +1 -0
  440. package/dist/entries/collections.cjs +13 -0
  441. package/dist/entries/collections.cjs.map +1 -0
  442. package/dist/entries/collections.d.cts +77 -0
  443. package/dist/entries/collections.d.ts +77 -0
  444. package/dist/entries/collections.js +4 -0
  445. package/dist/entries/collections.js.map +1 -0
  446. package/dist/entries/community.cjs +13 -0
  447. package/dist/entries/community.cjs.map +1 -0
  448. package/dist/entries/community.d.cts +87 -0
  449. package/dist/entries/community.d.ts +87 -0
  450. package/dist/entries/community.js +4 -0
  451. package/dist/entries/community.js.map +1 -0
  452. package/dist/entries/competitors.cjs +13 -0
  453. package/dist/entries/competitors.cjs.map +1 -0
  454. package/dist/entries/competitors.d.cts +96 -0
  455. package/dist/entries/competitors.d.ts +96 -0
  456. package/dist/entries/competitors.js +4 -0
  457. package/dist/entries/competitors.js.map +1 -0
  458. package/dist/entries/copilot.cjs +15 -0
  459. package/dist/entries/copilot.cjs.map +1 -0
  460. package/dist/entries/copilot.d.cts +296 -0
  461. package/dist/entries/copilot.d.ts +296 -0
  462. package/dist/entries/copilot.js +6 -0
  463. package/dist/entries/copilot.js.map +1 -0
  464. package/dist/entries/core.cjs +26 -0
  465. package/dist/entries/core.cjs.map +1 -0
  466. package/dist/entries/core.d.cts +3 -0
  467. package/dist/entries/core.d.ts +3 -0
  468. package/dist/entries/core.js +5 -0
  469. package/dist/entries/core.js.map +1 -0
  470. package/dist/entries/creatures.cjs +29 -0
  471. package/dist/entries/creatures.cjs.map +1 -0
  472. package/dist/entries/creatures.d.cts +594 -0
  473. package/dist/entries/creatures.d.ts +594 -0
  474. package/dist/entries/creatures.js +4 -0
  475. package/dist/entries/creatures.js.map +1 -0
  476. package/dist/entries/credits.cjs +13 -0
  477. package/dist/entries/credits.cjs.map +1 -0
  478. package/dist/entries/credits.d.cts +229 -0
  479. package/dist/entries/credits.d.ts +229 -0
  480. package/dist/entries/credits.js +4 -0
  481. package/dist/entries/credits.js.map +1 -0
  482. package/dist/entries/developer-apps.cjs +13 -0
  483. package/dist/entries/developer-apps.cjs.map +1 -0
  484. package/dist/entries/developer-apps.d.cts +3 -0
  485. package/dist/entries/developer-apps.d.ts +3 -0
  486. package/dist/entries/developer-apps.js +4 -0
  487. package/dist/entries/developer-apps.js.map +1 -0
  488. package/dist/entries/edit.cjs +34 -0
  489. package/dist/entries/edit.cjs.map +1 -0
  490. package/dist/entries/edit.d.cts +705 -0
  491. package/dist/entries/edit.d.ts +705 -0
  492. package/dist/entries/edit.js +5 -0
  493. package/dist/entries/edit.js.map +1 -0
  494. package/dist/entries/errors.cjs +93 -0
  495. package/dist/entries/errors.cjs.map +1 -0
  496. package/dist/entries/errors.d.cts +338 -0
  497. package/dist/entries/errors.d.ts +338 -0
  498. package/dist/entries/errors.js +4 -0
  499. package/dist/entries/errors.js.map +1 -0
  500. package/dist/entries/executions.cjs +21 -0
  501. package/dist/entries/executions.cjs.map +1 -0
  502. package/dist/entries/executions.d.cts +120 -0
  503. package/dist/entries/executions.d.ts +120 -0
  504. package/dist/entries/executions.js +4 -0
  505. package/dist/entries/executions.js.map +1 -0
  506. package/dist/entries/gallery.cjs +13 -0
  507. package/dist/entries/gallery.cjs.map +1 -0
  508. package/dist/entries/gallery.d.cts +85 -0
  509. package/dist/entries/gallery.d.ts +85 -0
  510. package/dist/entries/gallery.js +4 -0
  511. package/dist/entries/gallery.js.map +1 -0
  512. package/dist/entries/jobs.cjs +13 -0
  513. package/dist/entries/jobs.cjs.map +1 -0
  514. package/dist/entries/jobs.d.cts +252 -0
  515. package/dist/entries/jobs.d.ts +252 -0
  516. package/dist/entries/jobs.js +4 -0
  517. package/dist/entries/jobs.js.map +1 -0
  518. package/dist/entries/library.cjs +13 -0
  519. package/dist/entries/library.cjs.map +1 -0
  520. package/dist/entries/library.d.cts +109 -0
  521. package/dist/entries/library.d.ts +109 -0
  522. package/dist/entries/library.js +4 -0
  523. package/dist/entries/library.js.map +1 -0
  524. package/dist/entries/llm.cjs +13 -0
  525. package/dist/entries/llm.cjs.map +1 -0
  526. package/dist/entries/llm.d.cts +98 -0
  527. package/dist/entries/llm.d.ts +98 -0
  528. package/dist/entries/llm.js +4 -0
  529. package/dist/entries/llm.js.map +1 -0
  530. package/dist/entries/locations.cjs +25 -0
  531. package/dist/entries/locations.cjs.map +1 -0
  532. package/dist/entries/locations.d.cts +573 -0
  533. package/dist/entries/locations.d.ts +573 -0
  534. package/dist/entries/locations.js +4 -0
  535. package/dist/entries/locations.js.map +1 -0
  536. package/dist/entries/media.cjs +15 -0
  537. package/dist/entries/media.cjs.map +1 -0
  538. package/dist/entries/media.d.cts +548 -0
  539. package/dist/entries/media.d.ts +548 -0
  540. package/dist/entries/media.js +6 -0
  541. package/dist/entries/media.js.map +1 -0
  542. package/dist/entries/models.cjs +13 -0
  543. package/dist/entries/models.cjs.map +1 -0
  544. package/dist/entries/models.d.cts +92 -0
  545. package/dist/entries/models.d.ts +92 -0
  546. package/dist/entries/models.js +4 -0
  547. package/dist/entries/models.js.map +1 -0
  548. package/dist/entries/moodboards.cjs +21 -0
  549. package/dist/entries/moodboards.cjs.map +1 -0
  550. package/dist/entries/moodboards.d.cts +77 -0
  551. package/dist/entries/moodboards.d.ts +77 -0
  552. package/dist/entries/moodboards.js +4 -0
  553. package/dist/entries/moodboards.js.map +1 -0
  554. package/dist/entries/node-presets.cjs +13 -0
  555. package/dist/entries/node-presets.cjs.map +1 -0
  556. package/dist/entries/node-presets.d.cts +217 -0
  557. package/dist/entries/node-presets.d.ts +217 -0
  558. package/dist/entries/node-presets.js +4 -0
  559. package/dist/entries/node-presets.js.map +1 -0
  560. package/dist/entries/nodes.cjs +22 -0
  561. package/dist/entries/nodes.cjs.map +1 -0
  562. package/dist/entries/nodes.d.cts +18 -0
  563. package/dist/entries/nodes.d.ts +18 -0
  564. package/dist/entries/nodes.js +5 -0
  565. package/dist/entries/nodes.js.map +1 -0
  566. package/dist/entries/oauth.cjs +13 -0
  567. package/dist/entries/oauth.cjs.map +1 -0
  568. package/dist/entries/oauth.d.cts +69 -0
  569. package/dist/entries/oauth.d.ts +69 -0
  570. package/dist/entries/oauth.js +4 -0
  571. package/dist/entries/oauth.js.map +1 -0
  572. package/dist/entries/objects.cjs +29 -0
  573. package/dist/entries/objects.cjs.map +1 -0
  574. package/dist/entries/objects.d.cts +544 -0
  575. package/dist/entries/objects.d.ts +544 -0
  576. package/dist/entries/objects.js +4 -0
  577. package/dist/entries/objects.js.map +1 -0
  578. package/dist/entries/organizations.cjs +21 -0
  579. package/dist/entries/organizations.cjs.map +1 -0
  580. package/dist/entries/organizations.d.cts +164 -0
  581. package/dist/entries/organizations.d.ts +164 -0
  582. package/dist/entries/organizations.js +4 -0
  583. package/dist/entries/organizations.js.map +1 -0
  584. package/dist/entries/palettes.cjs +21 -0
  585. package/dist/entries/palettes.cjs.map +1 -0
  586. package/dist/entries/palettes.d.cts +69 -0
  587. package/dist/entries/palettes.d.ts +69 -0
  588. package/dist/entries/palettes.js +4 -0
  589. package/dist/entries/palettes.js.map +1 -0
  590. package/dist/entries/picker-catalogs.cjs +13 -0
  591. package/dist/entries/picker-catalogs.cjs.map +1 -0
  592. package/dist/entries/picker-catalogs.d.cts +148 -0
  593. package/dist/entries/picker-catalogs.d.ts +148 -0
  594. package/dist/entries/picker-catalogs.js +4 -0
  595. package/dist/entries/picker-catalogs.js.map +1 -0
  596. package/dist/entries/pipelines.cjs +13 -0
  597. package/dist/entries/pipelines.cjs.map +1 -0
  598. package/dist/entries/pipelines.d.cts +255 -0
  599. package/dist/entries/pipelines.d.ts +255 -0
  600. package/dist/entries/pipelines.js +4 -0
  601. package/dist/entries/pipelines.js.map +1 -0
  602. package/dist/entries/projects.cjs +13 -0
  603. package/dist/entries/projects.cjs.map +1 -0
  604. package/dist/entries/projects.d.cts +49 -0
  605. package/dist/entries/projects.d.ts +49 -0
  606. package/dist/entries/projects.js +4 -0
  607. package/dist/entries/projects.js.map +1 -0
  608. package/dist/entries/prompt-helper.cjs +13 -0
  609. package/dist/entries/prompt-helper.cjs.map +1 -0
  610. package/dist/entries/prompt-helper.d.cts +73 -0
  611. package/dist/entries/prompt-helper.d.ts +73 -0
  612. package/dist/entries/prompt-helper.js +4 -0
  613. package/dist/entries/prompt-helper.js.map +1 -0
  614. package/dist/entries/recast.cjs +17 -0
  615. package/dist/entries/recast.cjs.map +1 -0
  616. package/dist/entries/recast.d.cts +229 -0
  617. package/dist/entries/recast.d.ts +229 -0
  618. package/dist/entries/recast.js +4 -0
  619. package/dist/entries/recast.js.map +1 -0
  620. package/dist/entries/reduce.cjs +13 -0
  621. package/dist/entries/reduce.cjs.map +1 -0
  622. package/dist/entries/reduce.d.cts +56 -0
  623. package/dist/entries/reduce.d.ts +56 -0
  624. package/dist/entries/reduce.js +4 -0
  625. package/dist/entries/reduce.js.map +1 -0
  626. package/dist/entries/saved-posts.cjs +13 -0
  627. package/dist/entries/saved-posts.cjs.map +1 -0
  628. package/dist/entries/saved-posts.d.cts +33 -0
  629. package/dist/entries/saved-posts.d.ts +33 -0
  630. package/dist/entries/saved-posts.js +4 -0
  631. package/dist/entries/saved-posts.js.map +1 -0
  632. package/dist/entries/scene3d.cjs +17 -0
  633. package/dist/entries/scene3d.cjs.map +1 -0
  634. package/dist/entries/scene3d.d.cts +131 -0
  635. package/dist/entries/scene3d.d.ts +131 -0
  636. package/dist/entries/scene3d.js +4 -0
  637. package/dist/entries/scene3d.js.map +1 -0
  638. package/dist/entries/sessions.cjs +13 -0
  639. package/dist/entries/sessions.cjs.map +1 -0
  640. package/dist/entries/sessions.d.cts +122 -0
  641. package/dist/entries/sessions.d.ts +122 -0
  642. package/dist/entries/sessions.js +4 -0
  643. package/dist/entries/sessions.js.map +1 -0
  644. package/dist/entries/shots.cjs +13 -0
  645. package/dist/entries/shots.cjs.map +1 -0
  646. package/dist/entries/shots.d.cts +78 -0
  647. package/dist/entries/shots.d.ts +78 -0
  648. package/dist/entries/shots.js +4 -0
  649. package/dist/entries/shots.js.map +1 -0
  650. package/dist/entries/studio.cjs +22 -0
  651. package/dist/entries/studio.cjs.map +1 -0
  652. package/dist/entries/studio.d.cts +281 -0
  653. package/dist/entries/studio.d.ts +281 -0
  654. package/dist/entries/studio.js +5 -0
  655. package/dist/entries/studio.js.map +1 -0
  656. package/dist/entries/templates.cjs +13 -0
  657. package/dist/entries/templates.cjs.map +1 -0
  658. package/dist/entries/templates.d.cts +110 -0
  659. package/dist/entries/templates.d.ts +110 -0
  660. package/dist/entries/templates.js +4 -0
  661. package/dist/entries/templates.js.map +1 -0
  662. package/dist/entries/tutorials.cjs +13 -0
  663. package/dist/entries/tutorials.cjs.map +1 -0
  664. package/dist/entries/tutorials.d.cts +63 -0
  665. package/dist/entries/tutorials.d.ts +63 -0
  666. package/dist/entries/tutorials.js +4 -0
  667. package/dist/entries/tutorials.js.map +1 -0
  668. package/dist/entries/uploads.cjs +13 -0
  669. package/dist/entries/uploads.cjs.map +1 -0
  670. package/dist/entries/uploads.d.cts +44 -0
  671. package/dist/entries/uploads.d.ts +44 -0
  672. package/dist/entries/uploads.js +4 -0
  673. package/dist/entries/uploads.js.map +1 -0
  674. package/dist/entries/video-pro.cjs +13 -0
  675. package/dist/entries/video-pro.cjs.map +1 -0
  676. package/dist/entries/video-pro.d.cts +60 -0
  677. package/dist/entries/video-pro.d.ts +60 -0
  678. package/dist/entries/video-pro.js +4 -0
  679. package/dist/entries/video-pro.js.map +1 -0
  680. package/dist/entries/voices.cjs +13 -0
  681. package/dist/entries/voices.cjs.map +1 -0
  682. package/dist/entries/voices.d.cts +498 -0
  683. package/dist/entries/voices.d.ts +498 -0
  684. package/dist/entries/voices.js +4 -0
  685. package/dist/entries/voices.js.map +1 -0
  686. package/dist/entries/webhooks.cjs +21 -0
  687. package/dist/entries/webhooks.cjs.map +1 -0
  688. package/dist/entries/webhooks.d.cts +64 -0
  689. package/dist/entries/webhooks.d.ts +64 -0
  690. package/dist/entries/webhooks.js +4 -0
  691. package/dist/entries/webhooks.js.map +1 -0
  692. package/dist/entries/workflows.cjs +13 -0
  693. package/dist/entries/workflows.cjs.map +1 -0
  694. package/dist/entries/workflows.d.cts +393 -0
  695. package/dist/entries/workflows.d.ts +393 -0
  696. package/dist/entries/workflows.js +4 -0
  697. package/dist/entries/workflows.js.map +1 -0
  698. package/dist/entries/workspaces.cjs +13 -0
  699. package/dist/entries/workspaces.cjs.map +1 -0
  700. package/dist/entries/workspaces.d.cts +124 -0
  701. package/dist/entries/workspaces.d.ts +124 -0
  702. package/dist/entries/workspaces.js +4 -0
  703. package/dist/entries/workspaces.js.map +1 -0
  704. package/dist/index.cjs +501 -5192
  705. package/dist/index.cjs.map +1 -1
  706. package/dist/index.d.cts +66 -10894
  707. package/dist/index.d.ts +66 -10894
  708. package/dist/index.js +100 -5074
  709. package/dist/index.js.map +1 -1
  710. package/dist/nodes-BPvrAoUs.d.cts +1264 -0
  711. package/dist/nodes-C2zu3uqn.d.ts +1264 -0
  712. package/dist/studio-productions-DUHvdSvk.d.cts +572 -0
  713. package/dist/studio-productions-vbCNSbtf.d.ts +572 -0
  714. package/dist/webhooks-BJawEIz8.d.ts +198 -0
  715. package/dist/webhooks-Dn_DtNTD.d.cts +198 -0
  716. package/package.json +253 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resources/voices.ts"],"names":[],"mappings":"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","file":"chunk-R63TTR35.cjs","sourcesContent":["import type { Voice, VoiceClone, VoiceLibraryParams, VoiceLibraryResponse } from \"@nodaro/shared/pipeline\"\nimport type { AudioFxPreset } from \"@nodaro/shared/media\"\nimport type { DialogueProvider } from \"@nodaro/shared/models\"\nexport type { Voice, SharedVoice, VoiceClone, VoiceLibraryParams, VoiceLibraryResponse } from \"@nodaro/shared/pipeline\"\nexport type { AudioFxPreset } from \"@nodaro/shared/media\"\nimport type { NodaroClientCore } from \"../core.js\"\n\n/**\n * Re-export the shared voice types so SDK consumers don't have to add\n * `@nodaro/shared` as a second dependency just to type a `Voice` row, a\n * `VoiceClone`, or a `searchLibrary` call. Single source of truth lives in\n * `@nodaro/shared`.\n */\n/** Audio-FX preset union (reverb spaces / telephone / megaphone / echo / custom) — used by {@link VoiceChangerProInput.voiceFx}. */\n\n/**\n * Read access to ElevenLabs voices: the premade catalog plus the shared\n * community Voice Library (both public GETs, no body), and the signed-in\n * user's own pre-retirement voice clones (list / delete).\n */\nexport class VoicesResource {\n constructor(private client: NodaroClientCore) {}\n\n /**\n * List the premade ElevenLabs voices (`GET /v1/voices`). Falls back to a\n * curated set server-side when no ElevenLabs API key is configured.\n */\n async list(): Promise<Voice[]> {\n const res = await this.client.request<{ voices: Voice[] }>(\"GET\", \"/v1/voices\")\n return res.voices\n }\n\n /**\n * Search the shared/community Voice Library (`GET /v1/voices/library`). All\n * params are optional and forwarded as a querystring; `undefined` / `null` /\n * empty-string values are omitted so the server defaults apply. `hasMore`\n * drives \"load more\" pagination.\n */\n searchLibrary(params: VoiceLibraryParams = {}): Promise<VoiceLibraryResponse> {\n const query: Record<string, string | number | boolean | undefined> = {}\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && v !== null && v !== \"\") query[k] = v as string | number | boolean\n }\n return this.client.request(\"GET\", \"/v1/voices/library\", { query })\n }\n\n /**\n * List the signed-in user's voice clones (`GET /v1/voice-clones`). The route\n * wraps the rows in `{ voiceClones }`; we unwrap to the bare array.\n */\n async listClones(): Promise<VoiceClone[]> {\n const res = await this.client.request<{ voiceClones: VoiceClone[] }>(\"GET\", \"/v1/voice-clones\")\n return res.voiceClones\n }\n\n /**\n * @deprecated Voice cloning is no longer offered on Nodaro (retired\n * 2026-09-15). The route answers `410 voice_cloning_retired` and this call\n * rejects with that error. Clones created before the retirement are still\n * listed by {@link VoicesResource.listClones} and still work as voice ids.\n * For a new custom voice use {@link VoicesResource.design}.\n */\n createClone(input: { name: string; audioUrl: string }): Promise<VoiceClone> {\n return this.client.request<VoiceClone>(\"POST\", \"/v1/voice-clones/from-url\", { body: input })\n }\n\n /** Delete one of the user's voice clones (`DELETE /v1/voice-clones/:id`). */\n async deleteClone(id: string): Promise<void> {\n await this.client.request<void>(\"DELETE\", `/v1/voice-clones/${encodeURIComponent(id)}`)\n }\n\n /**\n * Replace the voice in a recording — or in a whole talking video — with a\n * different voice (`POST /v1/voice-changer`). Pass `audioUrl` to revoice\n * audio→audio, or `videoUrl` to revoice an entire clip (the server demuxes\n * the audio, runs speech-to-speech, and remuxes onto the original video,\n * returning the video plus the new audio track). Exactly one of `audioUrl` /\n * `videoUrl` is required; when both are sent, video wins. `removeBackgroundNoise`\n * off keeps the music/SFX bed under the new voice; on yields a clean voice-only\n * result. Costs credits and runs async — poll `jobs.get(jobId)` for the result\n * (`output_data.videoUrl` + `output_data.audioUrl` in video mode).\n */\n change(input: {\n voiceId: string\n audioUrl?: string\n videoUrl?: string\n /** Speech-to-speech model id. Defaults to the server-configured default when omitted. */\n model?: string\n stability?: number\n similarityBoost?: number\n /** Style exaggeration (0–1). Default 0; >0 amplifies delivery at the cost of latency/stability. */\n style?: number\n /** ElevenLabs speaker boost — sharpens fidelity to the target speaker (small latency cost). */\n useSpeakerBoost?: boolean\n /** Deterministic speech-to-speech seed (integer 0–4294967295) for reproducible output. Omit for random. */\n seed?: number\n removeBackgroundNoise?: boolean\n }): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/voice-changer\", { body: input })\n }\n\n /**\n * Recast each detected speaker in a multi-speaker recording to a different\n * voice (`POST /v1/voice-changer-pro`). `orderedVoices` maps speaker positions to\n * voices in detection order — speaker 0 → `orderedVoices[0]`, speaker 1 →\n * `orderedVoices[1]`, etc. Speakers beyond the end of `orderedVoices` keep\n * their original voice. Each entry is EITHER a bare voice id (premade name or\n * ElevenLabs UUID) OR a {@link VoiceChangerProVoice} object carrying per-voice\n * ElevenLabs speech-to-speech settings (stability / similarityBoost / style /\n * useSpeakerBoost / `seed`) plus a loudness `volumeMode` (and a manual\n * `volume`) — OR `null`, meaning keep this speaker's original voice (requires\n * a platform running cloud-plugins with keep-slot support). At least one\n * entry must be non-null. A per-voice `seed` makes that speaker's recast\n * reproducible.\n *\n * Pass `audioUrl` for audio-only recast or `videoUrl` to recast the audio\n * track of a video clip (the server demuxes, recasts, and remuxes).\n *\n * Voice and music are ALWAYS separated first — before recasting, the source\n * is split into an isolated vocal stem and a music/SFX stem.\n * `preserveBackground` (default `true`) only controls whether that\n * music/instrumental stem is mixed back under the new voices; set it `false`\n * for a clean voice-only result. `separationQuality` selects the quality of\n * the voice/music separation: `\"fast\"` (default, quicker — preserves more of\n * the voice) or `\"best\"` (finer voice/music separation).\n * `removeBackgroundNoise` additionally denoises the result.\n * `musicVolumeMode` sets the level of that preserved background (only relevant\n * when `preserveBackground` is on): `\"match\"` (default) keeps the original\n * level, `\"normalize\"` loudnorms it, `\"manual\"` uses `musicVolume`%.\n * `voiceFx` applies a reverb/echo to the COMBINED recast voices BEFORE the\n * background is mixed back in (effect sits on the voices, not the music bed).\n *\n * Cloud-only — costs credits and runs async; poll `jobs.get(jobId)` for the\n * result (`output_data.videoUrl` + `output_data.audioUrl` in video mode).\n */\n recast(input: VoiceChangerProInput): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/voice-changer-pro\", { body: input })\n }\n\n /**\n * Detect the speakers in a clip WITHOUT recasting yet\n * (`POST /v1/voice-changer-pro/analyze`) — the first step of the interactive\n * flow. Separates voice from music once and diarizes the vocals, returning the\n * speaker list so a user (or agent) can choose a voice per speaker before\n * committing to a paid recast. Poll `jobs.get(jobId)`: the completed job's\n * `output_data` carries the separated stem urls + the detected `speakers`\n * (each with `id`, time `segments`, `firstStartSec`, `wordCount`, `snippet`)\n * and the detected language — reshape it into a {@link VcpAnalysis} and pass it\n * as `recast({ ..., analysis })` to skip re-detection. With `suggestTitle`,\n * `output_data.suggestedTitle` also carries an LLM-proposed title.\n *\n * Cloud-only; costs credits and runs async.\n */\n analyze(input: VcpAnalyzeInput): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/voice-changer-pro/analyze\", { body: input })\n }\n\n /**\n * Render a final video from a mixed set of stems\n * (`POST /v1/voice-changer-pro/export`) — the last step of the interactive\n * flow. After `recast({ output: \"stems\" })` hands back the dry per-track stems\n * and the user has set levels / mutes / an effect in your editor, pass those\n * `tracks` (plus the source `videoUrl`) here to mix and remux into the finished\n * video. The video is stream-copied (never re-encoded), so the export is\n * bit-identical to your preview. At least one track must be un-muted (all-muted\n * is a 400); `voiceFx` is applied to the voice tracks at render time.\n *\n * Cloud-only; costs credits and runs async — poll `jobs.get(jobId)` for the\n * result (`output_data.videoUrl`).\n */\n exportMix(input: VcpExportInput): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/voice-changer-pro/export\", { body: input })\n }\n\n /**\n * Design a brand-new synthetic voice from a text description\n * (`POST /v1/voice-design`) — ElevenLabs text-to-voice. `text` (100–1000 chars)\n * is a preview line spoken in the designed voice; `voiceDescription` describes\n * the voice to create. Costs credits and runs async — poll `jobs.get(jobId)`\n * for the preview + the reusable voice id.\n */\n design(input: VoiceDesignInput): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/voice-design\", { body: input })\n }\n\n /**\n * Generate speech in a voice described in natural language, without cloning\n * (`POST /v1/voice-remix`). `text` (1–5000 chars) is spoken in a voice matching\n * `voiceDescription`. Costs credits and runs async — poll `jobs.get(jobId)`.\n */\n remix(input: VoiceRemixInput): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/voice-remix\", { body: input })\n }\n\n /**\n * Dub an audio clip into another language while preserving each speaker's voice\n * (`POST /v1/dubbing`). `targetLanguage` is an ISO code (e.g. `\"es\"`, `\"fr\"`);\n * `sourceLanguage` is auto-detected when omitted. Costs credits and runs async\n * — poll `jobs.get(jobId)`.\n */\n dub(input: DubbingInput): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/dubbing\", { body: input })\n }\n\n /**\n * Voice a multi-speaker script as ONE audio file\n * (`POST /v1/text-to-dialogue`) on ElevenLabs Dialogue v3 — the default — or\n * Dialogue v4 (`provider: \"elevenlabs-dialogue-v4\"`). Each `dialogue` line is\n * `{ text, voice }` in speaking order — `voice` is a premade voice name or an\n * ElevenLabs voice UUID (cloned/library voices work too; mixed casts are\n * fine). At most 5,000 characters total across lines on Dialogue v3 and\n * 10,000 on Dialogue v4 (≤2,000 recommended for best quality) and 10 unique\n * voices. Line text may\n * carry `[audio tags]` like `[laughs]`. Costs credits and runs async — poll\n * `jobs.get(jobId)` for `output_data.audioUrl` and — on every dialogue model,\n * since both return timings at no extra credits — `output_data.transcript`, a\n * `Transcript` (`@nodaro/shared`): `words[]` with `startMs` / `endMs` /\n * `speaker` and one `segments[]` entry per line, `speaker` being the line's\n * `voice` as you sent it. Pass `transcript.words` to\n * `addCaptions({ captions, autoTranscribe: false })` to caption the dialogue\n * without a second transcription.\n */\n textToDialogue(input: {\n dialogue: Array<{ text: string; voice: string }>\n /** Dialogue model: `\"elevenlabs-dialogue\"` (v3, the default) or `\"elevenlabs-dialogue-v4\"`. */\n provider?: DialogueProvider\n /** v3: exactly 0, 0.5 or 1 (0 = most variable, 1 = most stable). v4: any value 0–1. */\n stability?: number\n /** v4 only (v3 ignores it): how closely each line keeps its voice's character, 0–1. */\n similarityBoost?: number\n /** ISO 639-1 language hint (e.g. \"en\"); auto-detected when omitted. */\n languageCode?: string\n /** Deterministic sampling seed (integer 0–4294967295). Omit for random. */\n seed?: number\n /** Spell out numbers/dates/abbreviations: \"auto\" (default) | \"on\" | \"off\". */\n applyTextNormalization?: \"auto\" | \"on\" | \"off\"\n }): Promise<{ jobId: string }> {\n return this.client.request<{ jobId: string }>(\"POST\", \"/v1/text-to-dialogue\", { body: input })\n }\n\n /**\n * @deprecated Voice cloning is no longer offered on Nodaro (retired\n * 2026-09-15). The route answers `410 voice_cloning_retired` and this call\n * rejects with that error. See {@link VoicesResource.createClone}.\n */\n createCloneFromFile(input: {\n name: string\n file: Blob | Uint8Array | ArrayBuffer\n /** File name for the upload part (default `sample`). */\n filename?: string\n /** MIME type when `file` is a raw buffer (default `audio/mpeg`). */\n contentType?: string\n }): Promise<VoiceClone> {\n const form = new FormData()\n // Append the name field BEFORE the file so the route sees it in `fields`\n // (fastify-multipart's `req.file()` exposes fields parsed up to the file).\n form.append(\"name\", input.name)\n const blob =\n input.file instanceof Blob\n ? input.file\n : new Blob([input.file as BlobPart], { type: input.contentType ?? \"audio/mpeg\" })\n form.append(\"file\", blob, input.filename ?? \"sample\")\n return this.client.request<VoiceClone>(\"POST\", \"/v1/voice-clones\", { body: form })\n }\n}\n\n/**\n * One entry in {@link VoiceChangerProInput.orderedVoices}. Either a bare voice id\n * (premade name like `\"Rachel\"` or an ElevenLabs UUID for a custom clone), or\n * an object pinning per-voice speech-to-speech settings and the recast's\n * loudness behaviour for that speaker.\n */\nexport type VoiceChangerProVoice =\n | string\n | {\n /** Target voice — premade name (`\"Rachel\"`, `\"Aria\"`, …) or an ElevenLabs UUID for a custom clone. */\n voiceId: string\n /**\n * Which lane converts this speaker. `\"sts\"` (default) is the classic\n * speech-to-speech recast; `\"v3\"` and `\"v4\"` are RE-SPEAK — the\n * performance is REGENERATED from the transcript (supports `[audio\n * tags]`; original delivery is replaced, and lips won't match on video).\n * A Re-speak speaker needs transcript text: pass an `analysis` whose\n * `segments[].text` carries it (analyze now emits this), or omit\n * `analysis` and the engine re-speaks from its own transcription. For\n * `\"v3\"` (eleven_v3), `stability` accepts exactly 0 / 0.5 / 1, and\n * `similarityBoost` / `style` / `useSpeakerBoost` are ignored. For\n * `\"v4\"` (eleven_v4), `stability` takes any value 0–1 and\n * `similarityBoost` is honoured (`style` / `useSpeakerBoost` ignored);\n * each line is generated with its neighbouring lines as context for\n * smoother joins. Both Re-speak engines are priced the same, per started\n * 1,000 characters.\n */\n engine?: \"sts\" | \"v3\" | \"v4\"\n /** ElevenLabs stability (0–1). Higher = steadier, lower = more expressive. */\n stability?: number\n /** ElevenLabs similarity boost (0–1) — how closely the output hugs the target voice's timbre. */\n similarityBoost?: number\n /** Style exaggeration (0–1). Default 0; >0 amplifies delivery at the cost of latency / stability. */\n style?: number\n /** ElevenLabs speaker boost — sharpens fidelity to the target speaker. */\n useSpeakerBoost?: boolean\n /**\n * Deterministic speech-to-speech seed (integer 0–4294967295) for\n * reproducible per-voice output — the same source + settings + seed\n * recast this speaker identically across runs. Omit for a random seed.\n */\n seed?: number\n /**\n * Loudness handling for this recast voice. `\"match\"` (default) matches the\n * original speaker's loudness; `\"normalize\"` applies loudness\n * normalization; `\"manual\"` uses `volume` as a percentage.\n */\n volumeMode?: \"match\" | \"normalize\" | \"manual\"\n /** Manual output volume as a percentage (0–200). Consulted only when `volumeMode === \"manual\"`. */\n volume?: number\n }\n\n/** Input for {@link VoicesResource.recast}. */\nexport interface VoiceChangerProInput {\n /** URL of an audio file to recast (audio → audio). Exactly one of `audioUrl` / `videoUrl` is required. */\n audioUrl?: string\n /** URL of a video file to recast (the audio track is recast and remuxed). Exactly one of `audioUrl` / `videoUrl` is required. */\n videoUrl?: string\n /**\n * Voices in speaker-detection order. Speaker N is mapped to `orderedVoices[N]`;\n * speakers beyond the array keep their original voice. Each entry is a bare\n * voice id OR a {@link VoiceChangerProVoice} object with per-voice settings —\n * OR `null`, meaning keep this speaker's original voice (requires a platform\n * running cloud-plugins with keep-slot support). At least one entry must be\n * non-null.\n */\n orderedVoices: Array<VoiceChangerProVoice | null>\n /** Model to use for speech-to-speech. Defaults to the server-configured default when omitted. */\n model?: string\n /**\n * Mix the separated music / SFX stem back under the recast voices. Default\n * `true`. The voice is ALWAYS split out before recasting regardless of this\n * flag — `false` simply drops the music for a clean voice-only result.\n */\n preserveBackground?: boolean\n /**\n * Quality of the voice/music separation. `\"fast\"` (default, quicker —\n * preserves more of the voice) or `\"best\"` (finer voice/music separation).\n */\n separationQuality?: \"fast\" | \"best\"\n /** Strip background noise for a clean voice-only result. */\n removeBackgroundNoise?: boolean\n /**\n * Level of the preserved background music / SFX stem in the final mix. Only\n * relevant when `preserveBackground` is on (otherwise there is no background to\n * level). `\"match\"` (default) leaves the separated instrumental at its original\n * level; `\"normalize\"` applies loudness normalization; `\"manual\"` sets its\n * level to `musicVolume`%.\n */\n musicVolumeMode?: \"match\" | \"normalize\" | \"manual\"\n /** Background music level as a percentage (0–200). Consulted only when `musicVolumeMode === \"manual\"`. */\n musicVolume?: number\n /**\n * Node-level reverb/echo applied to the COMBINED recast voices **before** the\n * background is mixed back in (so the effect sits on the voices only, not the\n * music/SFX bed). Reverb presets (`room`, `hall`, `church`, …) use\n * `wetDryMix`; the `echo` / `custom` presets use `delayMs` + `decay`. Omit for\n * no effect.\n */\n voiceFx?: {\n /** Effect preset — reverb space, `telephone`, `megaphone`, `echo`, or `custom`. */\n preset: AudioFxPreset\n /** Reverb wet/dry mix as a percentage (0–100). Higher = wetter (more reverb). */\n wetDryMix?: number\n /** Echo delay in milliseconds (20–2000). Used by the `echo` / `custom` presets. */\n delayMs?: number\n /** Echo decay / feedback (0–1). Higher = more repeats. Used by the `echo` / `custom` presets. */\n decay?: number\n }\n /**\n * Output mode. `\"video\"` (default) mixes the recast voices with the preserved\n * background and returns a finished merged video. `\"stems\"` returns the dry,\n * unleveled per-track stems instead (rendering nothing) so you can drive an\n * INTERACTIVE mix — adjust levels/mutes/effect in your own UI, then render the\n * final video with {@link VoicesResource.exportMix}. This is how an app builds\n * a full editor around VCP rather than a one-shot recast.\n */\n output?: \"video\" | \"stems\"\n /**\n * A prior {@link VoicesResource.analyze} result. Pass it to SKIP re-detection:\n * the recast reuses the already-separated stems and speaker segments instead of\n * running separation + diarization again. This is the fast-path for the\n * detect → pick voices → recast interactive flow (analyze once, recast N times\n * as the user tweaks voice assignments). Omit to auto-detect from the source.\n */\n analysis?: VcpAnalysis\n}\n\n/** One detected speaker in a {@link VcpAnalysis} (from `analyze`). */\nexport interface VcpAnalysisSpeaker {\n /** Stable speaker id (first-appearance order). */\n id: string\n /** The speaker's spoken time ranges (seconds). `text` is what was said in\n * the range — the paid input for a Re-speak speaker (`engine: \"v3\"` or\n * `\"v4\"`; editable before conversion); the STS lane ignores it. */\n segments: Array<{ start: number; end: number; text?: string }>\n /** When the speaker first speaks (seconds). */\n firstStartSec?: number\n /** Rough word count across the clip — a proxy for how much this speaker says. */\n wordCount?: number\n /** The first few transcribed words, to help a user tell speakers apart. */\n snippet?: string\n}\n\n/**\n * The result of {@link VoicesResource.analyze}, reshaped to pass back into\n * {@link VoiceChangerProInput.analysis}. Read a completed analyze job's\n * `output_data` into this shape (it carries the separated stem urls + the\n * detected speakers) and thread it into `recast` to skip re-detection.\n */\nexport interface VcpAnalysis {\n /** URL of the isolated vocal stem. */\n vocalsUrl: string\n /** URL of the separated music/SFX stem (absent when the source had none). */\n backgroundUrl?: string\n /** The detected speakers, in first-appearance order. */\n speakers: VcpAnalysisSpeaker[]\n /** Scribe's detected language code, round-tripped so the recast auto-selects the STS model. */\n languageCode?: string\n /** Confidence (0–1) of {@link VcpAnalysis.languageCode}. */\n languageProbability?: number\n}\n\n/** Input for {@link VoicesResource.analyze}. */\nexport interface VcpAnalyzeInput {\n /** URL of an audio file to analyze. Exactly one of `audioUrl` / `videoUrl` is required. */\n audioUrl?: string\n /** URL of a video file to analyze (its audio track is used). Exactly one of `audioUrl` / `videoUrl` is required. */\n videoUrl?: string\n /** Quality of the voice/music separation run before diarization: `\"fast\"` (default) or `\"best\"`. */\n separationQuality?: \"fast\" | \"best\"\n /** Also suggest a conversion title from the transcript (returned on the job's `output_data.suggestedTitle`). */\n suggestTitle?: boolean\n}\n\n/** One track in a {@link VcpExportInput} mix. */\nexport interface VcpExportTrack {\n /** URL of the stem for this lane (a recast voice stem or the background stem). */\n url: string\n /** Fader position as a percentage: 0 = silent, 100 = unity, 200 = +6dB. */\n gain: number\n /** Whether this lane is muted in the mix. */\n muted: boolean\n /**\n * Which bucket the track is in, and so whether `voiceFx` lands on it. Defaults\n * to `\"voice\"`. Set `\"background\"` for the music/SFX lane (the effect never\n * touches it).\n */\n kind?: \"voice\" | \"background\"\n}\n\n/** Input for {@link VoicesResource.exportMix}. */\nexport interface VcpExportInput {\n /** The source video to remux the mixed audio onto (stream-copied — never re-encoded). */\n videoUrl: string\n /** The mix: one entry per lane. At least one must be un-muted (all-muted is a 400). Max 16 tracks. */\n tracks: VcpExportTrack[]\n /**\n * A reverb/echo applied to the VOICE tracks only (not `\"background\"` lanes)\n * at render time — so iterating the effect in your editor is free until you\n * export. Same shape as {@link VoiceChangerProInput.voiceFx}.\n */\n voiceFx?: VoiceChangerProInput[\"voiceFx\"]\n}\n\n/** Input for {@link VoicesResource.design}. */\nexport interface VoiceDesignInput {\n /** A preview line (100–1000 chars) spoken in the designed voice. */\n text: string\n /** Natural-language description of the voice to create. */\n voiceDescription: string\n /** Voice-design model id. Defaults to the server-configured default. */\n model?: string\n /** Output loudness (-1..1). */\n loudness?: number\n /** How strongly the description steers the design (0–100). */\n guidanceScale?: number\n /** Deterministic seed for a reproducible design. */\n seed?: number\n /** Design quality knob (provider-specific). */\n quality?: number\n /** Enhance the generated voice. */\n shouldEnhance?: boolean\n /** Optional extra prompt context (≤8000 chars). */\n userPrompt?: string\n}\n\n/** Input for {@link VoicesResource.remix}. */\nexport interface VoiceRemixInput {\n /** The text (1–5000 chars) to speak in the described voice. */\n text: string\n /** Natural-language description of the voice to speak in. */\n voiceDescription: string\n /** Optional extra prompt context (≤8000 chars). */\n userPrompt?: string\n}\n\n/** Input for {@link VoicesResource.dub}. Provide exactly ONE source:\n * `audioUrl` (dubbed audio out), `videoUrl` (the dubbed VIDEO out, plus the\n * dubbed audio track as `output_data.audioUrl`), or `sourceUrl` (a public\n * YouTube/TikTok/direct link ElevenLabs fetches itself). Priced per minute\n * of the dubbed span; the span is capped at 30 minutes — use\n * `startTime`/`endTime` to dub part of a longer source. */\nexport interface DubbingInput {\n /** URL of the audio to dub (audio mode). */\n audioUrl?: string\n /** URL of the video to dub — the result is the dubbed VIDEO (+ audio track). */\n videoUrl?: string\n /** Public page/media URL (YouTube, TikTok, or a direct link) — ElevenLabs fetches it directly. */\n sourceUrl?: string\n /** Target language ISO code (2–10 chars), e.g. `\"es\"`, `\"pt-BR\"`. */\n targetLanguage: string\n /** Source language ISO code; auto-detected when omitted. */\n sourceLanguage?: string\n /** Expected number of speakers (1–20; 0 = auto-detect) — improves separation when known. */\n numSpeakers?: number\n /** Keep the original voices instead of cloning them into the target language. */\n disableVoiceCloning?: boolean\n /** Drop the background/music bed from the dubbed output. */\n dropBackgroundAudio?: boolean\n /** Dub only this window of the source (seconds). */\n startTime?: number\n endTime?: number\n /** Keep the source resolution on video dubs (slower render). */\n highestResolution?: boolean\n useProfanityFilter?: boolean\n /** Experimental: steer dubbed voices toward an accent. */\n targetAccent?: string\n /** Apply ElevenLabs' own watermark to video dubs. */\n watermark?: boolean\n}\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-RA42NMWV.cjs.map
4
+ //# sourceMappingURL=chunk-RA42NMWV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RA42NMWV.cjs"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var edl = require('@nodaro/shared/edl');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "unwrapEditPlanOutput", {
8
+ enumerable: true,
9
+ get: function () { return edl.unwrapEditPlanOutput; }
10
+ });
11
+ //# sourceMappingURL=chunk-RAZN6C5R.cjs.map
12
+ //# sourceMappingURL=chunk-RAZN6C5R.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RAZN6C5R.cjs","sourcesContent":[]}
@@ -0,0 +1,233 @@
1
+ 'use strict';
2
+
3
+ var chunkN6GLZOE4_cjs = require('./chunk-N6GLZOE4.cjs');
4
+ var organizations = require('@nodaro/shared/organizations');
5
+
6
+ // src/binary-response.ts
7
+ async function readBinaryResponse(response, maxBytes) {
8
+ const advertised = response.headers.get("content-length");
9
+ if (advertised !== null && (!/^\d+$/.test(advertised) || Number(advertised) > maxBytes)) {
10
+ await response.body?.cancel();
11
+ throw new Error("Binary response exceeds its declared size limit");
12
+ }
13
+ if (!response.body) return new ArrayBuffer(0);
14
+ const reader = response.body.getReader();
15
+ const chunks = [];
16
+ let length = 0;
17
+ try {
18
+ while (true) {
19
+ const next = await reader.read();
20
+ if (next.done) break;
21
+ length += next.value.byteLength;
22
+ if (length > maxBytes) {
23
+ await reader.cancel();
24
+ throw new Error("Binary response exceeds its declared size limit");
25
+ }
26
+ chunks.push(next.value);
27
+ }
28
+ } finally {
29
+ reader.releaseLock();
30
+ }
31
+ const bytes = new Uint8Array(length);
32
+ let offset = 0;
33
+ for (const chunk of chunks) {
34
+ bytes.set(chunk, offset);
35
+ offset += chunk.byteLength;
36
+ }
37
+ return bytes.buffer;
38
+ }
39
+ var SDK_VERSION = "2.31.0" ;
40
+ var CLIENT_HEADER = "X-Nodaro-Client";
41
+ var isBrowser = () => typeof window !== "undefined" && typeof window.document !== "undefined";
42
+ var NodaroClientCore = class {
43
+ baseUrl;
44
+ auth;
45
+ timeoutMs;
46
+ /** Value sent as `X-Nodaro-Client`; recorded by the backend as job provenance. */
47
+ clientLabel;
48
+ /** Whether to actually send it — see the note on {@link CLIENT_HEADER}. */
49
+ sendClientHeader;
50
+ fetchOverride;
51
+ /**
52
+ * Resolved lazily so consumers can swap `globalThis.fetch` after the
53
+ * client has been constructed (e.g. test mocks). Always rebound to the
54
+ * global object — native fetch throws "Illegal invocation" when its
55
+ * `this` is anything else.
56
+ */
57
+ get fetch() {
58
+ return this.fetchOverride ?? globalThis.fetch.bind(globalThis);
59
+ }
60
+ /** The workspace this client acts in; undefined = the personal space. */
61
+ workspaceId;
62
+ constructor(opts) {
63
+ this.baseUrl = opts.baseUrl.replace(/\/$/, "");
64
+ this.auth = opts.auth;
65
+ this.fetchOverride = opts.fetch;
66
+ this.timeoutMs = opts.timeoutMs ?? 6e4;
67
+ this.clientLabel = opts.clientLabel ?? `sdk/${SDK_VERSION}`;
68
+ this.workspaceId = opts.workspaceId;
69
+ this.sendClientHeader = opts.clientLabel !== void 0 || !isBrowser();
70
+ }
71
+ /**
72
+ * The transport: build the request, send it, throw the typed error on a
73
+ * non-2xx via {@link throwFromResponse}, then read the body via `read` — all
74
+ * inside the abort timer, so `timeoutMs` bounds the body download too (a
75
+ * stalled CSV stream aborts, it does not hang forever). Both the JSON path
76
+ * ({@link request}) and the text path ({@link requestText}) go through here.
77
+ */
78
+ async send(method, path, options, read) {
79
+ const url = this.buildUrl(path, options.query);
80
+ const token = await this.auth.getToken();
81
+ const isFormData = typeof FormData !== "undefined" && options.body instanceof FormData;
82
+ const headers = {
83
+ ...isFormData ? {} : { "Content-Type": "application/json" },
84
+ ...this.sendClientHeader ? { [CLIENT_HEADER]: this.clientLabel } : {},
85
+ // Before per-request headers: a resource that needs to reach outside
86
+ // this client's workspace says so explicitly and wins.
87
+ ...this.workspaceId ? { [organizations.WORKSPACE_HEADER]: this.workspaceId } : {},
88
+ ...options.headers ?? {}
89
+ };
90
+ if (token) headers["Authorization"] = `Bearer ${token}`;
91
+ const ac = new AbortController();
92
+ const timeoutId = setTimeout(() => ac.abort(), this.timeoutMs);
93
+ const abort = () => ac.abort(options.signal?.reason);
94
+ options.signal?.addEventListener("abort", abort, { once: true });
95
+ if (options.signal?.aborted) abort();
96
+ try {
97
+ ac.signal.throwIfAborted();
98
+ const res = await this.fetch(url, {
99
+ method,
100
+ headers,
101
+ body: options.body === void 0 ? void 0 : isFormData ? options.body : JSON.stringify(options.body),
102
+ signal: ac.signal
103
+ });
104
+ if (!res.ok) {
105
+ let errBody = {};
106
+ try {
107
+ errBody = await res.json();
108
+ } catch {
109
+ }
110
+ chunkN6GLZOE4_cjs.throwFromResponse(res.status, errBody);
111
+ }
112
+ return await read(res);
113
+ } finally {
114
+ clearTimeout(timeoutId);
115
+ options.signal?.removeEventListener("abort", abort);
116
+ }
117
+ }
118
+ /** Authenticated, bounded binary reads through the normal timeout/error transport. */
119
+ async requestBytes(method, path, options) {
120
+ if (!Number.isSafeInteger(options.maxBytes) || options.maxBytes < 1) throw new Error("maxBytes must be a positive integer");
121
+ return this.send(method, path, options, (response) => readBinaryResponse(response, options.maxBytes));
122
+ }
123
+ async request(method, path, options = {}) {
124
+ return this.send(
125
+ method,
126
+ path,
127
+ options,
128
+ async (res) => (
129
+ // 204 No Content
130
+ res.status === 204 ? void 0 : await res.json()
131
+ )
132
+ );
133
+ }
134
+ /**
135
+ * Like {@link request}, for endpoints that answer text (CSV exports). Errors
136
+ * are still the JSON envelope and throw the same typed errors, and the read is
137
+ * bounded by the same timeout as the request.
138
+ */
139
+ async requestText(method, path, options = {}) {
140
+ return this.send(method, path, options, (res) => res.text());
141
+ }
142
+ /**
143
+ * `GET /v1/me` → the authenticated user's identity (see {@link UserIdentity}).
144
+ * Unwraps the `{ data }` envelope. Throws `UnauthorizedError` (401) when the
145
+ * token is missing/invalid, and the SDK's other typed errors as usual.
146
+ *
147
+ * On an instance with organizations it also carries what the caller belongs
148
+ * to. THREE states, and collapsing them is wrong in a way users feel: the
149
+ * organization fields ABSENT means this instance has no organizations at
150
+ * all; present and empty means the account belongs to none; and
151
+ * `organizationsUnavailable` means the lookup failed — keep whatever
152
+ * selection you already had rather than concluding the person was removed
153
+ * from everything.
154
+ */
155
+ async me() {
156
+ const res = await this.request("GET", "/v1/me");
157
+ return res.data;
158
+ }
159
+ /**
160
+ * `GET /v1/me/connected-apps` → every app with access to the signed-in
161
+ * user's account (see {@link ConnectedApp}), newest grant first.
162
+ *
163
+ * **A signed-in browser session only.** The route answers a Supabase
164
+ * session token (`supabaseAuth(…)`, `createSharedSupabaseClient`, or a
165
+ * `StaticTokenAuth` holding one) and refuses every other credential with
166
+ * `UnauthorizedError` ("Sign in required"): an app token or an API key must
167
+ * not list the grants it lives under. Build your "Connected apps" settings
168
+ * screen on this; a server-side integration cannot call it.
169
+ */
170
+ async connectedApps() {
171
+ const res = await this.request("GET", "/v1/me/connected-apps");
172
+ return res.apps;
173
+ }
174
+ /**
175
+ * `POST /v1/me/connected-apps/:authorizationId/revoke` — ends an app's
176
+ * access: the grant and every token issued under it, at once (the app's next
177
+ * call is a 401). Resolves when done.
178
+ *
179
+ * A signed-in browser session only, like {@link connectedApps}. Throws
180
+ * `NotFoundError` when the grant is not the user's or is already revoked.
181
+ */
182
+ async revokeConnectedApp(authorizationId) {
183
+ await this.request("POST", `/v1/me/connected-apps/${encodeURIComponent(authorizationId)}/revoke`);
184
+ }
185
+ buildUrl(path, query) {
186
+ const base = this.baseUrl || (typeof window !== "undefined" ? window.location.origin : "http://placeholder");
187
+ const url = new URL(path, base);
188
+ const fullUrl = this.baseUrl ? url.toString() : url.pathname + url.search;
189
+ if (query) {
190
+ const u = new URL(this.baseUrl ? fullUrl : fullUrl, base);
191
+ for (const [k, v] of Object.entries(query)) {
192
+ if (v !== void 0) u.searchParams.set(k, String(v));
193
+ }
194
+ return this.baseUrl ? u.toString() : u.pathname + u.search;
195
+ }
196
+ return fullUrl;
197
+ }
198
+ };
199
+
200
+ // src/auth.ts
201
+ var StaticTokenAuth = class {
202
+ constructor(token) {
203
+ this.token = token;
204
+ }
205
+ token;
206
+ async getToken() {
207
+ return this.token;
208
+ }
209
+ };
210
+ var CallbackAuth = class {
211
+ constructor(fn) {
212
+ this.fn = fn;
213
+ }
214
+ fn;
215
+ async getToken() {
216
+ return this.fn();
217
+ }
218
+ };
219
+ function supabaseAuth(supabase) {
220
+ return {
221
+ async getToken() {
222
+ const { data } = await supabase.auth.getSession();
223
+ return data.session?.access_token ?? null;
224
+ }
225
+ };
226
+ }
227
+
228
+ exports.CallbackAuth = CallbackAuth;
229
+ exports.NodaroClientCore = NodaroClientCore;
230
+ exports.StaticTokenAuth = StaticTokenAuth;
231
+ exports.supabaseAuth = supabaseAuth;
232
+ //# sourceMappingURL=chunk-REUFPWM7.cjs.map
233
+ //# sourceMappingURL=chunk-REUFPWM7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/binary-response.ts","../src/core.ts","../src/auth.ts"],"names":["WORKSPACE_HEADER","throwFromResponse"],"mappings":"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","file":"chunk-REUFPWM7.cjs","sourcesContent":["/** Bound decoded response bytes even when Content-Length is absent or compressed. */\nexport async function readBinaryResponse(response: Response, maxBytes: number): Promise<ArrayBuffer> {\n const advertised = response.headers.get(\"content-length\")\n if (advertised !== null && (!/^\\d+$/.test(advertised) || Number(advertised) > maxBytes)) {\n await response.body?.cancel()\n throw new Error(\"Binary response exceeds its declared size limit\")\n }\n if (!response.body) return new ArrayBuffer(0)\n const reader = response.body.getReader()\n const chunks: Uint8Array[] = []\n let length = 0\n try {\n while (true) {\n const next = await reader.read()\n if (next.done) break\n length += next.value.byteLength\n if (length > maxBytes) {\n await reader.cancel()\n throw new Error(\"Binary response exceeds its declared size limit\")\n }\n chunks.push(next.value)\n }\n } finally { reader.releaseLock() }\n const bytes = new Uint8Array(length)\n let offset = 0\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength }\n return bytes.buffer\n}\n","/**\n * The client core: configuration, auth, the request transport and the\n * account-identity calls — everything a resource needs, and none of the\n * resources themselves.\n *\n * {@link NodaroClient} (`createClient`) extends it with every resource. An app\n * that uses only a few resources can extend it with just those, so it loads\n * (and its tests depend on) only the resource modules it actually uses:\n *\n * class AppClient extends NodaroClientCore {\n * readonly jobs = new JobsResource(this)\n * readonly nodes = new NodesResource(this) // needs `jobs` on the same client\n * }\n *\n * A resource that calls another one through the client says so in its\n * constructor type (`NodesResource` takes a core that also has `jobs`), so a\n * client missing it fails to compile rather than at run time.\n */\nimport { readBinaryResponse } from \"./binary-response.js\"\nimport { throwFromResponse } from \"./errors.js\"\nimport type { Auth } from \"./auth.js\"\nimport type { DeveloperAppKind, DeveloperAppScope } from \"./resources/developer-apps.js\"\nimport { WORKSPACE_HEADER, type MeOrganizations } from \"@nodaro/shared/organizations\"\n\n/** Replaced at build time by tsup `define` from package.json. The fallback\n * keeps `tsx`/vitest runs of the source working, where no define applies. */\ndeclare const __SDK_VERSION__: string | undefined\nconst SDK_VERSION = typeof __SDK_VERSION__ === \"string\" ? __SDK_VERSION__ : \"0.0.0-dev\"\n\n/**\n * Identifies the calling package to the backend, which records it as the job's\n * provenance (`jobs.source` / `source_detail`) so an operator can tell a CLI\n * run from an SDK integration from a browser session.\n *\n * Only `sdk/…` and `cli/…` are honoured server-side; anything else is ignored\n * rather than trusted, since this is an unauthenticated header.\n */\nexport const CLIENT_HEADER = \"X-Nodaro-Client\"\n\n/**\n * In a browser the header is redundant AND a liability, so it is not sent.\n *\n * Redundant: the browser already sends `Origin`, which names the actual product\n * (`studio.nodaro.ai`) rather than merely the library it used — and the backend\n * deliberately prefers Origin over this header, so a browser-sent value is\n * discarded on arrival.\n *\n * A liability: `X-Nodaro-Client` is not a CORS-safelisted request header, so a\n * browser sending it requires an exact match in the server's\n * `Access-Control-Allow-Headers`. Any deployment whose backend predates that\n * allowlist entry would fail the PREFLIGHT — breaking every API call from the\n * app, not just its provenance. Self-hosted and lagging deployments make that a\n * real risk, and nothing in a browser app would reveal the cause.\n *\n * An EXPLICIT `clientLabel` is always sent regardless: a caller that names\n * itself has opted in deliberately, and that intent outranks this default.\n */\nconst isBrowser = (): boolean => typeof window !== \"undefined\" && typeof window.document !== \"undefined\"\n\nexport interface ClientOptions {\n /** Backend base URL, e.g. \"https://nodaro.example.com\" or empty string for same-origin. */\n baseUrl: string\n /** Auth provider. Use StaticTokenAuth, supabaseAuth, or CallbackAuth. */\n auth: Auth\n /** Optional fetch override (for tests or custom transports). */\n fetch?: typeof fetch\n /** Default request timeout in ms. Default 60s. */\n timeoutMs?: number\n /**\n * Overrides the `X-Nodaro-Client` label. Defaults to `sdk/<version>`.\n *\n * Exists for `@nodaro/cli`, which is a wrapper AROUND this SDK: without an\n * override every CLI invocation would be recorded as an SDK call and the two\n * surfaces could never be told apart.\n */\n clientLabel?: string\n /**\n * The workspace every request acts in — sent as `X-Nodaro-Workspace`.\n *\n * It selects which workspace a LIST reads from and where a CREATE lands.\n * It never authorizes: reading, updating, deleting or running an\n * identified object is decided by that object's own workspace, so a\n * forgotten header cannot hide work and a forged one cannot reach anyone\n * else's. Omit it to work in the caller's personal space.\n *\n * Prefer {@link NodaroClient.withWorkspace} for anything short-lived — one\n * client per workspace, no shared mutable selection to get wrong.\n */\n workspaceId?: string\n}\n\ninterface RequestOptions {\n body?: unknown\n query?: Record<string, string | number | boolean | undefined>\n headers?: Record<string, string>\n signal?: AbortSignal\n}\n\n/**\n * The authenticated user's canonical identity (`GET /v1/me`). A token-\n * introspection primitive: any valid bearer token (first-party Supabase JWT or\n * a developer-app OAuth token) resolves to its owner's identity. Mirrors the\n * `profiles` identity columns server-side — the route is the source of truth.\n */\nexport interface UserIdentity {\n /** Nodaro user id (= the Supabase auth user id). */\n readonly id: string\n readonly email: string\n /** Human-readable display name (from `profiles.full_name`); `null` if unset. */\n readonly displayName: string | null\n /** Avatar URL; `null` if unset. */\n readonly avatarUrl: string | null\n /** Subscription tier (e.g. \"free\", \"pro\"). */\n readonly tier: string\n /**\n * Whether the user holds an admin role. DESCRIPTIVE only — use it to decide\n * whether to render admin surfaces without capability-probing an admin\n * endpoint; every admin API stays enforced server-side regardless.\n */\n readonly isAdmin: boolean\n}\n\n/**\n * An app the user let into their account through OAuth (`GET\n * /v1/me/connected-apps`): a developer app, an AI assistant's MCP connector, or\n * a self-hosted install. One entry per grant still in force.\n */\nexport interface ConnectedApp {\n /** The grant's id — what {@link NodaroClient.revokeConnectedApp} takes. */\n readonly authorizationId: string\n /** The app's name; `null` if it has none. A `dynamic_mcp` client chose its own. */\n readonly name: string | null\n /**\n * How the app came to exist: `user` (a developer app someone registered),\n * `first_party_mcp`, `dynamic_mcp` (an MCP client that registered itself) or\n * `community_instance` (a self-hosted install).\n */\n readonly kind: DeveloperAppKind | (string & {})\n readonly homepageUrl: string | null\n /** The scopes this grant holds. */\n readonly scopes: readonly DeveloperAppScope[]\n /** When the user granted access (ISO 8601). */\n readonly connectedAt: string\n /** The latest use of any token issued under the grant; `null` if never used. */\n readonly lastUsedAt: string | null\n}\n\nexport class NodaroClientCore {\n readonly baseUrl: string\n readonly auth: Auth\n readonly timeoutMs: number\n /** Value sent as `X-Nodaro-Client`; recorded by the backend as job provenance. */\n readonly clientLabel: string\n /** Whether to actually send it — see the note on {@link CLIENT_HEADER}. */\n private readonly sendClientHeader: boolean\n private readonly fetchOverride: typeof fetch | undefined\n\n /**\n * Resolved lazily so consumers can swap `globalThis.fetch` after the\n * client has been constructed (e.g. test mocks). Always rebound to the\n * global object — native fetch throws \"Illegal invocation\" when its\n * `this` is anything else.\n */\n get fetch(): typeof fetch {\n return this.fetchOverride ?? globalThis.fetch.bind(globalThis)\n }\n\n /** The workspace this client acts in; undefined = the personal space. */\n readonly workspaceId: string | undefined\n\n constructor(opts: ClientOptions) {\n this.baseUrl = opts.baseUrl.replace(/\\/$/, \"\") // strip trailing slash\n this.auth = opts.auth\n this.fetchOverride = opts.fetch\n this.timeoutMs = opts.timeoutMs ?? 60_000\n this.clientLabel = opts.clientLabel ?? `sdk/${SDK_VERSION}`\n this.workspaceId = opts.workspaceId\n // Explicit label = deliberate opt-in, always sent. The default is suppressed\n // in browsers — see the note on CLIENT_HEADER.\n this.sendClientHeader = opts.clientLabel !== undefined || !isBrowser()\n }\n\n /**\n * The transport: build the request, send it, throw the typed error on a\n * non-2xx via {@link throwFromResponse}, then read the body via `read` — all\n * inside the abort timer, so `timeoutMs` bounds the body download too (a\n * stalled CSV stream aborts, it does not hang forever). Both the JSON path\n * ({@link request}) and the text path ({@link requestText}) go through here.\n */\n private async send<T>(\n method: string,\n path: string,\n options: RequestOptions,\n read: (res: Response) => Promise<T>,\n ): Promise<T> {\n const url = this.buildUrl(path, options.query)\n\n const token = await this.auth.getToken()\n // A `FormData` body is a multipart upload: let the runtime set\n // `Content-Type: multipart/form-data; boundary=…` itself (a manual JSON\n // content-type corrupts the boundary), and send the body as-is rather than\n // JSON-stringifying it. Every other body stays JSON, exactly as before.\n const isFormData =\n typeof FormData !== \"undefined\" && options.body instanceof FormData\n const headers: Record<string, string> = {\n ...(isFormData ? {} : { \"Content-Type\": \"application/json\" }),\n ...(this.sendClientHeader ? { [CLIENT_HEADER]: this.clientLabel } : {}),\n // Before per-request headers: a resource that needs to reach outside\n // this client's workspace says so explicitly and wins.\n ...(this.workspaceId ? { [WORKSPACE_HEADER]: this.workspaceId } : {}),\n ...(options.headers ?? {}),\n }\n if (token) headers[\"Authorization\"] = `Bearer ${token}`\n\n const ac = new AbortController()\n const timeoutId = setTimeout(() => ac.abort(), this.timeoutMs)\n const abort = () => ac.abort(options.signal?.reason)\n options.signal?.addEventListener(\"abort\", abort, { once: true })\n if (options.signal?.aborted) abort()\n\n try {\n ac.signal.throwIfAborted()\n const res = await this.fetch(url, {\n method,\n headers,\n body:\n options.body === undefined\n ? undefined\n : isFormData\n ? (options.body as FormData)\n : JSON.stringify(options.body),\n signal: ac.signal,\n })\n\n if (!res.ok) {\n let errBody: Record<string, unknown> = {}\n try {\n errBody = await res.json() as Record<string, unknown>\n } catch {\n // Empty/non-JSON body — fall through with empty errBody\n }\n throwFromResponse(res.status, errBody)\n }\n\n return await read(res)\n } finally {\n clearTimeout(timeoutId)\n options.signal?.removeEventListener(\"abort\", abort)\n }\n }\n\n /** Authenticated, bounded binary reads through the normal timeout/error transport. */\n async requestBytes(method: string, path: string, options: RequestOptions & { maxBytes: number }): Promise<ArrayBuffer> {\n if (!Number.isSafeInteger(options.maxBytes) || options.maxBytes < 1) throw new Error(\"maxBytes must be a positive integer\")\n return this.send(method, path, options, (response) => readBinaryResponse(response, options.maxBytes))\n }\n\n async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n return this.send(method, path, options, async (res) =>\n // 204 No Content\n res.status === 204 ? (undefined as T) : ((await res.json()) as T),\n )\n }\n\n /**\n * Like {@link request}, for endpoints that answer text (CSV exports). Errors\n * are still the JSON envelope and throw the same typed errors, and the read is\n * bounded by the same timeout as the request.\n */\n async requestText(method: string, path: string, options: RequestOptions = {}): Promise<string> {\n return this.send(method, path, options, (res) => res.text())\n }\n\n /**\n * `GET /v1/me` → the authenticated user's identity (see {@link UserIdentity}).\n * Unwraps the `{ data }` envelope. Throws `UnauthorizedError` (401) when the\n * token is missing/invalid, and the SDK's other typed errors as usual.\n *\n * On an instance with organizations it also carries what the caller belongs\n * to. THREE states, and collapsing them is wrong in a way users feel: the\n * organization fields ABSENT means this instance has no organizations at\n * all; present and empty means the account belongs to none; and\n * `organizationsUnavailable` means the lookup failed — keep whatever\n * selection you already had rather than concluding the person was removed\n * from everything.\n */\n async me(): Promise<UserIdentity & MeOrganizations> {\n const res = await this.request<{ data: UserIdentity & MeOrganizations }>(\"GET\", \"/v1/me\")\n return res.data\n }\n\n /**\n * `GET /v1/me/connected-apps` → every app with access to the signed-in\n * user's account (see {@link ConnectedApp}), newest grant first.\n *\n * **A signed-in browser session only.** The route answers a Supabase\n * session token (`supabaseAuth(…)`, `createSharedSupabaseClient`, or a\n * `StaticTokenAuth` holding one) and refuses every other credential with\n * `UnauthorizedError` (\"Sign in required\"): an app token or an API key must\n * not list the grants it lives under. Build your \"Connected apps\" settings\n * screen on this; a server-side integration cannot call it.\n */\n async connectedApps(): Promise<ConnectedApp[]> {\n const res = await this.request<{ apps: ConnectedApp[] }>(\"GET\", \"/v1/me/connected-apps\")\n return res.apps\n }\n\n /**\n * `POST /v1/me/connected-apps/:authorizationId/revoke` — ends an app's\n * access: the grant and every token issued under it, at once (the app's next\n * call is a 401). Resolves when done.\n *\n * A signed-in browser session only, like {@link connectedApps}. Throws\n * `NotFoundError` when the grant is not the user's or is already revoked.\n */\n async revokeConnectedApp(authorizationId: string): Promise<void> {\n await this.request(\"POST\", `/v1/me/connected-apps/${encodeURIComponent(authorizationId)}/revoke`)\n }\n\n private buildUrl(path: string, query?: Record<string, string | number | boolean | undefined>): string {\n const base = this.baseUrl || (typeof window !== \"undefined\" ? window.location.origin : \"http://placeholder\")\n const url = new URL(path, base)\n // If baseUrl was empty, strip the placeholder origin\n const fullUrl = this.baseUrl ? url.toString() : url.pathname + url.search\n if (query) {\n const u = new URL(this.baseUrl ? fullUrl : fullUrl, base)\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined) u.searchParams.set(k, String(v))\n }\n return this.baseUrl ? u.toString() : u.pathname + u.search\n }\n return fullUrl\n }\n}\n","/**\n * Auth provides the token used for `Authorization: Bearer <token>` on each request.\n * Implementations:\n * - StaticTokenAuth — fixed string (server-side, OAuth access token, API token)\n * - CallbackAuth — caller-supplied async function (BYO logic)\n * - supabaseAuth — pulls JWT from a Supabase client live (browser frontends)\n */\nexport interface Auth {\n /** Returns the current Bearer token, or null if not authenticated. */\n getToken(): Promise<string | null>\n}\n\nexport class StaticTokenAuth implements Auth {\n constructor(private token: string) {}\n async getToken() {\n return this.token\n }\n}\n\nexport class CallbackAuth implements Auth {\n constructor(private fn: () => string | null | Promise<string | null>) {}\n async getToken() {\n return this.fn()\n }\n}\n\ninterface SupabaseLikeClient {\n auth: {\n getSession(): Promise<{ data: { session: { access_token: string } | null } }>\n }\n}\n\n/** Pulls a JWT from a Supabase v2 client. Caller supplies their own supabase. */\nexport function supabaseAuth(supabase: SupabaseLikeClient): Auth {\n return {\n async getToken() {\n const { data } = await supabase.auth.getSession()\n return data.session?.access_token ?? null\n },\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-RHETJOUM.cjs.map
4
+ //# sourceMappingURL=chunk-RHETJOUM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RHETJOUM.cjs"}
@@ -0,0 +1,3 @@
1
+ export { RECAST_SEGMENT_PACKS } from '@nodaro/shared/apps';
2
+ //# sourceMappingURL=chunk-RJIJVVXS.js.map
3
+ //# sourceMappingURL=chunk-RJIJVVXS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RJIJVVXS.js","sourcesContent":[]}
@@ -0,0 +1,3 @@
1
+ export { USAGE_GROUP_BYS, WORKSPACE_HEADER } from '@nodaro/shared/organizations';
2
+ //# sourceMappingURL=chunk-RKVRCNMB.js.map
3
+ //# sourceMappingURL=chunk-RKVRCNMB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RKVRCNMB.js","sourcesContent":[]}
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var workflow = require('@nodaro/shared/workflow');
4
+
5
+ // src/resources/executions.ts
6
+ var ExecutionsResource = class {
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ client;
11
+ /** Get an execution by ID. Falls back to standalone single-node jobs server-side. */
12
+ get(id) {
13
+ return this.client.request(
14
+ "GET",
15
+ `/v1/workflow-executions/${encodeURIComponent(id)}`
16
+ );
17
+ }
18
+ /** List executions for a workflow. Merges workflow_executions + standalone single-node jobs. */
19
+ listForWorkflow(workflowId, params = {}) {
20
+ return this.client.request(
21
+ "GET",
22
+ `/v1/workflows/${encodeURIComponent(workflowId)}/executions`,
23
+ {
24
+ query: {
25
+ limit: params.limit,
26
+ cursor: params.cursor,
27
+ status: params.status,
28
+ source: params.source
29
+ }
30
+ }
31
+ );
32
+ }
33
+ /** Cancel an execution. Returns `{ success: true }`. */
34
+ cancel(id, params = {}) {
35
+ return this.client.request(
36
+ "POST",
37
+ `/v1/workflow-executions/${encodeURIComponent(id)}/cancel`,
38
+ { body: params }
39
+ );
40
+ }
41
+ };
42
+
43
+ Object.defineProperty(exports, "OUTPUT_BEARING_NODE_STATUSES", {
44
+ enumerable: true,
45
+ get: function () { return workflow.OUTPUT_BEARING_NODE_STATUSES; }
46
+ });
47
+ Object.defineProperty(exports, "nodeStateMayCarryOutput", {
48
+ enumerable: true,
49
+ get: function () { return workflow.nodeStateMayCarryOutput; }
50
+ });
51
+ exports.ExecutionsResource = ExecutionsResource;
52
+ //# sourceMappingURL=chunk-SBV5MWEL.cjs.map
53
+ //# sourceMappingURL=chunk-SBV5MWEL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resources/executions.ts"],"names":[],"mappings":";;;;;AAgIO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAoB,MAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAA2B;AAAA,EAA3B,MAAA;AAAA;AAAA,EAGpB,IAAI,EAAA,EAAkD;AACpD,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,KAAA;AAAA,MACA,CAAA,wBAAA,EAA2B,kBAAA,CAAmB,EAAE,CAAC,CAAA;AAAA,KACnD;AAAA,EACF;AAAA;AAAA,EAGA,eAAA,CACE,UAAA,EACA,MAAA,GAA0C,EAAC,EACY;AACvD,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,KAAA;AAAA,MACA,CAAA,cAAA,EAAiB,kBAAA,CAAmB,UAAU,CAAC,CAAA,WAAA,CAAA;AAAA,MAC/C;AAAA,QACE,KAAA,EAAO;AAAA,UACL,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,QAAQ,MAAA,CAAO;AAAA;AACjB;AACF,KACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAA,CAAO,EAAA,EAAY,MAAA,GAAgC,EAAC,EAA+B;AACjF,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,MAAA;AAAA,MACA,CAAA,wBAAA,EAA2B,kBAAA,CAAmB,EAAE,CAAC,CAAA,OAAA,CAAA;AAAA,MACjD,EAAE,MAAM,MAAA;AAAO,KACjB;AAAA,EACF;AACF","file":"chunk-SBV5MWEL.cjs","sourcesContent":["import type { NodaroClientCore } from \"../core.js\"\nimport type { ExecutionOutcome, NodeExecutionStateWire } from \"@nodaro/shared/workflow\"\n\nexport type ExecutionStatus =\n | \"pending\"\n | \"running\"\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"stopping\"\n | \"timed_out\"\n | \"discarded\"\n\nexport type ExecutionTriggerType =\n | \"manual\"\n | \"webhook\"\n | \"schedule\"\n | \"app_run\"\n | \"single-node\"\n | \"telegram\"\n | \"telegram_account\"\n | \"api\"\n | \"mcp\"\n\n/**\n * Per-node state inside an execution's `nodeStates` map. Keys are node IDs.\n *\n * Extends the published wire contract in `@nodaro/shared`, which is what the\n * orchestrator writes and the editor reads — so a field added there reaches\n * SDK consumers as a typed field rather than through the index signature. The\n * synthetic single-node-job shape from `routes/workflow-execution.ts` fits the\n * same contract.\n */\nexport interface NodeExecutionState extends NodeExecutionStateWire {\n [key: string]: unknown\n}\n\nexport type { NodeExecutionStatus, NodeSkipReason, ExecutionOutcome } from \"@nodaro/shared/workflow\"\nexport { OUTPUT_BEARING_NODE_STATUSES, nodeStateMayCarryOutput, executionOutcome, countEmptyInputSkips } from \"@nodaro/shared/workflow\"\n\n/**\n * Workflow execution record. Returned by `get()` and `cancel()` (the cancel\n * endpoint returns `{ success: true }`, not the execution itself).\n */\nexport interface WorkflowExecution {\n id: string\n /**\n * `\"execution\"` for an orchestrator run; `\"job\"` for a single-node job the\n * list shows beside the runs (its `triggerType` is the lane that started it,\n * `\"mcp\"` for an MCP client's one-node job). Absent on an older server.\n */\n kind?: \"execution\" | \"job\"\n workflowId: string | null\n userId: string\n status: ExecutionStatus\n /**\n * How a `completed` run ended: `\"nothing_new\"` when at least one node was\n * skipped for want of input (its `nodeStates` entry carries\n * `skipReason: \"empty_input\"` — a feed that found no new posts, a writer with\n * nothing to write), `\"succeeded\"` otherwise. Absent until the run completes\n * and on an older server. Derived by `executionOutcome()` (exported).\n */\n outcome?: ExecutionOutcome\n triggerType: ExecutionTriggerType\n triggerData?: unknown\n nodeStates: Record<string, NodeExecutionState>\n /**\n * What a continue-from-failed of this run (`continueMode: \"from-failed\"`)\n * sent no `nodeIds` considers, besides every node the run left failed or\n * held back: the nodes the first run of its chain was started on (`nodeIds`\n * on `/run` — Run selected, an API subset, a Render final). `null`: every\n * node — a run of every node, one started before the nodes were recorded,\n * or one a trigger started. Absent on an older server (= every node).\n */\n nodeScope?: string[] | null\n totalNodes: number\n completedNodes: number\n failedNodes: number\n totalCreditsUsed: number\n errorMessage: string | null\n startedAt: string | null\n completedAt: string | null\n createdAt: string\n updatedAt: string\n}\n\n/** Summary returned by `listForWorkflow()`. Excludes per-row `triggerData`/`updatedAt`. */\nexport interface WorkflowExecutionSummary {\n id: string\n /** See {@link WorkflowExecution.kind}. */\n kind?: \"execution\" | \"job\"\n status: ExecutionStatus\n /** See {@link WorkflowExecution.outcome}. */\n outcome?: ExecutionOutcome\n triggerType: ExecutionTriggerType\n nodeStates: Record<string, NodeExecutionState>\n totalNodes: number\n completedNodes: number\n failedNodes: number\n totalCreditsUsed: number\n errorMessage: string | null\n startedAt: string | null\n completedAt: string | null\n createdAt: string\n}\n\nexport interface ListExecutionsForWorkflowParams {\n limit?: number\n cursor?: string\n /** Comma-separated list of statuses, e.g. \"pending,running\". */\n status?: string\n /** \"editor\" excludes app_run / component / webhook / schedule executions. */\n source?: \"editor\" | \"all\"\n}\n\nexport interface ListExecutionsPage<T> {\n data: T[]\n nextCursor?: string\n}\n\nexport interface CancelExecutionParams {\n /**\n * \"after_current\" sets the execution to \"stopping\" (let in-flight nodes\n * finish, then stop). Default behavior cancels immediately.\n */\n mode?: \"after_current\" | \"discard\"\n}\n\nexport class ExecutionsResource {\n constructor(private client: NodaroClientCore) {}\n\n /** Get an execution by ID. Falls back to standalone single-node jobs server-side. */\n get(id: string): Promise<{ data: WorkflowExecution }> {\n return this.client.request(\n \"GET\",\n `/v1/workflow-executions/${encodeURIComponent(id)}`,\n )\n }\n\n /** List executions for a workflow. Merges workflow_executions + standalone single-node jobs. */\n listForWorkflow(\n workflowId: string,\n params: ListExecutionsForWorkflowParams = {},\n ): Promise<ListExecutionsPage<WorkflowExecutionSummary>> {\n return this.client.request(\n \"GET\",\n `/v1/workflows/${encodeURIComponent(workflowId)}/executions`,\n {\n query: {\n limit: params.limit,\n cursor: params.cursor,\n status: params.status,\n source: params.source,\n },\n },\n )\n }\n\n /** Cancel an execution. Returns `{ success: true }`. */\n cancel(id: string, params: CancelExecutionParams = {}): Promise<{ success: true }> {\n return this.client.request(\n \"POST\",\n `/v1/workflow-executions/${encodeURIComponent(id)}/cancel`,\n { body: params },\n )\n }\n}\n"]}
@@ -0,0 +1,121 @@
1
+ // src/resources/community.ts
2
+ var CommunityResource = class {
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ client;
7
+ /**
8
+ * `GET /v1/community/browse` → a page of public listings plus a `nextCursor`.
9
+ * Pass the returned `nextCursor` back as `cursor` to fetch the next page.
10
+ */
11
+ browse(params = {}) {
12
+ const qs = new URLSearchParams();
13
+ if (params.entityType) qs.set("entityType", params.entityType);
14
+ if (params.q) qs.set("q", params.q);
15
+ if (params.category) qs.set("category", params.category);
16
+ if (params.sort) qs.set("sort", params.sort);
17
+ if (params.cursor) qs.set("cursor", params.cursor);
18
+ if (params.limit !== void 0) qs.set("limit", String(params.limit));
19
+ const query = qs.toString();
20
+ return this.client.request(
21
+ "GET",
22
+ `/v1/community/browse${query ? `?${query}` : ""}`
23
+ );
24
+ }
25
+ /** `GET /v1/community/detail/:slug` → a single listing by its slug. */
26
+ get(slug) {
27
+ return this.client.request(
28
+ "GET",
29
+ `/v1/community/detail/${encodeURIComponent(slug)}`
30
+ );
31
+ }
32
+ /**
33
+ * `GET /v1/community/detail/:slug/full` → the full read-only detail (card
34
+ * identity + the stored public snapshot). Like {@link get}, but includes the
35
+ * snapshot asset/voice/text blob needed to render the full cross-user view.
36
+ */
37
+ getFull(slug) {
38
+ return this.client.request(
39
+ "GET",
40
+ `/v1/community/detail/${encodeURIComponent(slug)}/full`
41
+ );
42
+ }
43
+ /** `GET /v1/community/favorites` → the listings you've favorited. */
44
+ favorites() {
45
+ return this.client.request("GET", "/v1/community/favorites");
46
+ }
47
+ /**
48
+ * `POST /v1/community/listings/:id/clone` → copy a listing into your library.
49
+ * Returns the new asset's `entityType` and `id`. Requires the `assets:write`
50
+ * scope when called with an OAuth app token.
51
+ */
52
+ clone(id, entityType) {
53
+ return this.client.request(
54
+ "POST",
55
+ `/v1/community/listings/${encodeURIComponent(id)}/clone`,
56
+ { body: { entityType } }
57
+ );
58
+ }
59
+ /**
60
+ * `POST /v1/community/listings/:id/favorite` → toggle a favorite. Returns the
61
+ * resulting `favorited` state (`true` after adding, `false` after removing).
62
+ */
63
+ favorite(id) {
64
+ return this.client.request(
65
+ "POST",
66
+ `/v1/community/listings/${encodeURIComponent(id)}/favorite`
67
+ );
68
+ }
69
+ /**
70
+ * `POST /v1/community/listings/:id/report` → flag a listing for moderation.
71
+ * `reason` must be one of {@link CommunityReportReason}.
72
+ */
73
+ report(id, reason) {
74
+ return this.client.request(
75
+ "POST",
76
+ `/v1/community/listings/${encodeURIComponent(id)}/report`,
77
+ { body: { reason } }
78
+ );
79
+ }
80
+ /**
81
+ * `POST /v1/admin/community/:entityType/:id/publish` → share one of YOUR
82
+ * entities to the community, returning the new listing's `slug` + `id`.
83
+ *
84
+ * **Requires an admin token** (the route is `requireAdmin`) AND the caller
85
+ * must own the source entity. Personal/OAuth tokens without admin role get a
86
+ * 401. For `character` listings, `params.likenessAttestation` must be `true`.
87
+ */
88
+ publish(entityType, entityId, params) {
89
+ return this.client.request(
90
+ "POST",
91
+ `/v1/admin/community/${encodeURIComponent(entityType)}/${encodeURIComponent(entityId)}/publish`,
92
+ { body: params }
93
+ );
94
+ }
95
+ /**
96
+ * `DELETE /v1/admin/community/listings/:id` → unshare (deactivate) a listing
97
+ * you published. **Requires an admin token** (the route is `requireAdmin`).
98
+ */
99
+ unpublish(listingId) {
100
+ return this.client.request(
101
+ "DELETE",
102
+ `/v1/admin/community/listings/${encodeURIComponent(listingId)}`
103
+ );
104
+ }
105
+ /**
106
+ * `GET /v1/admin/community/by-source/:entityType/:sourceId` → look up YOUR
107
+ * existing listing (if any) for a source entity. Returns `{ data: null }`
108
+ * when the entity hasn't been shared. **Requires an admin token** (the route
109
+ * is `requireAdmin`); only returns listings created by the caller.
110
+ */
111
+ sharedListing(entityType, sourceId) {
112
+ return this.client.request(
113
+ "GET",
114
+ `/v1/admin/community/by-source/${encodeURIComponent(entityType)}/${encodeURIComponent(sourceId)}`
115
+ );
116
+ }
117
+ };
118
+
119
+ export { CommunityResource };
120
+ //# sourceMappingURL=chunk-SFB4YLCS.js.map
121
+ //# sourceMappingURL=chunk-SFB4YLCS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resources/community.ts"],"names":[],"mappings":"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","file":"chunk-SFB4YLCS.js","sourcesContent":["import type { CommunityEntityType, CommunitySort, CommunityReportReason, CommunityCard, CommunityFullDetail, BrowseCommunityParams, BrowseCommunityResult, CloneListingResult, FavoriteListingResult, ReportListingResult, PublishListingParams, PublishListingResult, SharedListing } from \"@nodaro/shared/apps\"\nexport type { CommunityEntityType, CommunitySort, CommunityReportReason, CommunityCard, CommunityFullDetail, BrowseCommunityParams, BrowseCommunityResult, CloneListingResult, FavoriteListingResult, ReportListingResult, PublishListingParams, PublishListingResult, SharedListing } from \"@nodaro/shared/apps\"\nimport type { NodaroClientCore } from \"../core.js\"\n\n/**\n * The community-listing types are the single source of truth in\n * `@nodaro/shared` (re-used by the backend, frontend, and CLI). Re-export them\n * here so SDK consumers don't have to add `@nodaro/shared` as a second\n * dependency just to typecheck `browse`/`clone`/`favorite`/`report`.\n */\n\n/**\n * Community — browse, favorite, clone, and report shared characters,\n * locations, and objects.\n *\n * Publishing is intentionally NOT exposed here: it is admin-only via the\n * editor, and the publish route rejects personal access tokens (which is what\n * the SDK uses).\n */\nexport class CommunityResource {\n constructor(private client: NodaroClientCore) {}\n\n /**\n * `GET /v1/community/browse` → a page of public listings plus a `nextCursor`.\n * Pass the returned `nextCursor` back as `cursor` to fetch the next page.\n */\n browse(params: BrowseCommunityParams = {}): Promise<BrowseCommunityResult> {\n const qs = new URLSearchParams()\n if (params.entityType) qs.set(\"entityType\", params.entityType)\n if (params.q) qs.set(\"q\", params.q)\n if (params.category) qs.set(\"category\", params.category)\n if (params.sort) qs.set(\"sort\", params.sort)\n if (params.cursor) qs.set(\"cursor\", params.cursor)\n if (params.limit !== undefined) qs.set(\"limit\", String(params.limit))\n const query = qs.toString()\n return this.client.request(\n \"GET\",\n `/v1/community/browse${query ? `?${query}` : \"\"}`,\n )\n }\n\n /** `GET /v1/community/detail/:slug` → a single listing by its slug. */\n get(slug: string): Promise<{ data: CommunityCard }> {\n return this.client.request(\n \"GET\",\n `/v1/community/detail/${encodeURIComponent(slug)}`,\n )\n }\n\n /**\n * `GET /v1/community/detail/:slug/full` → the full read-only detail (card\n * identity + the stored public snapshot). Like {@link get}, but includes the\n * snapshot asset/voice/text blob needed to render the full cross-user view.\n */\n getFull(slug: string): Promise<{ data: CommunityFullDetail }> {\n return this.client.request(\n \"GET\",\n `/v1/community/detail/${encodeURIComponent(slug)}/full`,\n )\n }\n\n /** `GET /v1/community/favorites` → the listings you've favorited. */\n favorites(): Promise<{ data: CommunityCard[] }> {\n return this.client.request(\"GET\", \"/v1/community/favorites\")\n }\n\n /**\n * `POST /v1/community/listings/:id/clone` → copy a listing into your library.\n * Returns the new asset's `entityType` and `id`. Requires the `assets:write`\n * scope when called with an OAuth app token.\n */\n clone(id: string, entityType: CommunityEntityType): Promise<CloneListingResult> {\n return this.client.request(\n \"POST\",\n `/v1/community/listings/${encodeURIComponent(id)}/clone`,\n { body: { entityType } },\n )\n }\n\n /**\n * `POST /v1/community/listings/:id/favorite` → toggle a favorite. Returns the\n * resulting `favorited` state (`true` after adding, `false` after removing).\n */\n favorite(id: string): Promise<FavoriteListingResult> {\n return this.client.request(\n \"POST\",\n `/v1/community/listings/${encodeURIComponent(id)}/favorite`,\n )\n }\n\n /**\n * `POST /v1/community/listings/:id/report` → flag a listing for moderation.\n * `reason` must be one of {@link CommunityReportReason}.\n */\n report(id: string, reason: CommunityReportReason): Promise<ReportListingResult> {\n return this.client.request(\n \"POST\",\n `/v1/community/listings/${encodeURIComponent(id)}/report`,\n { body: { reason } },\n )\n }\n\n /**\n * `POST /v1/admin/community/:entityType/:id/publish` → share one of YOUR\n * entities to the community, returning the new listing's `slug` + `id`.\n *\n * **Requires an admin token** (the route is `requireAdmin`) AND the caller\n * must own the source entity. Personal/OAuth tokens without admin role get a\n * 401. For `character` listings, `params.likenessAttestation` must be `true`.\n */\n publish(\n entityType: CommunityEntityType,\n entityId: string,\n params: PublishListingParams,\n ): Promise<PublishListingResult> {\n return this.client.request(\n \"POST\",\n `/v1/admin/community/${encodeURIComponent(entityType)}/${encodeURIComponent(entityId)}/publish`,\n { body: params },\n )\n }\n\n /**\n * `DELETE /v1/admin/community/listings/:id` → unshare (deactivate) a listing\n * you published. **Requires an admin token** (the route is `requireAdmin`).\n */\n unpublish(listingId: string): Promise<{ ok: boolean }> {\n return this.client.request(\n \"DELETE\",\n `/v1/admin/community/listings/${encodeURIComponent(listingId)}`,\n )\n }\n\n /**\n * `GET /v1/admin/community/by-source/:entityType/:sourceId` → look up YOUR\n * existing listing (if any) for a source entity. Returns `{ data: null }`\n * when the entity hasn't been shared. **Requires an admin token** (the route\n * is `requireAdmin`); only returns listings created by the caller.\n */\n sharedListing(\n entityType: CommunityEntityType,\n sourceId: string,\n ): Promise<{ data: SharedListing | null }> {\n return this.client.request(\n \"GET\",\n `/v1/admin/community/by-source/${encodeURIComponent(entityType)}/${encodeURIComponent(sourceId)}`,\n )\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-SLPD47SR.js.map
3
+ //# sourceMappingURL=chunk-SLPD47SR.js.map