@caspertech/node-metaverse 0.7.50 → 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 (461) 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.js +241 -0
  65. package/dist/lib/classes/BinaryReader.spec.js.map +1 -0
  66. package/dist/lib/classes/BinaryWriter.d.ts +34 -0
  67. package/dist/lib/classes/BinaryWriter.js +192 -0
  68. package/dist/lib/classes/BinaryWriter.js.map +1 -0
  69. package/dist/lib/classes/BinaryWriter.spec.d.ts +1 -0
  70. package/dist/lib/classes/BinaryWriter.spec.js +328 -0
  71. package/dist/lib/classes/BinaryWriter.spec.js.map +1 -0
  72. package/dist/lib/classes/BitPack.d.ts +2 -2
  73. package/dist/lib/classes/BitPack.js +1 -1
  74. package/dist/lib/classes/BitPack.js.map +1 -1
  75. package/dist/lib/classes/BuildMap.d.ts +6 -6
  76. package/dist/lib/classes/BuildMap.js.map +1 -1
  77. package/dist/lib/classes/Caps.d.ts +18 -24
  78. package/dist/lib/classes/Caps.js +278 -297
  79. package/dist/lib/classes/Caps.js.map +1 -1
  80. package/dist/lib/classes/Circuit.d.ts +20 -28
  81. package/dist/lib/classes/Circuit.js +104 -91
  82. package/dist/lib/classes/Circuit.js.map +1 -1
  83. package/dist/lib/classes/ClientCommands.d.ts +3 -3
  84. package/dist/lib/classes/ClientCommands.js.map +1 -1
  85. package/dist/lib/classes/ClientEvents.d.ts +41 -32
  86. package/dist/lib/classes/ClientEvents.js +65 -0
  87. package/dist/lib/classes/ClientEvents.js.map +1 -1
  88. package/dist/lib/classes/CoalescedGameObject.d.ts +2 -2
  89. package/dist/lib/classes/CoalescedGameObject.js +37 -49
  90. package/dist/lib/classes/CoalescedGameObject.js.map +1 -1
  91. package/dist/lib/classes/Color4.d.ts +2 -2
  92. package/dist/lib/classes/Color4.js +42 -42
  93. package/dist/lib/classes/Color4.js.map +1 -1
  94. package/dist/lib/classes/Comms.d.ts +3 -3
  95. package/dist/lib/classes/Comms.js +236 -236
  96. package/dist/lib/classes/Comms.js.map +1 -1
  97. package/dist/lib/classes/ConcurrentQueue.d.ts +3 -3
  98. package/dist/lib/classes/ConcurrentQueue.js +16 -11
  99. package/dist/lib/classes/ConcurrentQueue.js.map +1 -1
  100. package/dist/lib/classes/EventQueueClient.d.ts +6 -6
  101. package/dist/lib/classes/EventQueueClient.js +189 -201
  102. package/dist/lib/classes/EventQueueClient.js.map +1 -1
  103. package/dist/lib/classes/GroupBan.d.ts +3 -3
  104. package/dist/lib/classes/GroupBan.js.map +1 -1
  105. package/dist/lib/classes/GroupMember.d.ts +2 -2
  106. package/dist/lib/classes/GroupRole.d.ts +2 -2
  107. package/dist/lib/classes/IPAddress.d.ts +3 -2
  108. package/dist/lib/classes/IPAddress.js +14 -13
  109. package/dist/lib/classes/IPAddress.js.map +1 -1
  110. package/dist/lib/classes/Inventory.d.ts +7 -15
  111. package/dist/lib/classes/Inventory.js +69 -80
  112. package/dist/lib/classes/Inventory.js.map +1 -1
  113. package/dist/lib/classes/InventoryFolder.d.ts +11 -11
  114. package/dist/lib/classes/InventoryFolder.js +539 -601
  115. package/dist/lib/classes/InventoryFolder.js.map +1 -1
  116. package/dist/lib/classes/InventoryItem.d.ts +15 -11
  117. package/dist/lib/classes/InventoryItem.js +494 -486
  118. package/dist/lib/classes/InventoryItem.js.map +1 -1
  119. package/dist/lib/classes/InventoryTypeRegistry.d.ts +19 -0
  120. package/dist/lib/classes/InventoryTypeRegistry.js +69 -0
  121. package/dist/lib/classes/InventoryTypeRegistry.js.map +1 -0
  122. package/dist/lib/classes/LLGLTFMaterial.d.ts +1 -1
  123. package/dist/lib/classes/LLGLTFMaterial.js +2 -2
  124. package/dist/lib/classes/LLGLTFMaterial.js.map +1 -1
  125. package/dist/lib/classes/LLGLTFMaterial.spec.js +17 -18
  126. package/dist/lib/classes/LLGLTFMaterial.spec.js.map +1 -1
  127. package/dist/lib/classes/LLGLTFMaterialOverride.d.ts +1 -1
  128. package/dist/lib/classes/LLGLTFMaterialOverride.js +119 -118
  129. package/dist/lib/classes/LLGLTFMaterialOverride.js.map +1 -1
  130. package/dist/lib/classes/LLGLTFMaterialOverride.spec.js +70 -71
  131. package/dist/lib/classes/LLGLTFMaterialOverride.spec.js.map +1 -1
  132. package/dist/lib/classes/LLGesture.d.ts +1 -1
  133. package/dist/lib/classes/LLGesture.js +1 -1
  134. package/dist/lib/classes/LLGesture.js.map +1 -1
  135. package/dist/lib/classes/LLGestureAnimationStep.d.ts +1 -1
  136. package/dist/lib/classes/LLGestureAnimationStep.js.map +1 -1
  137. package/dist/lib/classes/LLGestureChatStep.js.map +1 -1
  138. package/dist/lib/classes/LLGestureSoundStep.d.ts +1 -1
  139. package/dist/lib/classes/LLGestureSoundStep.js.map +1 -1
  140. package/dist/lib/classes/LLGestureStep.d.ts +1 -1
  141. package/dist/lib/classes/LLGestureWaitStep.js.map +1 -1
  142. package/dist/lib/classes/LLLindenText.d.ts +2 -4
  143. package/dist/lib/classes/LLLindenText.js +12 -8
  144. package/dist/lib/classes/LLLindenText.js.map +1 -1
  145. package/dist/lib/classes/LLSettings.d.ts +98 -83
  146. package/dist/lib/classes/LLSettings.js +240 -83
  147. package/dist/lib/classes/LLSettings.js.map +1 -1
  148. package/dist/lib/classes/LLSettings.spec.d.ts +1 -0
  149. package/dist/lib/classes/LLSettings.spec.js +27 -0
  150. package/dist/lib/classes/LLSettings.spec.js.map +1 -0
  151. package/dist/lib/classes/LLWearable.d.ts +4 -8
  152. package/dist/lib/classes/LLWearable.js +1 -1
  153. package/dist/lib/classes/LLWearable.js.map +1 -1
  154. package/dist/lib/classes/Logger.d.ts +3 -3
  155. package/dist/lib/classes/Logger.js +1 -1
  156. package/dist/lib/classes/Logger.js.map +1 -1
  157. package/dist/lib/classes/LoginParameters.js.map +1 -1
  158. package/dist/lib/classes/LoginResponse.d.ts +4 -9
  159. package/dist/lib/classes/LoginResponse.js +120 -113
  160. package/dist/lib/classes/LoginResponse.js.map +1 -1
  161. package/dist/lib/classes/MapBlock.d.ts +2 -2
  162. package/dist/lib/classes/MessageBase.d.ts +5 -5
  163. package/dist/lib/classes/MessageClasses.js.map +1 -1
  164. package/dist/lib/classes/ObjectResolver.d.ts +6 -6
  165. package/dist/lib/classes/ObjectResolver.js +127 -152
  166. package/dist/lib/classes/ObjectResolver.js.map +1 -1
  167. package/dist/lib/classes/ObjectStoreFull.d.ts +9 -9
  168. package/dist/lib/classes/ObjectStoreFull.js +176 -192
  169. package/dist/lib/classes/ObjectStoreFull.js.map +1 -1
  170. package/dist/lib/classes/ObjectStoreLite.d.ts +29 -31
  171. package/dist/lib/classes/ObjectStoreLite.js +485 -494
  172. package/dist/lib/classes/ObjectStoreLite.js.map +1 -1
  173. package/dist/lib/classes/Packet.d.ts +2 -2
  174. package/dist/lib/classes/Packet.js +2 -2
  175. package/dist/lib/classes/Packet.js.map +1 -1
  176. package/dist/lib/classes/ParticleSystem.js +1 -1
  177. package/dist/lib/classes/ParticleSystem.js.map +1 -1
  178. package/dist/lib/classes/PrimFacesHelper.d.ts +14 -0
  179. package/dist/lib/classes/PrimFacesHelper.js +75 -0
  180. package/dist/lib/classes/PrimFacesHelper.js.map +1 -0
  181. package/dist/lib/classes/Quaternion.d.ts +31 -6
  182. package/dist/lib/classes/Quaternion.js +236 -48
  183. package/dist/lib/classes/Quaternion.js.map +1 -1
  184. package/dist/lib/classes/Region.d.ts +22 -22
  185. package/dist/lib/classes/Region.js +449 -526
  186. package/dist/lib/classes/Region.js.map +1 -1
  187. package/dist/lib/classes/TarArchive.d.ts +1 -1
  188. package/dist/lib/classes/TarArchive.js.map +1 -1
  189. package/dist/lib/classes/TarFile.js +1 -1
  190. package/dist/lib/classes/TarFile.js.map +1 -1
  191. package/dist/lib/classes/TarReader.d.ts +1 -2
  192. package/dist/lib/classes/TarReader.js +15 -17
  193. package/dist/lib/classes/TarReader.js.map +1 -1
  194. package/dist/lib/classes/TarWriter.d.ts +1 -1
  195. package/dist/lib/classes/TarWriter.js +51 -68
  196. package/dist/lib/classes/TarWriter.js.map +1 -1
  197. package/dist/lib/classes/TextureEntry.d.ts +2 -3
  198. package/dist/lib/classes/TextureEntry.js +12 -12
  199. package/dist/lib/classes/TextureEntry.js.map +1 -1
  200. package/dist/lib/classes/TextureEntryFace.d.ts +4 -4
  201. package/dist/lib/classes/TextureEntryFace.js.map +1 -1
  202. package/dist/lib/classes/UUID.d.ts +2 -2
  203. package/dist/lib/classes/UUID.js +28 -28
  204. package/dist/lib/classes/UUID.js.map +1 -1
  205. package/dist/lib/classes/Utils.d.ts +2 -11
  206. package/dist/lib/classes/Utils.js +72 -328
  207. package/dist/lib/classes/Utils.js.map +1 -1
  208. package/dist/lib/classes/Vector2.d.ts +35 -6
  209. package/dist/lib/classes/Vector2.js +192 -28
  210. package/dist/lib/classes/Vector2.js.map +1 -1
  211. package/dist/lib/classes/Vector3.d.ts +38 -6
  212. package/dist/lib/classes/Vector3.js +229 -48
  213. package/dist/lib/classes/Vector3.js.map +1 -1
  214. package/dist/lib/classes/Vector4.d.ts +36 -6
  215. package/dist/lib/classes/Vector4.js +225 -21
  216. package/dist/lib/classes/Vector4.js.map +1 -1
  217. package/dist/lib/classes/Wearable.d.ts +1 -1
  218. package/dist/lib/classes/Zerocoder.js +2 -2
  219. package/dist/lib/classes/Zerocoder.js.map +1 -1
  220. package/dist/lib/classes/commands/AgentCommands.d.ts +7 -5
  221. package/dist/lib/classes/commands/AgentCommands.js +60 -76
  222. package/dist/lib/classes/commands/AgentCommands.js.map +1 -1
  223. package/dist/lib/classes/commands/AssetCommands.d.ts +5 -10
  224. package/dist/lib/classes/commands/AssetCommands.js +176 -179
  225. package/dist/lib/classes/commands/AssetCommands.js.map +1 -1
  226. package/dist/lib/classes/commands/CommandsBase.d.ts +4 -4
  227. package/dist/lib/classes/commands/CommandsBase.js.map +1 -1
  228. package/dist/lib/classes/commands/CommunicationsCommands.d.ts +3 -3
  229. package/dist/lib/classes/commands/CommunicationsCommands.js +350 -426
  230. package/dist/lib/classes/commands/CommunicationsCommands.js.map +1 -1
  231. package/dist/lib/classes/commands/FriendCommands.d.ts +9 -10
  232. package/dist/lib/classes/commands/FriendCommands.js +238 -236
  233. package/dist/lib/classes/commands/FriendCommands.js.map +1 -1
  234. package/dist/lib/classes/commands/GridCommands.d.ts +3 -3
  235. package/dist/lib/classes/commands/GridCommands.js +299 -336
  236. package/dist/lib/classes/commands/GridCommands.js.map +1 -1
  237. package/dist/lib/classes/commands/GroupCommands.d.ts +2 -2
  238. package/dist/lib/classes/commands/GroupCommands.js +293 -336
  239. package/dist/lib/classes/commands/GroupCommands.js.map +1 -1
  240. package/dist/lib/classes/commands/InventoryCommands.d.ts +4 -4
  241. package/dist/lib/classes/commands/InventoryCommands.js +54 -69
  242. package/dist/lib/classes/commands/InventoryCommands.js.map +1 -1
  243. package/dist/lib/classes/commands/MovementCommands.d.ts +2 -2
  244. package/dist/lib/classes/commands/MovementCommands.js +23 -38
  245. package/dist/lib/classes/commands/MovementCommands.js.map +1 -1
  246. package/dist/lib/classes/commands/NetworkCommands.js +35 -46
  247. package/dist/lib/classes/commands/NetworkCommands.js.map +1 -1
  248. package/dist/lib/classes/commands/ParcelCommands.d.ts +4 -4
  249. package/dist/lib/classes/commands/ParcelCommands.js +64 -77
  250. package/dist/lib/classes/commands/ParcelCommands.js.map +1 -1
  251. package/dist/lib/classes/commands/RegionCommands.d.ts +11 -10
  252. package/dist/lib/classes/commands/RegionCommands.js +1126 -1211
  253. package/dist/lib/classes/commands/RegionCommands.js.map +1 -1
  254. package/dist/lib/classes/commands/TeleportCommands.d.ts +8 -8
  255. package/dist/lib/classes/commands/TeleportCommands.js +58 -58
  256. package/dist/lib/classes/commands/TeleportCommands.js.map +1 -1
  257. package/dist/lib/classes/interfaces/IGameObjectData.d.ts +18 -20
  258. package/dist/lib/classes/interfaces/ILandBlock.d.ts +2 -2
  259. package/dist/lib/classes/interfaces/IObjectStore.d.ts +12 -12
  260. package/dist/lib/classes/interfaces/IResolveJob.d.ts +2 -2
  261. package/dist/lib/classes/interfaces/ITreeBoundingBox.d.ts +2 -2
  262. package/dist/lib/classes/llsd/LLSD.d.ts +12 -0
  263. package/dist/lib/classes/llsd/LLSD.js +128 -0
  264. package/dist/lib/classes/llsd/LLSD.js.map +1 -0
  265. package/dist/lib/classes/llsd/LLSD.spec.d.ts +1 -0
  266. package/dist/lib/classes/llsd/LLSD.spec.js +249 -0
  267. package/dist/lib/classes/llsd/LLSD.spec.js.map +1 -0
  268. package/dist/lib/classes/llsd/LLSDArray.d.ts +26 -3
  269. package/dist/lib/classes/llsd/LLSDArray.js +182 -6
  270. package/dist/lib/classes/llsd/LLSDArray.js.map +1 -1
  271. package/dist/lib/classes/llsd/LLSDBinary.d.ts +7 -0
  272. package/dist/lib/classes/llsd/LLSDBinary.js +114 -0
  273. package/dist/lib/classes/llsd/LLSDBinary.js.map +1 -0
  274. package/dist/lib/classes/llsd/LLSDInteger.d.ts +9 -0
  275. package/dist/lib/classes/llsd/LLSDInteger.js +25 -0
  276. package/dist/lib/classes/llsd/LLSDInteger.js.map +1 -0
  277. package/dist/lib/classes/llsd/LLSDMap.d.ts +16 -5
  278. package/dist/lib/classes/llsd/LLSDMap.js +197 -16
  279. package/dist/lib/classes/llsd/LLSDMap.js.map +1 -1
  280. package/dist/lib/classes/llsd/LLSDNotation.d.ts +11 -0
  281. package/dist/lib/classes/llsd/LLSDNotation.js +271 -0
  282. package/dist/lib/classes/llsd/LLSDNotation.js.map +1 -0
  283. package/dist/lib/classes/llsd/LLSDReal.d.ts +10 -0
  284. package/dist/lib/classes/llsd/LLSDReal.js +71 -0
  285. package/dist/lib/classes/llsd/LLSDReal.js.map +1 -0
  286. package/dist/lib/classes/llsd/LLSDToken.d.ts +1 -1
  287. package/dist/lib/classes/llsd/LLSDTokenContainer.d.ts +2 -2
  288. package/dist/lib/classes/llsd/LLSDTokenGenerator.d.ts +1 -1
  289. package/dist/lib/classes/llsd/LLSDTokenSpec.d.ts +1 -1
  290. package/dist/lib/classes/llsd/LLSDTokenType.d.ts +18 -18
  291. package/dist/lib/classes/llsd/LLSDTokenType.js +18 -18
  292. package/dist/lib/classes/llsd/LLSDTokenType.js.map +1 -1
  293. package/dist/lib/classes/llsd/LLSDType.d.ts +6 -3
  294. package/dist/lib/classes/llsd/LLSDURI.d.ts +7 -0
  295. package/dist/lib/classes/llsd/LLSDURI.js +19 -0
  296. package/dist/lib/classes/llsd/LLSDURI.js.map +1 -0
  297. package/dist/lib/classes/llsd/LLSDXML.d.ts +5 -0
  298. package/dist/lib/classes/llsd/LLSDXML.js +245 -0
  299. package/dist/lib/classes/llsd/LLSDXML.js.map +1 -0
  300. package/dist/lib/classes/messages/ObjectUpdate.d.ts +4 -5
  301. package/dist/lib/classes/messages/ObjectUpdate.js +115 -115
  302. package/dist/lib/classes/messages/ObjectUpdate.js.map +1 -1
  303. package/dist/lib/classes/messages/SimStats.d.ts +3 -2
  304. package/dist/lib/classes/messages/SimStats.js +17 -17
  305. package/dist/lib/classes/messages/SimStats.js.map +1 -1
  306. package/dist/lib/classes/public/Avatar.d.ts +4 -4
  307. package/dist/lib/classes/public/Avatar.js +39 -33
  308. package/dist/lib/classes/public/Avatar.js.map +1 -1
  309. package/dist/lib/classes/public/AvatarQueryResult.d.ts +4 -4
  310. package/dist/lib/classes/public/AvatarQueryResult.js.map +1 -1
  311. package/dist/lib/classes/public/ExtendedMeshData.d.ts +1 -1
  312. package/dist/lib/classes/public/ExtendedMeshData.js.map +1 -1
  313. package/dist/lib/classes/public/ExtraParams.d.ts +6 -6
  314. package/dist/lib/classes/public/ExtraParams.js +36 -39
  315. package/dist/lib/classes/public/ExtraParams.js.map +1 -1
  316. package/dist/lib/classes/public/ExtraParams.spec.js +2 -11
  317. package/dist/lib/classes/public/ExtraParams.spec.js.map +1 -1
  318. package/dist/lib/classes/public/FlexibleData.js.map +1 -1
  319. package/dist/lib/classes/public/Friend.js.map +1 -1
  320. package/dist/lib/classes/public/GameObject.d.ts +23 -21
  321. package/dist/lib/classes/public/GameObject.js +1294 -1306
  322. package/dist/lib/classes/public/GameObject.js.map +1 -1
  323. package/dist/lib/classes/public/GameObject.spec.js +8 -18
  324. package/dist/lib/classes/public/GameObject.spec.js.map +1 -1
  325. package/dist/lib/classes/public/LLMesh.d.ts +5 -7
  326. package/dist/lib/classes/public/LLMesh.js +194 -213
  327. package/dist/lib/classes/public/LLMesh.js.map +1 -1
  328. package/dist/lib/classes/public/LightData.js.map +1 -1
  329. package/dist/lib/classes/public/LightImageData.js.map +1 -1
  330. package/dist/lib/classes/public/Material.js +45 -56
  331. package/dist/lib/classes/public/Material.js.map +1 -1
  332. package/dist/lib/classes/public/MeshData.js.map +1 -1
  333. package/dist/lib/classes/public/Parcel.d.ts +4 -4
  334. package/dist/lib/classes/public/Parcel.js +1 -2
  335. package/dist/lib/classes/public/Parcel.js.map +1 -1
  336. package/dist/lib/classes/public/ReflectionProbeData.d.ts +1 -1
  337. package/dist/lib/classes/public/ReflectionProbeData.js.map +1 -1
  338. package/dist/lib/classes/public/RegionEnvironment.d.ts +14 -13
  339. package/dist/lib/classes/public/RegionEnvironment.js +94 -53
  340. package/dist/lib/classes/public/RegionEnvironment.js.map +1 -1
  341. package/dist/lib/classes/public/RegionEnvironmentSky.d.ts +2 -0
  342. package/dist/lib/classes/public/RegionEnvironmentSky.js +7 -0
  343. package/dist/lib/classes/public/RegionEnvironmentSky.js.map +1 -0
  344. package/dist/lib/classes/public/RegionEnvironmentWater.d.ts +2 -0
  345. package/dist/lib/classes/public/RegionEnvironmentWater.js +7 -0
  346. package/dist/lib/classes/public/RegionEnvironmentWater.js.map +1 -0
  347. package/dist/lib/classes/public/RenderMaterialData.js.map +1 -1
  348. package/dist/lib/classes/public/RenderMaterialParam.d.ts +1 -1
  349. package/dist/lib/classes/public/SculptData.js.map +1 -1
  350. package/dist/lib/classes/public/TextureAnim.js +2 -1
  351. package/dist/lib/classes/public/TextureAnim.js.map +1 -1
  352. package/dist/lib/classes/public/interfaces/GlobalPosition.d.ts +1 -1
  353. package/dist/lib/classes/public/interfaces/LLPhysicsConvex.d.ts +1 -1
  354. package/dist/lib/classes/public/interfaces/LLSkin.d.ts +1 -1
  355. package/dist/lib/classes/public/interfaces/LLSubMesh.d.ts +3 -5
  356. package/dist/lib/classes/public/interfaces/MapLocation.d.ts +3 -3
  357. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.d.ts +26 -0
  358. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js +3 -0
  359. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js.map +1 -0
  360. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.d.ts +15 -0
  361. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js +3 -0
  362. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js.map +1 -0
  363. package/dist/lib/classes/public/interfaces/SkyPreset.d.ts +3 -3
  364. package/dist/lib/classes/public/interfaces/WaterPreset.d.ts +4 -4
  365. package/dist/lib/deviceToken.json +1 -0
  366. package/dist/lib/enums/AssetType.d.ts +6 -4
  367. package/dist/lib/enums/AssetType.js +5 -3
  368. package/dist/lib/enums/AssetType.js.map +1 -1
  369. package/dist/lib/enums/AttachmentPoint.d.ts +0 -1
  370. package/dist/lib/enums/AttachmentPoint.js +0 -1
  371. package/dist/lib/enums/AttachmentPoint.js.map +1 -1
  372. package/dist/lib/enums/InventoryType.d.ts +3 -5
  373. package/dist/lib/enums/InventoryType.js +2 -4
  374. package/dist/lib/enums/InventoryType.js.map +1 -1
  375. package/dist/lib/enums/LayerType.d.ts +1 -1
  376. package/dist/lib/enums/LayerType.js +1 -1
  377. package/dist/lib/events/AvatarPropertiesReplyEvent.d.ts +1 -1
  378. package/dist/lib/events/BalanceUpdatedEvent.d.ts +2 -2
  379. package/dist/lib/events/BulkUpdateInventoryEvent.d.ts +2 -2
  380. package/dist/lib/events/BulkUpdateInventoryEvent.js.map +1 -1
  381. package/dist/lib/events/ChatEvent.d.ts +5 -5
  382. package/dist/lib/events/FriendOnlineEvent.d.ts +1 -1
  383. package/dist/lib/events/FriendRemovedEvent.d.ts +1 -1
  384. package/dist/lib/events/FriendRequestEvent.d.ts +1 -1
  385. package/dist/lib/events/FriendResponseEvent.d.ts +1 -1
  386. package/dist/lib/events/FriendRightsEvent.d.ts +2 -2
  387. package/dist/lib/events/GroupChatClosedEvent.d.ts +1 -1
  388. package/dist/lib/events/GroupChatEvent.d.ts +1 -1
  389. package/dist/lib/events/GroupChatSessionAgentListEvent.d.ts +1 -1
  390. package/dist/lib/events/GroupChatSessionJoinEvent.d.ts +1 -1
  391. package/dist/lib/events/GroupInviteEvent.d.ts +1 -1
  392. package/dist/lib/events/GroupNoticeEvent.d.ts +1 -1
  393. package/dist/lib/events/GroupProfileReplyEvent.d.ts +2 -2
  394. package/dist/lib/events/InstantMessageEvent.d.ts +3 -3
  395. package/dist/lib/events/InventoryOfferedEvent.d.ts +3 -3
  396. package/dist/lib/events/InventoryResponseEvent.d.ts +1 -1
  397. package/dist/lib/events/LandStatsEvent.d.ts +4 -4
  398. package/dist/lib/events/LandStatsEvent.js.map +1 -1
  399. package/dist/lib/events/LureEvent.d.ts +2 -2
  400. package/dist/lib/events/MapInfoRangeReplyEvent.d.ts +1 -1
  401. package/dist/lib/events/MapInfoReplyEvent.d.ts +2 -2
  402. package/dist/lib/events/NewObjectEvent.d.ts +2 -2
  403. package/dist/lib/events/ObjectKilledEvent.d.ts +2 -2
  404. package/dist/lib/events/ObjectPhysicsDataEvent.d.ts +1 -1
  405. package/dist/lib/events/ObjectResolvedEvent.d.ts +1 -1
  406. package/dist/lib/events/ObjectUpdatedEvent.d.ts +2 -2
  407. package/dist/lib/events/ParcelInfoReplyEvent.d.ts +3 -3
  408. package/dist/lib/events/ParcelPropertiesEvent.d.ts +3 -3
  409. package/dist/lib/events/RegionInfoReplyEvent.d.ts +2 -2
  410. package/dist/lib/events/ScriptDialogEvent.d.ts +1 -1
  411. package/dist/lib/events/SelectedObjectEvent.d.ts +1 -1
  412. package/dist/lib/events/TeleportEvent.d.ts +1 -1
  413. package/dist/lib/index.d.ts +6 -8
  414. package/dist/lib/index.js +4 -7
  415. package/dist/lib/index.js.map +1 -1
  416. package/dist/lib/tsm/common.d.ts +1 -1
  417. package/dist/lib/tsm/common.js +3 -1
  418. package/dist/lib/tsm/common.js.map +1 -1
  419. package/dist/lib/tsm/mat2.d.ts +8 -8
  420. package/dist/lib/tsm/mat2.js +8 -7
  421. package/dist/lib/tsm/mat2.js.map +1 -1
  422. package/dist/lib/tsm/mat3.d.ts +7 -7
  423. package/dist/lib/tsm/mat3.js +8 -7
  424. package/dist/lib/tsm/mat3.js.map +1 -1
  425. package/dist/lib/tsm/mat4.d.ts +9 -9
  426. package/dist/lib/tsm/mat4.js +8 -7
  427. package/dist/lib/tsm/mat4.js.map +1 -1
  428. package/dist/lib/tsm/quat.d.ts +19 -19
  429. package/dist/lib/tsm/quat.js +69 -68
  430. package/dist/lib/tsm/quat.js.map +1 -1
  431. package/dist/lib/tsm/vec2.d.ts +13 -13
  432. package/dist/lib/tsm/vec2.js +30 -29
  433. package/dist/lib/tsm/vec2.js.map +1 -1
  434. package/dist/lib/tsm/vec3.d.ts +16 -16
  435. package/dist/lib/tsm/vec3.js +48 -47
  436. package/dist/lib/tsm/vec3.js.map +1 -1
  437. package/dist/lib/tsm/vec4.d.ts +22 -22
  438. package/dist/lib/tsm/vec4.js +94 -93
  439. package/dist/lib/tsm/vec4.js.map +1 -1
  440. package/eslint.config.mjs +104 -0
  441. package/examples/Inventory/Inventory.ts +4 -2
  442. package/examples/Money/Money.ts +6 -6
  443. package/examples/Objects/TaskInventory.ts +4 -3
  444. package/examples/Region/Settings.ts +19 -0
  445. package/package.json +10 -9
  446. package/.eslintrc +0 -224
  447. package/dist/lib/classes/llsd/LLSDNotationParser.d.ts +0 -9
  448. package/dist/lib/classes/llsd/LLSDNotationParser.js +0 -177
  449. package/dist/lib/classes/llsd/LLSDNotationParser.js.map +0 -1
  450. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js +0 -167
  451. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js.map +0 -1
  452. package/dist/lib/enums/AssetTypeLL.d.ts +0 -27
  453. package/dist/lib/enums/AssetTypeLL.js +0 -32
  454. package/dist/lib/enums/AssetTypeLL.js.map +0 -1
  455. package/dist/lib/enums/HTTPAssets.d.ts +0 -24
  456. package/dist/lib/enums/HTTPAssets.js +0 -29
  457. package/dist/lib/enums/HTTPAssets.js.map +0 -1
  458. package/dist/lib/tsm/test.js +0 -11
  459. package/dist/lib/tsm/test.js.map +0 -1
  460. /package/dist/{lib/classes/llsd/LLSDNotationParser.spec.d.ts → examples/Region/Settings.d.ts} +0 -0
  461. /package/dist/lib/{tsm/test.d.ts → classes/BinaryReader.spec.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,651 +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
+ }
172
162
  }
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);
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
+ }
184
+ }
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');
193
+ }
194
+ else {
195
+ await this.addItem(uploadedItem, false);
191
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
- });
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);
544
+ }
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);
550
+ }
551
+ const response = await waitForResponse;
552
+ if (!response.InventoryData || response.InventoryData.length < 1) {
553
+ throw new Error('Failed to create inventory item for wearable');
554
+ }
555
+ return response.InventoryData[0].ItemID;
556
+ }
557
+ catch (error) {
558
+ throw new Error(`uploadInventoryAssetLegacy failed: ${String(error instanceof Error ? error.message : error)}`);
559
+ }
560
560
  }
