@holoscript/core 7.0.0 → 8.0.1

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 (350) hide show
  1. package/README.md +4 -4
  2. package/bin/holoscript.cjs +3 -0
  3. package/dist/GLTFPipeline-N6B6PJ6G.cjs +38 -0
  4. package/dist/GLTFPipeline-P3WMNYCN.js +17 -0
  5. package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
  6. package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
  7. package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
  8. package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
  9. package/dist/HoloScriptRuntime-CBYJX3LZ.js +10 -0
  10. package/dist/HoloScriptRuntime-VJ374RER.cjs +19 -0
  11. package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
  12. package/dist/USDZExporter-D2HQLQYK.js +1035 -0
  13. package/dist/agents/index.cjs +19 -0
  14. package/dist/agents/index.d.ts +100 -0
  15. package/dist/agents/index.js +17 -0
  16. package/dist/chunk-2BSMSUCE.js +1941 -0
  17. package/dist/chunk-2IWC4FP7.cjs +1189 -0
  18. package/dist/chunk-2M2DPHKB.js +762 -0
  19. package/dist/chunk-2X7NGX3M.js +2426 -0
  20. package/dist/chunk-2YSNA2F2.cjs +1274 -0
  21. package/dist/chunk-3FOKASKO.cjs +348 -0
  22. package/dist/chunk-3WZEJHUQ.cjs +116 -0
  23. package/dist/chunk-4C57PR42.js +468 -0
  24. package/dist/chunk-4GU5GCIY.js +1384 -0
  25. package/dist/chunk-4N4SXXWF.js +769 -0
  26. package/dist/chunk-4PDEPEQW.cjs +41 -0
  27. package/dist/chunk-4R6SBXDB.js +45 -0
  28. package/dist/chunk-4SDKXQ4C.js +811 -0
  29. package/dist/chunk-4V2E7U7Q.cjs +2015 -0
  30. package/dist/chunk-5FSKKMR7.cjs +2092 -0
  31. package/dist/chunk-5GLCTO44.js +161 -0
  32. package/dist/chunk-5H2G27PK.cjs +627 -0
  33. package/dist/chunk-5JEU52DW.js +382 -0
  34. package/dist/chunk-5NWINHR5.cjs +689 -0
  35. package/dist/chunk-5S7RKFGR.cjs +446 -0
  36. package/dist/chunk-5WUNN6ZN.cjs +428 -0
  37. package/dist/chunk-6CTRH7HT.cjs +1985 -0
  38. package/dist/chunk-6EX3I5P4.cjs +130 -0
  39. package/dist/chunk-6Q7RC2MK.cjs +1418 -0
  40. package/dist/chunk-7H33U5SM.cjs +413 -0
  41. package/dist/chunk-7M3PNU2M.cjs +672 -0
  42. package/dist/chunk-7T25IEZ2.js +449 -0
  43. package/dist/chunk-7V4JI5TB.cjs +6947 -0
  44. package/dist/chunk-A6KINLZJ.js +236 -0
  45. package/dist/chunk-ADADVMXY.js +404 -0
  46. package/dist/chunk-AIA52I7T.cjs +543 -0
  47. package/dist/chunk-ALC6K7GL.cjs +4402 -0
  48. package/dist/chunk-ANXZFVY2.js +113 -0
  49. package/dist/chunk-AOVGZ25K.cjs +56583 -0
  50. package/dist/chunk-AVJHHUC5.cjs +718 -0
  51. package/dist/chunk-BGY3SDG3.js +4396 -0
  52. package/dist/chunk-BOVPWH4H.js +3857 -0
  53. package/dist/chunk-BRQJKJGT.cjs +20 -0
  54. package/dist/chunk-C37BHB7N.cjs +636 -0
  55. package/dist/chunk-CBJY23VL.js +126 -0
  56. package/dist/chunk-CCATWPXM.js +778 -0
  57. package/dist/chunk-CIWWXYHZ.cjs +50 -0
  58. package/dist/chunk-CMT5NMMS.js +669 -0
  59. package/dist/chunk-CR4FMIWL.cjs +1049 -0
  60. package/dist/chunk-CR7XRXRN.cjs +639 -0
  61. package/dist/chunk-CSD27UNQ.js +2176 -0
  62. package/dist/chunk-D3STJ56J.js +714 -0
  63. package/dist/chunk-DAJXW4KX.js +725 -0
  64. package/dist/chunk-DHO2YRIM.js +756 -0
  65. package/dist/chunk-DTGBOSEM.cjs +319 -0
  66. package/dist/chunk-E6XXE66V.js +2252 -0
  67. package/dist/chunk-E7JP3BS3.cjs +61 -0
  68. package/dist/chunk-EKBKLK7P.js +1169 -0
  69. package/dist/chunk-EKYL4PE3.cjs +404 -0
  70. package/dist/chunk-EXKSFGSX.cjs +274 -0
  71. package/dist/chunk-EXUP2BUM.cjs +1173 -0
  72. package/dist/chunk-FDSGHPAK.js +130 -0
  73. package/dist/chunk-FEWUHQNM.cjs +144 -0
  74. package/dist/chunk-FFAOS5HQ.js +70 -0
  75. package/dist/chunk-FGGJQRLZ.js +270 -0
  76. package/dist/chunk-FHP6LXJS.js +415 -0
  77. package/dist/chunk-FJPADH77.cjs +666 -0
  78. package/dist/chunk-FL33V6U7.js +421 -0
  79. package/dist/chunk-FYSPZT4V.cjs +169 -0
  80. package/dist/chunk-GIOYPNTH.js +5575 -0
  81. package/dist/chunk-GJNCFRJU.cjs +125 -0
  82. package/dist/chunk-GMP623FG.cjs +1508 -0
  83. package/dist/chunk-GQHQOPXZ.cjs +5580 -0
  84. package/dist/chunk-GTU2Z2WW.cjs +262 -0
  85. package/dist/chunk-GYZE55MO.js +2007 -0
  86. package/dist/chunk-GZG4KA4E.js +529 -0
  87. package/dist/chunk-H652NHX5.js +600 -0
  88. package/dist/chunk-HCCQLAA4.cjs +74 -0
  89. package/dist/chunk-HKEXJUWS.cjs +4007 -0
  90. package/dist/chunk-HNDK4IQU.cjs +5737 -0
  91. package/dist/chunk-HR2OSYVQ.js +56165 -0
  92. package/dist/chunk-HYNTS5CP.js +422 -0
  93. package/dist/chunk-I6XZ5DZF.cjs +488 -0
  94. package/dist/chunk-ILRBGFVD.cjs +72 -0
  95. package/dist/chunk-IUDGEUDO.cjs +1409 -0
  96. package/dist/chunk-IUTY5WQ2.cjs +424 -0
  97. package/dist/chunk-IVY74O6C.js +247 -0
  98. package/dist/chunk-IWC5DM2M.cjs +611 -0
  99. package/dist/chunk-J32ZJZJH.js +554 -0
  100. package/dist/chunk-J52VSAQ7.js +6884 -0
  101. package/dist/chunk-J6M4FPK5.js +421 -0
  102. package/dist/chunk-J7XZV333.js +844 -0
  103. package/dist/chunk-JBNDTXXV.cjs +2433 -0
  104. package/dist/chunk-JC5YBPSF.cjs +984 -0
  105. package/dist/chunk-JD7CIZ33.js +1949 -0
  106. package/dist/chunk-JIBL5LRK.js +4287 -0
  107. package/dist/chunk-JIYN45TV.cjs +2525 -0
  108. package/dist/chunk-K574J76X.cjs +457 -0
  109. package/dist/chunk-KHDZJE5D.cjs +2196 -0
  110. package/dist/chunk-KKFZ3B6J.cjs +557 -0
  111. package/dist/chunk-KKP7JKN4.cjs +6002 -0
  112. package/dist/chunk-KPJL34Y7.cjs +186 -0
  113. package/dist/chunk-KQCN6AKJ.cjs +3042 -0
  114. package/dist/chunk-L5LKKENW.cjs +424 -0
  115. package/dist/chunk-LHAXPADA.js +882 -0
  116. package/dist/chunk-LM2VU56C.cjs +37 -0
  117. package/dist/chunk-M56JSP4A.js +400 -0
  118. package/dist/chunk-MBOOR7X4.js +18 -0
  119. package/dist/chunk-MQWAT42R.cjs +4310 -0
  120. package/dist/chunk-MXFUTKCO.js +56 -0
  121. package/dist/chunk-MYY4PMWX.cjs +264 -0
  122. package/dist/chunk-N75IH2HY.js +258 -0
  123. package/dist/chunk-NCWCUZNS.cjs +72 -0
  124. package/dist/chunk-NG77ATEW.cjs +778 -0
  125. package/dist/chunk-NW5G5FBQ.js +215 -0
  126. package/dist/chunk-OBIYPYYS.cjs +1993 -0
  127. package/dist/chunk-OH2FAIVU.js +608 -0
  128. package/dist/chunk-OIQYIIO3.cjs +473 -0
  129. package/dist/chunk-OL46QLBJ.js +61 -0
  130. package/dist/chunk-OMXII44L.js +5386 -0
  131. package/dist/chunk-OSYNRVOV.cjs +243 -0
  132. package/dist/chunk-PGANYCAG.cjs +220 -0
  133. package/dist/chunk-PHENW4MQ.js +65 -0
  134. package/dist/chunk-PY37LNDP.js +686 -0
  135. package/dist/chunk-Q56TT7IL.js +483 -0
  136. package/dist/chunk-QD32ADK6.js +1046 -0
  137. package/dist/chunk-QPOQ7VPI.js +1491 -0
  138. package/dist/chunk-QPSKHBJP.js +5963 -0
  139. package/dist/chunk-QXH7QDSZ.js +1989 -0
  140. package/dist/chunk-R24NNAEG.js +1399 -0
  141. package/dist/chunk-R75BSDH7.cjs +50 -0
  142. package/dist/chunk-RARB3MBR.js +207 -0
  143. package/dist/chunk-ROHLEP2W.cjs +847 -0
  144. package/dist/chunk-S3MDHNKB.cjs +490 -0
  145. package/dist/chunk-S6YWHCKV.cjs +410 -0
  146. package/dist/chunk-SIEXCILW.js +229 -0
  147. package/dist/chunk-SLU6UPJI.cjs +410 -0
  148. package/dist/chunk-SMIWS6DE.cjs +212 -0
  149. package/dist/chunk-T5J7ZKP3.cjs +4885 -0
  150. package/dist/chunk-TDCNJHWO.js +341 -0
  151. package/dist/chunk-TG7O4WBC.js +406 -0
  152. package/dist/chunk-THCK6ECW.js +2085 -0
  153. package/dist/chunk-TJHVSBP2.js +439 -0
  154. package/dist/chunk-TVHSPJ4N.cjs +606 -0
  155. package/dist/chunk-TWUXUCEW.cjs +781 -0
  156. package/dist/chunk-U44IKGG7.cjs +5390 -0
  157. package/dist/chunk-UFZZ7TSN.cjs +886 -0
  158. package/dist/chunk-UJXISJBN.js +487 -0
  159. package/dist/chunk-UOIGFQXC.cjs +9750 -0
  160. package/dist/chunk-URG2SJLK.js +2521 -0
  161. package/dist/chunk-UWJHCOH2.js +623 -0
  162. package/dist/chunk-V6MKC2FZ.js +979 -0
  163. package/dist/chunk-VJ3L7CHT.cjs +169 -0
  164. package/dist/chunk-VMLKSV26.js +1216 -0
  165. package/dist/chunk-VVKVQZI6.js +55 -0
  166. package/dist/chunk-W6RW64BB.cjs +1219 -0
  167. package/dist/chunk-WKX5AMOY.js +309 -0
  168. package/dist/chunk-WNNE3PO3.js +34 -0
  169. package/dist/chunk-WRKUDAZJ.js +3038 -0
  170. package/dist/chunk-WRLUBRKS.cjs +1943 -0
  171. package/dist/chunk-WRNEH5MO.js +3169 -0
  172. package/dist/chunk-WRWEX5ZF.js +658 -0
  173. package/dist/chunk-X3GJPRVK.cjs +3246 -0
  174. package/dist/chunk-X3UVCWNL.cjs +2257 -0
  175. package/dist/chunk-XB274MW5.cjs +814 -0
  176. package/dist/chunk-XHIV6326.cjs +793 -0
  177. package/dist/chunk-XIVIE43A.cjs +729 -0
  178. package/dist/chunk-XJAN7CZG.cjs +432 -0
  179. package/dist/chunk-XKTPFXGA.js +164 -0
  180. package/dist/chunk-XL6INWKT.js +121 -0
  181. package/dist/chunk-XSFNHP2E.js +632 -0
  182. package/dist/chunk-XT6JY5W5.js +9684 -0
  183. package/dist/chunk-XUILI4KB.cjs +430 -0
  184. package/dist/chunk-YF2I3MV3.js +46 -0
  185. package/dist/chunk-YIMN575O.js +4847 -0
  186. package/dist/chunk-YIVFJNYV.js +176 -0
  187. package/dist/chunk-YKGPCZEE.cjs +237 -0
  188. package/dist/chunk-YN2YWTXW.js +5731 -0
  189. package/dist/chunk-YN6V7R3L.cjs +327 -0
  190. package/dist/chunk-YQELFNJV.js +39 -0
  191. package/dist/chunk-YVD3CSO3.js +1183 -0
  192. package/dist/chunk-YVOAF4ML.js +623 -0
  193. package/dist/chunk-YWOBW2PV.cjs +759 -0
  194. package/dist/chunk-YYXH45E2.js +426 -0
  195. package/dist/chunk-ZDSYWBIE.cjs +69 -0
  196. package/dist/chunk-ZU7NIRT6.js +325 -0
  197. package/dist/chunk-ZZ7RO2UQ.js +1243 -0
  198. package/dist/cli/holoscript-runner.cjs +2255 -0
  199. package/dist/cli/holoscript-runner.js +2230 -0
  200. package/dist/codebase/index.cjs +336 -0
  201. package/dist/codebase/index.js +331 -0
  202. package/dist/compiler/agent-inference.cjs +31 -0
  203. package/dist/compiler/agent-inference.js +8 -0
  204. package/dist/compiler/android-xr.cjs +24 -0
  205. package/dist/compiler/android-xr.js +14 -0
  206. package/dist/compiler/android.cjs +24 -0
  207. package/dist/compiler/android.js +14 -0
  208. package/dist/compiler/ar.cjs +23 -0
  209. package/dist/compiler/ar.js +11 -0
  210. package/dist/compiler/babylon.cjs +21 -0
  211. package/dist/compiler/babylon.js +15 -0
  212. package/dist/compiler/business-quest.cjs +43 -0
  213. package/dist/compiler/business-quest.js +4 -0
  214. package/dist/compiler/coco.cjs +27 -0
  215. package/dist/compiler/coco.js +4 -0
  216. package/dist/compiler/context.cjs +25 -0
  217. package/dist/compiler/context.d.ts +28 -0
  218. package/dist/compiler/context.js +8 -0
  219. package/dist/compiler/domain-block-utils.cjs +609 -0
  220. package/dist/compiler/domain-block-utils.js +11 -0
  221. package/dist/compiler/dtdl.cjs +27 -0
  222. package/dist/compiler/dtdl.js +11 -0
  223. package/dist/compiler/gltf-pipeline.cjs +39 -0
  224. package/dist/compiler/gltf-pipeline.js +4 -0
  225. package/dist/compiler/godot.cjs +18 -0
  226. package/dist/compiler/godot.js +12 -0
  227. package/dist/compiler/incremental.cjs +34 -0
  228. package/dist/compiler/incremental.js +9 -0
  229. package/dist/compiler/index.cjs +5408 -0
  230. package/dist/compiler/index.d.ts +334 -21
  231. package/dist/compiler/index.js +5069 -0
  232. package/dist/compiler/ios.cjs +23 -0
  233. package/dist/compiler/ios.js +13 -0
  234. package/dist/compiler/llm-provider-capabilities.cjs +25 -0
  235. package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
  236. package/dist/compiler/llm-provider-capabilities.js +8 -0
  237. package/dist/compiler/multi-layer.cjs +24 -0
  238. package/dist/compiler/multi-layer.js +15 -0
  239. package/dist/compiler/nodetoy.cjs +23 -0
  240. package/dist/compiler/nodetoy.d.ts +69 -0
  241. package/dist/compiler/nodetoy.js +4 -0
  242. package/dist/compiler/openxr.cjs +19 -0
  243. package/dist/compiler/openxr.js +13 -0
  244. package/dist/compiler/playcanvas.cjs +19 -0
  245. package/dist/compiler/playcanvas.js +13 -0
  246. package/dist/compiler/r3f.cjs +39 -0
  247. package/dist/compiler/r3f.d.ts +22 -0
  248. package/dist/compiler/r3f.js +17 -0
  249. package/dist/compiler/remotion.cjs +23 -0
  250. package/dist/compiler/remotion.js +4 -0
  251. package/dist/compiler/reproducibility.cjs +39 -0
  252. package/dist/compiler/reproducibility.js +4 -0
  253. package/dist/compiler/sdf.cjs +24 -0
  254. package/dist/compiler/sdf.js +12 -0
  255. package/dist/compiler/semantic-scene.cjs +31 -0
  256. package/dist/compiler/semantic-scene.js +4 -0
  257. package/dist/compiler/state.cjs +21 -0
  258. package/dist/compiler/state.js +11 -0
  259. package/dist/compiler/trait-composition.cjs +30 -0
  260. package/dist/compiler/trait-composition.js +9 -0
  261. package/dist/compiler/unity.cjs +19 -0
  262. package/dist/compiler/unity.js +13 -0
  263. package/dist/compiler/unreal.cjs +23 -0
  264. package/dist/compiler/unreal.js +13 -0
  265. package/dist/compiler/urdf.cjs +52 -0
  266. package/dist/compiler/urdf.js +12 -0
  267. package/dist/compiler/usd-physics.cjs +26 -0
  268. package/dist/compiler/usd-physics.js +9 -0
  269. package/dist/compiler/visionos.cjs +19 -0
  270. package/dist/compiler/visionos.js +13 -0
  271. package/dist/compiler/vrchat.cjs +22 -0
  272. package/dist/compiler/vrchat.js +12 -0
  273. package/dist/compiler/vrr.cjs +24 -0
  274. package/dist/compiler/vrr.js +12 -0
  275. package/dist/compiler/wasm.cjs +36 -0
  276. package/dist/compiler/wasm.js +12 -0
  277. package/dist/compiler/webgpu.cjs +18 -0
  278. package/dist/compiler/webgpu.js +12 -0
  279. package/dist/coordinators/index.cjs +1266 -0
  280. package/dist/coordinators/index.d.ts +72 -1
  281. package/dist/coordinators/index.js +1259 -0
  282. package/dist/debugger.cjs +24 -0
  283. package/dist/debugger.js +11 -0
  284. package/dist/dist-ACXG6IH5.cjs +3113 -0
  285. package/dist/dist-VD4L6V7Q.js +3076 -0
  286. package/dist/entries/interop.cjs +64 -0
  287. package/dist/entries/interop.js +7 -0
  288. package/dist/entries/scripting.cjs +55 -0
  289. package/dist/entries/scripting.js +10 -0
  290. package/dist/hololand/index.cjs +146 -0
  291. package/dist/hololand/index.d.ts +70 -0
  292. package/dist/hololand/index.js +5 -0
  293. package/dist/index.cjs +44660 -0
  294. package/dist/index.d.ts +978 -21
  295. package/dist/index.js +41422 -0
  296. package/dist/math/tropical-spmv.cjs +45 -0
  297. package/dist/math/tropical-spmv.js +4 -0
  298. package/dist/math/vec3.cjs +57 -0
  299. package/dist/math/vec3.js +4 -0
  300. package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
  301. package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
  302. package/dist/paper-0c-spike/index.cjs +150 -0
  303. package/dist/paper-0c-spike/index.js +141 -0
  304. package/dist/parser.cjs +61 -0
  305. package/dist/parser.d.ts +11 -0
  306. package/dist/parser.js +12 -0
  307. package/dist/playwright-3AT3AKTV.cjs +98673 -0
  308. package/dist/playwright-VZPDVUEQ.js +98660 -0
  309. package/dist/reconstruction/index.cjs +153 -0
  310. package/dist/reconstruction/index.d.ts +29 -2
  311. package/dist/reconstruction/index.js +8 -0
  312. package/dist/runtime.cjs +316 -0
  313. package/dist/runtime.d.ts +61 -0
  314. package/dist/runtime.js +31 -0
  315. package/dist/self-improvement/index.cjs +563 -0
  316. package/dist/self-improvement/index.js +545 -0
  317. package/dist/src-4ROC227P.cjs +2094 -0
  318. package/dist/src-HCCCSYP7.js +2073 -0
  319. package/dist/storage/index.cjs +38 -0
  320. package/dist/storage/index.js +5 -0
  321. package/dist/testing.cjs +25 -0
  322. package/dist/testing.d.ts +70 -0
  323. package/dist/testing.js +4 -0
  324. package/dist/traitDocs/traitDocs.cjs +33 -0
  325. package/dist/traitDocs/traitDocs.js +7 -0
  326. package/dist/traits/botanical-lotus.cjs +177 -0
  327. package/dist/traits/botanical-lotus.d.ts +502 -0
  328. package/dist/traits/botanical-lotus.js +7 -0
  329. package/dist/traits/engines/index.cjs +520 -0
  330. package/dist/traits/engines/index.js +380 -0
  331. package/dist/traits/index.cjs +24548 -0
  332. package/dist/traits/index.d.ts +171 -35
  333. package/dist/traits/index.js +21638 -0
  334. package/dist/traits/simulation-solver-factory.cjs +13 -0
  335. package/dist/traits/simulation-solver-factory.d.ts +23 -0
  336. package/dist/traits/simulation-solver-factory.js +4 -0
  337. package/dist/traits/webcam-gaze.cjs +35 -0
  338. package/dist/traits/webcam-gaze.d.ts +17 -0
  339. package/dist/traits/webcam-gaze.js +4 -0
  340. package/dist/type-checker.cjs +19 -0
  341. package/dist/type-checker.js +6 -0
  342. package/dist/world/index.cjs +947 -0
  343. package/dist/world/index.d.ts +147 -0
  344. package/dist/world/index.js +939 -0
  345. package/dist/world-model/index.cjs +1446 -0
  346. package/dist/world-model/index.d.ts +119 -0
  347. package/dist/world-model/index.js +1414 -0
  348. package/dist/wot/index.cjs +29 -0
  349. package/dist/wot/index.js +4 -0
  350. package/package.json +93 -49
