@nodaro/sdk 2.29.0 → 2.32.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-4CXB7RA6.js +104 -0
  27. package/dist/chunk-4CXB7RA6.js.map +1 -0
  28. package/dist/chunk-4NLVBYMW.js +280 -0
  29. package/dist/chunk-4NLVBYMW.js.map +1 -0
  30. package/dist/chunk-4WRDR4GN.js +102 -0
  31. package/dist/chunk-4WRDR4GN.js.map +1 -0
  32. package/dist/chunk-4WWSHV5G.cjs +4 -0
  33. package/dist/chunk-4WWSHV5G.cjs.map +1 -0
  34. package/dist/chunk-53SXNN3A.js +80 -0
  35. package/dist/chunk-53SXNN3A.js.map +1 -0
  36. package/dist/chunk-5ALNFATQ.cjs +27 -0
  37. package/dist/chunk-5ALNFATQ.cjs.map +1 -0
  38. package/dist/chunk-5UQNMNUE.cjs +4 -0
  39. package/dist/chunk-5UQNMNUE.cjs.map +1 -0
  40. package/dist/chunk-65E3JBFZ.js +52 -0
  41. package/dist/chunk-65E3JBFZ.js.map +1 -0
  42. package/dist/chunk-6ECW23GA.js +214 -0
  43. package/dist/chunk-6ECW23GA.js.map +1 -0
  44. package/dist/chunk-6JFNBAKV.js +3 -0
  45. package/dist/chunk-6JFNBAKV.js.map +1 -0
  46. package/dist/chunk-6OC6OKLY.cjs +4 -0
  47. package/dist/chunk-6OC6OKLY.cjs.map +1 -0
  48. package/dist/chunk-6OGGJQVA.js +25 -0
  49. package/dist/chunk-6OGGJQVA.js.map +1 -0
  50. package/dist/chunk-7A7HYFGM.js +3 -0
  51. package/dist/chunk-7A7HYFGM.js.map +1 -0
  52. package/dist/chunk-7CK6I4CT.cjs +16 -0
  53. package/dist/chunk-7CK6I4CT.cjs.map +1 -0
  54. package/dist/chunk-7LSFG2AF.js +194 -0
  55. package/dist/chunk-7LSFG2AF.js.map +1 -0
  56. package/dist/chunk-7MYKT2L4.cjs +4 -0
  57. package/dist/chunk-7MYKT2L4.cjs.map +1 -0
  58. package/dist/chunk-7QOCWJKD.cjs +25 -0
  59. package/dist/chunk-7QOCWJKD.cjs.map +1 -0
  60. package/dist/chunk-A2ZAFAWC.cjs +4 -0
  61. package/dist/chunk-A2ZAFAWC.cjs.map +1 -0
  62. package/dist/chunk-A3S55XGF.cjs +54 -0
  63. package/dist/chunk-A3S55XGF.cjs.map +1 -0
  64. package/dist/chunk-A3THLBFG.js +3 -0
  65. package/dist/chunk-A3THLBFG.js.map +1 -0
  66. package/dist/chunk-AJVSMNPZ.js +78 -0
  67. package/dist/chunk-AJVSMNPZ.js.map +1 -0
  68. package/dist/chunk-ALSLZG3U.js +124 -0
  69. package/dist/chunk-ALSLZG3U.js.map +1 -0
  70. package/dist/chunk-ALUUBPDG.cjs +4 -0
  71. package/dist/chunk-ALUUBPDG.cjs.map +1 -0
  72. package/dist/chunk-AO3W45LT.cjs +4 -0
  73. package/dist/chunk-AO3W45LT.cjs.map +1 -0
  74. package/dist/chunk-AUDHV3OE.js +3 -0
  75. package/dist/chunk-AUDHV3OE.js.map +1 -0
  76. package/dist/chunk-B7RG6AUQ.cjs +216 -0
  77. package/dist/chunk-B7RG6AUQ.cjs.map +1 -0
  78. package/dist/chunk-BAL576G2.cjs +4 -0
  79. package/dist/chunk-BAL576G2.cjs.map +1 -0
  80. package/dist/chunk-BKP6F2IX.js +3 -0
  81. package/dist/chunk-BKP6F2IX.js.map +1 -0
  82. package/dist/chunk-BLA44UCM.js +32 -0
  83. package/dist/chunk-BLA44UCM.js.map +1 -0
  84. package/dist/chunk-BPWUWUZ3.cjs +20 -0
  85. package/dist/chunk-BPWUWUZ3.cjs.map +1 -0
  86. package/dist/chunk-BRV7Z4GD.cjs +17 -0
  87. package/dist/chunk-BRV7Z4GD.cjs.map +1 -0
  88. package/dist/chunk-BU5A6K4C.js +122 -0
  89. package/dist/chunk-BU5A6K4C.js.map +1 -0
  90. package/dist/chunk-C22RJDW3.js +3 -0
  91. package/dist/chunk-C22RJDW3.js.map +1 -0
  92. package/dist/chunk-CGNVHN4V.js +3 -0
  93. package/dist/chunk-CGNVHN4V.js.map +1 -0
  94. package/dist/chunk-CJFIOVBA.js +3 -0
  95. package/dist/chunk-CJFIOVBA.js.map +1 -0
  96. package/dist/chunk-CJLLIVSB.cjs +4 -0
  97. package/dist/chunk-CJLLIVSB.cjs.map +1 -0
  98. package/dist/chunk-CK3AMMSC.js +194 -0
  99. package/dist/chunk-CK3AMMSC.js.map +1 -0
  100. package/dist/chunk-COCKKMNP.cjs +205 -0
  101. package/dist/chunk-COCKKMNP.cjs.map +1 -0
  102. package/dist/chunk-CR5E2SF3.cjs +212 -0
  103. package/dist/chunk-CR5E2SF3.cjs.map +1 -0
  104. package/dist/chunk-CRCPRZFN.js +3 -0
  105. package/dist/chunk-CRCPRZFN.js.map +1 -0
  106. package/dist/chunk-CYRFD6KR.cjs +4 -0
  107. package/dist/chunk-CYRFD6KR.cjs.map +1 -0
  108. package/dist/chunk-D3PW7AHZ.js +3 -0
  109. package/dist/chunk-D3PW7AHZ.js.map +1 -0
  110. package/dist/chunk-DKEYSJCE.cjs +82 -0
  111. package/dist/chunk-DKEYSJCE.cjs.map +1 -0
  112. package/dist/chunk-DPSMVOM3.js +15 -0
  113. package/dist/chunk-DPSMVOM3.js.map +1 -0
  114. package/dist/chunk-E2ZXHS6E.js +20 -0
  115. package/dist/chunk-E2ZXHS6E.js.map +1 -0
  116. package/dist/chunk-E37CVHWW.js +33 -0
  117. package/dist/chunk-E37CVHWW.js.map +1 -0
  118. package/dist/chunk-E5BM4BLO.js +78 -0
  119. package/dist/chunk-E5BM4BLO.js.map +1 -0
  120. package/dist/chunk-EHRWTYGR.cjs +4 -0
  121. package/dist/chunk-EHRWTYGR.cjs.map +1 -0
  122. package/dist/chunk-EJSGJDZY.js +212 -0
  123. package/dist/chunk-EJSGJDZY.js.map +1 -0
  124. package/dist/chunk-ELSOVJPF.js +3 -0
  125. package/dist/chunk-ELSOVJPF.js.map +1 -0
  126. package/dist/chunk-ERLXU47J.js +29 -0
  127. package/dist/chunk-ERLXU47J.js.map +1 -0
  128. package/dist/chunk-ES2E65HT.js +3 -0
  129. package/dist/chunk-ES2E65HT.js.map +1 -0
  130. package/dist/chunk-EXLAHZKF.js +3 -0
  131. package/dist/chunk-EXLAHZKF.js.map +1 -0
  132. package/dist/chunk-FB3S2FON.cjs +233 -0
  133. package/dist/chunk-FB3S2FON.cjs.map +1 -0
  134. package/dist/chunk-FHEYAW5H.js +3 -0
  135. package/dist/chunk-FHEYAW5H.js.map +1 -0
  136. package/dist/chunk-GA4LZZKQ.cjs +104 -0
  137. package/dist/chunk-GA4LZZKQ.cjs.map +1 -0
  138. package/dist/chunk-GAZJ2PA3.js +3 -0
  139. package/dist/chunk-GAZJ2PA3.js.map +1 -0
  140. package/dist/chunk-GB6C5OEZ.cjs +32 -0
  141. package/dist/chunk-GB6C5OEZ.cjs.map +1 -0
  142. package/dist/chunk-GB724HW2.cjs +106 -0
  143. package/dist/chunk-GB724HW2.cjs.map +1 -0
  144. package/dist/chunk-GD24ZRFD.js +3 -0
  145. package/dist/chunk-GD24ZRFD.js.map +1 -0
  146. package/dist/chunk-GI7LROLL.cjs +4 -0
  147. package/dist/chunk-GI7LROLL.cjs.map +1 -0
  148. package/dist/chunk-GRFLPEM2.cjs +16 -0
  149. package/dist/chunk-GRFLPEM2.cjs.map +1 -0
  150. package/dist/chunk-GVIFLUYZ.cjs +40 -0
  151. package/dist/chunk-GVIFLUYZ.cjs.map +1 -0
  152. package/dist/chunk-GWCOKNST.js +228 -0
  153. package/dist/chunk-GWCOKNST.js.map +1 -0
  154. package/dist/chunk-H7VQTG4M.js +35 -0
  155. package/dist/chunk-H7VQTG4M.js.map +1 -0
  156. package/dist/chunk-HAKYPZLB.cjs +242 -0
  157. package/dist/chunk-HAKYPZLB.cjs.map +1 -0
  158. package/dist/chunk-HFBR6G36.js +3 -0
  159. package/dist/chunk-HFBR6G36.js.map +1 -0
  160. package/dist/chunk-HGCVWOGK.cjs +209 -0
  161. package/dist/chunk-HGCVWOGK.cjs.map +1 -0
  162. package/dist/chunk-HLHR3R4P.js +3 -0
  163. package/dist/chunk-HLHR3R4P.js.map +1 -0
  164. package/dist/chunk-HRXXGGSJ.js +3 -0
  165. package/dist/chunk-HRXXGGSJ.js.map +1 -0
  166. package/dist/chunk-I3TYBAOX.js +3 -0
  167. package/dist/chunk-I3TYBAOX.js.map +1 -0
  168. package/dist/chunk-I4A5VJRL.js +352 -0
  169. package/dist/chunk-I4A5VJRL.js.map +1 -0
  170. package/dist/chunk-I6CXC345.js +102 -0
  171. package/dist/chunk-I6CXC345.js.map +1 -0
  172. package/dist/chunk-IGOPUMEX.cjs +4 -0
  173. package/dist/chunk-IGOPUMEX.cjs.map +1 -0
  174. package/dist/chunk-IHKIYVZQ.js +30 -0
  175. package/dist/chunk-IHKIYVZQ.js.map +1 -0
  176. package/dist/chunk-IMC2M5YM.cjs +12 -0
  177. package/dist/chunk-IMC2M5YM.cjs.map +1 -0
  178. package/dist/chunk-IQ6KWSXP.js +3 -0
  179. package/dist/chunk-IQ6KWSXP.js.map +1 -0
  180. package/dist/chunk-IS26FJO7.cjs +4 -0
  181. package/dist/chunk-IS26FJO7.cjs.map +1 -0
  182. package/dist/chunk-J4WFSKY6.js +50 -0
  183. package/dist/chunk-J4WFSKY6.js.map +1 -0
  184. package/dist/chunk-J5LGGCAS.cjs +126 -0
  185. package/dist/chunk-J5LGGCAS.cjs.map +1 -0
  186. package/dist/chunk-JDEZHITT.js +43 -0
  187. package/dist/chunk-JDEZHITT.js.map +1 -0
  188. package/dist/chunk-JGS6YBDW.js +260 -0
  189. package/dist/chunk-JGS6YBDW.js.map +1 -0
  190. package/dist/chunk-JMOKD6ZP.js +46 -0
  191. package/dist/chunk-JMOKD6ZP.js.map +1 -0
  192. package/dist/chunk-JOX5BJ6K.cjs +4 -0
  193. package/dist/chunk-JOX5BJ6K.cjs.map +1 -0
  194. package/dist/chunk-JTAW54UM.js +116 -0
  195. package/dist/chunk-JTAW54UM.js.map +1 -0
  196. package/dist/chunk-K4RQOSJH.js +203 -0
  197. package/dist/chunk-K4RQOSJH.js.map +1 -0
  198. package/dist/chunk-KAIE6WJB.cjs +4 -0
  199. package/dist/chunk-KAIE6WJB.cjs.map +1 -0
  200. package/dist/chunk-KEDPGWIK.cjs +4 -0
  201. package/dist/chunk-KEDPGWIK.cjs.map +1 -0
  202. package/dist/chunk-KG4R454Z.js +18 -0
  203. package/dist/chunk-KG4R454Z.js.map +1 -0
  204. package/dist/chunk-KGKCAGRD.cjs +22 -0
  205. package/dist/chunk-KGKCAGRD.cjs.map +1 -0
  206. package/dist/chunk-KNMW722T.cjs +48 -0
  207. package/dist/chunk-KNMW722T.cjs.map +1 -0
  208. package/dist/chunk-KTTL7BND.cjs +4 -0
  209. package/dist/chunk-KTTL7BND.cjs.map +1 -0
  210. package/dist/chunk-KXEWTYS4.cjs +80 -0
  211. package/dist/chunk-KXEWTYS4.cjs.map +1 -0
  212. package/dist/chunk-KZQKFBRN.js +3 -0
  213. package/dist/chunk-KZQKFBRN.js.map +1 -0
  214. package/dist/chunk-LAWYFC4G.cjs +37 -0
  215. package/dist/chunk-LAWYFC4G.cjs.map +1 -0
  216. package/dist/chunk-LHRQXWI5.js +3 -0
  217. package/dist/chunk-LHRQXWI5.js.map +1 -0
  218. package/dist/chunk-LKH5M44B.cjs +114 -0
  219. package/dist/chunk-LKH5M44B.cjs.map +1 -0
  220. package/dist/chunk-LLNNHLCE.cjs +4 -0
  221. package/dist/chunk-LLNNHLCE.cjs.map +1 -0
  222. package/dist/chunk-LWZLWSXD.cjs +4 -0
  223. package/dist/chunk-LWZLWSXD.cjs.map +1 -0
  224. package/dist/chunk-M6Y5TOYE.js +3 -0
  225. package/dist/chunk-M6Y5TOYE.js.map +1 -0
  226. package/dist/chunk-MBFUMWI5.cjs +31 -0
  227. package/dist/chunk-MBFUMWI5.cjs.map +1 -0
  228. package/dist/chunk-MEKI37WI.js +3 -0
  229. package/dist/chunk-MEKI37WI.js.map +1 -0
  230. package/dist/chunk-MQ74AKA2.cjs +200 -0
  231. package/dist/chunk-MQ74AKA2.cjs.map +1 -0
  232. package/dist/chunk-N6GLZOE4.cjs +282 -0
  233. package/dist/chunk-N6GLZOE4.cjs.map +1 -0
  234. package/dist/chunk-NBVARNVA.cjs +38 -0
  235. package/dist/chunk-NBVARNVA.cjs.map +1 -0
  236. package/dist/chunk-NCCBS6GU.js +42 -0
  237. package/dist/chunk-NCCBS6GU.js.map +1 -0
  238. package/dist/chunk-NGKODS3J.cjs +52 -0
  239. package/dist/chunk-NGKODS3J.cjs.map +1 -0
  240. package/dist/chunk-NJVSKUL2.cjs +4 -0
  241. package/dist/chunk-NJVSKUL2.cjs.map +1 -0
  242. package/dist/chunk-NLQQHJ25.cjs +104 -0
  243. package/dist/chunk-NLQQHJ25.cjs.map +1 -0
  244. package/dist/chunk-NNHWH7ER.js +181 -0
  245. package/dist/chunk-NNHWH7ER.js.map +1 -0
  246. package/dist/chunk-NX67YIF3.js +3 -0
  247. package/dist/chunk-NX67YIF3.js.map +1 -0
  248. package/dist/chunk-OA6FWYZF.cjs +4 -0
  249. package/dist/chunk-OA6FWYZF.cjs.map +1 -0
  250. package/dist/chunk-OJDBSKC2.js +3 -0
  251. package/dist/chunk-OJDBSKC2.js.map +1 -0
  252. package/dist/chunk-OLPA44QJ.js +3 -0
  253. package/dist/chunk-OLPA44QJ.js.map +1 -0
  254. package/dist/chunk-OMH7ATOQ.js +3 -0
  255. package/dist/chunk-OMH7ATOQ.js.map +1 -0
  256. package/dist/chunk-OPR4TULG.js +3 -0
  257. package/dist/chunk-OPR4TULG.js.map +1 -0
  258. package/dist/chunk-OSX2GVZ2.cjs +34 -0
  259. package/dist/chunk-OSX2GVZ2.cjs.map +1 -0
  260. package/dist/chunk-OXQKE5EG.cjs +282 -0
  261. package/dist/chunk-OXQKE5EG.cjs.map +1 -0
  262. package/dist/chunk-P6E4QDJN.js +30 -0
  263. package/dist/chunk-P6E4QDJN.js.map +1 -0
  264. package/dist/chunk-PEMLIAPZ.cjs +64 -0
  265. package/dist/chunk-PEMLIAPZ.cjs.map +1 -0
  266. package/dist/chunk-PGYQ754I.js +3 -0
  267. package/dist/chunk-PGYQ754I.js.map +1 -0
  268. package/dist/chunk-PHEA6FVQ.js +184 -0
  269. package/dist/chunk-PHEA6FVQ.js.map +1 -0
  270. package/dist/chunk-PMTM26LL.js +3 -0
  271. package/dist/chunk-PMTM26LL.js.map +1 -0
  272. package/dist/chunk-PY4OEKNX.cjs +4 -0
  273. package/dist/chunk-PY4OEKNX.cjs.map +1 -0
  274. package/dist/chunk-PZS2EXDR.cjs +4 -0
  275. package/dist/chunk-PZS2EXDR.cjs.map +1 -0
  276. package/dist/chunk-QRHJEITQ.cjs +4 -0
  277. package/dist/chunk-QRHJEITQ.cjs.map +1 -0
  278. package/dist/chunk-QUFU5RJ7.cjs +4 -0
  279. package/dist/chunk-QUFU5RJ7.cjs.map +1 -0
  280. package/dist/chunk-QVQCKOBM.js +3 -0
  281. package/dist/chunk-QVQCKOBM.js.map +1 -0
  282. package/dist/chunk-R63TTR35.cjs +200 -0
  283. package/dist/chunk-R63TTR35.cjs.map +1 -0
  284. package/dist/chunk-RA42NMWV.cjs +4 -0
  285. package/dist/chunk-RA42NMWV.cjs.map +1 -0
  286. package/dist/chunk-RAZN6C5R.cjs +12 -0
  287. package/dist/chunk-RAZN6C5R.cjs.map +1 -0
  288. package/dist/chunk-RHETJOUM.cjs +4 -0
  289. package/dist/chunk-RHETJOUM.cjs.map +1 -0
  290. package/dist/chunk-RJIJVVXS.js +3 -0
  291. package/dist/chunk-RJIJVVXS.js.map +1 -0
  292. package/dist/chunk-RKVRCNMB.js +3 -0
  293. package/dist/chunk-RKVRCNMB.js.map +1 -0
  294. package/dist/chunk-S7JQKNVT.cjs +187 -0
  295. package/dist/chunk-S7JQKNVT.cjs.map +1 -0
  296. package/dist/chunk-SBV5MWEL.cjs +53 -0
  297. package/dist/chunk-SBV5MWEL.cjs.map +1 -0
  298. package/dist/chunk-SFB4YLCS.js +121 -0
  299. package/dist/chunk-SFB4YLCS.js.map +1 -0
  300. package/dist/chunk-SLPD47SR.js +3 -0
  301. package/dist/chunk-SLPD47SR.js.map +1 -0
  302. package/dist/chunk-SS3B6PHT.cjs +35 -0
  303. package/dist/chunk-SS3B6PHT.cjs.map +1 -0
  304. package/dist/chunk-SUCHGNYT.js +3 -0
  305. package/dist/chunk-SUCHGNYT.js.map +1 -0
  306. package/dist/chunk-SYVNY3AH.cjs +44 -0
  307. package/dist/chunk-SYVNY3AH.cjs.map +1 -0
  308. package/dist/chunk-T3SYREY4.js +29 -0
  309. package/dist/chunk-T3SYREY4.js.map +1 -0
  310. package/dist/chunk-T7N7DFQJ.js +198 -0
  311. package/dist/chunk-T7N7DFQJ.js.map +1 -0
  312. package/dist/chunk-TRCENAIY.cjs +4 -0
  313. package/dist/chunk-TRCENAIY.cjs.map +1 -0
  314. package/dist/chunk-TVENC6PH.js +186 -0
  315. package/dist/chunk-TVENC6PH.js.map +1 -0
  316. package/dist/chunk-U4T3Z3K7.cjs +325 -0
  317. package/dist/chunk-U4T3Z3K7.cjs.map +1 -0
  318. package/dist/chunk-UIFFNTUX.js +3 -0
  319. package/dist/chunk-UIFFNTUX.js.map +1 -0
  320. package/dist/chunk-V4GPQ6Y2.js +3 -0
  321. package/dist/chunk-V4GPQ6Y2.js.map +1 -0
  322. package/dist/chunk-VGTRKXF2.js +93 -0
  323. package/dist/chunk-VGTRKXF2.js.map +1 -0
  324. package/dist/chunk-VGWOIWRQ.cjs +202 -0
  325. package/dist/chunk-VGWOIWRQ.cjs.map +1 -0
  326. package/dist/chunk-VLCNNA76.cjs +4 -0
  327. package/dist/chunk-VLCNNA76.cjs.map +1 -0
  328. package/dist/chunk-VPAUN75Q.js +3 -0
  329. package/dist/chunk-VPAUN75Q.js.map +1 -0
  330. package/dist/chunk-VT237QF2.js +3 -0
  331. package/dist/chunk-VT237QF2.js.map +1 -0
  332. package/dist/chunk-VV4TZG5S.js +321 -0
  333. package/dist/chunk-VV4TZG5S.js.map +1 -0
  334. package/dist/chunk-VYK6MBL4.cjs +4 -0
  335. package/dist/chunk-VYK6MBL4.cjs.map +1 -0
  336. package/dist/chunk-W33CKW6Q.cjs +4 -0
  337. package/dist/chunk-W33CKW6Q.cjs.map +1 -0
  338. package/dist/chunk-W5VHATSR.cjs +31 -0
  339. package/dist/chunk-W5VHATSR.cjs.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-XWKNE6DH.cjs +4 -0
  357. package/dist/chunk-XWKNE6DH.cjs.map +1 -0
  358. package/dist/chunk-Y6V6CBY5.js +23 -0
  359. package/dist/chunk-Y6V6CBY5.js.map +1 -0
  360. package/dist/chunk-Y6VDCZPB.js +62 -0
  361. package/dist/chunk-Y6VDCZPB.js.map +1 -0
  362. package/dist/chunk-YDRXBRW2.cjs +184 -0
  363. package/dist/chunk-YDRXBRW2.cjs.map +1 -0
  364. package/dist/chunk-YFS2LMG4.cjs +124 -0
  365. package/dist/chunk-YFS2LMG4.cjs.map +1 -0
  366. package/dist/chunk-YN6CBIIB.js +63 -0
  367. package/dist/chunk-YN6CBIIB.js.map +1 -0
  368. package/dist/chunk-YOJ2XNQX.cjs +4 -0
  369. package/dist/chunk-YOJ2XNQX.cjs.map +1 -0
  370. package/dist/chunk-YOOZB4RL.js +3 -0
  371. package/dist/chunk-YOOZB4RL.js.map +1 -0
  372. package/dist/chunk-YVU2M7MI.js +34 -0
  373. package/dist/chunk-YVU2M7MI.js.map +1 -0
  374. package/dist/chunk-YXBZRB5H.cjs +4 -0
  375. package/dist/chunk-YXBZRB5H.cjs.map +1 -0
  376. package/dist/chunk-Z3ZKFI2M.js +43 -0
  377. package/dist/chunk-Z3ZKFI2M.js.map +1 -0
  378. package/dist/chunk-Z5GLY4R3.js +112 -0
  379. package/dist/chunk-Z5GLY4R3.js.map +1 -0
  380. package/dist/chunk-Z5OMWAQX.js +3 -0
  381. package/dist/chunk-Z5OMWAQX.js.map +1 -0
  382. package/dist/chunk-Z7LGWNI7.js +38 -0
  383. package/dist/chunk-Z7LGWNI7.js.map +1 -0
  384. package/dist/chunk-ZCWKX4V6.cjs +38 -0
  385. package/dist/chunk-ZCWKX4V6.cjs.map +1 -0
  386. package/dist/chunk-ZE5RISBZ.cjs +4 -0
  387. package/dist/chunk-ZE5RISBZ.cjs.map +1 -0
  388. package/dist/chunk-ZH4F2P2G.js +3 -0
  389. package/dist/chunk-ZH4F2P2G.js.map +1 -0
  390. package/dist/chunk-ZJGFLJ2Z.cjs +4 -0
  391. package/dist/chunk-ZJGFLJ2Z.cjs.map +1 -0
  392. package/dist/chunk-ZKBHD27K.cjs +4 -0
  393. package/dist/chunk-ZKBHD27K.cjs.map +1 -0
  394. package/dist/chunk-ZQPLRNKX.cjs +4 -0
  395. package/dist/chunk-ZQPLRNKX.cjs.map +1 -0
  396. package/dist/chunk-ZQQABQMH.cjs +31 -0
  397. package/dist/chunk-ZQQABQMH.cjs.map +1 -0
  398. package/dist/chunk-ZXJQSFIA.js +200 -0
  399. package/dist/chunk-ZXJQSFIA.js.map +1 -0
  400. package/dist/chunk-ZYPH2FPT.js +3 -0
  401. package/dist/chunk-ZYPH2FPT.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 +237 -0
  479. package/dist/entries/credits.d.ts +237 -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 +67 -10895
  707. package/dist/index.d.ts +67 -10895
  708. package/dist/index.js +100 -5074
  709. package/dist/index.js.map +1 -1
  710. package/dist/nodes-C-wrO6Sg.d.ts +1364 -0
  711. package/dist/nodes-J8ByUN8z.d.cts +1364 -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/jobs.ts"],"names":[],"mappings":";AAgMA,SAAS,UAAU,KAAA,EAAmE;AACpF,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,KAAA,CAAM,KAAK,GAAG,CAAA;AAC3D;AAgCO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,MAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAA2B;AAAA,EAA3B,MAAA;AAAA;AAAA,EAGpB,IAAI,EAAA,EAAoC;AACtC,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,KAAA,EAAO,YAAY,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAA,CAAK,MAAA,GAAyB,EAAC,EAA0B;AACvD,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,GAAG,MAAK,GAAI,MAAA;AAClC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAsB,KAAA,EAAO,UAAA,EAAY;AAAA,MAC1D,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,EAAG,IAAA,EAAM,SAAA,CAAU,IAAI,CAAA;AAAE,KACpE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAA,CAAK,IAAY,MAAA,EAAkD;AACjE,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAuB,KAAA,EAAO,YAAY,kBAAA,CAAmB,EAAE,CAAC,CAAA,OAAA,CAAA,EAAW;AAAA,MAC5F,IAAA,EAAM,EAAE,MAAA;AAAO,KAChB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,EAAA,EAAgD;AACxD,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,KAAA;AAAA,MACA,CAAA,SAAA,EAAY,kBAAA,CAAmB,EAAE,CAAC,CAAA,OAAA;AAAA,KACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,EAAA,EAAsC;AAC3C,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,MAAA;AAAA,MACA,CAAA,SAAA,EAAY,kBAAA,CAAmB,EAAE,CAAC,CAAA,OAAA;AAAA,KACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,EAAA,EAAsC;AAC3C,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,QAAA;AAAA,MACA,CAAA,SAAA,EAAY,kBAAA,CAAmB,EAAE,CAAC,CAAA;AAAA,KACpC;AAAA,EACF;AACF","file":"chunk-E5BM4BLO.js","sourcesContent":["import type { NodaroClientCore } from \"../core.js\"\n\n/**\n * A job's lifecycle status. Hand-copied mirror of `JOB_STATUSES` in the\n * platform's `backend/src/lib/job-status.ts` — nothing links the two at build\n * time, so a new member has to be added here in the same change.\n *\n * `pending_review` is IN-FLIGHT, NOT TERMINAL: a job policy registered by the\n * deployment held the output for a human reviewer. Treat it like `processing`\n * in a `switch` — keep waiting, do not re-run — and it resolves to `completed`\n * (approved), `failed` (rejected, carrying an `error_hint` with\n * `kind: \"policy-block\"`) or `cancelled` (a held job is cancellable like any\n * in-flight job). `credit_status` reads `\"reserved\"` for the whole hold. Only\n * appears on deployments that register a job policy; `runAndWait` throws\n * {@link JobHeldError} on the first held tick rather than waiting it out.\n */\nexport type JobStatus =\n | \"pending\"\n | \"queued\"\n | \"processing\"\n | \"pending_review\"\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n\n/**\n * A PROVIDER's verdict: the model's own safety filter refused the output.\n * `class` distinguishes a deterministic block (copyright/likeness — retrying\n * the same request never helps) from `safety`, whose filter is known to be\n * non-deterministic for some models: `retried` says whether the worker\n * already spent its one extra attempt, and `suggestedProvider` — present\n * only when the catalog declares a fallback for the model that failed — is a\n * real model id the SAME prompt/references can be retried on.\n */\nexport type SafetyBlockHint = {\n kind: \"safety-block\"\n class: \"copyright\" | \"likeness\" | \"safety\"\n retried: boolean\n suggestedProvider?: string\n}\n\n/**\n * A NODARO-side verdict, not a provider's: a job policy registered by the\n * deployment rejected the request (`hookPoint: \"request\"` — nothing ran, and\n * the call itself failed with {@link JobBlockedError}) or the finished output\n * (`hookPoint: \"result\"` — the result was blocked and never published).\n *\n * `reason` is USER-SAFE BY CONTRACT — the platform guarantees the policy's\n * machine text (scores, labels) never reaches it — so show it to the person\n * who made the request as-is. `policyId` identifies the deployment's policy,\n * not a Nodaro product feature. Only occurs on deployments that register a\n * job policy.\n */\nexport type PolicyBlockHint = {\n kind: \"policy-block\"\n policyId: string\n reason: string\n hookPoint: \"request\" | \"result\"\n}\n\n/**\n * A job's `jobs.error_hint` (migration 376) — a user-safe, machine-readable\n * failure verdict, so a caller can act on it without parsing `error_message`\n * prose. One column, two verdict sources; `kind` is the discriminant.\n *\n * HAND-COPIED MIRROR of `ErrorHint` in the platform's\n * `backend/src/lib/safety-block.ts` (which names this file in its own\n * comment). Nothing links the two at build time: a new arm there has to be\n * pasted here verbatim in the same change, with a changeset.\n * `packages/client/dist/index.d.ts` is REBUILT, never hand-edited.\n */\nexport type JobErrorHint = SafetyBlockHint | PolicyBlockHint\n\n/**\n * The billing lifecycle of a job's credit reservation — `usage_logs.status`\n * for the job's `usage_log_id`. `null` when the job has no usage log (e.g. a\n * free run) or hasn't reserved credits yet.\n */\nexport type CreditStatus = \"reserved\" | \"committed\" | \"refunded\"\n\n/** A job owner's rating of their job — set with {@link JobsResource.rate}. */\nexport type JobRating = \"good\" | \"bad\"\n\n/**\n * The `rating` filter of {@link JobsResource.list}: one rating, any rating\n * (`\"rated\"`) or none (`\"unrated\"`).\n */\nexport type JobRatingFilter = JobRating | \"rated\" | \"unrated\"\n\n/**\n * Job record returned to non-admin SDK consumers. Field names are snake_case\n * to match the wire format (per the OpenAPI fix in Phase 1).\n *\n * Sensitive fields stripped server-side for non-admin callers:\n * `provider`, `provider_cost`, `display_cost`, `credits_actual`. USD\n * pricing is admin-only across api/sdk/mcp — non-admin consumers see\n * only the `credits` abstraction. Server-only nested job data (including\n * Recast's private remux base) is stripped for every caller, including admins.\n */\nexport interface Job {\n id: string\n status: JobStatus\n progress: number\n user_id: string\n input_data: unknown\n output_data: unknown\n error_message: string | null\n /** Present on a failed job the worker classified as a provider\n * content-policy block (`kind: \"safety-block\"`) or that a deployment's job\n * policy rejected (`kind: \"policy-block\"`); absent/null otherwise.\n * User-safe by construction — narrow on `kind` before reading the rest. */\n error_hint?: JobErrorHint | null\n /** PR9: the job's credit reservation lifecycle, derived server-side from\n * `usage_logs.status`. `null` when there is no usage log to report. Never\n * changes the meaning of `credits` (the reserved amount) below. */\n credit_status?: CreditStatus | null\n /** The credits HELD when the job was accepted. Never changes — a job can\n * settle below it; read {@link Job.credits_charged} for what it cost. */\n credits: number | null\n /**\n * What the job actually cost once its hold settled. Can be lower than\n * `credits` (the unused part goes back to the balance), `0` when the hold was\n * refunded, `null` while the job is still running or when it reserved\n * nothing of its own. Sum this — not `credits` — to total spend. Returned by\n * `get()` and `list()`.\n */\n credits_charged?: number | null\n job_type: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n /**\n * Provenance: which kind of caller created the job — one of\n * `\"internal\" | \"mcp\" | \"app\" | \"cli\" | \"sdk\" | \"extension\" | \"web\" | \"api\"`.\n * `source_detail` narrows it (origin host, `extension/<name>` label,\n * `sdk/<version>`, MCP client name, developer-app id). Descriptive only;\n * lets a library view label or filter media by origin.\n */\n source?: string | null\n source_detail?: string | null\n /** The generation session this job was born in (the `sessionId` sent with\n * the generation request), or null. See `client.sessions`. */\n session_id?: string | null\n /**\n * Whether the job's owner favorited it (`client.gallery.toggleFavorite`).\n * Returned by `get()` and `list()`. Absent from an older server, and when\n * the server could not read it for a moment — treat absent as unknown,\n * never as `false`.\n */\n favorited?: boolean\n /**\n * The owner's rating of the job ({@link JobsResource.rate}), or `null` when\n * unrated. Returned by `get()` and `list()`; absent like `favorited`.\n */\n rating?: JobRating | null\n}\n\nexport interface CancelJobResult {\n success: true\n cancelled: number\n}\n\nexport interface DeleteJobResult {\n success: true\n}\n\nexport interface ListJobsParams {\n /** One status or several (a job matching any of them). An unknown status is a 400. */\n status?: JobStatus | readonly JobStatus[]\n /** Exact match on `input_data.type` — the route that created the job\n * (`\"llm-structured\"`, `\"video-analysis\"`, …). One value or several (up to 20). */\n type?: string | readonly string[]\n /** Exact match on `input_data.origin` — the client app that sent it. */\n origin?: string\n /** `true`: only jobs you favorited; `false`: only jobs you did not. */\n favorited?: boolean\n /** Your rating: `\"good\"`, `\"bad\"`, any (`\"rated\"`) or none (`\"unrated\"`). */\n rating?: JobRatingFilter\n /** The jobs of one generate-image batch (`count` / `models`) — its `batchId`. */\n batchId?: string\n /** Page size, 1–100 (server default 50). */\n limit?: number\n /** The previous page's `next`. */\n cursor?: string\n}\n\n/** What {@link JobsResource.rate} answers: the job's rating now. */\nexport interface RateJobResult {\n data: { jobId: string; rating: JobRating | null }\n}\n\n/** A list filter value as the query string carries it: several are comma-separated. */\nfunction listParam(value: string | readonly string[] | undefined): string | undefined {\n if (value === undefined) return undefined\n return typeof value === \"string\" ? value : value.join(\",\")\n}\n\nexport interface ListJobsPage {\n /**\n * A page may hold fewer than `limit` rows — even none — and still carry a\n * `next`. Page on `next`, never on `data.length`.\n */\n data: Job[]\n /** Pass back as `cursor` for the next page; `null` on the last one. */\n next: string | null\n}\n\n/**\n * Lean job status returned by `GET /v1/jobs/:id/status`. Skips the\n * `input_data` JSONB and cost columns. Its `output_data` still goes\n * through the server-only nested-field redaction. Intended for poll loops that\n * only need progress/output/error, and when the job finished.\n */\nexport interface JobStatusResult {\n id: string\n status: JobStatus\n progress?: number\n output_data?: unknown\n error_message?: string | null\n /** PR9: see {@link Job.error_hint}. */\n error_hint?: JobErrorHint | null\n /** PR9: see {@link Job.credit_status}. */\n credit_status?: CreditStatus | null\n /** When the job finished, on the server's clock; null until it has. */\n completed_at?: string | null\n}\n\nexport class JobsResource {\n constructor(private client: NodaroClientCore) {}\n\n /** Get a single job by ID. */\n get(id: string): Promise<{ data: Job }> {\n return this.client.request(\"GET\", `/v1/jobs/${encodeURIComponent(id)}`)\n }\n\n /**\n * Your jobs, newest first (`GET /v1/jobs`), cursor-paginated. `type` and\n * `origin` filter on the job's own `input_data`, which every job carries —\n * a client app lists its runs with `{ type: \"llm-structured\", origin: \"studio\" }`.\n * `status` and `type` take one value or a list; `favorited` and `rating`\n * filter on your own marks. Every filter combines with AND, and each job\n * carries `favorited` and `rating`.\n */\n list(params: ListJobsParams = {}): Promise<ListJobsPage> {\n const { status, type, ...rest } = params\n return this.client.request<ListJobsPage>(\"GET\", \"/v1/jobs\", {\n query: { ...rest, status: listParam(status), type: listParam(type) },\n })\n }\n\n /**\n * Rate one of your jobs `\"good\"` or `\"bad\"`, or clear the rating with\n * `null` (`PUT /v1/jobs/:id/rating`). Only the job's owner rates it — anyone\n * else's job is a `NotFoundError`. The rating reads back as `Job.rating`\n * and filters {@link list}. OAuth apps need the `assets:write` scope.\n */\n rate(id: string, rating: JobRating | null): Promise<RateJobResult> {\n return this.client.request<RateJobResult>(\"PUT\", `/v1/jobs/${encodeURIComponent(id)}/rating`, {\n body: { rating },\n })\n }\n\n /**\n * Get the lean status of a single job (poll-loop friendly).\n * Hits `GET /v1/jobs/:id/status` — returns only id/status/progress/\n * output_data/error_message, with far less wire/CPU cost than `get()`.\n * Same auth + ownership semantics as {@link get}.\n */\n getStatus(id: string): Promise<{ data: JobStatusResult }> {\n return this.client.request(\n \"GET\",\n `/v1/jobs/${encodeURIComponent(id)}/status`,\n )\n }\n\n /**\n * Cancel a job. Server route is `POST /v1/jobs/:jobId/cancel`.\n * Refunds any reserved credit holds.\n */\n cancel(id: string): Promise<CancelJobResult> {\n return this.client.request(\n \"POST\",\n `/v1/jobs/${encodeURIComponent(id)}/cancel`,\n )\n }\n\n /**\n * Delete a job and the private media it produced. Server route is\n * `DELETE /v1/jobs/:jobId`. Only the job's owner (or an admin) may delete it;\n * a job that is still running is deleted as-is — cancel it first when its\n * worker should stop ({@link cancel}).\n */\n delete(id: string): Promise<DeleteJobResult> {\n return this.client.request(\n \"DELETE\",\n `/v1/jobs/${encodeURIComponent(id)}`,\n )\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-EHRWTYGR.cjs.map
