@caspertech/node-metaverse 0.7.40 → 0.7.51

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 (459) hide show
  1. package/dist/examples/Camera/Camera.js +3 -14
  2. package/dist/examples/Camera/Camera.js.map +1 -1
  3. package/dist/examples/ExampleBot.js +66 -87
  4. package/dist/examples/ExampleBot.js.map +1 -1
  5. package/dist/examples/Friends/Friends.js +29 -44
  6. package/dist/examples/Friends/Friends.js.map +1 -1
  7. package/dist/examples/Grid/Name2Key.js +25 -36
  8. package/dist/examples/Grid/Name2Key.js.map +1 -1
  9. package/dist/examples/Groups/Group.js +42 -55
  10. package/dist/examples/Groups/Group.js.map +1 -1
  11. package/dist/examples/Groups/GroupChat.js +55 -68
  12. package/dist/examples/Groups/GroupChat.js.map +1 -1
  13. package/dist/examples/InstantMessages/InstantMessages.js +8 -21
  14. package/dist/examples/InstantMessages/InstantMessages.js.map +1 -1
  15. package/dist/examples/Inventory/Inventory.js +80 -97
  16. package/dist/examples/Inventory/Inventory.js.map +1 -1
  17. package/dist/examples/MFA/MFA.js +24 -40
  18. package/dist/examples/MFA/MFA.js.map +1 -1
  19. package/dist/examples/Money/Money.js +28 -41
  20. package/dist/examples/Money/Money.js.map +1 -1
  21. package/dist/examples/Objects/TaskInventory.js +13 -24
  22. package/dist/examples/Objects/TaskInventory.js.map +1 -1
  23. package/dist/examples/Region/Agents.js +6 -17
  24. package/dist/examples/Region/Agents.js.map +1 -1
  25. package/dist/examples/Region/Estate.js +9 -20
  26. package/dist/examples/Region/Estate.js.map +1 -1
  27. package/dist/examples/Region/Parcels.js +12 -23
  28. package/dist/examples/Region/Parcels.js.map +1 -1
  29. package/dist/examples/Region/Region.js +2 -13
  30. package/dist/examples/Region/Region.js.map +1 -1
  31. package/dist/examples/Region/Settings.js +15 -0
  32. package/dist/examples/Region/Settings.js.map +1 -0
  33. package/dist/examples/Teleports/Teleports.js +22 -35
  34. package/dist/examples/Teleports/Teleports.js.map +1 -1
  35. package/dist/lib/Bot.d.ts +14 -14
  36. package/dist/lib/Bot.js +217 -231
  37. package/dist/lib/Bot.js.map +1 -1
  38. package/dist/lib/LoginHandler.d.ts +3 -3
  39. package/dist/lib/LoginHandler.js +106 -116
  40. package/dist/lib/LoginHandler.js.map +1 -1
  41. package/dist/lib/classes/Agent.d.ts +23 -35
  42. package/dist/lib/classes/Agent.js +96 -108
  43. package/dist/lib/classes/Agent.js.map +1 -1
  44. package/dist/lib/classes/AssetMap.d.ts +18 -95
  45. package/dist/lib/classes/AssetMap.js +86 -16
  46. package/dist/lib/classes/AssetMap.js.map +1 -1
  47. package/dist/lib/classes/AssetRegistry.d.ts +31 -0
  48. package/dist/lib/classes/AssetRegistry.js +26 -0
  49. package/dist/lib/classes/AssetRegistry.js.map +1 -0
  50. package/dist/lib/classes/AssetTypeRegistry.d.ts +21 -0
  51. package/dist/lib/classes/AssetTypeRegistry.js +81 -0
  52. package/dist/lib/classes/AssetTypeRegistry.js.map +1 -0
  53. package/dist/lib/classes/BVH.js.map +1 -1
  54. package/dist/lib/classes/BVHJoint.js.map +1 -1
  55. package/dist/lib/classes/BVHJointKeyframe.d.ts +1 -1
  56. package/dist/lib/classes/BatchQueue.d.ts +2 -2
  57. package/dist/lib/classes/BatchQueue.js +66 -80
  58. package/dist/lib/classes/BatchQueue.js.map +1 -1
  59. package/dist/lib/classes/BatchQueue.spec.js +17 -26
  60. package/dist/lib/classes/BatchQueue.spec.js.map +1 -1
  61. package/dist/lib/classes/BinaryReader.d.ts +66 -0
  62. package/dist/lib/classes/BinaryReader.js +304 -0
  63. package/dist/lib/classes/BinaryReader.js.map +1 -0
  64. package/dist/lib/classes/BinaryReader.spec.d.ts +1 -0
  65. package/dist/lib/classes/BinaryReader.spec.js +241 -0
  66. package/dist/lib/classes/BinaryReader.spec.js.map +1 -0
  67. package/dist/lib/classes/BinaryWriter.d.ts +34 -0
  68. package/dist/lib/classes/BinaryWriter.js +192 -0
  69. package/dist/lib/classes/BinaryWriter.js.map +1 -0
  70. package/dist/lib/classes/BinaryWriter.spec.d.ts +1 -0
  71. package/dist/lib/classes/BinaryWriter.spec.js +328 -0
  72. package/dist/lib/classes/BinaryWriter.spec.js.map +1 -0
  73. package/dist/lib/classes/BitPack.d.ts +2 -2
  74. package/dist/lib/classes/BitPack.js +1 -1
  75. package/dist/lib/classes/BitPack.js.map +1 -1
  76. package/dist/lib/classes/BuildMap.d.ts +6 -6
  77. package/dist/lib/classes/BuildMap.js.map +1 -1
  78. package/dist/lib/classes/Caps.d.ts +18 -24
  79. package/dist/lib/classes/Caps.js +278 -297
  80. package/dist/lib/classes/Caps.js.map +1 -1
  81. package/dist/lib/classes/Circuit.d.ts +20 -28
  82. package/dist/lib/classes/Circuit.js +104 -91
  83. package/dist/lib/classes/Circuit.js.map +1 -1
  84. package/dist/lib/classes/ClientCommands.d.ts +3 -3
  85. package/dist/lib/classes/ClientCommands.js.map +1 -1
  86. package/dist/lib/classes/ClientEvents.d.ts +41 -32
  87. package/dist/lib/classes/ClientEvents.js +65 -0
  88. package/dist/lib/classes/ClientEvents.js.map +1 -1
  89. package/dist/lib/classes/CoalescedGameObject.d.ts +2 -2
  90. package/dist/lib/classes/CoalescedGameObject.js +37 -49
  91. package/dist/lib/classes/CoalescedGameObject.js.map +1 -1
  92. package/dist/lib/classes/Color4.d.ts +2 -2
  93. package/dist/lib/classes/Color4.js +42 -42
  94. package/dist/lib/classes/Color4.js.map +1 -1
  95. package/dist/lib/classes/Comms.d.ts +3 -3
  96. package/dist/lib/classes/Comms.js +236 -236
  97. package/dist/lib/classes/Comms.js.map +1 -1
  98. package/dist/lib/classes/ConcurrentQueue.d.ts +3 -3
  99. package/dist/lib/classes/ConcurrentQueue.js +16 -11
  100. package/dist/lib/classes/ConcurrentQueue.js.map +1 -1
  101. package/dist/lib/classes/EventQueueClient.d.ts +6 -6
  102. package/dist/lib/classes/EventQueueClient.js +189 -201
  103. package/dist/lib/classes/EventQueueClient.js.map +1 -1
  104. package/dist/lib/classes/GroupBan.d.ts +3 -3
  105. package/dist/lib/classes/GroupBan.js.map +1 -1
  106. package/dist/lib/classes/GroupMember.d.ts +2 -2
  107. package/dist/lib/classes/GroupRole.d.ts +2 -2
  108. package/dist/lib/classes/IPAddress.d.ts +3 -2
  109. package/dist/lib/classes/IPAddress.js +14 -13
  110. package/dist/lib/classes/IPAddress.js.map +1 -1
  111. package/dist/lib/classes/Inventory.d.ts +7 -15
  112. package/dist/lib/classes/Inventory.js +69 -80
  113. package/dist/lib/classes/Inventory.js.map +1 -1
  114. package/dist/lib/classes/InventoryFolder.d.ts +11 -11
  115. package/dist/lib/classes/InventoryFolder.js +544 -626
  116. package/dist/lib/classes/InventoryFolder.js.map +1 -1
  117. package/dist/lib/classes/InventoryItem.d.ts +15 -11
  118. package/dist/lib/classes/InventoryItem.js +494 -486
  119. package/dist/lib/classes/InventoryItem.js.map +1 -1
  120. package/dist/lib/classes/InventoryTypeRegistry.d.ts +19 -0
  121. package/dist/lib/classes/InventoryTypeRegistry.js +69 -0
  122. package/dist/lib/classes/InventoryTypeRegistry.js.map +1 -0
  123. package/dist/lib/classes/LLGLTFMaterial.d.ts +1 -1
  124. package/dist/lib/classes/LLGLTFMaterial.js +2 -2
  125. package/dist/lib/classes/LLGLTFMaterial.js.map +1 -1
  126. package/dist/lib/classes/LLGLTFMaterial.spec.js +17 -18
  127. package/dist/lib/classes/LLGLTFMaterial.spec.js.map +1 -1
  128. package/dist/lib/classes/LLGLTFMaterialOverride.d.ts +1 -1
  129. package/dist/lib/classes/LLGLTFMaterialOverride.js +119 -118
  130. package/dist/lib/classes/LLGLTFMaterialOverride.js.map +1 -1
  131. package/dist/lib/classes/LLGLTFMaterialOverride.spec.js +70 -71
  132. package/dist/lib/classes/LLGLTFMaterialOverride.spec.js.map +1 -1
  133. package/dist/lib/classes/LLGesture.d.ts +1 -1
  134. package/dist/lib/classes/LLGesture.js +1 -1
  135. package/dist/lib/classes/LLGesture.js.map +1 -1
  136. package/dist/lib/classes/LLGestureAnimationStep.d.ts +1 -1
  137. package/dist/lib/classes/LLGestureAnimationStep.js.map +1 -1
  138. package/dist/lib/classes/LLGestureChatStep.js.map +1 -1
  139. package/dist/lib/classes/LLGestureSoundStep.d.ts +1 -1
  140. package/dist/lib/classes/LLGestureSoundStep.js.map +1 -1
  141. package/dist/lib/classes/LLGestureStep.d.ts +1 -1
  142. package/dist/lib/classes/LLGestureWaitStep.js.map +1 -1
  143. package/dist/lib/classes/LLLindenText.d.ts +2 -4
  144. package/dist/lib/classes/LLLindenText.js +12 -8
  145. package/dist/lib/classes/LLLindenText.js.map +1 -1
  146. package/dist/lib/classes/LLSettings.d.ts +98 -83
  147. package/dist/lib/classes/LLSettings.js +240 -83
  148. package/dist/lib/classes/LLSettings.js.map +1 -1
  149. package/dist/lib/classes/LLSettings.spec.d.ts +1 -0
  150. package/dist/lib/classes/LLSettings.spec.js +27 -0
  151. package/dist/lib/classes/LLSettings.spec.js.map +1 -0
  152. package/dist/lib/classes/LLWearable.d.ts +4 -8
  153. package/dist/lib/classes/LLWearable.js +1 -1
  154. package/dist/lib/classes/LLWearable.js.map +1 -1
  155. package/dist/lib/classes/Logger.d.ts +3 -3
  156. package/dist/lib/classes/Logger.js +1 -1
  157. package/dist/lib/classes/Logger.js.map +1 -1
  158. package/dist/lib/classes/LoginParameters.js.map +1 -1
  159. package/dist/lib/classes/LoginResponse.d.ts +4 -9
  160. package/dist/lib/classes/LoginResponse.js +120 -113
  161. package/dist/lib/classes/LoginResponse.js.map +1 -1
  162. package/dist/lib/classes/MapBlock.d.ts +2 -2
  163. package/dist/lib/classes/MessageBase.d.ts +5 -5
  164. package/dist/lib/classes/MessageClasses.js.map +1 -1
  165. package/dist/lib/classes/ObjectResolver.d.ts +6 -6
  166. package/dist/lib/classes/ObjectResolver.js +127 -152
  167. package/dist/lib/classes/ObjectResolver.js.map +1 -1
  168. package/dist/lib/classes/ObjectStoreFull.d.ts +9 -9
  169. package/dist/lib/classes/ObjectStoreFull.js +176 -192
  170. package/dist/lib/classes/ObjectStoreFull.js.map +1 -1
  171. package/dist/lib/classes/ObjectStoreLite.d.ts +29 -31
  172. package/dist/lib/classes/ObjectStoreLite.js +485 -494
  173. package/dist/lib/classes/ObjectStoreLite.js.map +1 -1
  174. package/dist/lib/classes/Packet.d.ts +2 -2
  175. package/dist/lib/classes/Packet.js +2 -2
  176. package/dist/lib/classes/Packet.js.map +1 -1
  177. package/dist/lib/classes/ParticleSystem.js +1 -1
  178. package/dist/lib/classes/ParticleSystem.js.map +1 -1
  179. package/dist/lib/classes/PrimFacesHelper.d.ts +14 -0
  180. package/dist/lib/classes/PrimFacesHelper.js +75 -0
  181. package/dist/lib/classes/PrimFacesHelper.js.map +1 -0
  182. package/dist/lib/classes/Quaternion.d.ts +31 -6
  183. package/dist/lib/classes/Quaternion.js +236 -48
  184. package/dist/lib/classes/Quaternion.js.map +1 -1
  185. package/dist/lib/classes/Region.d.ts +23 -22
  186. package/dist/lib/classes/Region.js +453 -515
  187. package/dist/lib/classes/Region.js.map +1 -1
  188. package/dist/lib/classes/TarArchive.d.ts +1 -1
  189. package/dist/lib/classes/TarArchive.js.map +1 -1
  190. package/dist/lib/classes/TarFile.js +1 -1
  191. package/dist/lib/classes/TarFile.js.map +1 -1
  192. package/dist/lib/classes/TarReader.d.ts +1 -2
  193. package/dist/lib/classes/TarReader.js +15 -17
  194. package/dist/lib/classes/TarReader.js.map +1 -1
  195. package/dist/lib/classes/TarWriter.d.ts +1 -1
  196. package/dist/lib/classes/TarWriter.js +51 -68
  197. package/dist/lib/classes/TarWriter.js.map +1 -1
  198. package/dist/lib/classes/TextureEntry.d.ts +2 -3
  199. package/dist/lib/classes/TextureEntry.js +12 -12
  200. package/dist/lib/classes/TextureEntry.js.map +1 -1
  201. package/dist/lib/classes/TextureEntryFace.d.ts +4 -4
  202. package/dist/lib/classes/TextureEntryFace.js.map +1 -1
  203. package/dist/lib/classes/UUID.d.ts +2 -2
  204. package/dist/lib/classes/UUID.js +28 -28
  205. package/dist/lib/classes/UUID.js.map +1 -1
  206. package/dist/lib/classes/Utils.d.ts +2 -11
  207. package/dist/lib/classes/Utils.js +72 -328
  208. package/dist/lib/classes/Utils.js.map +1 -1
  209. package/dist/lib/classes/Vector2.d.ts +35 -6
  210. package/dist/lib/classes/Vector2.js +192 -28
  211. package/dist/lib/classes/Vector2.js.map +1 -1
  212. package/dist/lib/classes/Vector3.d.ts +38 -6
  213. package/dist/lib/classes/Vector3.js +229 -48
  214. package/dist/lib/classes/Vector3.js.map +1 -1
  215. package/dist/lib/classes/Vector4.d.ts +36 -6
  216. package/dist/lib/classes/Vector4.js +225 -21
  217. package/dist/lib/classes/Vector4.js.map +1 -1
  218. package/dist/lib/classes/Wearable.d.ts +1 -1
  219. package/dist/lib/classes/Zerocoder.js +2 -2
  220. package/dist/lib/classes/Zerocoder.js.map +1 -1
  221. package/dist/lib/classes/commands/AgentCommands.d.ts +7 -5
  222. package/dist/lib/classes/commands/AgentCommands.js +60 -76
  223. package/dist/lib/classes/commands/AgentCommands.js.map +1 -1
  224. package/dist/lib/classes/commands/AssetCommands.d.ts +5 -10
  225. package/dist/lib/classes/commands/AssetCommands.js +176 -179
  226. package/dist/lib/classes/commands/AssetCommands.js.map +1 -1
  227. package/dist/lib/classes/commands/CommandsBase.d.ts +4 -4
  228. package/dist/lib/classes/commands/CommandsBase.js.map +1 -1
  229. package/dist/lib/classes/commands/CommunicationsCommands.d.ts +3 -3
  230. package/dist/lib/classes/commands/CommunicationsCommands.js +350 -426
  231. package/dist/lib/classes/commands/CommunicationsCommands.js.map +1 -1
  232. package/dist/lib/classes/commands/FriendCommands.d.ts +9 -10
  233. package/dist/lib/classes/commands/FriendCommands.js +238 -236
  234. package/dist/lib/classes/commands/FriendCommands.js.map +1 -1
  235. package/dist/lib/classes/commands/GridCommands.d.ts +3 -3
  236. package/dist/lib/classes/commands/GridCommands.js +299 -336
  237. package/dist/lib/classes/commands/GridCommands.js.map +1 -1
  238. package/dist/lib/classes/commands/GroupCommands.d.ts +2 -2
  239. package/dist/lib/classes/commands/GroupCommands.js +293 -336
  240. package/dist/lib/classes/commands/GroupCommands.js.map +1 -1
  241. package/dist/lib/classes/commands/InventoryCommands.d.ts +4 -4
  242. package/dist/lib/classes/commands/InventoryCommands.js +54 -69
  243. package/dist/lib/classes/commands/InventoryCommands.js.map +1 -1
  244. package/dist/lib/classes/commands/MovementCommands.d.ts +2 -2
  245. package/dist/lib/classes/commands/MovementCommands.js +23 -38
  246. package/dist/lib/classes/commands/MovementCommands.js.map +1 -1
  247. package/dist/lib/classes/commands/NetworkCommands.js +35 -46
  248. package/dist/lib/classes/commands/NetworkCommands.js.map +1 -1
  249. package/dist/lib/classes/commands/ParcelCommands.d.ts +4 -4
  250. package/dist/lib/classes/commands/ParcelCommands.js +64 -77
  251. package/dist/lib/classes/commands/ParcelCommands.js.map +1 -1
  252. package/dist/lib/classes/commands/RegionCommands.d.ts +11 -10
  253. package/dist/lib/classes/commands/RegionCommands.js +1126 -1211
  254. package/dist/lib/classes/commands/RegionCommands.js.map +1 -1
  255. package/dist/lib/classes/commands/TeleportCommands.d.ts +8 -8
  256. package/dist/lib/classes/commands/TeleportCommands.js +58 -58
  257. package/dist/lib/classes/commands/TeleportCommands.js.map +1 -1
  258. package/dist/lib/classes/interfaces/IGameObjectData.d.ts +18 -20
  259. package/dist/lib/classes/interfaces/ILandBlock.d.ts +2 -2
  260. package/dist/lib/classes/interfaces/IObjectStore.d.ts +12 -12
  261. package/dist/lib/classes/interfaces/IResolveJob.d.ts +2 -2
  262. package/dist/lib/classes/interfaces/ITreeBoundingBox.d.ts +2 -2
  263. package/dist/lib/classes/llsd/LLSD.d.ts +12 -0
  264. package/dist/lib/classes/llsd/LLSD.js +128 -0
  265. package/dist/lib/classes/llsd/LLSD.js.map +1 -0
  266. package/dist/lib/classes/llsd/LLSD.spec.d.ts +1 -0
  267. package/dist/lib/classes/llsd/LLSD.spec.js +249 -0
  268. package/dist/lib/classes/llsd/LLSD.spec.js.map +1 -0
  269. package/dist/lib/classes/llsd/LLSDArray.d.ts +26 -3
  270. package/dist/lib/classes/llsd/LLSDArray.js +182 -6
  271. package/dist/lib/classes/llsd/LLSDArray.js.map +1 -1
  272. package/dist/lib/classes/llsd/LLSDBinary.d.ts +7 -0
  273. package/dist/lib/classes/llsd/LLSDBinary.js +114 -0
  274. package/dist/lib/classes/llsd/LLSDBinary.js.map +1 -0
  275. package/dist/lib/classes/llsd/LLSDInteger.d.ts +9 -0
  276. package/dist/lib/classes/llsd/LLSDInteger.js +25 -0
  277. package/dist/lib/classes/llsd/LLSDInteger.js.map +1 -0
  278. package/dist/lib/classes/llsd/LLSDMap.d.ts +16 -5
  279. package/dist/lib/classes/llsd/LLSDMap.js +197 -16
  280. package/dist/lib/classes/llsd/LLSDMap.js.map +1 -1
  281. package/dist/lib/classes/llsd/LLSDNotation.d.ts +11 -0
  282. package/dist/lib/classes/llsd/LLSDNotation.js +271 -0
  283. package/dist/lib/classes/llsd/LLSDNotation.js.map +1 -0
  284. package/dist/lib/classes/llsd/LLSDReal.d.ts +10 -0
  285. package/dist/lib/classes/llsd/LLSDReal.js +71 -0
  286. package/dist/lib/classes/llsd/LLSDReal.js.map +1 -0
  287. package/dist/lib/classes/llsd/LLSDToken.d.ts +1 -1
  288. package/dist/lib/classes/llsd/LLSDTokenContainer.d.ts +2 -2
  289. package/dist/lib/classes/llsd/LLSDTokenGenerator.d.ts +1 -1
  290. package/dist/lib/classes/llsd/LLSDTokenSpec.d.ts +1 -1
  291. package/dist/lib/classes/llsd/LLSDTokenType.d.ts +18 -18
  292. package/dist/lib/classes/llsd/LLSDTokenType.js +18 -18
  293. package/dist/lib/classes/llsd/LLSDTokenType.js.map +1 -1
  294. package/dist/lib/classes/llsd/LLSDType.d.ts +6 -3
  295. package/dist/lib/classes/llsd/LLSDURI.d.ts +7 -0
  296. package/dist/lib/classes/llsd/LLSDURI.js +19 -0
  297. package/dist/lib/classes/llsd/LLSDURI.js.map +1 -0
  298. package/dist/lib/classes/llsd/LLSDXML.d.ts +5 -0
  299. package/dist/lib/classes/llsd/LLSDXML.js +245 -0
  300. package/dist/lib/classes/llsd/LLSDXML.js.map +1 -0
  301. package/dist/lib/classes/messages/ObjectUpdate.d.ts +4 -5
  302. package/dist/lib/classes/messages/ObjectUpdate.js +115 -115
  303. package/dist/lib/classes/messages/ObjectUpdate.js.map +1 -1
  304. package/dist/lib/classes/messages/SimStats.d.ts +3 -2
  305. package/dist/lib/classes/messages/SimStats.js +17 -17
  306. package/dist/lib/classes/messages/SimStats.js.map +1 -1
  307. package/dist/lib/classes/public/Avatar.d.ts +4 -4
  308. package/dist/lib/classes/public/Avatar.js +39 -33
  309. package/dist/lib/classes/public/Avatar.js.map +1 -1
  310. package/dist/lib/classes/public/AvatarQueryResult.d.ts +4 -4
  311. package/dist/lib/classes/public/AvatarQueryResult.js.map +1 -1
  312. package/dist/lib/classes/public/ExtendedMeshData.d.ts +1 -1
  313. package/dist/lib/classes/public/ExtendedMeshData.js.map +1 -1
  314. package/dist/lib/classes/public/ExtraParams.d.ts +6 -6
  315. package/dist/lib/classes/public/ExtraParams.js +36 -39
  316. package/dist/lib/classes/public/ExtraParams.js.map +1 -1
  317. package/dist/lib/classes/public/ExtraParams.spec.js +2 -11
  318. package/dist/lib/classes/public/ExtraParams.spec.js.map +1 -1
  319. package/dist/lib/classes/public/FlexibleData.js.map +1 -1
  320. package/dist/lib/classes/public/Friend.js.map +1 -1
  321. package/dist/lib/classes/public/GameObject.d.ts +23 -21
  322. package/dist/lib/classes/public/GameObject.js +1294 -1306
  323. package/dist/lib/classes/public/GameObject.js.map +1 -1
  324. package/dist/lib/classes/public/GameObject.spec.js +8 -18
  325. package/dist/lib/classes/public/GameObject.spec.js.map +1 -1
  326. package/dist/lib/classes/public/LLMesh.d.ts +5 -7
  327. package/dist/lib/classes/public/LLMesh.js +194 -216
  328. package/dist/lib/classes/public/LLMesh.js.map +1 -1
  329. package/dist/lib/classes/public/LightData.js.map +1 -1
  330. package/dist/lib/classes/public/LightImageData.js.map +1 -1
  331. package/dist/lib/classes/public/Material.js +45 -56
  332. package/dist/lib/classes/public/Material.js.map +1 -1
  333. package/dist/lib/classes/public/MeshData.js.map +1 -1
  334. package/dist/lib/classes/public/Parcel.d.ts +4 -4
  335. package/dist/lib/classes/public/Parcel.js +1 -2
  336. package/dist/lib/classes/public/Parcel.js.map +1 -1
  337. package/dist/lib/classes/public/ReflectionProbeData.d.ts +1 -1
  338. package/dist/lib/classes/public/ReflectionProbeData.js.map +1 -1
  339. package/dist/lib/classes/public/RegionEnvironment.d.ts +14 -13
  340. package/dist/lib/classes/public/RegionEnvironment.js +94 -53
  341. package/dist/lib/classes/public/RegionEnvironment.js.map +1 -1
  342. package/dist/lib/classes/public/RegionEnvironmentSky.d.ts +2 -0
  343. package/dist/lib/classes/public/RegionEnvironmentSky.js +7 -0
  344. package/dist/lib/classes/public/RegionEnvironmentSky.js.map +1 -0
  345. package/dist/lib/classes/public/RegionEnvironmentWater.d.ts +2 -0
  346. package/dist/lib/classes/public/RegionEnvironmentWater.js +7 -0
  347. package/dist/lib/classes/public/RegionEnvironmentWater.js.map +1 -0
  348. package/dist/lib/classes/public/RenderMaterialData.js.map +1 -1
  349. package/dist/lib/classes/public/RenderMaterialParam.d.ts +1 -1
  350. package/dist/lib/classes/public/SculptData.js.map +1 -1
  351. package/dist/lib/classes/public/TextureAnim.js +2 -1
  352. package/dist/lib/classes/public/TextureAnim.js.map +1 -1
  353. package/dist/lib/classes/public/interfaces/GlobalPosition.d.ts +1 -1
  354. package/dist/lib/classes/public/interfaces/LLPhysicsConvex.d.ts +1 -1
  355. package/dist/lib/classes/public/interfaces/LLSkin.d.ts +1 -1
  356. package/dist/lib/classes/public/interfaces/LLSubMesh.d.ts +3 -5
  357. package/dist/lib/classes/public/interfaces/MapLocation.d.ts +3 -3
  358. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.d.ts +26 -0
  359. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js +3 -0
  360. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js.map +1 -0
  361. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.d.ts +15 -0
  362. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js +3 -0
  363. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js.map +1 -0
  364. package/dist/lib/classes/public/interfaces/SkyPreset.d.ts +3 -3
  365. package/dist/lib/classes/public/interfaces/WaterPreset.d.ts +4 -4
  366. package/dist/lib/deviceToken.json +1 -0
  367. package/dist/lib/enums/AssetType.d.ts +6 -4
  368. package/dist/lib/enums/AssetType.js +5 -3
  369. package/dist/lib/enums/AssetType.js.map +1 -1
  370. package/dist/lib/enums/AttachmentPoint.d.ts +0 -1
  371. package/dist/lib/enums/AttachmentPoint.js +0 -1
  372. package/dist/lib/enums/AttachmentPoint.js.map +1 -1
  373. package/dist/lib/enums/InventoryType.d.ts +3 -5
  374. package/dist/lib/enums/InventoryType.js +2 -4
  375. package/dist/lib/enums/InventoryType.js.map +1 -1
  376. package/dist/lib/enums/LayerType.d.ts +1 -1
  377. package/dist/lib/enums/LayerType.js +1 -1
  378. package/dist/lib/events/AvatarPropertiesReplyEvent.d.ts +1 -1
  379. package/dist/lib/events/BalanceUpdatedEvent.d.ts +2 -2
  380. package/dist/lib/events/BulkUpdateInventoryEvent.d.ts +2 -2
  381. package/dist/lib/events/BulkUpdateInventoryEvent.js.map +1 -1
  382. package/dist/lib/events/ChatEvent.d.ts +5 -5
  383. package/dist/lib/events/FriendOnlineEvent.d.ts +1 -1
  384. package/dist/lib/events/FriendRemovedEvent.d.ts +1 -1
  385. package/dist/lib/events/FriendRequestEvent.d.ts +1 -1
  386. package/dist/lib/events/FriendResponseEvent.d.ts +1 -1
  387. package/dist/lib/events/FriendRightsEvent.d.ts +2 -2
  388. package/dist/lib/events/GroupChatClosedEvent.d.ts +1 -1
  389. package/dist/lib/events/GroupChatEvent.d.ts +1 -1
  390. package/dist/lib/events/GroupChatSessionAgentListEvent.d.ts +1 -1
  391. package/dist/lib/events/GroupChatSessionJoinEvent.d.ts +1 -1
  392. package/dist/lib/events/GroupInviteEvent.d.ts +1 -1
  393. package/dist/lib/events/GroupNoticeEvent.d.ts +1 -1
  394. package/dist/lib/events/GroupProfileReplyEvent.d.ts +2 -2
  395. package/dist/lib/events/InstantMessageEvent.d.ts +3 -3
  396. package/dist/lib/events/InventoryOfferedEvent.d.ts +3 -3
  397. package/dist/lib/events/InventoryResponseEvent.d.ts +1 -1
  398. package/dist/lib/events/LandStatsEvent.d.ts +4 -4
  399. package/dist/lib/events/LandStatsEvent.js.map +1 -1
  400. package/dist/lib/events/LureEvent.d.ts +2 -2
  401. package/dist/lib/events/MapInfoRangeReplyEvent.d.ts +1 -1
  402. package/dist/lib/events/MapInfoReplyEvent.d.ts +2 -2
  403. package/dist/lib/events/NewObjectEvent.d.ts +2 -2
  404. package/dist/lib/events/ObjectKilledEvent.d.ts +2 -2
  405. package/dist/lib/events/ObjectPhysicsDataEvent.d.ts +1 -1
  406. package/dist/lib/events/ObjectResolvedEvent.d.ts +1 -1
  407. package/dist/lib/events/ObjectUpdatedEvent.d.ts +2 -2
  408. package/dist/lib/events/ParcelInfoReplyEvent.d.ts +3 -3
  409. package/dist/lib/events/ParcelPropertiesEvent.d.ts +3 -3
  410. package/dist/lib/events/RegionInfoReplyEvent.d.ts +2 -2
  411. package/dist/lib/events/ScriptDialogEvent.d.ts +1 -1
  412. package/dist/lib/events/SelectedObjectEvent.d.ts +1 -1
  413. package/dist/lib/events/TeleportEvent.d.ts +1 -1
  414. package/dist/lib/index.d.ts +6 -8
  415. package/dist/lib/index.js +4 -7
  416. package/dist/lib/index.js.map +1 -1
  417. package/dist/lib/tsm/common.d.ts +1 -1
  418. package/dist/lib/tsm/common.js +3 -1
  419. package/dist/lib/tsm/common.js.map +1 -1
  420. package/dist/lib/tsm/mat2.d.ts +8 -8
  421. package/dist/lib/tsm/mat2.js +8 -7
  422. package/dist/lib/tsm/mat2.js.map +1 -1
  423. package/dist/lib/tsm/mat3.d.ts +7 -7
  424. package/dist/lib/tsm/mat3.js +8 -7
  425. package/dist/lib/tsm/mat3.js.map +1 -1
  426. package/dist/lib/tsm/mat4.d.ts +9 -9
  427. package/dist/lib/tsm/mat4.js +8 -7
  428. package/dist/lib/tsm/mat4.js.map +1 -1
  429. package/dist/lib/tsm/quat.d.ts +19 -19
  430. package/dist/lib/tsm/quat.js +69 -68
  431. package/dist/lib/tsm/quat.js.map +1 -1
  432. package/dist/lib/tsm/vec2.d.ts +13 -13
  433. package/dist/lib/tsm/vec2.js +30 -29
  434. package/dist/lib/tsm/vec2.js.map +1 -1
  435. package/dist/lib/tsm/vec3.d.ts +16 -16
  436. package/dist/lib/tsm/vec3.js +48 -47
  437. package/dist/lib/tsm/vec3.js.map +1 -1
  438. package/dist/lib/tsm/vec4.d.ts +22 -22
  439. package/dist/lib/tsm/vec4.js +94 -93
  440. package/dist/lib/tsm/vec4.js.map +1 -1
  441. package/eslint.config.mjs +104 -0
  442. package/examples/Inventory/Inventory.ts +4 -2
  443. package/examples/Money/Money.ts +6 -6
  444. package/examples/Objects/TaskInventory.ts +4 -3
  445. package/examples/Region/Settings.ts +19 -0
  446. package/package.json +10 -9
  447. package/.eslintrc +0 -224
  448. package/dist/lib/classes/llsd/LLSDNotationParser.d.ts +0 -9
  449. package/dist/lib/classes/llsd/LLSDNotationParser.js +0 -177
  450. package/dist/lib/classes/llsd/LLSDNotationParser.js.map +0 -1
  451. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js +0 -167
  452. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js.map +0 -1
  453. package/dist/lib/enums/AssetTypeLL.d.ts +0 -27
  454. package/dist/lib/enums/AssetTypeLL.js +0 -32
  455. package/dist/lib/enums/AssetTypeLL.js.map +0 -1
  456. package/dist/lib/enums/HTTPAssets.d.ts +0 -24
  457. package/dist/lib/enums/HTTPAssets.js +0 -29
  458. package/dist/lib/enums/HTTPAssets.js.map +0 -1
  459. /package/dist/{lib/classes/llsd/LLSDNotationParser.spec.d.ts → examples/Region/Settings.d.ts} +0 -0
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.InventoryFolder = void 0;
13
4
  const LLSD = require("@caspertech/llsd");