561
- uploadAsset(type_1, inventoryType_1, data_1, name_1, description_1) {
562
- return __awaiter(this, arguments, void 0, function* (type, inventoryType, data, name, description, flags = InventoryItemFlags_1.InventoryItemFlags.None) {
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');
593
+ }
594
+ const itemID = createInventoryResponse.InventoryData[0].ItemID;
595
+ if (inventoryType === InventoryType_1.InventoryType.Notecard && data.length === 0) {
596
+ return itemID;
597
+ }
563
598
  switch (inventoryType) {
564
- case InventoryType_1.InventoryType.Wearable:
565
- case InventoryType_1.InventoryType.Bodypart:
599
+ case InventoryType_1.InventoryType.Material:
600
+ case InventoryType_1.InventoryType.Notecard:
601
+ case InventoryType_1.InventoryType.Settings:
602
+ case InventoryType_1.InventoryType.LSL:
566
603
  {
567
- const invItemID = yield this.uploadInventoryAssetLegacy(type, inventoryType, data, name, description, flags);
568
- const uploadedItem = yield this.agent.inventory.fetchInventoryItem(invItemID);
569
- if (uploadedItem === null) {
570
- throw new Error('Unable to get inventory item');
571
- }
572
- else {
573
- yield this.addItem(uploadedItem, false);
574
- }
575
- return uploadedItem;
604
+ await this.handleStandardInventoryUpload(inventoryType, itemID, data);
605
+ return itemID;
576
606
  }
577
- case InventoryType_1.InventoryType.Landmark:
578
- case InventoryType_1.InventoryType.Notecard:
579
607
  case InventoryType_1.InventoryType.Gesture:
580
- case InventoryType_1.InventoryType.Script:
581
- case InventoryType_1.InventoryType.LSL:
582
- case InventoryType_1.InventoryType.Settings:
583
608
  {
584
- const invItemID = yield this.uploadInventoryItem(type, inventoryType, data, name, description, flags);
585
- const item = yield this.agent.inventory.fetchInventoryItem(invItemID);
586
- if (item === null) {
587
- throw new Error('Unable to get inventory item');
609
+ const isGestureCapAvailable = await this.agent.currentRegion.caps.isCapAvailable('UpdateGestureAgentInventory');
610
+ if (isGestureCapAvailable) {
611
+ await this.handleStandardInventoryUpload(inventoryType, itemID, data);
612
+ return itemID;
588
613
  }
589
614
  else {
590
- yield this.addItem(item, false);
615
+ const invItemID = await this.uploadInventoryAssetLegacy(assetType, inventoryType, data, name, description, flags);
616
+ return invItemID;
591
617
  }
592
- return item;
593
618
  }
619
+ default:
620
+ throw new Error(`Currently unsupported CreateInventoryType: ${inventoryType}`);
594
621
  }
595
- const uploadCost = yield this.agent.currentRegion.getUploadCost();
596
- Logger_1.Logger.Info('[' + name + ']');
597
- const httpType = Utils_1.Utils.AssetTypeToHTTPAssetType(type);
598
- const response = yield this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', {
599
- 'folder_id': new LLSD.UUID(this.folderID.toString()),
600
- 'asset_type': httpType,
601
- 'inventory_type': Utils_1.Utils.HTTPAssetTypeToCapInventoryType(httpType),
602
- 'name': name,
603
- 'description': description,
604
- 'everyone_mask': PermissionMask_1.PermissionMask.All,
605
- 'group_mask': PermissionMask_1.PermissionMask.All,
606
- 'next_owner_mask': PermissionMask_1.PermissionMask.All,
607
- 'expected_upload_cost': uploadCost
608
- });
609
- if (response['state'] === 'upload') {
610
- const uploadURL = response['uploader'];
611
- const responseUpload = yield this.agent.currentRegion.caps.capsRequestUpload(uploadURL, data);
612
- if (responseUpload['new_inventory_item'] !== undefined) {
613
- const invItemID = new UUID_1.UUID(responseUpload['new_inventory_item'].toString());
614
- const item = yield this.agent.inventory.fetchInventoryItem(invItemID);
615
- if (item === null) {
616
- throw new Error('Unable to get inventory item');
617
- }
618
- else {
619
- yield this.addItem(item, false);
620
- }
621
- return item;
622
- }
623
- else {
624
- throw new Error('Unable to upload asset');
625
- }
626
- }
627
- else if (response['error']) {
628
- throw new Error(response['error']['message']);
629
- }
630
- else {
631
- throw new Error('Unable to upload asset');
632
- }
633
- });
634
- }
635
- checkCopyright(creatorID) {
636
- if (!creatorID.equals(this.agent.agentID) && !creatorID.isZero()) {
637
- throw new Error('Unable to upload - copyright violation');
638
622
  }
639
- }
640
- findFolder(id) {
641
- for (const folder of this.folders) {
642
- if (folder.folderID.equals(id)) {
643
- return folder;
644
- }
645
- const result = folder.findFolder(id);
646
- if (result !== null) {
647
- return result;
648
- }
623
+ catch (error) {
624
+ throw new Error(`uploadInventoryItem failed: ${String(error instanceof Error ? error.message : error)}`);
649
625
  }
650
- return null;
651
626
  }
652
- uploadMesh(name, description, mesh, confirmCostCallback) {
653
- return __awaiter(this, void 0, void 0, function* () {
654
- const decodedMesh = yield LLMesh_1.LLMesh.from(mesh);
655
- this.checkCopyright(decodedMesh.creatorID);
656
- const faces = [];
657
- const faceCount = decodedMesh.lodLevels['high_lod'].length;
658
- for (let x = 0; x < faceCount; x++) {
659
- faces.push({
660
- 'diffuse_color': [1.000000000000001, 1.000000000000001, 1.000000000000001, 1.000000000000001],
661
- 'fullbright': false
662
- });
663
- }
664
- const prim = {
665
- 'face_list': faces,
666
- 'position': [0.000000000000001, 0.000000000000001, 0.000000000000001],
667
- 'rotation': [0.000000000000001, 0.000000000000001, 0.000000000000001, 1.000000000000001],
668
- 'scale': [2.000000000000001, 2.000000000000001, 2.000000000000001],
669
- 'material': 3,
670
- 'physics_shape_type': 2,
671
- 'mesh': 0
672
- };
673
- const assetResources = {
674
- 'instance_list': [prim],
675
- 'mesh_list': [new LLSD.Binary(Array.from(mesh))],
676
- 'texture_list': [],
677
- 'metric': 'MUT_Unspecified'
678
- };
679
- const uploadMap = {
680
- 'name': String(name),
681
- 'description': String(description),
682
- 'asset_resources': assetResources,
683
- 'asset_type': 'mesh',
684
- 'inventory_type': 'object',
685
- 'folder_id': new LLSD.UUID(this.folderID.toString()),
686
- 'texture_folder_id': new LLSD.UUID(yield this.agent.inventory.findFolderForType(FolderType_1.FolderType.Texture)),
687
- 'everyone_mask': PermissionMask_1.PermissionMask.All,
688
- 'group_mask': PermissionMask_1.PermissionMask.All,
689
- 'next_owner_mask': PermissionMask_1.PermissionMask.All
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()),
690
648
  };
691
- let result;
692
- try {
693
- result = yield this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', uploadMap);
649
+ if (inventoryType === InventoryType_1.InventoryType.LSL) {
650
+ xmlPayload.target = 'mono';
694
651
  }
695
- catch (error) {
696
- console.error(error);
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}`);
697
655
  }
698
- if (result['state'] === 'upload' && result['upload_price'] !== undefined) {
699
- const cost = result['upload_price'];
700
- if (yield confirmCostCallback(cost)) {
701
- const uploader = result['uploader'];
702
- const uploadResult = yield this.agent.currentRegion.caps.capsPerformXMLPost(uploader, assetResources);
703
- if (uploadResult['new_inventory_item'] && uploadResult['new_asset']) {
704
- const inventoryItem = new UUID_1.UUID(uploadResult['new_inventory_item'].toString());
705
- const item = yield this.agent.inventory.fetchInventoryItem(inventoryItem);
706
- if (item !== null) {
707
- item.assetID = new UUID_1.UUID(uploadResult['new_asset'].toString());
708
- yield this.addItem(item, false);
709
- return item;
710
- }
711
- else {
712
- throw new Error('Unable to locate inventory item following mesh upload');
713
- }
714
- }
715
- else {
716
- throw new Error('Upload failed - no new inventory item returned');
717
- }
718
- }
719
- throw new Error('Upload cost declined');
720
- }
721
- else {
722
- console.log(result);
723
- console.log(JSON.stringify(result.error));
724
- throw new Error('Upload failed');
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');
725
660
  }
726
- });
661
+ }
662
+ catch (error) {
663
+ throw new Error(`Failed to upload inventory item (${inventoryType}): ${String(error instanceof Error ? error.message : error)}`);
664
+ }
727
665
  }
728
666
  }
729
667
  exports.InventoryFolder = InventoryFolder;