4
+ //# sourceMappingURL=chunk-EHRWTYGR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-EHRWTYGR.cjs"}
@@ -0,0 +1,212 @@
1
+ import { buildPersonHints } from '@nodaro/prompts/person';
2
+ export { PEOPLE, PERSON_DIMENSION_LABELS, PERSON_DIMENSION_ORDER, buildPersonHints } from '@nodaro/prompts/person';
3
+ export { CHARACTER_ASPECT_DEFAULTS, CHARACTER_ASPECT_OPTIONS, CHARACTER_STYLES } from '@nodaro/shared/entities';
4
+
5
+ // src/resources/characters.ts
6
+ var CharactersResource = class {
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ client;
11
+ /**
12
+ * List the caller's characters. By default returns active characters only;
13
+ * pass `archived: true` to fetch soft-deleted rows for an "archive" view.
14
+ * When `projectId` is set, only characters belonging to that project are
15
+ * returned; `q` keeps the ones whose name or description contains it.
16
+ *
17
+ * Cursor-paginated: a response carrying a non-null `nextCursor` means more
18
+ * rows exist. Pass it back as `cursor` to fetch the next page, and keep going
19
+ * until `nextCursor` is `null` — a single call returns at most `limit` rows
20
+ * (default 100), so treating one call as "all characters" silently truncates
21
+ * the list for anyone past that count.
22
+ *
23
+ * ```ts
24
+ * const all: Character[] = []
25
+ * let cursor: string | undefined
26
+ * do {
27
+ * const page = await client.characters.list({ cursor })
28
+ * all.push(...page.characters)
29
+ * cursor = page.nextCursor ?? undefined
30
+ * } while (cursor)
31
+ * ```
32
+ */
33
+ list(params = {}) {
34
+ const query = {};
35
+ if (params.projectId) query.projectId = params.projectId;
36
+ if (params.archived) query.archived = "true";
37
+ if (params.q) query.q = params.q;
38
+ if (params.limit !== void 0) query.limit = String(params.limit);
39
+ if (params.cursor) query.cursor = params.cursor;
40
+ return this.client.request("GET", "/v1/characters", { query });
41
+ }
42
+ /**
43
+ * Fetch a single character including in-flight portrait / asset job state.
44
+ * Soft-deleted (archived) rows are returned by id intentionally so canvas
45
+ * nodes that hold a stale `characterDbId` keep loading. Pass
46
+ * `{ candidates: "all" }` to also get the current portrait's own take in
47
+ * `previousCandidates` (flagged `isPortrait: true`).
48
+ */
49
+ get(id, options = {}) {
50
+ const query = {};
51
+ if (options.candidates) query.candidates = options.candidates;
52
+ return this.client.request("GET", `/v1/characters/${encodeURIComponent(id)}`, { query });
53
+ }
54
+ /**
55
+ * Create or update a character. Omit `id` to create; supply it to update
56
+ * (only the fields you pass get written — undefined keys are untouched).
57
+ *
58
+ * If the caller-supplied `name` collides with an existing active character
59
+ * for this user, the request returns 409 `name_taken`. To auto-number a
60
+ * placeholder, pass the placeholder name from `@nodaro/shared` and the
61
+ * server will derive "Untitled character 2", "Untitled character 3", etc.
62
+ */
63
+ upsert(input) {
64
+ return this.client.request("POST", "/v1/characters", { body: input });
65
+ }
66
+ /**
67
+ * Convenience wrapper around `upsert()` for creating new characters.
68
+ * Equivalent to `upsert({ ...input, id: undefined })`. `name` is REQUIRED
69
+ * on create — the route 400s on INSERT-without-name; we narrow the type
70
+ * here so callers fail at compile-time rather than runtime.
71
+ */
72
+ create(input) {
73
+ return this.upsert(input);
74
+ }
75
+ /**
76
+ * Convenience wrapper around `upsert()` for updating an existing character.
77
+ * Equivalent to `upsert({ ...input, id })`.
78
+ */
79
+ update(id, input) {
80
+ return this.upsert({ ...input, id });
81
+ }
82
+ /**
83
+ * Soft-delete (archive) a character. The row is hidden from `list()` by
84
+ * default but still loadable via `get(id)` so canvas nodes pointing at it
85
+ * keep working. Restore with `restore(id)`.
86
+ */
87
+ delete(id) {
88
+ return this.client.request("DELETE", `/v1/characters/${encodeURIComponent(id)}`);
89
+ }
90
+ /**
91
+ * Un-archive a character. If the original name now collides with an
92
+ * active row, the server auto-suffixes "(restored)" and returns the
93
+ * effective name.
94
+ */
95
+ restore(id) {
96
+ return this.client.request("POST", `/v1/characters/${encodeURIComponent(id)}/restore`);
97
+ }
98
+ /**
99
+ * Duplicate (fork) a character to a new row with a `"(copy)"` suffix.
100
+ * Asset URLs are shared by reference — the new row can diverge by
101
+ * regenerating any of them.
102
+ */
103
+ duplicate(id, input = {}) {
104
+ return this.client.request(
105
+ "POST",
106
+ `/v1/characters/${encodeURIComponent(id)}/duplicate`,
107
+ { body: input }
108
+ );
109
+ }
110
+ /**
111
+ * Count of the caller's workflows that reference this character. Powers the
112
+ * library "Archive" confirmation modal in the editor.
113
+ */
114
+ usage(id) {
115
+ return this.client.request("GET", `/v1/characters/${encodeURIComponent(id)}/usage`);
116
+ }
117
+ /**
118
+ * Fire `POST /v1/generate-character` to produce one or more portrait
119
+ * candidates. With `count > 1`, all jobs are reserved up-front before any
120
+ * is enqueued — mid-batch failures roll back atomically.
121
+ *
122
+ * When `attachToCharacterId` is set, the worker writes the result directly
123
+ * to the row's `source_image_url` (unless `attachPortrait: false`);
124
+ * otherwise you must call `approvePortrait()` after picking a candidate.
125
+ */
126
+ generate(input) {
127
+ return this.client.request("POST", "/v1/generate-character", { body: input });
128
+ }
129
+ /**
130
+ * Fire `POST /v1/generate-character-asset` to produce a single
131
+ * expression / pose / angle / lighting variant. When the studio path is
132
+ * set (`attachToCharacterId` + `attachToColumn` + `attachName`), the
133
+ * worker appends `{ name: attachName, url: <result> }` to the named
134
+ * JSONB array column on completion.
135
+ */
136
+ generateAsset(input) {
137
+ return this.client.request("POST", "/v1/generate-character-asset", { body: input });
138
+ }
139
+ /**
140
+ * Fire `POST /v1/generate-character-motion` to animate the character's
141
+ * portrait into a motion clip. The result is appended to the character's
142
+ * `motions[]` bucket when `attachToCharacterId` is set.
143
+ */
144
+ generateMotion(input) {
145
+ return this.client.request("POST", "/v1/generate-character-motion", { body: input });
146
+ }
147
+ /**
148
+ * Approve a completed `generate-character` job as the character's portrait.
149
+ * Sets `source_image_url` and fires the LLM caption (Claude Sonnet vision)
150
+ * inline. Returns the new portrait URL plus the caption — `canonicalDescription`
151
+ * is `null` if the LLM call sub-failed (portrait still set; retry via `recaption()`).
152
+ */
153
+ approvePortrait(id, candidateJobId) {
154
+ return this.client.request(
155
+ "POST",
156
+ `/v1/characters/${encodeURIComponent(id)}/approve-portrait`,
157
+ { body: { candidateJobId } }
158
+ );
159
+ }
160
+ /**
161
+ * Re-fire the LLM caption against the character's current portrait. 502s on
162
+ * LLM failure; returns 400 `no_portrait` if no portrait is set yet.
163
+ */
164
+ recaption(id) {
165
+ return this.client.request(
166
+ "POST",
167
+ `/v1/characters/${encodeURIComponent(id)}/llm-caption`
168
+ );
169
+ }
170
+ /**
171
+ * Start training a high-fidelity model of the character on its own images
172
+ * (Nodaro Cloud only — other editions answer `NotFoundError`). Reserves the
173
+ * training price up front and refunds it if the training fails or is
174
+ * cancelled. Resolves at once (202); a training takes about 15 minutes —
175
+ * follow it with {@link trainingStatus}. Once it succeeds, a workflow's
176
+ * Generate Image node whose prompt @-mentions this one character runs on the
177
+ * trained model.
178
+ *
179
+ * An OAuth app token needs the `assets:write` scope (`ForbiddenError`
180
+ * otherwise, before anything is reserved); a session or personal API key
181
+ * needs none. Refusals are `NodaroError`s whose `code` is a
182
+ * {@link TrainCharacterRefusalCode}; rate-limited to 3 calls a minute.
183
+ */
184
+ train(id, input = {}) {
185
+ return this.client.request("POST", `/v1/characters/${encodeURIComponent(id)}/train`, { body: input });
186
+ }
187
+ /**
188
+ * The character's training record (Nodaro Cloud only). Poll it while
189
+ * `status` is `queued` or `training` — every 10 s or so is plenty.
190
+ */
191
+ trainingStatus(id) {
192
+ return this.client.request("GET", `/v1/characters/${encodeURIComponent(id)}/training`);
193
+ }
194
+ /**
195
+ * Remove the character's trained model (Nodaro Cloud only): cancels a
196
+ * training in flight and refunds its reservation, deletes the model, and
197
+ * clears the training record (`trainingStatus` then reads `untrained`).
198
+ * Generations go back to reference images. Cannot be undone — a new model
199
+ * means a new, paid training. An OAuth app token needs the `assets:write`
200
+ * scope (`ForbiddenError` otherwise), like deleting the character.
201
+ */
202
+ async deleteLora(id) {
203
+ await this.client.request("DELETE", `/v1/characters/${encodeURIComponent(id)}/lora`);
204
+ }
205
+ };
206
+ function buildPersonSeedPrompt(value) {
207
+ return buildPersonHints(value).join(", ");
208
+ }
209
+
210
+ export { CharactersResource, buildPersonSeedPrompt };
211
+ //# sourceMappingURL=chunk-EJSGJDZY.js.map
212
+ //# sourceMappingURL=chunk-EJSGJDZY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resources/characters.ts"],"names":[],"mappings":";;;;;AA+hBO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAoB,MAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAA2B;AAAA,EAA3B,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBpB,IAAA,CAAK,MAAA,GAA+B,EAAC,EAAkC;AACrE,IAAA,MAAM,QAA4C,EAAC;AACnD,IAAA,IAAI,MAAA,CAAO,SAAA,EAAW,KAAA,CAAM,SAAA,GAAY,MAAA,CAAO,SAAA;AAC/C,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,KAAA,CAAM,QAAA,GAAW,MAAA;AACtC,IAAA,IAAI,MAAA,CAAO,CAAA,EAAG,KAAA,CAAM,CAAA,GAAI,MAAA,CAAO,CAAA;AAC/B,IAAA,IAAI,OAAO,KAAA,KAAU,MAAA,QAAiB,KAAA,GAAQ,MAAA,CAAO,OAAO,KAAK,CAAA;AACjE,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,MAAA;AACzC,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,gBAAA,EAAkB,EAAE,OAAO,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAA,CAAI,EAAA,EAAY,OAAA,GAA+B,EAAC,EAA6B;AAC3E,IAAA,MAAM,QAA4C,EAAC;AACnD,IAAA,IAAI,OAAA,CAAQ,UAAA,EAAY,KAAA,CAAM,UAAA,GAAa,OAAA,CAAQ,UAAA;AACnD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI,EAAE,KAAA,EAAO,CAAA;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,KAAA,EAA6D;AAClE,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,MAAA,EAAQ,kBAAkB,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OACE,KAAA,EACgC;AAChC,IAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CACE,IACA,KAAA,EACgC;AAChC,IAAA,OAAO,KAAK,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,IAAI,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,EAAA,EAAwD;AAC7D,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,QAAA,EAAU,kBAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,EAAA,EAAmD;AACzD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,MAAA,EAAQ,kBAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,QAAA,CAAU,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA,CAAU,EAAA,EAAY,KAAA,GAAiC,EAAC,EAA0C;AAChG,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,MAAA;AAAA,MACA,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,UAAA,CAAA;AAAA,MACxC,EAAE,MAAM,KAAA;AAAM,KAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,EAAA,EAAqC;AACzC,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,KAAA,EAAO,kBAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,MAAA,CAAQ,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAS,KAAA,EAAiE;AACxE,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,MAAA,EAAQ,0BAA0B,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,KAAA,EAAuD;AACnE,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,MAAA,EAAQ,gCAAgC,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,KAAA,EAAwD;AACrE,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,MAAA,EAAQ,iCAAiC,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAA,CAAgB,IAAY,cAAA,EAAwD;AAClF,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,MAAA;AAAA,MACA,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,iBAAA,CAAA;AAAA,MACxC,EAAE,IAAA,EAAM,EAAE,cAAA,EAAe;AAAE,KAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,EAAA,EAAsC;AAC9C,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,MAAA;AAAA,MACA,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,YAAA;AAAA,KAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,KAAA,CAAM,EAAA,EAAY,KAAA,GAA6B,EAAC,EAAkC;AAChF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,MAAA,CAAA,EAAU,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,EAAA,EAA8C;AAC3D,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,KAAA,EAAO,kBAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,SAAA,CAAW,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAW,EAAA,EAA2B;AAC1C,IAAA,MAAM,IAAA,CAAK,OAAO,OAAA,CAAQ,QAAA,EAAU,kBAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,KAAA,CAAO,CAAA;AAAA,EACrF;AACF;AAWO,SAAS,sBAAsB,KAAA,EAA4B;AAChE,EAAA,OAAO,gBAAA,CAAiB,KAA8C,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACnF","file":"chunk-EJSGJDZY.js","sourcesContent":["import { buildPersonHints, PEOPLE, PERSON_DIMENSION_ORDER, PERSON_DIMENSION_LABELS, type PersonValue } from \"@nodaro/prompts/person\"\nimport type { CharacterAspectRatio, CharacterAttachColumn, EntityStyle } from \"@nodaro/shared/entities\"\nimport type { TtsProvider } from \"@nodaro/shared/models\"\nexport type { EntityStyle, CharacterAspectRatio } from \"@nodaro/shared/entities\"\nexport { CHARACTER_STYLES, CHARACTER_ASPECT_OPTIONS, CHARACTER_ASPECT_DEFAULTS } from \"@nodaro/shared/entities\"\nimport type { NodaroClientCore } from \"../core.js\"\nimport type { GenerationSessionParams } from \"./nodes.js\"\n\n/**\n * Re-export the shared `EntityStyle` union (realistic | anime | 3d-pixar |\n * illustration) and `CHARACTER_STYLES` runtime tuple so SDK consumers don't\n * have to add `@nodaro/shared` as a second dependency just to typecheck the\n * `style` field. Single source of truth lives in `@nodaro/shared/entity-prompts`.\n */\n\n/**\n * Re-export the 4-value aspect-ratio union accepted by the generate-character*\n * routes. Single source of truth lives in `@nodaro/shared`. See\n * `CHARACTER_ASPECT_DEFAULTS` for the per-asset-type defaults.\n */\n\n/**\n * Structured Person composer, re-exported from `@nodaro/shared` so SDK\n * consumers can build a detailed person description — Identity, Body, and the\n * Face facial-geometry layer (cheekbones, canthal tilt, eyelid type, lip\n * fullness/shape, nose tip, etc.) — and feed it as `seedPrompt` / `description`\n * to `generate()` / `upsert()` without adding `@nodaro/shared` as a second dep.\n *\n * `buildPersonSeedPrompt` collapses a `PersonValue` into the same comma-joined\n * fragment the editor's Person picker produces (e.g. \"almond-shaped eyes,\n * sharply sculpted high cheekbones, full plump lips\"). Returns \"\" when empty.\n */\n\n\n/**\n * A character record returned by Nodaro's REST API. Mirrors the camelCase\n * shape produced by `backend/src/routes/characters.ts::toCamel()`.\n *\n * `expressions`, `poses`, `motions`, `angles`, `bodyAngles`,\n * `lightingVariations` are independent buckets keyed by a human-readable\n * variant name (e.g. `\"smile\"`, `\"standing\"`, `\"3/4 left\"`). Each entry's\n * `url` points at an R2-hosted asset.\n *\n * Identity-foundation fields:\n * - `referencePhotos` — caller-supplied real-life refs (max one per\n * non-`other` kind; cap 20 total). Drive the i2v / i2i path when a\n * provider supports multi-image conditioning.\n * - `realLifeRefsByVariant` — per-variant reference URLs (cap 20 keys,\n * 5 URLs per key). Keys are lowercased+trimmed.\n * - `referenceVideosByVariant` — per-label user-uploaded reference VIDEO\n * URLs (cap 20 keys, 5 URLs per key, lowercased+trimmed keys). Mirrors\n * `realLifeRefsByVariant` for video clips (e.g. emotion takes). Read the\n * chosen URLs off the row to drive generate-video's `referenceVideoUrls`.\n * - `seedPrompt` — short prompt fragment that scaffolds portrait gen.\n * - `canonicalDescription` — ~80–120-word LLM-authored visual caption,\n * populated by `approvePortrait()` / `recaption()`.\n */\nexport interface Character {\n id: string\n userId: string\n /** Canvas node linkage. `null` only on legacy clone rows that predate the\n * clone-side node_id fix (new clones mint one; creates always had one). */\n nodeId: string | null\n projectId: string | null\n name: string\n description: string | null\n gender: string | null\n style: string | null\n baseOutfit: string | null\n sourceImageUrl: string | null\n /** MODEL_CATALOG image-model id the main image was generated with (or `null`).\n * Set on create (the provider you generated with) + editable via `upsert`. */\n imageProvider: string | null\n expressions: Array<{ name: string; url: string }> | null\n poses: Array<{ name: string; url: string }> | null\n lightingVariations: Array<{ name: string; url: string }> | null\n angles: Array<{ name: string; url: string }> | null\n bodyAngles: Array<{ name: string; url: string }> | null\n motions: Array<{ name: string; url: string }> | null\n /** Named Character Boards — dense reference sheets, one per persona/look\n * (the `generate-image/character-board` factory preset rendered from the\n * character's images). A first-class bucket: community publish snapshots it\n * and clone hands the consumer their own copy to extend. Defaults to `[]`.\n * `type` marks an image-collage `\"identity\"` sheet vs a plain `\"looks\"`\n * board; `sourceImages` are the R2 URLs it was collaged from. Both optional\n * + backward-compatible (legacy boards have neither). */\n boards?: Array<{ name: string; url: string; type?: \"looks\" | \"identity\"; sourceImages?: string[] }> | null\n /** Per-label user-uploaded reference VIDEO URLs (R2), keyed by a\n * caller-owned label (lowercased+trimmed server-side). Mirrors\n * `realLifeRefsByVariant` for video clips; read the chosen URLs off the row\n * to feed generate-video's `referenceVideoUrls`. Defaults to `{}`. */\n referenceVideosByVariant?: Record<string, string[]> | null\n /** The user's chosen DEFAULT asset take per variant (Studio version history).\n * OPAQUE map: key `\"<bucket>:<variant>\"` (e.g. `\"bodyAngles:front\"`,\n * `\"expressions:smile\"`) → the chosen asset URL (one already present in that\n * bucket). Stored verbatim — keys are NOT normalized; soft-capped server-side\n * at 200 keys / 2048-char values (overflow dropped silently). Defaults to `{}`. */\n selectedAssetByVariant?: Record<string, string> | null\n /** `voiceType` records the selected voice's KIND (premade voices are\n * addressed by name; library/custom voices by id at text-to-speech time).\n * `previewUrl` is a playable audio sample (the voice's `preview_url` / clone\n * sample) the studio plays in an `<audio>` element — persisted so Voice Library\n * voices (which have no by-id lookup) stay previewable after reload. Client-\n * played only; the server never fetches it. `ttsProvider` is the library\n * voice's verified TTS provider (see `SharedVoice.recommendedProvider`) —\n * send it as the text-to-speech `provider` so the voice renders on a model\n * it's verified for. All optional — a character may have no voice, or a\n * legacy voice predating these fields. */\n voice: { voiceId: string; voiceName: string; traits: string; voiceType?: \"premade\" | \"library\" | \"custom\"; previewUrl?: string; ttsProvider?: TtsProvider } | null\n personality: {\n mood: string\n speechStyle: string\n movementStyle: string\n behavioralNotes: string\n } | null\n /** ~80–120-word LLM-authored visual caption (approve-portrait / recaption).\n * Optional on the read surface so existing literal consumers don't break;\n * the route always returns it (string | null). */\n canonicalDescription?: string | null\n /** Identity-lock strength for Character Studio asset generation. */\n identityLock?: \"off\" | \"soft\" | \"strict\"\n deletedAt: string | null\n createdAt: string\n updatedAt: string\n}\n\n/**\n * GET /v1/characters/:id appends three live-progress buckets the studio uses\n * to rehydrate spinners after a reload. Optional in the SDK surface — they\n * don't appear on `list()` rows.\n */\nexport interface CharacterDetail extends Character {\n pendingJobs?: Array<{\n jobId: string\n assetType: \"expressions\" | \"poses\" | \"angles\" | \"bodyAngles\" | \"lighting\" | \"motions\"\n name: string\n }>\n portraitCandidates?: Array<{\n jobId: string\n url: string | undefined\n progress: number\n status: string\n }>\n /** Recently completed portrait takes (7 days, newest first): at most 5\n * alternates, never the current portrait — plus, with\n * `get(id, { candidates: \"all\" })`, the current portrait's own take. */\n previousCandidates?: Array<{\n jobId: string\n url: string\n createdAt: string\n /** The image model the take was requested with. */\n provider?: string\n /** The aspect ratio the request sent explicitly; absent when the take\n * used the default ratio. */\n aspectRatio?: string\n /** `true` only on the current portrait's own take (returned with\n * `candidates: \"all\"`); `false` on the alternates. */\n isPortrait?: boolean\n }>\n}\n\n/** Options for `client.characters.get()`. */\nexport interface GetCharacterOptions {\n /**\n * `\"all\"`: `previousCandidates` also carries the current portrait's own\n * take, flagged `isPortrait: true`, when its job is within the 7-day window\n * (the alternates stay at most 5). Default `\"alternates\"`: the current\n * portrait is left out.\n */\n candidates?: \"alternates\" | \"all\"\n}\n\nexport type ReferencePhotoKind =\n | \"frontFace\"\n | \"sideLeft\"\n | \"sideRight\"\n | \"threeQuarterLeft\"\n | \"threeQuarterRight\"\n | \"frontBody\"\n | \"other\"\n\nexport interface ReferencePhoto {\n url: string\n kind: ReferencePhotoKind\n}\n\n/**\n * Body for `client.characters.upsert()`. Mirrors `upsertCharacterBody` in\n * `backend/src/routes/characters.ts`. Omitting `id` triggers an INSERT;\n * supplying it triggers an UPDATE that only writes the fields you pass —\n * undefined keys are NOT touched on the row.\n *\n * `name` is optional at the type level. The route requires `name` on INSERT\n * (id absent) and rejects with `validation_error` otherwise; on UPDATE the\n * route just ignores `name` when omitted, which lets partial updates like\n * `update(id, { gender: \"female\" })` succeed without re-sending the same\n * name the caller already has.\n */\nexport interface UpsertCharacterInput {\n /** UUID of the character row; omit to create. */\n id?: string\n /** Canvas node id the character belongs to. REQUIRED on create (the route\n * 400s without it, like `name`); optional on update — the update branch\n * never touches node_id, so partial updates needn't round-trip it. */\n nodeId?: string\n workflowId?: string\n projectId?: string\n name?: string\n description?: string\n gender?: string\n style?: string\n baseOutfit?: string\n sourceImageUrl?: string\n /** Persistent image-model id (a MODEL_CATALOG image model). Validated\n * server-side — unknown / non-image / \"\" is stored as `null`. */\n imageProvider?: string | null\n expressions?: Array<{ name: string; url: string }>\n poses?: Array<{ name: string; url: string }>\n lightingVariations?: Array<{ name: string; url: string }>\n angles?: Array<{ name: string; url: string }>\n bodyAngles?: Array<{ name: string; url: string }>\n motions?: Array<{ name: string; url: string }>\n /** Named Character Boards (see `Character.boards`) — whole-array replace,\n * like the asset buckets. Server caps: 24 boards, 200-char names, 30\n * sourceImages per board. */\n boards?: Array<{ name: string; url: string; type?: \"looks\" | \"identity\"; sourceImages?: string[] }>\n /** See `Character.voice` — persisted alongside the voice so TTS can resolve a\n * library/custom voice by id, `previewUrl` keeps the sample playable after\n * reload, and `ttsProvider` keeps generation on a model the voice is\n * verified for. All optional. */\n voice?: { voiceId: string; voiceName: string; traits: string; voiceType?: \"premade\" | \"library\" | \"custom\"; previewUrl?: string; ttsProvider?: TtsProvider } | null\n personality?: {\n mood: string\n speechStyle: string\n movementStyle: string\n behavioralNotes: string\n } | null\n seedPrompt?: string\n canonicalDescription?: string\n /** Identity-lock strength for Character Studio asset generation (off/soft/strict). */\n identityLock?: \"off\" | \"soft\" | \"strict\"\n referencePhotos?: ReferencePhoto[]\n /** Per-variant real-life reference URLs. Keys are lowercased+trimmed server-side. */\n realLifeRefsByVariant?: Record<string, string[]>\n /** Per-label user-uploaded reference VIDEO URLs (e.g. emotion takes). Keys\n * are lowercased+trimmed server-side; max 20 keys, 5 URLs each. Stored R2\n * URLs are read back off the row to drive generate-video's\n * `referenceVideoUrls`. */\n referenceVideosByVariant?: Record<string, string[]>\n /** The user's chosen DEFAULT asset take per variant. OPAQUE\n * `\"<bucket>:<variant>\"` → chosen-URL map; a write REPLACES the whole map\n * (the studio sends the full map each save). Omit to leave the row untouched.\n * Keys stored verbatim; soft-capped server-side at 200 keys / 2048-char values. */\n selectedAssetByVariant?: Record<string, string>\n}\n\nexport interface UpsertCharacterResult {\n id: string\n name?: string\n}\n\nexport interface ListCharactersParams {\n /** Restrict to a single project. */\n projectId?: string\n /** When true, return archived characters instead of active ones. */\n archived?: boolean\n /**\n * Search words: only the characters whose name or description contains\n * every word (split on spaces, the first 5), in any order, ignoring case —\n * `\"red car\"` finds \"Car, red\". Each word is matched as written (`%`, `_`\n * and `*` are not wildcards; punctuation is kept); blank means no search; up\n * to 200 characters. Combines with the other filters and with `cursor`\n * paging.\n */\n q?: string\n /**\n * Max rows to return. Server defaults to 100, caps at 500. Omit to take the\n * server default — passing it just narrows further.\n */\n limit?: number\n /** Opaque cursor from a prior page's `nextCursor` (fetches the next page). */\n cursor?: string\n}\n\nexport interface ListCharactersResult {\n characters: Character[]\n /** Pass back as `cursor` for the next page; `null` when there are no more. */\n nextCursor: string | null\n}\n\nexport interface DuplicateCharacterInput {\n /** Optional canvas node id to bind the new row to. */\n nodeId?: string\n /** Optional project to drop the new row into. */\n projectId?: string\n}\n\nexport interface CharacterUsage {\n workflowCount: number\n workflows: Array<{ id: string; name: string }>\n}\n\n/**\n * Input for `client.characters.generate()` — fires the\n * `POST /v1/generate-character` route. Produces 1–10 portrait candidates;\n * each lands as one `jobs` row in `pending` state and is then enqueued for\n * the worker.\n *\n * Provide at least one of `seedPrompt`, `referencePhotos`, or `description`\n * (the backend's refinement rejects empty input with `validation_error`).\n *\n * When `attachToCharacterId` is set, the worker writes the resulting URL\n * directly to `characters.source_image_url` on completion — caller doesn't\n * need a separate `approvePortrait` call for single-candidate runs. Pass\n * `attachPortrait: false` to keep every take a candidate instead.\n */\nexport interface GenerateCharacterInput extends GenerationSessionParams {\n name: string\n description?: string\n userPrompt?: string\n gender?: string\n style?: EntityStyle\n baseOutfit?: string\n sourceImageUrl?: string\n provider?: string\n /** Auto-attach the result to this character row. */\n attachToCharacterId?: string\n /** `false`: the take stays a candidate; only the approve route\n * (`approvePortrait()`) sets the portrait. Omitted/`true`: the finished\n * take is written to the row's portrait. */\n attachPortrait?: boolean\n seedPrompt?: string\n referencePhotos?: ReferencePhoto[]\n /** Number of candidate images to generate (1–10; server-validated). */\n count?: number\n /**\n * Explicit aspect ratio. Highest precedence — overrides both the character\n * node toggle and the per-asset-type default (portraits default to `3:4`).\n * Must be one of the 4-value `CharacterAspectRatio` union.\n */\n aspectRatio?: CharacterAspectRatio\n /**\n * Character node toggle (per-canvas-node `defaultAssetAspectRatio`). Wins\n * against the per-asset-type default, loses to `aspectRatio`.\n */\n characterNodeAspectRatio?: CharacterAspectRatio\n /**\n * Credit-affecting quality tier (e.g. `\"high\"` for gpt-image). Priced like\n * generate-image (composite ids such as `gpt-image:high`); values the chosen\n * model doesn't support are ignored server-side, never rejected.\n */\n quality?: string\n /**\n * Credit-affecting output resolution (e.g. `\"2K\"` / `\"4K\"` / `\"2 MP\"`).\n * Priced like generate-image (composite ids such as `nano-banana-pro:4K`);\n * values the chosen model doesn't support are ignored server-side, never\n * rejected.\n */\n resolution?: string\n}\n\nexport interface GenerateCharacterResult {\n /** First job-id; convenience alias for `jobIds[0]`. */\n jobId: string\n /** All job-ids when `count > 1`. */\n jobIds: string[]\n}\n\nexport interface GenerateAssetInput extends GenerationSessionParams {\n assetType:\n | \"expressions\"\n | \"poses\"\n | \"lighting\"\n | \"angles\"\n | \"headAngles\"\n | \"bodyAngles\"\n | \"custom\"\n /** The named variant (e.g. `\"smile\"`, `\"standing\"`, `\"3/4 left\"`). */\n variant: string\n /** Display name of the character; appears in the prompt. */\n name: string\n description?: string\n userPrompt?: string\n gender?: string\n style?: EntityStyle\n baseOutfit?: string\n sourceImageUrl?: string\n /** Real-life reference URLs (cap 5). */\n realLifeRefs?: string[]\n provider?: string\n /** Auto-attach to character row + asset bucket on completion. */\n attachToCharacterId?: string\n /** Shared type — auto-includes new buckets (sheets/detail_closeups/outfit_variations); mirrors objects.ts/locations.ts. */\n attachToColumn?: CharacterAttachColumn\n attachName?: string\n /**\n * Explicit aspect ratio. Highest precedence — overrides both the character\n * node toggle and the per-asset-type default (expressions=1:1, poses=9:16,\n * headAngles=3:4, bodyAngles=9:16, lighting=3:4, angles=3:4, custom=3:4).\n */\n aspectRatio?: CharacterAspectRatio\n /**\n * Character node toggle (per-canvas-node `defaultAssetAspectRatio`). Wins\n * against the per-asset-type default, loses to `aspectRatio`.\n */\n characterNodeAspectRatio?: CharacterAspectRatio\n /**\n * Credit-affecting quality tier (e.g. `\"high\"` for gpt-image). Values the\n * chosen model doesn't support are ignored server-side, never rejected.\n */\n quality?: string\n /**\n * Credit-affecting output resolution (e.g. `\"2K\"` / `\"4K\"` / `\"2 MP\"`).\n * Values the chosen model doesn't support are ignored server-side, never\n * rejected.\n */\n resolution?: string\n}\n\nexport interface GenerateMotionInput extends GenerationSessionParams {\n motionPrompt: string\n /** Optional when `attachToCharacterId` is set — falls back to the row's portrait. */\n sourceImageUrl?: string\n provider?: string\n name: string\n description?: string\n motionDescription?: string\n gender?: string\n style?: EntityStyle\n baseOutfit?: string\n realLifeRefs?: string[]\n attachToCharacterId?: string\n attachName?: string\n /**\n * Explicit aspect ratio. Highest precedence — overrides both the character\n * node toggle and the motions default (`9:16`).\n */\n aspectRatio?: CharacterAspectRatio\n /**\n * Character node toggle (per-canvas-node `defaultAssetAspectRatio`). Wins\n * against the motions default, loses to `aspectRatio`.\n */\n characterNodeAspectRatio?: CharacterAspectRatio\n}\n\nexport interface ApprovePortraitResult {\n portraitUrl: string\n /**\n * LLM-authored caption. `null` when the LLM call failed during the approval\n * — the portrait is still set; call `recaption()` to retry.\n */\n canonicalDescription: string | null\n}\n\nexport interface RecaptionResult {\n canonicalDescription: string\n}\n\n/**\n * Where a character's high-fidelity training stands. `untrained`: nothing was\n * ever trained, the trained model was removed (`deleteLora`), or a training\n * could not be started (`training_dispatch_failed` — refunded; this resets the\n * status even for a character trained before). `queued` / `training`: in\n * flight. `succeeded` / `failed` / `cancelled`: the last training's outcome.\n *\n * Generation uses the trained model only while the status is `succeeded`.\n */\nexport type CharacterTrainingState = \"untrained\" | \"queued\" | \"training\" | \"succeeded\" | \"failed\" | \"cancelled\"\n\n/** `GET /v1/characters/:id/training` — the character's training record. */\nexport interface CharacterTrainingStatus {\n status: CharacterTrainingState\n /** The provider's id for the latest training; `null` before the first one. */\n trainingId: string | null\n /** Why the last training failed, as the user may read it; `null` otherwise. */\n error: string | null\n /**\n * When the last successful training finished (ISO 8601). It stays set through\n * a re-train, a failed or cancelled one, or one that could not be started —\n * but the model is used only while `status` is `succeeded`.\n */\n trainedAt: string | null\n /** The last successful training's model version; set or not, used only while `status` is `succeeded`. */\n version: string | null\n /** The token added to prompts for this character (`TOK_<slug>_<6hex>`); generation adds it for you. */\n triggerWord: string | null\n /** How many images the latest training used. */\n imageCount: number | null\n}\n\n/** Body for `characters.train()`. */\nexport interface TrainCharacterInput {\n /**\n * Train on these of the character's images only (max 200 URLs; at most 20\n * are used). Omitted or empty: every eligible image — the portrait,\n * reference photos, expressions, poses, head and body angles and lighting\n * variations. At least 4 distinct images must remain either way.\n */\n selectedImageUrls?: string[]\n}\n\n/** `POST /v1/characters/:id/train` — answered 202 while the training runs. */\nexport interface TrainCharacterResult {\n /** The training's job; it ends `completed`, `failed` or `cancelled` with the training. */\n jobId: string\n /** The provider's id for this training (also on `trainingStatus().trainingId`). */\n trainingId: string\n /** The token added to prompts for this character once trained. */\n triggerWord: string\n}\n\n/**\n * The `code` of a `NodaroError` `train()` can throw beyond the typed classes\n * (`ForbiddenError` — an app token without `assets:write`, `missingScope`\n * says so; `InsufficientCreditsError`; `RateLimitedError`; `JobBlockedError`;\n * `UnauthorizedError`; …):\n *\n * - `insufficient_training_images` (400) — fewer than 4 distinct images; the\n * message says how many there are.\n * - `validation_error` (400) — a malformed id or `selectedImageUrls`.\n * - `already_training_or_not_found` (409) — a training is already in flight,\n * or the character is not yours / archived.\n * - `claim_failed` (500) — the training slot could not be claimed; nothing\n * started. Retry.\n * - `training_dispatch_failed` (502) — the training could not be started;\n * nothing is charged.\n * - `public_url_not_configured` (503) — the deployment cannot receive the\n * provider's completion call.\n * - `price_not_configured` (503) — the deployment has no price for training.\n * - `dedup_race_winner_unresolvable` (503) — a duplicate of this request was\n * in flight and its outcome could not be read; this one reserved nothing.\n * Read {@link CharactersResource.trainingStatus} before retrying.\n */\nexport type TrainCharacterRefusalCode =\n | \"insufficient_training_images\"\n | \"validation_error\"\n | \"already_training_or_not_found\"\n | \"claim_failed\"\n | \"training_dispatch_failed\"\n | \"public_url_not_configured\"\n | \"price_not_configured\"\n | \"dedup_race_winner_unresolvable\"\n\nexport class CharactersResource {\n constructor(private client: NodaroClientCore) {}\n\n /**\n * List the caller's characters. By default returns active characters only;\n * pass `archived: true` to fetch soft-deleted rows for an \"archive\" view.\n * When `projectId` is set, only characters belonging to that project are\n * returned; `q` keeps the ones whose name or description contains it.\n *\n * Cursor-paginated: a response carrying a non-null `nextCursor` means more\n * rows exist. Pass it back as `cursor` to fetch the next page, and keep going\n * until `nextCursor` is `null` — a single call returns at most `limit` rows\n * (default 100), so treating one call as \"all characters\" silently truncates\n * the list for anyone past that count.\n *\n * ```ts\n * const all: Character[] = []\n * let cursor: string | undefined\n * do {\n * const page = await client.characters.list({ cursor })\n * all.push(...page.characters)\n * cursor = page.nextCursor ?? undefined\n * } while (cursor)\n * ```\n */\n list(params: ListCharactersParams = {}): Promise<ListCharactersResult> {\n const query: Record<string, string | undefined> = {}\n if (params.projectId) query.projectId = params.projectId\n if (params.archived) query.archived = \"true\"\n if (params.q) query.q = params.q\n if (params.limit !== undefined) query.limit = String(params.limit)\n if (params.cursor) query.cursor = params.cursor\n return this.client.request(\"GET\", \"/v1/characters\", { query })\n }\n\n /**\n * Fetch a single character including in-flight portrait / asset job state.\n * Soft-deleted (archived) rows are returned by id intentionally so canvas\n * nodes that hold a stale `characterDbId` keep loading. Pass\n * `{ candidates: \"all\" }` to also get the current portrait's own take in\n * `previousCandidates` (flagged `isPortrait: true`).\n */\n get(id: string, options: GetCharacterOptions = {}): Promise<CharacterDetail> {\n const query: Record<string, string | undefined> = {}\n if (options.candidates) query.candidates = options.candidates\n return this.client.request(\"GET\", `/v1/characters/${encodeURIComponent(id)}`, { query })\n }\n\n /**\n * Create or update a character. Omit `id` to create; supply it to update\n * (only the fields you pass get written — undefined keys are untouched).\n *\n * If the caller-supplied `name` collides with an existing active character\n * for this user, the request returns 409 `name_taken`. To auto-number a\n * placeholder, pass the placeholder name from `@nodaro/shared` and the\n * server will derive \"Untitled character 2\", \"Untitled character 3\", etc.\n */\n upsert(input: UpsertCharacterInput): Promise<UpsertCharacterResult> {\n return this.client.request(\"POST\", \"/v1/characters\", { body: input })\n }\n\n /**\n * Convenience wrapper around `upsert()` for creating new characters.\n * Equivalent to `upsert({ ...input, id: undefined })`. `name` is REQUIRED\n * on create — the route 400s on INSERT-without-name; we narrow the type\n * here so callers fail at compile-time rather than runtime.\n */\n create(\n input: Omit<UpsertCharacterInput, \"id\"> & { name: string },\n ): Promise<UpsertCharacterResult> {\n return this.upsert(input)\n }\n\n /**\n * Convenience wrapper around `upsert()` for updating an existing character.\n * Equivalent to `upsert({ ...input, id })`.\n */\n update(\n id: string,\n input: Omit<UpsertCharacterInput, \"id\">,\n ): Promise<UpsertCharacterResult> {\n return this.upsert({ ...input, id })\n }\n\n /**\n * Soft-delete (archive) a character. The row is hidden from `list()` by\n * default but still loadable via `get(id)` so canvas nodes pointing at it\n * keep working. Restore with `restore(id)`.\n */\n delete(id: string): Promise<{ success: true; archived: true }> {\n return this.client.request(\"DELETE\", `/v1/characters/${encodeURIComponent(id)}`)\n }\n\n /**\n * Un-archive a character. If the original name now collides with an\n * active row, the server auto-suffixes \"(restored)\" and returns the\n * effective name.\n */\n restore(id: string): Promise<{ id: string; name: string }> {\n return this.client.request(\"POST\", `/v1/characters/${encodeURIComponent(id)}/restore`)\n }\n\n /**\n * Duplicate (fork) a character to a new row with a `\"(copy)\"` suffix.\n * Asset URLs are shared by reference — the new row can diverge by\n * regenerating any of them.\n */\n duplicate(id: string, input: DuplicateCharacterInput = {}): Promise<{ id: string; name: string }> {\n return this.client.request(\n \"POST\",\n `/v1/characters/${encodeURIComponent(id)}/duplicate`,\n { body: input },\n )\n }\n\n /**\n * Count of the caller's workflows that reference this character. Powers the\n * library \"Archive\" confirmation modal in the editor.\n */\n usage(id: string): Promise<CharacterUsage> {\n return this.client.request(\"GET\", `/v1/characters/${encodeURIComponent(id)}/usage`)\n }\n\n /**\n * Fire `POST /v1/generate-character` to produce one or more portrait\n * candidates. With `count > 1`, all jobs are reserved up-front before any\n * is enqueued — mid-batch failures roll back atomically.\n *\n * When `attachToCharacterId` is set, the worker writes the result directly\n * to the row's `source_image_url` (unless `attachPortrait: false`);\n * otherwise you must call `approvePortrait()` after picking a candidate.\n */\n generate(input: GenerateCharacterInput): Promise<GenerateCharacterResult> {\n return this.client.request(\"POST\", \"/v1/generate-character\", { body: input })\n }\n\n /**\n * Fire `POST /v1/generate-character-asset` to produce a single\n * expression / pose / angle / lighting variant. When the studio path is\n * set (`attachToCharacterId` + `attachToColumn` + `attachName`), the\n * worker appends `{ name: attachName, url: <result> }` to the named\n * JSONB array column on completion.\n */\n generateAsset(input: GenerateAssetInput): Promise<{ jobId: string }> {\n return this.client.request(\"POST\", \"/v1/generate-character-asset\", { body: input })\n }\n\n /**\n * Fire `POST /v1/generate-character-motion` to animate the character's\n * portrait into a motion clip. The result is appended to the character's\n * `motions[]` bucket when `attachToCharacterId` is set.\n */\n generateMotion(input: GenerateMotionInput): Promise<{ jobId: string }> {\n return this.client.request(\"POST\", \"/v1/generate-character-motion\", { body: input })\n }\n\n /**\n * Approve a completed `generate-character` job as the character's portrait.\n * Sets `source_image_url` and fires the LLM caption (Claude Sonnet vision)\n * inline. Returns the new portrait URL plus the caption — `canonicalDescription`\n * is `null` if the LLM call sub-failed (portrait still set; retry via `recaption()`).\n */\n approvePortrait(id: string, candidateJobId: string): Promise<ApprovePortraitResult> {\n return this.client.request(\n \"POST\",\n `/v1/characters/${encodeURIComponent(id)}/approve-portrait`,\n { body: { candidateJobId } },\n )\n }\n\n /**\n * Re-fire the LLM caption against the character's current portrait. 502s on\n * LLM failure; returns 400 `no_portrait` if no portrait is set yet.\n */\n recaption(id: string): Promise<RecaptionResult> {\n return this.client.request(\n \"POST\",\n `/v1/characters/${encodeURIComponent(id)}/llm-caption`,\n )\n }\n\n /**\n * Start training a high-fidelity model of the character on its own images\n * (Nodaro Cloud only — other editions answer `NotFoundError`). Reserves the\n * training price up front and refunds it if the training fails or is\n * cancelled. Resolves at once (202); a training takes about 15 minutes —\n * follow it with {@link trainingStatus}. Once it succeeds, a workflow's\n * Generate Image node whose prompt @-mentions this one character runs on the\n * trained model.\n *\n * An OAuth app token needs the `assets:write` scope (`ForbiddenError`\n * otherwise, before anything is reserved); a session or personal API key\n * needs none. Refusals are `NodaroError`s whose `code` is a\n * {@link TrainCharacterRefusalCode}; rate-limited to 3 calls a minute.\n */\n train(id: string, input: TrainCharacterInput = {}): Promise<TrainCharacterResult> {\n return this.client.request(\"POST\", `/v1/characters/${encodeURIComponent(id)}/train`, { body: input })\n }\n\n /**\n * The character's training record (Nodaro Cloud only). Poll it while\n * `status` is `queued` or `training` — every 10 s or so is plenty.\n */\n trainingStatus(id: string): Promise<CharacterTrainingStatus> {\n return this.client.request(\"GET\", `/v1/characters/${encodeURIComponent(id)}/training`)\n }\n\n /**\n * Remove the character's trained model (Nodaro Cloud only): cancels a\n * training in flight and refunds its reservation, deletes the model, and\n * clears the training record (`trainingStatus` then reads `untrained`).\n * Generations go back to reference images. Cannot be undone — a new model\n * means a new, paid training. An OAuth app token needs the `assets:write`\n * scope (`ForbiddenError` otherwise), like deleting the character.\n */\n async deleteLora(id: string): Promise<void> {\n await this.client.request(\"DELETE\", `/v1/characters/${encodeURIComponent(id)}/lora`)\n }\n}\n\n/** Person catalog + hint helpers, re-exported from @nodaro/prompts (FSL-licensed). */\nexport { buildPersonHints, PEOPLE, PERSON_DIMENSION_ORDER, PERSON_DIMENSION_LABELS }\nexport type { PersonValue }\n\n/**\n * Collapse a PersonValue into the comma-joined seed-prompt fragment used by\n * `characters.generate({ seedPrompt })` — same composition the Nodaro editor\n * performs. Powered by @nodaro/prompts.\n */\nexport function buildPersonSeedPrompt(value: PersonValue): string {\n return buildPersonHints(value as Record<string, unknown> & PersonValue).join(\", \")\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-ELSOVJPF.js.map
3
+ //# sourceMappingURL=chunk-ELSOVJPF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-ELSOVJPF.js"}
@@ -0,0 +1,29 @@
1
+ // src/resources/video-pro.ts
2
+ var VideoProResource = class {
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ client;
7
+ /** Gracefully stop a running generate-video-pro job (keep + deliver the
8
+ * completed segments; refund the rest). */
9
+ stop(jobId) {
10
+ return this.client.request(
11
+ "POST",
12
+ `/v1/generate-video-pro/${encodeURIComponent(jobId)}/stop`
13
+ );
14
+ }
15
+ /** Continue a stopped/failed/completed run from a segment (a NEW job).
16
+ * Named `continueRun` because `continue` is a reserved word. */
17
+ continueRun(jobId, opts) {
18
+ return this.client.request("POST", "/v1/generate-video-pro/continue", {
19
+ body: {
20
+ fromJobId: jobId,
21
+ ...opts?.fromSegment !== void 0 ? { fromSegment: opts.fromSegment } : {}
22
+ }
23
+ });
24
+ }
25
+ };
26
+
27
+ export { VideoProResource };
28
+ //# sourceMappingURL=chunk-ERLXU47J.js.map
29
+ //# sourceMappingURL=chunk-ERLXU47J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resources/video-pro.ts"],"names":[],"mappings":";AA8CO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAAoB,MAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAA2B;AAAA,EAA3B,MAAA;AAAA;AAAA;AAAA,EAIpB,KAAK,KAAA,EAA4C;AAC/C,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,MACjB,MAAA;AAAA,MACA,CAAA,uBAAA,EAA0B,kBAAA,CAAmB,KAAK,CAAC,CAAA,KAAA;AAAA,KACrD;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,WAAA,CACE,OACA,IAAA,EACiC;AACjC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,iCAAA,EAAmC;AAAA,MACpE,IAAA,EAAM;AAAA,QACJ,SAAA,EAAW,KAAA;AAAA,QACX,GAAI,MAAM,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC;AAC7E,KACD,CAAA;AAAA,EACH;AACF","file":"chunk-ERLXU47J.js","sourcesContent":["import type { NodaroClientCore } from \"../core.js\"\n\n/**\n * Generate Video Pro control surface (Cloud edition) — the checkpointed\n * long-video engine's stop/continue operations. The generation itself is\n * dispatched like any other node (`POST /v1/generate-video-pro`); these\n * endpoints act on an EXISTING run:\n *\n * - `stop(jobId)` — graceful stop: the engine abandons the in-flight segment\n * generation (that segment is still billed — the provider keeps rendering\n * it), skips all remaining segments, stitches everything completed so far\n * into the job's FINAL video, and refunds the untouched remainder of the\n * reserve. A job that hasn't started yet is cancelled with a full refund\n * instead. Poll the job as usual: it completes with `output_data.pro\n * .stopped === true` and `stoppedAtSegment`.\n *\n * - `continueRun(jobId, opts?)` — a NEW job that resumes from\n * `opts.fromSegment` (1-based; omitted → the first not-yet-delivered\n * segment). Segments before it are reused from the parent; everything from\n * it on is regenerated (overriding the parent's takes). Charged only for\n * the regenerated segments plus the flat pro fee. Works on stopped, failed\n * (with ≥1 delivered segment), and fully completed runs (tail re-roll via\n * an explicit `fromSegment`).\n */\nexport interface StopVideoProResult {\n jobId: string\n /** Present when the run was processing — the engine finalizes within\n * seconds; keep polling the job. */\n stopping?: boolean\n /** Present when the job had not started — the generic cancel ran instead\n * (full refund). */\n success?: boolean\n cancelled?: number\n}\n\nexport interface ContinueVideoProResult {\n /** The NEW job to poll — the continuation run. */\n jobId: string\n continuedFromJobId?: string\n /** 1-based first regenerated segment. */\n fromSegment?: number\n segmentCount?: number\n /** Present when an idempotency key matched an existing continuation. */\n deduped?: boolean\n}\n\nexport class VideoProResource {\n constructor(private client: NodaroClientCore) {}\n\n /** Gracefully stop a running generate-video-pro job (keep + deliver the\n * completed segments; refund the rest). */\n stop(jobId: string): Promise<StopVideoProResult> {\n return this.client.request(\n \"POST\",\n `/v1/generate-video-pro/${encodeURIComponent(jobId)}/stop`,\n )\n }\n\n /** Continue a stopped/failed/completed run from a segment (a NEW job).\n * Named `continueRun` because `continue` is a reserved word. */\n continueRun(\n jobId: string,\n opts?: { fromSegment?: number },\n ): Promise<ContinueVideoProResult> {\n return this.client.request(\"POST\", \"/v1/generate-video-pro/continue\", {\n body: {\n fromJobId: jobId,\n ...(opts?.fromSegment !== undefined ? { fromSegment: opts.fromSegment } : {}),\n },\n })\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-ES2E65HT.js.map
3
+ //# sourceMappingURL=chunk-ES2E65HT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-ES2E65HT.js"}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-EXLAHZKF.js.map
3
+ //# sourceMappingURL=chunk-EXLAHZKF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-EXLAHZKF.js"}
@@ -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.32.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-FB3S2FON.cjs.map
233
+ //# sourceMappingURL=chunk-FB3S2FON.cjs.map