@@ -33,6 +24,8 @@ const CreateInventoryItem_1 = require("./messages/CreateInventoryItem");
33
24
  const LLMesh_1 = require("./public/LLMesh");
34
25
  const Utils_1 = require("./Utils");
35
26
  const UUID_1 = require("./UUID");
27
+ const AssetTypeRegistry_1 = require("./AssetTypeRegistry");
28
+ const InventoryTypeRegistry_1 = require("./InventoryTypeRegistry");
36
29
  class InventoryFolder {
37
30
  constructor(lib, invBase, agent) {
38
31
  this.items = [];
@@ -53,9 +46,8 @@ class InventoryFolder {
53
46
  getChildFolders() {
54
47
  const children = [];
55
48
  const ofi = this.folderID.toString();
56
- for (const uuid of Object.keys(this.inventoryBase.skeleton)) {
57
- const folder = this.inventoryBase.skeleton[uuid];
58
- if (folder.parentID.toString() === ofi) {
49
+ for (const folder of this.inventoryBase.skeleton.values()) {
50
+ if (folder !== undefined && folder.parentID.toString() === ofi) {
59
51
  children.push(folder);
60
52
  }
61
53
  }
@@ -69,7 +61,7 @@ class InventoryFolder {
69
61
  if (!uuid) {
70
62
  break;
71
63
  }
72
- const folder = this.inventoryBase.skeleton[uuid.toString()];
64
+ const folder = this.inventoryBase.skeleton.get(uuid.toString());
73
65
  if (folder) {
74
66
  for (const child of folder.getChildFolders()) {
75
67
  children.push(child);
@@ -79,671 +71,597 @@ class InventoryFolder {
79
71
  }
80
72
  return children;
81
73
  }
82
- createFolder(name, type) {
83
- return __awaiter(this, void 0, void 0, function* () {
84
- const msg = new CreateInventoryFolder_1.CreateInventoryFolderMessage();
85
- msg.AgentData = {
86
- AgentID: this.agent.agentID,
87
- SessionID: this.agent.currentRegion.circuit.sessionID
88
- };
89
- msg.FolderData = {
90
- FolderID: UUID_1.UUID.random(),
91
- ParentID: this.folderID,
92
- Type: type,
93
- Name: Utils_1.Utils.StringToBuffer(name),
94
- };
95
- const ack = this.agent.currentRegion.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
96
- yield this.agent.currentRegion.circuit.waitForAck(ack, 10000);
97
- const requestFolder = {
98
- folder_id: new LLSD.UUID(this.folderID),
99
- owner_id: new LLSD.UUID(this.agent.agentID),
100
- fetch_folders: true,
101
- fetch_items: false,
102
- sort_order: InventorySortOrder_1.InventorySortOrder.ByName
103
- };
104
- const requestedFolders = {
105
- 'folders': [
106
- requestFolder
107
- ]
108
- };
109
- let cmd = 'FetchInventoryDescendents2';
110
- if (this.library === InventoryLibrary_1.InventoryLibrary.Library) {
111
- cmd = 'FetchLibDescendents2';
112
- }
113
- const folderContents = yield this.agent.currentRegion.caps.capsPostXML(cmd, requestedFolders);
114
- if (folderContents['folders'] && folderContents['folders'][0] && folderContents['folders'][0]['categories'] && folderContents['folders'][0]['categories'].length > 0) {
115
- for (const folder of folderContents['folders'][0]['categories']) {
116
- let folderID = folder['category_id'];
117
- if (folderID === undefined) {
118
- folderID = folder['folder_id'];
119
- }
120
- if (folderID === undefined) {
121
- continue;
122
- }
123
- const foundFolderID = new UUID_1.UUID(folderID.toString());
124
- if (foundFolderID.equals(msg.FolderData.FolderID)) {
125
- const newFolder = new InventoryFolder(this.library, this.agent.inventory.main, this.agent);
126
- newFolder.typeDefault = parseInt(folder['type_default'], 10);
127
- newFolder.version = parseInt(folder['version'], 10);
128
- newFolder.name = String(folder['name']);
129
- newFolder.folderID = new UUID_1.UUID(folderID);
130
- newFolder.parentID = new UUID_1.UUID(folder['parent_id']);
131
- this.folders.push(newFolder);
132
- return newFolder;
133
- }
74
+ async createFolder(name, type) {
75
+ const msg = new CreateInventoryFolder_1.CreateInventoryFolderMessage();
76
+ msg.AgentData = {
77
+ AgentID: this.agent.agentID,
78
+ SessionID: this.agent.currentRegion.circuit.sessionID
79
+ };
80
+ msg.FolderData = {
81
+ FolderID: UUID_1.UUID.random(),
82
+ ParentID: this.folderID,
83
+ Type: type,
84
+ Name: Utils_1.Utils.StringToBuffer(name),
85
+ };
86
+ const ack = this.agent.currentRegion.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
87
+ await this.agent.currentRegion.circuit.waitForAck(ack, 10000);
88
+ const requestFolder = {
89
+ folder_id: new LLSD.UUID(this.folderID),
90
+ owner_id: new LLSD.UUID(this.agent.agentID),
91
+ fetch_folders: true,
92
+ fetch_items: false,
93
+ sort_order: InventorySortOrder_1.InventorySortOrder.ByName
94
+ };
95
+ const requestedFolders = {
96
+ 'folders': [
97
+ requestFolder
98
+ ]
99
+ };
100
+ let cmd = 'FetchInventoryDescendents2';
101
+ if (this.library === InventoryLibrary_1.InventoryLibrary.Library) {
102
+ cmd = 'FetchLibDescendents2';
103
+ }
104
+ const folderContents = await this.agent.currentRegion.caps.capsPostXML(cmd, requestedFolders);
105
+ if (folderContents.folders?.[0]?.categories && folderContents.folders[0].categories.length > 0) {
106
+ for (const folder of folderContents.folders[0].categories) {
107
+ let folderID = folder.category_id;
108
+ if (folderID === undefined) {
109
+ folderID = folder.folder_id;
110
+ }
111
+ if (folderID === undefined) {
112
+ continue;
113
+ }
114
+ const foundFolderID = new UUID_1.UUID(folderID.toString());
115
+ if (foundFolderID.equals(msg.FolderData.FolderID)) {
116
+ const newFolder = new InventoryFolder(this.library, this.agent.inventory.main, this.agent);
117
+ newFolder.typeDefault = parseInt(folder.type_default, 10);
118
+ newFolder.version = parseInt(folder.version, 10);
119
+ newFolder.name = String(folder.name);
120
+ newFolder.folderID = new UUID_1.UUID(folderID);
121
+ newFolder.parentID = new UUID_1.UUID(folder.parent_id);
122
+ this.folders.push(newFolder);
123
+ return newFolder;
134
124
  }
135
125
  }
136
- throw new Error('Failed to create inventory folder');
137
- });
126
+ }
127
+ throw new Error('Failed to create inventory folder');
138
128
  }
139
- delete() {
140
- return __awaiter(this, arguments, void 0, function* (saveCache = false) {
141
- const { caps } = this.agent.currentRegion;
142
- const invCap = yield caps.getCapability('InventoryAPIv3');
143
- yield this.agent.currentRegion.caps.requestDelete(`${invCap}/category/${this.folderID}`);
144
- const folders = this.getChildFoldersRecursive();
129
+ async delete(saveCache = false) {
130
+ const { caps } = this.agent.currentRegion;
131
+ const invCap = await caps.getCapability('InventoryAPIv3');
132
+ await this.agent.currentRegion.caps.requestDelete(`${invCap}/category/${this.folderID.toString()}`);
133
+ const folders = this.getChildFoldersRecursive();
134
+ for (const folder of folders) {
135
+ this.inventoryBase.skeleton.delete(folder.folderID.toString());
136
+ }
137
+ if (saveCache) {
145
138
  for (const folder of folders) {
146
- delete this.inventoryBase.skeleton[folder.folderID.toString()];
147
- }
148
- if (saveCache) {
149
- for (const folder of folders) {
150
- const fileName = path.join(this.cacheDir + '/' + folder.folderID.toString());
151
- try {
152
- const stat = yield fs.stat(fileName);
153
- if (stat.isFile()) {
154
- yield fs.unlink(fileName);
155
- }
156
- }
157
- catch (error) {
139
+ const fileName = path.join(this.cacheDir + '/' + folder.folderID.toString());
140
+ try {
141
+ const stat = await fs.stat(fileName);
142
+ if (stat.isFile()) {
143
+ await fs.unlink(fileName);
158
144
  }
159
145
  }
146
+ catch (_error) {
147
+ }
160
148
  }
161
- });
149
+ }
162
150
  }
163
- saveCache() {
164
- return __awaiter(this, void 0, void 0, function* () {
165
- const json = {
166
- version: this.version,
167
- items: this.items
168
- };
169
- const fileName = path.join(this.cacheDir + '/' + this.folderID.toString());
170
- yield fs.writeFile(fileName, JSON.stringify(json));
171
- });
151
+ async removeItem(itemID, save = false) {
152
+ const item = this.agent.inventory.itemsByID.get(itemID.toString());
153
+ if (item) {
154
+ this.agent.inventory.itemsByID.delete(itemID.toString());
155
+ this.items = this.items.filter((filterItem) => {
156
+ return !filterItem.itemID.equals(itemID);
157
+ });
158
+ }
159
+ if (save) {
160
+ await this.saveCache();
161
+ }
162
+ }
163
+ async addItem(item, save = false) {
164
+ if (this.agent.inventory.itemsByID.has(item.itemID.toString())) {
165
+ await this.removeItem(item.itemID, false);
166
+ }
167
+ this.items.push(item);
168
+ this.agent.inventory.itemsByID.set(item.itemID.toString(), item);
169
+ if (save) {
170
+ await this.saveCache();
171
+ }
172
+ }
173
+ async populate(useCached = true) {
174
+ if (!useCached) {
175
+ await this.populateInternal();
176
+ return;
177
+ }
178
+ try {
179
+ await this.loadCache();
180
+ }
181
+ catch (_e) {
182
+ await this.populateInternal();
183
+ }
172
184
  }
173
- loadCache() {
174
- return __awaiter(this, void 0, void 0, function* () {
175
- const fileName = path.join(this.cacheDir + '/' + this.folderID.toString());
176
- try {
177
- const data = yield fs.readFile(fileName);
178
- const json = JSON.parse(data.toString('utf8'));
179
- if (json['version'] >= this.version) {
180
- this.items = [];
181
- for (const item of json['items']) {
182
- item.created = new Date(item.created.mUUID);
183
- item.assetID = new UUID_1.UUID(item.assetID.mUUID);
184
- item.parentID = new UUID_1.UUID(item.parentID.mUUID);
185
- item.itemID = new UUID_1.UUID(item.itemID.mUUID);
186
- item.permissions.lastOwner = new UUID_1.UUID(item.permissions.lastOwner.mUUID);
187
- item.permissions.owner = new UUID_1.UUID(item.permissions.owner.mUUID);
188
- item.permissions.creator = new UUID_1.UUID(item.permissions.creator.mUUID);
189
- item.permissions.group = new UUID_1.UUID(item.permissions.group.mUUID);
190
- yield this.addItem(item, false);
185
+ async uploadAsset(type, inventoryType, data, name, description, flags = InventoryItemFlags_1.InventoryItemFlags.None) {
186
+ switch (inventoryType) {
187
+ case InventoryType_1.InventoryType.Wearable:
188
+ {
189
+ const invItemID = await this.uploadInventoryAssetLegacy(type, inventoryType, data, name, description, flags);
190
+ const uploadedItem = await this.agent.inventory.fetchInventoryItem(invItemID);
191
+ if (uploadedItem === null) {
192
+ throw new Error('Unable to get inventory item');
191
193
  }
194
+ else {
195
+ await this.addItem(uploadedItem, false);
196
+ }
197
+ return uploadedItem;
198
+ }
199
+ case InventoryType_1.InventoryType.Landmark:
200
+ case InventoryType_1.InventoryType.Notecard:
201
+ case InventoryType_1.InventoryType.Gesture:
202
+ case InventoryType_1.InventoryType.LSL:
203
+ case InventoryType_1.InventoryType.Settings:
204
+ case InventoryType_1.InventoryType.Material:
205
+ {
206
+ const invItemID = await this.uploadInventoryItem(type, inventoryType, data, name, description, flags);
207
+ const item = await this.agent.inventory.fetchInventoryItem(invItemID);
208
+ if (item === null) {
209
+ throw new Error('Unable to get inventory item');
210
+ }
211
+ else {
212
+ await this.addItem(item, false);
213
+ }
214
+ return item;
215
+ }
216
+ default:
217
+ break;
218
+ }
219
+ const uploadCost = await this.agent.currentRegion.getUploadCost();
220
+ Logger_1.Logger.Info('[' + name + ']');
221
+ const response = await this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', {
222
+ 'folder_id': new LLSD.UUID(this.folderID.toString()),
223
+ 'asset_type': AssetTypeRegistry_1.AssetTypeRegistry.getTypeName(type),
224
+ 'inventory_type': InventoryTypeRegistry_1.InventoryTypeRegistry.getTypeName(inventoryType),
225
+ 'name': name,
226
+ 'description': description,
227
+ 'everyone_mask': PermissionMask_1.PermissionMask.All,
228
+ 'group_mask': PermissionMask_1.PermissionMask.All,
229
+ 'next_owner_mask': PermissionMask_1.PermissionMask.All,
230
+ 'expected_upload_cost': uploadCost
231
+ });
232
+ if (response.state === 'upload') {
233
+ const uploadURL = response.uploader;
234
+ const responseUpload = await this.agent.currentRegion.caps.capsRequestUpload(uploadURL, data);
235
+ if (responseUpload.new_inventory_item !== undefined) {
236
+ const invItemID = new UUID_1.UUID(responseUpload.new_inventory_item.toString());
237
+ const item = await this.agent.inventory.fetchInventoryItem(invItemID);
238
+ if (item === null) {
239
+ throw new Error('Unable to get inventory item');
192
240
  }
193
241
  else {
194
- throw new Error('Old version');
242
+ await this.addItem(item, false);
195
243
  }
244
+ return item;
196
245
  }
197
- catch (error) {
198
- throw new Error('Cache miss');
246
+ else {
247
+ throw new Error('Unable to upload asset');
199
248
  }
200
- });
249
+ }
250
+ else if (response.error) {
251
+ throw new Error(response.error.message);
252
+ }
253
+ else {
254
+ throw new Error('Unable to upload asset');
255
+ }
201
256
  }
202
- removeItem(itemID_1) {
203
- return __awaiter(this, arguments, void 0, function* (itemID, save = false) {
204
- if (this.agent.inventory.itemsByID[itemID.toString()]) {
205
- delete this.agent.inventory.itemsByID[itemID.toString()];
206
- this.items = this.items.filter((item) => {
207
- return !item.itemID.equals(itemID);
208
- });
209
- }
210
- if (save) {
211
- return this.saveCache();
212
- }
213
- });
257
+ checkCopyright(creatorID) {
258
+ if (!creatorID.equals(this.agent.agentID) && !creatorID.isZero()) {
259
+ throw new Error('Unable to upload - copyright violation');
260
+ }
214
261
  }
215
- addItem(item_1) {
216
- return __awaiter(this, arguments, void 0, function* (item, save = false) {
217
- if (this.agent.inventory.itemsByID[item.itemID.toString()]) {
218
- yield this.removeItem(item.itemID, false);
262
+ findFolder(id) {
263
+ for (const folder of this.folders) {
264
+ if (folder.folderID.equals(id)) {
265
+ return folder;
219
266
  }
220
- this.items.push(item);
221
- this.agent.inventory.itemsByID[item.itemID.toString()] = item;
222
- if (save) {
223
- return this.saveCache();
267
+ const result = folder.findFolder(id);
268
+ if (result !== null) {
269
+ return result;
224
270
  }
225
- });
271
+ }
272
+ return null;
226
273
  }
227
- populateInternal() {
228
- return new Promise((resolve) => {
229
- const requestFolder = {
230
- folder_id: new LLSD.UUID(this.folderID),
231
- owner_id: new LLSD.UUID(this.agent.agentID),
232
- fetch_folders: true,
233
- fetch_items: true,
234
- sort_order: InventorySortOrder_1.InventorySortOrder.ByName
235
- };
236
- const requestedFolders = {
237
- 'folders': [
238
- requestFolder
239
- ]
240
- };
241
- let cmd = 'FetchInventoryDescendents2';
242
- if (this.library === InventoryLibrary_1.InventoryLibrary.Library) {
243
- cmd = 'FetchLibDescendents2';
244
- }
245
- this.agent.currentRegion.caps.capsPostXML(cmd, requestedFolders).then((folderContents) => {
246
- for (const folder of folderContents['folders'][0]['categories']) {
247
- let folderIDStr = folder['category_id'];
248
- if (folderIDStr === undefined) {
249
- folderIDStr = folder['folder_id'];
250
- }
251
- const folderID = new UUID_1.UUID(folderIDStr);
252
- let found = false;
253
- for (const fld of this.folders) {
254
- if (fld.folderID.equals(folderID)) {
255
- found = true;
256
- break;
257
- }
258
- }
259
- if (found) {
260
- continue;
274
+ async uploadMesh(name, description, mesh, confirmCostCallback) {
275
+ const decodedMesh = await LLMesh_1.LLMesh.from(mesh);
276
+ this.checkCopyright(decodedMesh.creatorID);
277
+ const faces = [];
278
+ const faceCount = decodedMesh.lodLevels.high_lod.length;
279
+ for (let x = 0; x < faceCount; x++) {
280
+ faces.push({
281
+ 'diffuse_color': [1.000000000000001, 1.000000000000001, 1.000000000000001, 1.000000000000001],
282
+ 'fullbright': false
283
+ });
284
+ }
285
+ const prim = {
286
+ 'face_list': faces,
287
+ 'position': [0.000000000000001, 0.000000000000001, 0.000000000000001],
288
+ 'rotation': [0.000000000000001, 0.000000000000001, 0.000000000000001, 1.000000000000001],
289
+ 'scale': [2.000000000000001, 2.000000000000001, 2.000000000000001],
290
+ 'material': 3,
291
+ 'physics_shape_type': 2,
292
+ 'mesh': 0
293
+ };
294
+ const assetResources = {
295
+ 'instance_list': [prim],
296
+ 'mesh_list': [new LLSD.Binary(Array.from(mesh))],
297
+ 'texture_list': [],
298
+ 'metric': 'MUT_Unspecified'
299
+ };
300
+ const uploadMap = {
301
+ 'name': String(name),
302
+ 'description': String(description),
303
+ 'asset_resources': assetResources,
304
+ 'asset_type': 'mesh',
305
+ 'inventory_type': 'object',
306
+ 'folder_id': new LLSD.UUID(this.folderID.toString()),
307
+ 'texture_folder_id': new LLSD.UUID(this.agent.inventory.findFolderForType(FolderType_1.FolderType.Texture)),
308
+ 'everyone_mask': PermissionMask_1.PermissionMask.All,
309
+ 'group_mask': PermissionMask_1.PermissionMask.All,
310
+ 'next_owner_mask': PermissionMask_1.PermissionMask.All
311
+ };
312
+ let result = null;
313
+ try {
314
+ result = await this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', uploadMap);
315
+ }
316
+ catch (error) {
317
+ console.error(error);
318
+ }
319
+ if (result.state === 'upload' && result.upload_price !== undefined) {
320
+ const cost = result.upload_price;
321
+ if (await confirmCostCallback(cost)) {
322
+ const uploader = result.uploader;
323
+ const uploadResult = await this.agent.currentRegion.caps.capsPerformXMLPost(uploader, assetResources);
324
+ if (uploadResult.new_inventory_item && uploadResult.new_asset) {
325
+ const inventoryItem = new UUID_1.UUID(uploadResult.new_inventory_item.toString());
326
+ const item = await this.agent.inventory.fetchInventoryItem(inventoryItem);
327
+ if (item !== null) {
328
+ item.assetID = new UUID_1.UUID(uploadResult.new_asset.toString());
329
+ await this.addItem(item, false);
330
+ return item;
261
331
  }
262
- const newFolder = new InventoryFolder(this.library, this.agent.inventory.main, this.agent);
263
- newFolder.typeDefault = parseInt(folder['type_default'], 10);
264
- newFolder.version = parseInt(folder['version'], 10);
265
- newFolder.name = String(folder['name']);
266
- newFolder.folderID = folderID;
267
- newFolder.parentID = new UUID_1.UUID(folder['parent_id']);
268
- this.folders.push(newFolder);
269
- }
270
- if (folderContents['folders'] && folderContents['folders'][0] && folderContents['folders'][0]['items']) {
271
- this.version = folderContents['folders'][0]['version'];
272
- this.items = [];
273
- for (const item of folderContents['folders'][0]['items']) {
274
- const invItem = new InventoryItem_1.InventoryItem(this, this.agent);
275
- invItem.assetID = new UUID_1.UUID(item['asset_id'].toString());
276
- invItem.inventoryType = item['inv_type'];
277
- invItem.name = item['name'];
278
- invItem.salePrice = item['sale_info']['sale_price'];
279
- invItem.saleType = item['sale_info']['sale_type'];
280
- invItem.created = new Date(item['created_at'] * 1000);
281
- invItem.parentID = new UUID_1.UUID(item['parent_id'].toString());
282
- invItem.flags = item['flags'];
283
- invItem.itemID = new UUID_1.UUID(item['item_id'].toString());
284
- invItem.description = item['desc'];
285
- invItem.type = item['type'];
286
- if (item['permissions']['last_owner_id'] === undefined) {
287
- item['permissions']['last_owner_id'] = item['permissions']['owner_id'];
288
- }
289
- invItem.permissions = {
290
- baseMask: item['permissions']['base_mask'],
291
- groupMask: item['permissions']['group_mask'],
292
- nextOwnerMask: item['permissions']['next_owner_mask'],
293
- ownerMask: item['permissions']['owner_mask'],
294
- everyoneMask: item['permissions']['everyone_mask'],
295
- lastOwner: new UUID_1.UUID(item['permissions']['last_owner_id'].toString()),
296
- owner: new UUID_1.UUID(item['permissions']['owner_id'].toString()),
297
- creator: new UUID_1.UUID(item['permissions']['creator_id'].toString()),
298
- group: new UUID_1.UUID(item['permissions']['group_id'].toString())
299
- };
300
- this.addItem(invItem, false);
332
+ else {
333
+ throw new Error('Unable to locate inventory item following mesh upload');
301
334
  }
302
- this.saveCache().then(() => {
303
- resolve();
304
- }).catch(() => {
305
- resolve();
306
- });
307
335
  }
308
336
  else {
309
- resolve();
337
+ throw new Error('Upload failed - no new inventory item returned');
310
338
  }
311
- });
312
- });
339
+ }
340
+ throw new Error('Upload cost declined');
341
+ }
342
+ else {
343
+ console.log(result);
344
+ console.log(JSON.stringify(result.error));
345
+ throw new Error('Upload failed');
346
+ }
313
347
  }
314
- populate(useCached = true) {
315
- if (!useCached) {
316
- return this.populateInternal();
317
- }
318
- return new Promise((resolve, reject) => {
319
- this.loadCache().then(() => {
320
- resolve();
321
- }).catch(() => {
322
- this.populateInternal().then(() => {
323
- resolve();
324
- }).catch((erro) => {
325
- reject(erro);
326
- });
327
- });
328
- });
348
+ async saveCache() {
349
+ const json = {
350
+ version: this.version,
351
+ childItems: this.items,
352
+ childFolders: this.folders
353
+ };
354
+ const fileName = path.join(this.cacheDir + '/' + this.folderID.toString() + '.json');
355
+ const replacer = (key, value) => {
356
+ if (key === 'container' || key === 'agent' || key === 'folders' || key === 'items' || key === 'cacheDir' || key === 'inventoryBase') {
357
+ return undefined;
358
+ }
359
+ return value;
360
+ };
361
+ await fs.writeFile(fileName, JSON.stringify(json, replacer));
329
362
  }
330
- uploadInventoryAssetLegacy(assetType, inventoryType, data, name, description, flags) {
331
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
332
- const msg = new AssetUploadRequest_1.AssetUploadRequestMessage();
333
- const transactionID = UUID_1.UUID.random();
334
- msg.AssetBlock = {
335
- StoreLocal: false,
336
- Type: assetType,
337
- Tempfile: false,
338
- TransactionID: transactionID,
339
- AssetData: Buffer.allocUnsafe(0)
340
- };
341
- const callbackID = ++this.callbackID;
342
- const createMsg = new CreateInventoryItem_1.CreateInventoryItemMessage();
343
- let wearableType = WearableType_1.WearableType.Shape;
344
- if (inventoryType === InventoryType_1.InventoryType.Wearable) {
345
- const wearable = new LLWearable_1.LLWearable(data.toString('utf-8'));
346
- wearableType = wearable.type;
363
+ async loadCache() {
364
+ const fileName = path.join(this.cacheDir + '/' + this.folderID.toString() + ".json");
365
+ try {
366
+ const data = await fs.readFile(fileName);
367
+ const json = JSON.parse(data.toString('utf8'));
368
+ if (json.version >= this.version) {
369
+ this.items = [];
370
+ for (const folder of json.childFolders) {
371
+ let f = this.findFolder(new UUID_1.UUID(folder.folderID.mUUID));
372
+ if (f !== null) {
373
+ continue;
374
+ }
375
+ f = new InventoryFolder(this.library, this.inventoryBase, this.agent);
376
+ f.parentID = this.folderID;
377
+ f.typeDefault = folder.typeDefault;
378
+ f.version = folder.version;
379
+ f.name = folder.name;
380
+ f.folderID = new UUID_1.UUID(folder.folderID.mUUID);
381
+ this.folders.push(f);
382
+ }
383
+ for (const item of json.childItems) {
384
+ const i = new InventoryItem_1.InventoryItem(this, this.agent);
385
+ i.created = new Date(item.created);
386
+ i.assetID = new UUID_1.UUID(item.assetID.mUUID);
387
+ i.parentID = this.folderID;
388
+ i.itemID = new UUID_1.UUID(item.itemID.mUUID);
389
+ i.permissions = {
390
+ lastOwner: new UUID_1.UUID(item.permissions.lastOwner.mUUID),
391
+ owner: new UUID_1.UUID(item.permissions.owner.mUUID),
392
+ creator: new UUID_1.UUID(item.permissions.creator.mUUID),
393
+ group: new UUID_1.UUID(item.permissions.group.mUUID),
394
+ baseMask: item.permissions.baseMask,
395
+ groupMask: item.permissions.groupMask,
396
+ nextOwnerMask: item.permissions.nextOwnerMask,
397
+ ownerMask: item.permissions.ownerMask,
398
+ everyoneMask: item.permissions.everyoneMask
399
+ };
400
+ i.inventoryType = item.inventoryType;
401
+ i.name = item.name;
402
+ i.metadata = item.metadata;
403
+ i.salePrice = item.salePrice;
404
+ i.saleType = item.saleType;
405
+ i.flags = item.flags;
406
+ i.description = item.description;
407
+ i.type = item.type;
408
+ await this.addItem(i, false);
409
+ }
347
410
  }
348
411
  else {
349
- const wearableInFlags = flags & InventoryItemFlags_1.InventoryItemFlags.FlagsSubtypeMask;
350
- if (wearableInFlags > 0) {
351
- wearableType = wearableInFlags;
352
- }
412
+ throw new Error('Old version');
353
413
  }
354
- createMsg.AgentData = {
355
- AgentID: this.agent.agentID,
356
- SessionID: this.agent.currentRegion.circuit.sessionID
357
- };
358
- createMsg.InventoryBlock = {
359
- CallbackID: callbackID,
360
- FolderID: this.folderID,
361
- TransactionID: transactionID,
362
- NextOwnerMask: (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19),
363
- Type: assetType,
364
- InvType: inventoryType,
365
- WearableType: wearableType,
366
- Name: Utils_1.Utils.StringToBuffer(name),
367
- Description: Utils_1.Utils.StringToBuffer(description)
368
- };
369
- this.agent.currentRegion.circuit.waitForMessage(Message_1.Message.UpdateCreateInventoryItem, 10000, (message) => {
370
- if (message.InventoryData[0].CallbackID === callbackID) {
371
- return FilterResponse_1.FilterResponse.Finish;
372
- }
373
- else {
374
- return FilterResponse_1.FilterResponse.NoMatch;
375
- }
376
- }).then((result) => {
377
- if (!result.InventoryData || result.InventoryData.length < 1) {
378
- reject('Failed to create inventory item for wearable');
414
+ }
415
+ catch (_error) {
416
+ throw new Error('Cache miss');
417
+ }
418
+ }
419
+ async populateInternal() {
420
+ const requestFolder = {
421
+ folder_id: new LLSD.UUID(this.folderID),
422
+ owner_id: new LLSD.UUID(this.agent.agentID),
423
+ fetch_folders: true,
424
+ fetch_items: true,
425
+ sort_order: InventorySortOrder_1.InventorySortOrder.ByName
426
+ };
427
+ const requestedFolders = {
428
+ 'folders': [
429
+ requestFolder
430
+ ]
431
+ };
432
+ let cmd = 'FetchInventoryDescendents2';
433
+ if (this.library === InventoryLibrary_1.InventoryLibrary.Library) {
434
+ cmd = 'FetchLibDescendents2';
435
+ }
436
+ const folderContents = await this.agent.currentRegion.caps.capsPostXML(cmd, requestedFolders);
437
+ for (const folder of folderContents.folders[0].categories) {
438
+ let folderIDStr = folder.category_id;
439
+ if (folderIDStr === undefined) {
440
+ folderIDStr = folder.folder_id;
441
+ }
442
+ const folderID = new UUID_1.UUID(folderIDStr);
443
+ let found = false;
444
+ for (const fld of this.folders) {
445
+ if (fld.folderID.equals(folderID)) {
446
+ found = true;
447
+ break;
379
448
  }
380
- resolve(result.InventoryData[0].ItemID);
381
- });
382
- if (data.length + 100 < 1200) {
383
- msg.AssetBlock.AssetData = data;
384
- this.agent.currentRegion.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
385
- this.agent.currentRegion.circuit.sendMessage(createMsg, PacketFlags_1.PacketFlags.Reliable);
386
449
  }
387
- else {
388
- this.agent.currentRegion.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
389
- this.agent.currentRegion.circuit.sendMessage(createMsg, PacketFlags_1.PacketFlags.Reliable);
390
- const result = yield this.agent.currentRegion.circuit.waitForMessage(Message_1.Message.RequestXfer, 10000);
391
- yield this.agent.currentRegion.circuit.XferFileUp(result.XferID.ID, data);
450
+ if (found) {
451
+ continue;
452
+ }
453
+ const newFolder = new InventoryFolder(this.library, this.agent.inventory.main, this.agent);
454
+ newFolder.typeDefault = parseInt(folder.type_default, 10);
455
+ newFolder.version = parseInt(folder.version, 10);
456
+ newFolder.name = String(folder.name);
457
+ newFolder.folderID = folderID;
458
+ newFolder.parentID = new UUID_1.UUID(folder.parent_id);
459
+ this.folders.push(newFolder);
460
+ }
461
+ if (folderContents.folders?.[0]?.items) {
462
+ this.version = folderContents.folders[0].version;
463
+ this.items = [];
464
+ for (const item of folderContents.folders[0].items) {
465
+ const invItem = new InventoryItem_1.InventoryItem(this, this.agent);
466
+ invItem.assetID = new UUID_1.UUID(item.asset_id.toString());
467
+ invItem.inventoryType = item.inv_type;
468
+ invItem.name = item.name;
469
+ invItem.salePrice = item.sale_info.sale_price;
470
+ invItem.saleType = item.sale_info.sale_type;
471
+ invItem.created = new Date(item.created_at * 1000);
472
+ invItem.parentID = new UUID_1.UUID(item.parent_id.toString());
473
+ invItem.flags = item.flags;
474
+ invItem.itemID = new UUID_1.UUID(item.item_id.toString());
475
+ invItem.description = item.desc;
476
+ invItem.type = item.type;
477
+ if (item.permissions.last_owner_id === undefined) {
478
+ item.permissions.last_owner_id = item.permissions.owner_id;
479
+ }
480
+ invItem.permissions = {
481
+ baseMask: item.permissions.base_mask,
482
+ groupMask: item.permissions.group_mask,
483
+ nextOwnerMask: item.permissions.next_owner_mask,
484
+ ownerMask: item.permissions.owner_mask,
485
+ everyoneMask: item.permissions.everyone_mask,
486
+ lastOwner: new UUID_1.UUID(item.permissions.last_owner_id.toString()),
487
+ owner: new UUID_1.UUID(item.permissions.owner_id.toString()),
488
+ creator: new UUID_1.UUID(item.permissions.creator_id.toString()),
489
+ group: new UUID_1.UUID(item.permissions.group_id.toString())
490
+ };
491
+ await this.addItem(invItem, false);
392
492
  }
393
- }));
493
+ await this.saveCache();
494
+ }
394
495
  }
395
- uploadInventoryItem(assetType, inventoryType, data, name, description, flags) {
396
- return new Promise((resolve, reject) => {
397
- let wearableType = WearableType_1.WearableType.Shape;
496
+ async uploadInventoryAssetLegacy(assetType, inventoryType, data, name, description, flags) {
497
+ const transactionID = UUID_1.UUID.random();
498
+ const assetUploadMsg = new AssetUploadRequest_1.AssetUploadRequestMessage();
499
+ assetUploadMsg.AssetBlock = {
500
+ StoreLocal: false,
501
+ Type: assetType,
502
+ Tempfile: false,
503
+ TransactionID: transactionID,
504
+ AssetData: Buffer.allocUnsafe(0)
505
+ };
506
+ const callbackID = ++this.callbackID;
507
+ const createInventoryMsg = new CreateInventoryItem_1.CreateInventoryItemMessage();
508
+ let wearableType = WearableType_1.WearableType.Shape;
509
+ if (inventoryType === InventoryType_1.InventoryType.Wearable) {
510
+ const wearable = new LLWearable_1.LLWearable(data.toString('utf-8'));
511
+ wearableType = wearable.type;
512
+ }
513
+ else {
398
514
  const wearableInFlags = flags & InventoryItemFlags_1.InventoryItemFlags.FlagsSubtypeMask;
399
515
  if (wearableInFlags > 0) {
400
516
  wearableType = wearableInFlags;
401
517
  }
402
- const transactionID = UUID_1.UUID.zero();
403
- const callbackID = ++this.callbackID;
404
- const msg = new CreateInventoryItem_1.CreateInventoryItemMessage();
405
- msg.AgentData = {
406
- AgentID: this.agent.agentID,
407
- SessionID: this.agent.currentRegion.circuit.sessionID
408
- };
409
- msg.InventoryBlock = {
410
- CallbackID: callbackID,
411
- FolderID: this.folderID,
412
- TransactionID: transactionID,
413
- NextOwnerMask: (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19),
414
- Type: assetType,
415
- InvType: inventoryType,
416
- WearableType: wearableType,
417
- Name: Utils_1.Utils.StringToBuffer(name),
418
- Description: Utils_1.Utils.StringToBuffer(description)
419
- };
420
- this.agent.currentRegion.circuit.waitForMessage(Message_1.Message.UpdateCreateInventoryItem, 10000, (message) => {
421
- if (message.InventoryData[0].CallbackID === callbackID) {
422
- return FilterResponse_1.FilterResponse.Finish;
423
- }
424
- else {
425
- return FilterResponse_1.FilterResponse.NoMatch;
426
- }
427
- }).then((createInventoryMsg) => {
428
- switch (inventoryType) {
429
- case InventoryType_1.InventoryType.Notecard:
430
- {
431
- this.agent.currentRegion.caps.capsPostXML('UpdateNotecardAgentInventory', {
432
- 'item_id': new LLSD.UUID(createInventoryMsg.InventoryData[0].ItemID.toString()),
433
- }).then((result) => {
434
- if (result['uploader']) {
435
- const uploader = result['uploader'];
436
- this.agent.currentRegion.caps.capsRequestUpload(uploader, data).then((uploadResult) => {
437
- if (uploadResult['state'] && uploadResult['state'] === 'complete') {
438
- const itemID = createInventoryMsg.InventoryData[0].ItemID;
439
- resolve(itemID);
440
- }
441
- else {
442
- reject(new Error('Asset upload failed'));
443
- }
444
- }).catch((err) => {
445
- reject(err);
446
- });
447
- }
448
- else {
449
- reject(new Error('Invalid response when attempting to request upload URL for notecard'));
450
- }
451
- }).catch((err) => {
452
- reject(err);
453
- });
454
- break;
455
- }
456
- case InventoryType_1.InventoryType.Settings:
457
- {
458
- this.agent.currentRegion.caps.capsPostXML('UpdateSettingsAgentInventory', {
459
- 'item_id': new LLSD.UUID(createInventoryMsg.InventoryData[0].ItemID.toString()),
460
- }).then((result) => {
461
- if (result['uploader']) {
462
- const uploader = result['uploader'];
463
- this.agent.currentRegion.caps.capsRequestUpload(uploader, data).then((uploadResult) => {
464
- if (uploadResult['state'] && uploadResult['state'] === 'complete') {
465
- const itemID = createInventoryMsg.InventoryData[0].ItemID;
466
- resolve(itemID);
467
- }
468
- else {
469
- reject(new Error('Asset upload failed'));
470
- }
471
- }).catch((err) => {
472
- reject(err);
473
- });
474
- }
475
- else {
476
- reject(new Error('Invalid response when attempting to request upload URL for notecard'));
477
- }
478
- }).catch((err) => {
479
- reject(err);
480
- });
481
- break;
482
- }
483
- case InventoryType_1.InventoryType.Gesture:
484
- {
485
- this.agent.currentRegion.caps.isCapAvailable('UpdateGestureAgentInventory').then((available) => {
486
- if (available) {
487
- this.agent.currentRegion.caps.capsPostXML('UpdateGestureAgentInventory', {
488
- 'item_id': new LLSD.UUID(createInventoryMsg.InventoryData[0].ItemID.toString()),
489
- }).then((result) => {
490
- if (result['uploader']) {
491
- const uploader = result['uploader'];
492
- this.agent.currentRegion.caps.capsRequestUpload(uploader, data).then((uploadResult) => {
493
- if (uploadResult['state'] && uploadResult['state'] === 'complete') {
494
- const itemID = createInventoryMsg.InventoryData[0].ItemID;
495
- resolve(itemID);
496
- }
497
- else {
498
- reject(new Error('Asset upload failed'));
499
- }
500
- }).catch((err) => {
501
- reject(err);
502
- });
503
- }
504
- else {
505
- reject(new Error('Invalid response when attempting to request upload URL for notecard'));
506
- }
507
- }).catch((err) => {
508
- reject(err);
509
- });
510
- }
511
- else {
512
- this.uploadInventoryAssetLegacy(assetType, inventoryType, data, name, description, flags).then((invItemID) => {
513
- resolve(invItemID);
514
- }).catch((err) => {
515
- reject(err);
516
- });
517
- }
518
- });
519
- break;
520
- }
521
- case InventoryType_1.InventoryType.Script:
522
- case InventoryType_1.InventoryType.LSL:
523
- {
524
- this.agent.currentRegion.caps.capsPostXML('UpdateScriptAgent', {
525
- 'item_id': new LLSD.UUID(createInventoryMsg.InventoryData[0].ItemID.toString()),
526
- 'target': 'mono'
527
- }).then((result) => {
528
- if (result['uploader']) {
529
- const uploader = result['uploader'];
530
- this.agent.currentRegion.caps.capsRequestUpload(uploader, data).then((uploadResult) => {
531
- if (uploadResult['state'] && uploadResult['state'] === 'complete') {
532
- const itemID = createInventoryMsg.InventoryData[0].ItemID;
533
- resolve(itemID);
534
- }
535
- else {
536
- reject(new Error('Asset upload failed'));
537
- }
538
- }).catch((err) => {
539
- reject(err);
540
- });
541
- }
542
- else {
543
- reject(new Error('Invalid response when attempting to request upload URL for notecard'));
544
- }
545
- }).catch((err) => {
546
- reject(err);
547
- });
548
- break;
549
- }
550
- default:
551
- {
552
- reject(new Error('Currently unsupported CreateInventoryType: ' + inventoryType));
553
- }
554
- }
555
- }).catch(() => {
556
- reject(new Error('Timed out waiting for UpdateCreateInventoryItem'));
518
+ }
519
+ createInventoryMsg.AgentData = {
520
+ AgentID: this.agent.agentID,
521
+ SessionID: this.agent.currentRegion.circuit.sessionID
522
+ };
523
+ createInventoryMsg.InventoryBlock = {
524
+ CallbackID: callbackID,
525
+ FolderID: this.folderID,
526
+ TransactionID: transactionID,
527
+ NextOwnerMask: (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19),
528
+ Type: assetType,
529
+ InvType: inventoryType,
530
+ WearableType: wearableType,
531
+ Name: Utils_1.Utils.StringToBuffer(name),
532
+ Description: Utils_1.Utils.StringToBuffer(description)
533
+ };
534
+ try {
535
+ const waitForResponse = this.agent.currentRegion.circuit.waitForMessage(Message_1.Message.UpdateCreateInventoryItem, 10000, (message) => {
536
+ return message.InventoryData[0].CallbackID === callbackID
537
+ ? FilterResponse_1.FilterResponse.Finish
538
+ : FilterResponse_1.FilterResponse.NoMatch;
557
539
  });
558
- this.agent.currentRegion.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
559
- });
560
- }
561
- uploadAsset(type, inventoryType, data, name, description, flags = InventoryItemFlags_1.InventoryItemFlags.None) {
562
- return new Promise((resolve, reject) => {
563
- switch (inventoryType) {
564
- case InventoryType_1.InventoryType.Wearable:
565
- case InventoryType_1.InventoryType.Bodypart:
566
- this.uploadInventoryAssetLegacy(type, inventoryType, data, name, description, flags).then((invItemID) => {
567
- this.agent.inventory.fetchInventoryItem(invItemID).then((item) => {
568
- if (item === null) {
569
- reject(new Error('Unable to get inventory item'));
570
- }
571
- else {
572
- this.addItem(item, false).then(() => {
573
- resolve(item);
574
- });
575
- }
576
- }).catch((err) => {
577
- reject(err);
578
- });
579
- }).catch((err) => {
580
- reject(err);
581
- });
582
- return;
583
- case InventoryType_1.InventoryType.Landmark:
584
- case InventoryType_1.InventoryType.Notecard:
585
- case InventoryType_1.InventoryType.Gesture:
586
- case InventoryType_1.InventoryType.Script:
587
- case InventoryType_1.InventoryType.LSL:
588
- case InventoryType_1.InventoryType.Settings:
589
- this.uploadInventoryItem(type, inventoryType, data, name, description, flags).then((invItemID) => {
590
- this.agent.inventory.fetchInventoryItem(invItemID).then((item) => {
591
- if (item === null) {
592
- reject(new Error('Unable to get inventory item'));
593
- }
594
- else {
595
- this.addItem(item, false).then(() => {
596
- resolve(item);
597
- });
598
- }
599
- }).catch((err) => {
600
- reject(err);
601
- });
602
- }).catch((err) => {
603
- reject(err);
604
- });
605
- return;
540
+ if (data.length + 100 < 1200) {
541
+ assetUploadMsg.AssetBlock.AssetData = data;
542
+ this.agent.currentRegion.circuit.sendMessage(assetUploadMsg, PacketFlags_1.PacketFlags.Reliable);
543
+ this.agent.currentRegion.circuit.sendMessage(createInventoryMsg, PacketFlags_1.PacketFlags.Reliable);
606
544
  }
607
- Logger_1.Logger.Info('[' + name + ']');
608
- const httpType = Utils_1.Utils.AssetTypeToHTTPAssetType(type);
609
- this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', {
610
- 'folder_id': new LLSD.UUID(this.folderID.toString()),
611
- 'asset_type': httpType,
612
- 'inventory_type': Utils_1.Utils.HTTPAssetTypeToCapInventoryType(httpType),
613
- 'name': name,
614
- 'description': description,
615
- 'everyone_mask': PermissionMask_1.PermissionMask.All,
616
- 'group_mask': PermissionMask_1.PermissionMask.All,
617
- 'next_owner_mask': PermissionMask_1.PermissionMask.All,
618
- 'expected_upload_cost': 0
619
- }).then((response) => {
620
- if (response['state'] === 'upload') {
621
- const uploadURL = response['uploader'];
622
- this.agent.currentRegion.caps.capsRequestUpload(uploadURL, data).then((responseUpload) => {
623
- if (responseUpload['new_inventory_item'] !== undefined) {
624
- const invItemID = new UUID_1.UUID(responseUpload['new_inventory_item'].toString());
625
- this.agent.inventory.fetchInventoryItem(invItemID).then((item) => {
626
- if (item === null) {
627
- reject(new Error('Unable to get inventory item'));
628
- }
629
- else {
630
- this.addItem(item, false).then(() => {
631
- resolve(item);
632
- });
633
- }
634
- }).catch((err) => {
635
- reject(err);
636
- });
637
- }
638
- }).catch((err) => {
639
- reject(err);
640
- });
641
- }
642
- else if (response['error']) {
643
- reject(response['error']['message']);
644
- }
645
- else {
646
- reject('Unable to upload asset');
647
- }
648
- }).catch((err) => {
649
- console.log('Got err');
650
- console.log(err);
651
- reject(err);
652
- });
653
- });
654
- }
655
- checkCopyright(creatorID) {
656
- if (!creatorID.equals(this.agent.agentID) && !creatorID.isZero()) {
657
- throw new Error('Unable to upload - copyright violation');
658
- }
659
- }
660
- findFolder(id) {
661
- for (const folder of this.folders) {
662
- if (folder.folderID.equals(id)) {
663
- return folder;
545
+ else {
546
+ this.agent.currentRegion.circuit.sendMessage(assetUploadMsg, PacketFlags_1.PacketFlags.Reliable);
547
+ this.agent.currentRegion.circuit.sendMessage(createInventoryMsg, PacketFlags_1.PacketFlags.Reliable);
548
+ const xferRequest = await this.agent.currentRegion.circuit.waitForMessage(Message_1.Message.RequestXfer, 10000);
549
+ await this.agent.currentRegion.circuit.XferFileUp(xferRequest.XferID.ID, data);
664
550
  }
665
- const result = folder.findFolder(id);
666
- if (result !== null) {
667
- return result;
551
+ const response = await waitForResponse;
552
+ if (!response.InventoryData || response.InventoryData.length < 1) {
553
+ throw new Error('Failed to create inventory item for wearable');
668
554
  }
555
+ return response.InventoryData[0].ItemID;
556
+ }
557
+ catch (error) {
558
+ throw new Error(`uploadInventoryAssetLegacy failed: ${String(error instanceof Error ? error.message : error)}`);
669
559
  }
670
- return null;
671
560
  }
672
- uploadMesh(name, description, mesh, confirmCostCallback) {
673
- return __awaiter(this, void 0, void 0, function* () {
674
- const decodedMesh = yield LLMesh_1.LLMesh.from(mesh);
675
- this.checkCopyright(decodedMesh.creatorID);
676
- const faces = [];
677
- const faceCount = decodedMesh.lodLevels['high_lod'].length;
678
- for (let x = 0; x < faceCount; x++) {
679
- faces.push({
680
- 'diffuse_color': [1.000000000000001, 1.000000000000001, 1.000000000000001, 1.000000000000001],
681
- 'fullbright': false
682
- });
683
- }
684
- const prim = {
685
- 'face_list': faces,
686
- 'position': [0.000000000000001, 0.000000000000001, 0.000000000000001],
687
- 'rotation': [0.000000000000001, 0.000000000000001, 0.000000000000001, 1.000000000000001],
688
- 'scale': [2.000000000000001, 2.000000000000001, 2.000000000000001],
689
- 'material': 3,
690
- 'physics_shape_type': 2,
691
- 'mesh': 0
692
- };
693
- const assetResources = {
694
- 'instance_list': [prim],
695
- 'mesh_list': [new LLSD.Binary(Array.from(mesh))],
696
- 'texture_list': [],
697
- 'metric': 'MUT_Unspecified'
698
- };
699
- const uploadMap = {
700
- 'name': String(name),
701
- 'description': String(description),
702
- 'asset_resources': assetResources,
703
- 'asset_type': 'mesh',
704
- 'inventory_type': 'object',
705
- 'folder_id': new LLSD.UUID(this.folderID.toString()),
706
- 'texture_folder_id': new LLSD.UUID(yield this.agent.inventory.findFolderForType(FolderType_1.FolderType.Texture)),
707
- 'everyone_mask': PermissionMask_1.PermissionMask.All,
708
- 'group_mask': PermissionMask_1.PermissionMask.All,
709
- 'next_owner_mask': PermissionMask_1.PermissionMask.All
710
- };
711
- let result;
712
- try {
713
- result = yield this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', uploadMap);
561
+ async uploadInventoryItem(assetType, inventoryType, data, name, description, flags) {
562
+ let wearableType = WearableType_1.WearableType.Shape;
563
+ const wearableInFlags = flags & InventoryItemFlags_1.InventoryItemFlags.FlagsSubtypeMask;
564
+ if (wearableInFlags > 0) {
565
+ wearableType = wearableInFlags;
566
+ }
567
+ const transactionID = UUID_1.UUID.zero();
568
+ const callbackID = ++this.callbackID;
569
+ const createInventoryMsg = new CreateInventoryItem_1.CreateInventoryItemMessage();
570
+ createInventoryMsg.AgentData = {
571
+ AgentID: this.agent.agentID,
572
+ SessionID: this.agent.currentRegion.circuit.sessionID
573
+ };
574
+ createInventoryMsg.InventoryBlock = {
575
+ CallbackID: callbackID,
576
+ FolderID: this.folderID,
577
+ TransactionID: transactionID,
578
+ NextOwnerMask: (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19),
579
+ Type: assetType,
580
+ InvType: inventoryType,
581
+ WearableType: wearableType,
582
+ Name: Utils_1.Utils.StringToBuffer(name),
583
+ Description: Utils_1.Utils.StringToBuffer(description)
584
+ };
585
+ try {
586
+ const createInventoryResponse = await this.agent.currentRegion.circuit.sendAndWaitForMessage(createInventoryMsg, PacketFlags_1.PacketFlags.Reliable, Message_1.Message.UpdateCreateInventoryItem, 10000, (message) => {
587
+ return message.InventoryData[0].CallbackID === callbackID
588
+ ? FilterResponse_1.FilterResponse.Finish
589
+ : FilterResponse_1.FilterResponse.NoMatch;
590
+ });
591
+ if (!createInventoryResponse.InventoryData || createInventoryResponse.InventoryData.length < 1) {
592
+ throw new Error('Failed to create inventory item');
714
593
  }
715
- catch (error) {
716
- console.error(error);
594
+ const itemID = createInventoryResponse.InventoryData[0].ItemID;
595
+ if (inventoryType === InventoryType_1.InventoryType.Notecard && data.length === 0) {
596
+ return itemID;
717
597
  }
718
- if (result['state'] === 'upload' && result['upload_price'] !== undefined) {
719
- const cost = result['upload_price'];
720
- if (yield confirmCostCallback(cost)) {
721
- const uploader = result['uploader'];
722
- const uploadResult = yield this.agent.currentRegion.caps.capsPerformXMLPost(uploader, assetResources);
723
- if (uploadResult['new_inventory_item'] && uploadResult['new_asset']) {
724
- const inventoryItem = new UUID_1.UUID(uploadResult['new_inventory_item'].toString());
725
- const item = yield this.agent.inventory.fetchInventoryItem(inventoryItem);
726
- if (item !== null) {
727
- item.assetID = new UUID_1.UUID(uploadResult['new_asset'].toString());
728
- yield this.addItem(item, false);
729
- return item;
598
+ switch (inventoryType) {
599
+ case InventoryType_1.InventoryType.Material:
600
+ case InventoryType_1.InventoryType.Notecard:
601
+ case InventoryType_1.InventoryType.Settings:
602
+ case InventoryType_1.InventoryType.LSL:
603
+ {
604
+ await this.handleStandardInventoryUpload(inventoryType, itemID, data);
605
+ return itemID;
606
+ }
607
+ case InventoryType_1.InventoryType.Gesture:
608
+ {
609
+ const isGestureCapAvailable = await this.agent.currentRegion.caps.isCapAvailable('UpdateGestureAgentInventory');
610
+ if (isGestureCapAvailable) {
611
+ await this.handleStandardInventoryUpload(inventoryType, itemID, data);
612
+ return itemID;
730
613
  }
731
614
  else {
732
- throw new Error('Unable to locate inventory item following mesh upload');
615
+ const invItemID = await this.uploadInventoryAssetLegacy(assetType, inventoryType, data, name, description, flags);
616
+ return invItemID;
733
617
  }
734
618
  }
735
- else {
736
- throw new Error('Upload failed - no new inventory item returned');
737
- }
738
- }
739
- throw new Error('Upload cost declined');
619
+ default:
620
+ throw new Error(`Currently unsupported CreateInventoryType: ${inventoryType}`);
740
621
  }
741
- else {
742
- console.log(result);
743
- console.log(JSON.stringify(result.error));
744
- throw new Error('Upload failed');
622
+ }
623
+ catch (error) {
624
+ throw new Error(`uploadInventoryItem failed: ${String(error instanceof Error ? error.message : error)}`);
625
+ }
626
+ }
627
+ async handleStandardInventoryUpload(inventoryType, itemID, data) {
628
+ let xmlEndpoint = '';
629
+ switch (inventoryType) {
630
+ case InventoryType_1.InventoryType.Notecard:
631
+ xmlEndpoint = 'UpdateNotecardAgentInventory';
632
+ break;
633
+ case InventoryType_1.InventoryType.Material:
634
+ xmlEndpoint = 'UpdateMaterialAgentInventory';
635
+ break;
636
+ case InventoryType_1.InventoryType.Settings:
637
+ xmlEndpoint = 'UpdateSettingsAgentInventory';
638
+ break;
639
+ case InventoryType_1.InventoryType.LSL:
640
+ xmlEndpoint = 'UpdateScriptAgent';
641
+ break;
642
+ default:
643
+ throw new Error(`Unsupported inventory type for standard upload: ${inventoryType}`);
644
+ }
645
+ try {
646
+ const xmlPayload = {
647
+ 'item_id': new LLSD.UUID(itemID.toString()),
648
+ };
649
+ if (inventoryType === InventoryType_1.InventoryType.LSL) {
650
+ xmlPayload.target = 'mono';
745
651
  }
746
- });
652
+ const result = await this.agent.currentRegion.caps.capsPostXML(xmlEndpoint, xmlPayload);
653
+ if (!result.uploader) {
654
+ throw new Error(`Invalid response when attempting to request upload URL for ${inventoryType}`);
655
+ }
656
+ const uploader = result.uploader;
657
+ const uploadResult = await this.agent.currentRegion.caps.capsRequestUpload(uploader, data);
658
+ if (uploadResult.state !== 'complete') {
659
+ throw new Error('Asset upload failed');
660
+ }
661
+ }
662
+ catch (error) {
663
+ throw new Error(`Failed to upload inventory item (${inventoryType}): ${String(error instanceof Error ? error.message : error)}`);
664
+ }
747
665
  }
748
666
  }
749
667
  exports.InventoryFolder = InventoryFolder;