@@ -0,0 +1,666 @@
1
+ 'use strict';
2
+
3
+ var chunkE7JP3BS3_cjs = require('./chunk-E7JP3BS3.cjs');
4
+
5
+ // src/storage/IPFSTypes.ts
6
+ var IPFSUploadError = class extends Error {
7
+ constructor(message, provider, originalError) {
8
+ super(message);
9
+ this.provider = provider;
10
+ this.originalError = originalError;
11
+ this.name = "IPFSUploadError";
12
+ }
13
+ };
14
+ var IPFSPinError = class extends Error {
15
+ constructor(message, cid, originalError) {
16
+ super(message);
17
+ this.cid = cid;
18
+ this.originalError = originalError;
19
+ this.name = "IPFSPinError";
20
+ }
21
+ };
22
+ var FileSizeExceededError = class extends Error {
23
+ constructor(fileSize, maxSize) {
24
+ super(`File size ${fileSize} bytes exceeds maximum ${maxSize} bytes`);
25
+ this.fileSize = fileSize;
26
+ this.maxSize = maxSize;
27
+ this.name = "FileSizeExceededError";
28
+ }
29
+ };
30
+
31
+ // src/storage/IPFSProviders.ts
32
+ chunkE7JP3BS3_cjs.init_safeJsonParse();
33
+ var PinataProvider = class {
34
+ constructor(apiKey, apiSecret) {
35
+ this.baseUrl = "https://api.pinata.cloud";
36
+ this.apiKey = apiKey;
37
+ this.apiSecret = apiSecret || "";
38
+ }
39
+ async upload(files, options) {
40
+ const formData = new FormData();
41
+ for (const file of files) {
42
+ const blob = new Blob([file.content]);
43
+ formData.append("file", blob, file.path);
44
+ }
45
+ const metadata = {
46
+ name: options.metadata?.name || options.name,
47
+ keyvalues: options.metadata?.keyvalues || {}
48
+ };
49
+ formData.append("pinataMetadata", JSON.stringify(metadata));
50
+ const pinataOptions = {
51
+ cidVersion: 1
52
+ };
53
+ formData.append("pinataOptions", JSON.stringify(pinataOptions));
54
+ const response = await fetch(`${this.baseUrl}/pinning/pinFileToIPFS`, {
55
+ method: "POST",
56
+ headers: {
57
+ pinata_api_key: this.apiKey,
58
+ pinata_secret_api_key: this.apiSecret
59
+ },
60
+ body: formData
61
+ });
62
+ if (!response.ok) {
63
+ const error = await response.text();
64
+ throw new Error(`Pinata upload failed: ${error}`);
65
+ }
66
+ const data = await response.json();
67
+ return {
68
+ cid: data.IpfsHash,
69
+ size: data.PinSize
70
+ };
71
+ }
72
+ async pin(cid, name) {
73
+ const response = await fetch(`${this.baseUrl}/pinning/pinByHash`, {
74
+ method: "POST",
75
+ headers: {
76
+ "Content-Type": "application/json",
77
+ pinata_api_key: this.apiKey,
78
+ pinata_secret_api_key: this.apiSecret
79
+ },
80
+ body: JSON.stringify({
81
+ hashToPin: cid,
82
+ pinataMetadata: {
83
+ name: name || cid
84
+ }
85
+ })
86
+ });
87
+ if (!response.ok) {
88
+ const error = await response.text();
89
+ throw new Error(`Pinata pin failed: ${error}`);
90
+ }
91
+ }
92
+ async unpin(cid) {
93
+ const response = await fetch(`${this.baseUrl}/pinning/unpin/${cid}`, {
94
+ method: "DELETE",
95
+ headers: {
96
+ pinata_api_key: this.apiKey,
97
+ pinata_secret_api_key: this.apiSecret
98
+ }
99
+ });
100
+ if (!response.ok) {
101
+ const error = await response.text();
102
+ throw new Error(`Pinata unpin failed: ${error}`);
103
+ }
104
+ }
105
+ async getPinStatus(cid) {
106
+ const response = await fetch(
107
+ `${this.baseUrl}/data/pinList?hashContains=${cid}&status=pinned,pinning`,
108
+ {
109
+ headers: {
110
+ pinata_api_key: this.apiKey,
111
+ pinata_secret_api_key: this.apiSecret
112
+ }
113
+ }
114
+ );
115
+ if (!response.ok) {
116
+ return "unpinned";
117
+ }
118
+ const data = await response.json();
119
+ if (data.count === 0) {
120
+ return "unpinned";
121
+ }
122
+ const pin = data.rows[0];
123
+ return pin.status === "pinned" ? "pinned" : "pinning";
124
+ }
125
+ async listPins() {
126
+ const response = await fetch(`${this.baseUrl}/data/pinList?status=pinned`, {
127
+ headers: {
128
+ pinata_api_key: this.apiKey,
129
+ pinata_secret_api_key: this.apiSecret
130
+ }
131
+ });
132
+ if (!response.ok) {
133
+ throw new Error("Failed to list pins");
134
+ }
135
+ const data = await response.json();
136
+ return data.rows.map((pin) => ({
137
+ // @ts-expect-error
138
+ cid: pin.ipfs_pin_hash,
139
+ // @ts-expect-error
140
+ name: pin.metadata?.name || pin.ipfs_pin_hash,
141
+ // @ts-expect-error
142
+ size: pin.size,
143
+ // @ts-expect-error
144
+ status: pin.status,
145
+ // @ts-expect-error
146
+ created: new Date(pin.date_pinned)
147
+ }));
148
+ }
149
+ async verifyCID(cid) {
150
+ try {
151
+ const status = await this.getPinStatus(cid);
152
+ return status === "pinned" || status === "pinning";
153
+ } catch {
154
+ return false;
155
+ }
156
+ }
157
+ };
158
+ var NFTStorageProvider = class {
159
+ constructor(apiKey) {
160
+ this.baseUrl = "https://api.nft.storage";
161
+ this.apiKey = apiKey;
162
+ }
163
+ async upload(files, options) {
164
+ const formData = new FormData();
165
+ for (const file of files) {
166
+ const blob = new Blob([file.content]);
167
+ formData.append("file", blob, file.path);
168
+ }
169
+ const response = await fetch(`${this.baseUrl}/upload`, {
170
+ method: "POST",
171
+ headers: {
172
+ Authorization: `Bearer ${this.apiKey}`
173
+ },
174
+ body: formData
175
+ });
176
+ if (!response.ok) {
177
+ const error = await response.text();
178
+ throw new Error(`NFT.Storage upload failed: ${error}`);
179
+ }
180
+ const data = await response.json();
181
+ return {
182
+ cid: data.value.cid,
183
+ size: data.value.size
184
+ };
185
+ }
186
+ async pin(cid, name) {
187
+ }
188
+ async unpin(cid) {
189
+ const response = await fetch(`${this.baseUrl}/${cid}`, {
190
+ method: "DELETE",
191
+ headers: {
192
+ Authorization: `Bearer ${this.apiKey}`
193
+ }
194
+ });
195
+ if (!response.ok) {
196
+ const error = await response.text();
197
+ throw new Error(`NFT.Storage unpin failed: ${error}`);
198
+ }
199
+ }
200
+ async getPinStatus(cid) {
201
+ const response = await fetch(`${this.baseUrl}/${cid}`, {
202
+ headers: {
203
+ Authorization: `Bearer ${this.apiKey}`
204
+ }
205
+ });
206
+ if (!response.ok) {
207
+ return "unpinned";
208
+ }
209
+ const data = await response.json();
210
+ return data.pin?.status === "pinned" ? "pinned" : "pinning";
211
+ }
212
+ async listPins() {
213
+ const response = await fetch(`${this.baseUrl}`, {
214
+ headers: {
215
+ Authorization: `Bearer ${this.apiKey}`
216
+ }
217
+ });
218
+ if (!response.ok) {
219
+ throw new Error("Failed to list pins");
220
+ }
221
+ const data = await response.json();
222
+ return data.value.map((item) => ({
223
+ // @ts-expect-error
224
+ cid: item.cid,
225
+ // @ts-expect-error
226
+ name: item.name || item.cid,
227
+ // @ts-expect-error
228
+ size: item.size,
229
+ // @ts-expect-error
230
+ status: item.pin?.status || "pinned",
231
+ // @ts-expect-error
232
+ created: new Date(item.created)
233
+ }));
234
+ }
235
+ async verifyCID(cid) {
236
+ try {
237
+ const status = await this.getPinStatus(cid);
238
+ return status === "pinned" || status === "pinning";
239
+ } catch {
240
+ return false;
241
+ }
242
+ }
243
+ };
244
+ var InfuraProvider = class {
245
+ constructor(projectId, projectSecret) {
246
+ this.baseUrl = "https://ipfs.infura.io:5001/api/v0";
247
+ this.projectId = projectId;
248
+ this.projectSecret = projectSecret || "";
249
+ }
250
+ getAuthHeader() {
251
+ const auth = Buffer.from(`${this.projectId}:${this.projectSecret}`).toString("base64");
252
+ return `Basic ${auth}`;
253
+ }
254
+ async upload(files, options) {
255
+ const formData = new FormData();
256
+ for (const file of files) {
257
+ const blob = new Blob([file.content]);
258
+ formData.append("file", blob, file.path);
259
+ }
260
+ const response = await fetch(`${this.baseUrl}/add?wrap-with-directory=true`, {
261
+ method: "POST",
262
+ headers: {
263
+ Authorization: this.getAuthHeader()
264
+ },
265
+ body: formData
266
+ });
267
+ if (!response.ok) {
268
+ const error = await response.text();
269
+ throw new Error(`Infura upload failed: ${error}`);
270
+ }
271
+ const text = await response.text();
272
+ const lines = text.trim().split("\n");
273
+ const lastLine = chunkE7JP3BS3_cjs.readJson(lines[lines.length - 1]);
274
+ let totalSize = 0;
275
+ for (const line of lines) {
276
+ const data = chunkE7JP3BS3_cjs.readJson(line);
277
+ totalSize += data.Size || 0;
278
+ }
279
+ return {
280
+ cid: lastLine.Hash,
281
+ size: totalSize
282
+ };
283
+ }
284
+ async pin(cid, name) {
285
+ const response = await fetch(`${this.baseUrl}/pin/add?arg=${cid}`, {
286
+ method: "POST",
287
+ headers: {
288
+ Authorization: this.getAuthHeader()
289
+ }
290
+ });
291
+ if (!response.ok) {
292
+ const error = await response.text();
293
+ throw new Error(`Infura pin failed: ${error}`);
294
+ }
295
+ }
296
+ async unpin(cid) {
297
+ const response = await fetch(`${this.baseUrl}/pin/rm?arg=${cid}`, {
298
+ method: "POST",
299
+ headers: {
300
+ Authorization: this.getAuthHeader()
301
+ }
302
+ });
303
+ if (!response.ok) {
304
+ const error = await response.text();
305
+ throw new Error(`Infura unpin failed: ${error}`);
306
+ }
307
+ }
308
+ async getPinStatus(cid) {
309
+ const response = await fetch(`${this.baseUrl}/pin/ls?arg=${cid}`, {
310
+ headers: {
311
+ Authorization: this.getAuthHeader()
312
+ }
313
+ });
314
+ if (!response.ok) {
315
+ return "unpinned";
316
+ }
317
+ const data = await response.json();
318
+ return data.Keys && data.Keys[cid] ? "pinned" : "unpinned";
319
+ }
320
+ async listPins() {
321
+ const response = await fetch(`${this.baseUrl}/pin/ls`, {
322
+ headers: {
323
+ Authorization: this.getAuthHeader()
324
+ }
325
+ });
326
+ if (!response.ok) {
327
+ throw new Error("Failed to list pins");
328
+ }
329
+ const data = await response.json();
330
+ return Object.entries(data.Keys || {}).map(([cid, info]) => ({
331
+ cid,
332
+ name: cid,
333
+ size: 0,
334
+ // Infura doesn't provide size in pin list
335
+ status: "pinned"
336
+ }));
337
+ }
338
+ async verifyCID(cid) {
339
+ try {
340
+ const response = await fetch(`${this.baseUrl}/cat?arg=${cid}`, {
341
+ method: "POST",
342
+ headers: {
343
+ Authorization: this.getAuthHeader()
344
+ }
345
+ });
346
+ return response.ok;
347
+ } catch {
348
+ return false;
349
+ }
350
+ }
351
+ };
352
+
353
+ // src/storage/IPFSService.ts
354
+ var IPFSService = class {
355
+ constructor(options) {
356
+ this.fallbackProviders = [];
357
+ this.defaultGateway = "https://ipfs.io/ipfs";
358
+ this.cdnGateway = "https://cloudflare-ipfs.com/ipfs";
359
+ this.options = {
360
+ ...options,
361
+ fallbackProviders: options.fallbackProviders || [],
362
+ enableCDN: options.enableCDN ?? true,
363
+ maxFileSize: options.maxFileSize || 100 * 1024 * 1024,
364
+ // 100MB
365
+ chunkSize: options.chunkSize || 5 * 1024 * 1024,
366
+ // 5MB
367
+ maxRetries: options.maxRetries || 3,
368
+ retryDelay: options.retryDelay || 1e3,
369
+ gatewayUrl: options.gatewayUrl || this.defaultGateway,
370
+ apiSecret: options.apiSecret
371
+ };
372
+ this.primaryProvider = this.createProvider(
373
+ this.options.provider,
374
+ this.options.apiKey,
375
+ this.options.apiSecret
376
+ );
377
+ for (const fallback of this.options.fallbackProviders) {
378
+ const provider = this.createProvider(fallback.provider, fallback.apiKey, fallback.apiSecret);
379
+ this.fallbackProviders.push(provider);
380
+ }
381
+ }
382
+ /**
383
+ * Create provider instance
384
+ */
385
+ createProvider(type, apiKey, apiSecret) {
386
+ switch (type) {
387
+ case "pinata":
388
+ return new PinataProvider(apiKey, apiSecret);
389
+ case "nft.storage":
390
+ return new NFTStorageProvider(apiKey);
391
+ case "infura":
392
+ return new InfuraProvider(apiKey, apiSecret);
393
+ default:
394
+ throw new Error(`Unknown IPFS provider: ${type}`);
395
+ }
396
+ }
397
+ /**
398
+ * Upload files to IPFS
399
+ *
400
+ * Returns CID and gateway URLs. Automatically retries on failure and falls back
401
+ * to backup providers if primary fails.
402
+ *
403
+ * @param options Upload options
404
+ * @returns Upload result with CID and URLs
405
+ * @throws {FileSizeExceededError} If file size exceeds maximum
406
+ * @throws {IPFSUploadError} If upload fails on all providers
407
+ */
408
+ async upload(options) {
409
+ const startTime = Date.now();
410
+ const totalSize = options.files.reduce((sum, file) => {
411
+ const size = file.content instanceof Buffer || file.content instanceof Uint8Array ? file.content.length : Buffer.from(file.content).length;
412
+ return sum + size;
413
+ }, 0);
414
+ if (totalSize > this.options.maxFileSize) {
415
+ throw new FileSizeExceededError(totalSize, this.options.maxFileSize);
416
+ }
417
+ const needsChunking = totalSize > this.options.chunkSize;
418
+ try {
419
+ const result = await this.uploadWithRetry(
420
+ this.primaryProvider,
421
+ this.options.provider,
422
+ options,
423
+ needsChunking
424
+ );
425
+ return this.buildUploadResult(result.cid, result.size, startTime, options.pin ?? true);
426
+ } catch (primaryError) {
427
+ console.warn(`Primary provider ${this.options.provider} failed:`, primaryError);
428
+ for (let i = 0; i < this.fallbackProviders.length; i++) {
429
+ const provider = this.fallbackProviders[i];
430
+ const providerType = this.options.fallbackProviders[i].provider;
431
+ try {
432
+ const result = await this.uploadWithRetry(provider, providerType, options, needsChunking);
433
+ return this.buildUploadResult(result.cid, result.size, startTime, options.pin ?? true);
434
+ } catch (error) {
435
+ console.warn(`Fallback provider ${providerType} failed:`, error);
436
+ continue;
437
+ }
438
+ }
439
+ throw new IPFSUploadError(
440
+ "Upload failed on all providers",
441
+ this.options.provider,
442
+ primaryError
443
+ );
444
+ }
445
+ }
446
+ /**
447
+ * Upload with retry logic
448
+ */
449
+ async uploadWithRetry(provider, providerType, options, needsChunking) {
450
+ let lastError;
451
+ for (let attempt = 0; attempt < this.options.maxRetries; attempt++) {
452
+ try {
453
+ if (needsChunking) {
454
+ return await this.uploadChunked(provider, options);
455
+ } else {
456
+ if (options.onProgress) {
457
+ const totalSize = options.files.reduce((sum, file) => {
458
+ const size = file.content instanceof Buffer || file.content instanceof Uint8Array ? file.content.length : Buffer.from(file.content).length;
459
+ return sum + size;
460
+ }, 0);
461
+ let uploadedBytes = 0;
462
+ for (const file of options.files) {
463
+ const size = file.content instanceof Buffer || file.content instanceof Uint8Array ? file.content.length : Buffer.from(file.content).length;
464
+ uploadedBytes += size;
465
+ options.onProgress({
466
+ uploadedBytes,
467
+ totalBytes: totalSize,
468
+ percentage: uploadedBytes / totalSize * 100,
469
+ currentFile: file.path
470
+ });
471
+ }
472
+ }
473
+ return await provider.upload(options.files, options);
474
+ }
475
+ } catch (error) {
476
+ lastError = error;
477
+ if (attempt < this.options.maxRetries - 1) {
478
+ const delay = this.options.retryDelay * Math.pow(2, attempt);
479
+ await this.delay(delay);
480
+ }
481
+ }
482
+ }
483
+ throw new IPFSUploadError(
484
+ `Upload failed after ${this.options.maxRetries} attempts`,
485
+ providerType,
486
+ lastError
487
+ );
488
+ }
489
+ /**
490
+ * Upload large files in chunks
491
+ *
492
+ * Breaks large files into smaller chunks, uploads them separately,
493
+ * and combines them into a single IPFS directory.
494
+ */
495
+ async uploadChunked(provider, options) {
496
+ const chunks = [];
497
+ let totalSize = 0;
498
+ let uploadedBytes = 0;
499
+ for (const file of options.files) {
500
+ const content = file.content instanceof Buffer || file.content instanceof Uint8Array ? file.content : Buffer.from(file.content);
501
+ const fileSize = content.length;
502
+ totalSize += fileSize;
503
+ if (fileSize > this.options.chunkSize) {
504
+ const numChunks = Math.ceil(fileSize / this.options.chunkSize);
505
+ for (let i = 0; i < numChunks; i++) {
506
+ const start = i * this.options.chunkSize;
507
+ const end = Math.min(start + this.options.chunkSize, fileSize);
508
+ const chunk = content.slice(start, end);
509
+ chunks.push({
510
+ path: `${file.path}.chunk${i}`,
511
+ content: chunk
512
+ });
513
+ uploadedBytes += chunk.length;
514
+ if (options.onProgress) {
515
+ options.onProgress({
516
+ uploadedBytes,
517
+ totalBytes: totalSize,
518
+ percentage: uploadedBytes / totalSize * 100,
519
+ currentFile: file.path
520
+ });
521
+ }
522
+ }
523
+ } else {
524
+ chunks.push(file);
525
+ uploadedBytes += fileSize;
526
+ if (options.onProgress) {
527
+ options.onProgress({
528
+ uploadedBytes,
529
+ totalBytes: totalSize,
530
+ percentage: uploadedBytes / totalSize * 100,
531
+ currentFile: file.path
532
+ });
533
+ }
534
+ }
535
+ }
536
+ return await provider.upload(chunks, options);
537
+ }
538
+ /**
539
+ * Build upload result
540
+ */
541
+ buildUploadResult(cid, size, startTime, pinned) {
542
+ const gatewayUrl = `${this.options.gatewayUrl}/${cid}`;
543
+ const cdnUrl = this.options.enableCDN ? `${this.cdnGateway}/${cid}` : void 0;
544
+ return {
545
+ cid,
546
+ uri: `ipfs://${cid}`,
547
+ gatewayUrl,
548
+ cdnUrl,
549
+ pinned,
550
+ size,
551
+ duration: Date.now() - startTime
552
+ };
553
+ }
554
+ /**
555
+ * Pin existing CID to IPFS
556
+ *
557
+ * @param cid IPFS CID to pin
558
+ * @param name Optional name for the pin
559
+ * @throws {IPFSPinError} If pin operation fails
560
+ */
561
+ async pin(cid, name) {
562
+ try {
563
+ await this.primaryProvider.pin(cid, name);
564
+ } catch (error) {
565
+ throw new IPFSPinError(`Failed to pin CID ${cid}`, cid, error);
566
+ }
567
+ }
568
+ /**
569
+ * Unpin CID from IPFS
570
+ *
571
+ * @param cid IPFS CID to unpin
572
+ * @throws {IPFSPinError} If unpin operation fails
573
+ */
574
+ async unpin(cid) {
575
+ try {
576
+ await this.primaryProvider.unpin(cid);
577
+ } catch (error) {
578
+ throw new IPFSPinError(`Failed to unpin CID ${cid}`, cid, error);
579
+ }
580
+ }
581
+ /**
582
+ * Get pin status for CID
583
+ *
584
+ * @param cid IPFS CID to check
585
+ * @returns Pin status ('pinned', 'pinning', or 'unpinned')
586
+ */
587
+ async getPinStatus(cid) {
588
+ return await this.primaryProvider.getPinStatus(cid);
589
+ }
590
+ /**
591
+ * Verify CID exists and is accessible
592
+ *
593
+ * @param cid IPFS CID to verify
594
+ * @returns True if CID is accessible
595
+ */
596
+ async verifyCID(cid) {
597
+ return await this.primaryProvider.verifyCID(cid);
598
+ }
599
+ /**
600
+ * Get file from IPFS
601
+ *
602
+ * @param cid IPFS CID
603
+ * @param path Optional path within directory
604
+ * @returns File content as Uint8Array
605
+ */
606
+ async get(cid, path) {
607
+ const url = path ? `${this.options.gatewayUrl}/${cid}/${path}` : `${this.options.gatewayUrl}/${cid}`;
608
+ const response = await fetch(url);
609
+ if (!response.ok) {
610
+ throw new Error(`Failed to fetch CID ${cid}: ${response.statusText}`);
611
+ }
612
+ const buffer = await response.arrayBuffer();
613
+ return new Uint8Array(buffer);
614
+ }
615
+ /**
616
+ * List all pins for account
617
+ *
618
+ * @returns Array of pin information
619
+ */
620
+ async listPins() {
621
+ return await this.primaryProvider.listPins();
622
+ }
623
+ /**
624
+ * Delay helper for retry logic
625
+ */
626
+ delay(ms) {
627
+ return new Promise((resolve) => setTimeout(resolve, ms));
628
+ }
629
+ /**
630
+ * Get CDN URL for CID
631
+ *
632
+ * @param cid IPFS CID
633
+ * @returns CDN URL if enabled, otherwise gateway URL
634
+ */
635
+ getCDNUrl(cid) {
636
+ return this.options.enableCDN ? `${this.cdnGateway}/${cid}` : `${this.options.gatewayUrl}/${cid}`;
637
+ }
638
+ /**
639
+ * Get gateway URL for CID
640
+ *
641
+ * @param cid IPFS CID
642
+ * @returns Gateway URL
643
+ */
644
+ getGatewayUrl(cid) {
645
+ return `${this.options.gatewayUrl}/${cid}`;
646
+ }
647
+ /**
648
+ * Get IPFS URI for CID
649
+ *
650
+ * @param cid IPFS CID
651
+ * @returns IPFS URI (ipfs://...)
652
+ */
653
+ getIPFSUri(cid) {
654
+ return `ipfs://${cid}`;
655
+ }
656
+ };
657
+
658
+ exports.FileSizeExceededError = FileSizeExceededError;
659
+ exports.IPFSPinError = IPFSPinError;
660
+ exports.IPFSService = IPFSService;
661
+ exports.IPFSUploadError = IPFSUploadError;
662
+ exports.InfuraProvider = InfuraProvider;
663
+ exports.NFTStorageProvider = NFTStorageProvider;
664
+ exports.PinataProvider = PinataProvider;
665
+ //# sourceMappingURL=chunk-FJPADH77.cjs.map
666
+ //# sourceMappingURL=chunk-FJPADH77.cjs.map