@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.
- package/dist/examples/Camera/Camera.js +3 -14
- package/dist/examples/Camera/Camera.js.map +1 -1
- package/dist/examples/ExampleBot.js +66 -87
- package/dist/examples/ExampleBot.js.map +1 -1
- package/dist/examples/Friends/Friends.js +29 -44
- package/dist/examples/Friends/Friends.js.map +1 -1
- package/dist/examples/Grid/Name2Key.js +25 -36
- package/dist/examples/Grid/Name2Key.js.map +1 -1
- package/dist/examples/Groups/Group.js +42 -55
- package/dist/examples/Groups/Group.js.map +1 -1
- package/dist/examples/Groups/GroupChat.js +55 -68
- package/dist/examples/Groups/GroupChat.js.map +1 -1
- package/dist/examples/InstantMessages/InstantMessages.js +8 -21
- package/dist/examples/InstantMessages/InstantMessages.js.map +1 -1
- package/dist/examples/Inventory/Inventory.js +80 -97
- package/dist/examples/Inventory/Inventory.js.map +1 -1
- package/dist/examples/MFA/MFA.js +24 -40
- package/dist/examples/MFA/MFA.js.map +1 -1
- package/dist/examples/Money/Money.js +28 -41
- package/dist/examples/Money/Money.js.map +1 -1
- package/dist/examples/Objects/TaskInventory.js +13 -24
- package/dist/examples/Objects/TaskInventory.js.map +1 -1
- package/dist/examples/Region/Agents.js +6 -17
- package/dist/examples/Region/Agents.js.map +1 -1
- package/dist/examples/Region/Estate.js +9 -20
- package/dist/examples/Region/Estate.js.map +1 -1
- package/dist/examples/Region/Parcels.js +12 -23
- package/dist/examples/Region/Parcels.js.map +1 -1
- package/dist/examples/Region/Region.js +2 -13
- package/dist/examples/Region/Region.js.map +1 -1
- package/dist/examples/Region/Settings.js +15 -0
- package/dist/examples/Region/Settings.js.map +1 -0
- package/dist/examples/Teleports/Teleports.js +22 -35
- package/dist/examples/Teleports/Teleports.js.map +1 -1
- package/dist/lib/Bot.d.ts +14 -14
- package/dist/lib/Bot.js +217 -231
- package/dist/lib/Bot.js.map +1 -1
- package/dist/lib/LoginHandler.d.ts +3 -3
- package/dist/lib/LoginHandler.js +106 -116
- package/dist/lib/LoginHandler.js.map +1 -1
- package/dist/lib/classes/Agent.d.ts +23 -35
- package/dist/lib/classes/Agent.js +96 -108
- package/dist/lib/classes/Agent.js.map +1 -1
- package/dist/lib/classes/AssetMap.d.ts +18 -95
- package/dist/lib/classes/AssetMap.js +86 -16
- package/dist/lib/classes/AssetMap.js.map +1 -1
- package/dist/lib/classes/AssetRegistry.d.ts +31 -0
- package/dist/lib/classes/AssetRegistry.js +26 -0
- package/dist/lib/classes/AssetRegistry.js.map +1 -0
- package/dist/lib/classes/AssetTypeRegistry.d.ts +21 -0
- package/dist/lib/classes/AssetTypeRegistry.js +81 -0
- package/dist/lib/classes/AssetTypeRegistry.js.map +1 -0
- package/dist/lib/classes/BVH.js.map +1 -1
- package/dist/lib/classes/BVHJoint.js.map +1 -1
- package/dist/lib/classes/BVHJointKeyframe.d.ts +1 -1
- package/dist/lib/classes/BatchQueue.d.ts +2 -2
- package/dist/lib/classes/BatchQueue.js +66 -80
- package/dist/lib/classes/BatchQueue.js.map +1 -1
- package/dist/lib/classes/BatchQueue.spec.js +17 -26
- package/dist/lib/classes/BatchQueue.spec.js.map +1 -1
- package/dist/lib/classes/BinaryReader.d.ts +66 -0
- package/dist/lib/classes/BinaryReader.js +304 -0
- package/dist/lib/classes/BinaryReader.js.map +1 -0
- package/dist/lib/classes/BinaryReader.spec.d.ts +1 -0
- package/dist/lib/classes/BinaryReader.spec.js +241 -0
- package/dist/lib/classes/BinaryReader.spec.js.map +1 -0
- package/dist/lib/classes/BinaryWriter.d.ts +34 -0
- package/dist/lib/classes/BinaryWriter.js +192 -0
- package/dist/lib/classes/BinaryWriter.js.map +1 -0
- package/dist/lib/classes/BinaryWriter.spec.d.ts +1 -0
- package/dist/lib/classes/BinaryWriter.spec.js +328 -0
- package/dist/lib/classes/BinaryWriter.spec.js.map +1 -0
- package/dist/lib/classes/BitPack.d.ts +2 -2
- package/dist/lib/classes/BitPack.js +1 -1
- package/dist/lib/classes/BitPack.js.map +1 -1
- package/dist/lib/classes/BuildMap.d.ts +6 -6
- package/dist/lib/classes/BuildMap.js.map +1 -1
- package/dist/lib/classes/Caps.d.ts +18 -24
- package/dist/lib/classes/Caps.js +278 -297
- package/dist/lib/classes/Caps.js.map +1 -1
- package/dist/lib/classes/Circuit.d.ts +20 -28
- package/dist/lib/classes/Circuit.js +104 -91
- package/dist/lib/classes/Circuit.js.map +1 -1
- package/dist/lib/classes/ClientCommands.d.ts +3 -3
- package/dist/lib/classes/ClientCommands.js.map +1 -1
- package/dist/lib/classes/ClientEvents.d.ts +41 -32
- package/dist/lib/classes/ClientEvents.js +65 -0
- package/dist/lib/classes/ClientEvents.js.map +1 -1
- package/dist/lib/classes/CoalescedGameObject.d.ts +2 -2
- package/dist/lib/classes/CoalescedGameObject.js +37 -49
- package/dist/lib/classes/CoalescedGameObject.js.map +1 -1
- package/dist/lib/classes/Color4.d.ts +2 -2
- package/dist/lib/classes/Color4.js +42 -42
- package/dist/lib/classes/Color4.js.map +1 -1
- package/dist/lib/classes/Comms.d.ts +3 -3
- package/dist/lib/classes/Comms.js +236 -236
- package/dist/lib/classes/Comms.js.map +1 -1
- package/dist/lib/classes/ConcurrentQueue.d.ts +3 -3
- package/dist/lib/classes/ConcurrentQueue.js +16 -11
- package/dist/lib/classes/ConcurrentQueue.js.map +1 -1
- package/dist/lib/classes/EventQueueClient.d.ts +6 -6
- package/dist/lib/classes/EventQueueClient.js +189 -201
- package/dist/lib/classes/EventQueueClient.js.map +1 -1
- package/dist/lib/classes/GroupBan.d.ts +3 -3
- package/dist/lib/classes/GroupBan.js.map +1 -1
- package/dist/lib/classes/GroupMember.d.ts +2 -2
- package/dist/lib/classes/GroupRole.d.ts +2 -2
- package/dist/lib/classes/IPAddress.d.ts +3 -2
- package/dist/lib/classes/IPAddress.js +14 -13
- package/dist/lib/classes/IPAddress.js.map +1 -1
- package/dist/lib/classes/Inventory.d.ts +7 -15
- package/dist/lib/classes/Inventory.js +69 -80
- package/dist/lib/classes/Inventory.js.map +1 -1
- package/dist/lib/classes/InventoryFolder.d.ts +11 -11
- package/dist/lib/classes/InventoryFolder.js +544 -626
- package/dist/lib/classes/InventoryFolder.js.map +1 -1
- package/dist/lib/classes/InventoryItem.d.ts +15 -11
- package/dist/lib/classes/InventoryItem.js +494 -486
- package/dist/lib/classes/InventoryItem.js.map +1 -1
- package/dist/lib/classes/InventoryTypeRegistry.d.ts +19 -0
- package/dist/lib/classes/InventoryTypeRegistry.js +69 -0
- package/dist/lib/classes/InventoryTypeRegistry.js.map +1 -0
- package/dist/lib/classes/LLGLTFMaterial.d.ts +1 -1
- package/dist/lib/classes/LLGLTFMaterial.js +2 -2
- package/dist/lib/classes/LLGLTFMaterial.js.map +1 -1
- package/dist/lib/classes/LLGLTFMaterial.spec.js +17 -18
- package/dist/lib/classes/LLGLTFMaterial.spec.js.map +1 -1
- package/dist/lib/classes/LLGLTFMaterialOverride.d.ts +1 -1
- package/dist/lib/classes/LLGLTFMaterialOverride.js +119 -118
- package/dist/lib/classes/LLGLTFMaterialOverride.js.map +1 -1
- package/dist/lib/classes/LLGLTFMaterialOverride.spec.js +70 -71
- package/dist/lib/classes/LLGLTFMaterialOverride.spec.js.map +1 -1
- package/dist/lib/classes/LLGesture.d.ts +1 -1
- package/dist/lib/classes/LLGesture.js +1 -1
- package/dist/lib/classes/LLGesture.js.map +1 -1
- package/dist/lib/classes/LLGestureAnimationStep.d.ts +1 -1
- package/dist/lib/classes/LLGestureAnimationStep.js.map +1 -1
- package/dist/lib/classes/LLGestureChatStep.js.map +1 -1
- package/dist/lib/classes/LLGestureSoundStep.d.ts +1 -1
- package/dist/lib/classes/LLGestureSoundStep.js.map +1 -1
- package/dist/lib/classes/LLGestureStep.d.ts +1 -1
- package/dist/lib/classes/LLGestureWaitStep.js.map +1 -1
- package/dist/lib/classes/LLLindenText.d.ts +2 -4
- package/dist/lib/classes/LLLindenText.js +12 -8
- package/dist/lib/classes/LLLindenText.js.map +1 -1
- package/dist/lib/classes/LLSettings.d.ts +98 -83
- package/dist/lib/classes/LLSettings.js +240 -83
- package/dist/lib/classes/LLSettings.js.map +1 -1
- package/dist/lib/classes/LLSettings.spec.d.ts +1 -0
- package/dist/lib/classes/LLSettings.spec.js +27 -0
- package/dist/lib/classes/LLSettings.spec.js.map +1 -0
- package/dist/lib/classes/LLWearable.d.ts +4 -8
- package/dist/lib/classes/LLWearable.js +1 -1
- package/dist/lib/classes/LLWearable.js.map +1 -1
- package/dist/lib/classes/Logger.d.ts +3 -3
- package/dist/lib/classes/Logger.js +1 -1
- package/dist/lib/classes/Logger.js.map +1 -1
- package/dist/lib/classes/LoginParameters.js.map +1 -1
- package/dist/lib/classes/LoginResponse.d.ts +4 -9
- package/dist/lib/classes/LoginResponse.js +120 -113
- package/dist/lib/classes/LoginResponse.js.map +1 -1
- package/dist/lib/classes/MapBlock.d.ts +2 -2
- package/dist/lib/classes/MessageBase.d.ts +5 -5
- package/dist/lib/classes/MessageClasses.js.map +1 -1
- package/dist/lib/classes/ObjectResolver.d.ts +6 -6
- package/dist/lib/classes/ObjectResolver.js +127 -152
- package/dist/lib/classes/ObjectResolver.js.map +1 -1
- package/dist/lib/classes/ObjectStoreFull.d.ts +9 -9
- package/dist/lib/classes/ObjectStoreFull.js +176 -192
- package/dist/lib/classes/ObjectStoreFull.js.map +1 -1
- package/dist/lib/classes/ObjectStoreLite.d.ts +29 -31
- package/dist/lib/classes/ObjectStoreLite.js +485 -494
- package/dist/lib/classes/ObjectStoreLite.js.map +1 -1
- package/dist/lib/classes/Packet.d.ts +2 -2
- package/dist/lib/classes/Packet.js +2 -2
- package/dist/lib/classes/Packet.js.map +1 -1
- package/dist/lib/classes/ParticleSystem.js +1 -1
- package/dist/lib/classes/ParticleSystem.js.map +1 -1
- package/dist/lib/classes/PrimFacesHelper.d.ts +14 -0
- package/dist/lib/classes/PrimFacesHelper.js +75 -0
- package/dist/lib/classes/PrimFacesHelper.js.map +1 -0
- package/dist/lib/classes/Quaternion.d.ts +31 -6
- package/dist/lib/classes/Quaternion.js +236 -48
- package/dist/lib/classes/Quaternion.js.map +1 -1
- package/dist/lib/classes/Region.d.ts +23 -22
- package/dist/lib/classes/Region.js +453 -515
- package/dist/lib/classes/Region.js.map +1 -1
- package/dist/lib/classes/TarArchive.d.ts +1 -1
- package/dist/lib/classes/TarArchive.js.map +1 -1
- package/dist/lib/classes/TarFile.js +1 -1
- package/dist/lib/classes/TarFile.js.map +1 -1
- package/dist/lib/classes/TarReader.d.ts +1 -2
- package/dist/lib/classes/TarReader.js +15 -17
- package/dist/lib/classes/TarReader.js.map +1 -1
- package/dist/lib/classes/TarWriter.d.ts +1 -1
- package/dist/lib/classes/TarWriter.js +51 -68
- package/dist/lib/classes/TarWriter.js.map +1 -1
- package/dist/lib/classes/TextureEntry.d.ts +2 -3
- package/dist/lib/classes/TextureEntry.js +12 -12
- package/dist/lib/classes/TextureEntry.js.map +1 -1
- package/dist/lib/classes/TextureEntryFace.d.ts +4 -4
- package/dist/lib/classes/TextureEntryFace.js.map +1 -1
- package/dist/lib/classes/UUID.d.ts +2 -2
- package/dist/lib/classes/UUID.js +28 -28
- package/dist/lib/classes/UUID.js.map +1 -1
- package/dist/lib/classes/Utils.d.ts +2 -11
- package/dist/lib/classes/Utils.js +72 -328
- package/dist/lib/classes/Utils.js.map +1 -1
- package/dist/lib/classes/Vector2.d.ts +35 -6
- package/dist/lib/classes/Vector2.js +192 -28
- package/dist/lib/classes/Vector2.js.map +1 -1
- package/dist/lib/classes/Vector3.d.ts +38 -6
- package/dist/lib/classes/Vector3.js +229 -48
- package/dist/lib/classes/Vector3.js.map +1 -1
- package/dist/lib/classes/Vector4.d.ts +36 -6
- package/dist/lib/classes/Vector4.js +225 -21
- package/dist/lib/classes/Vector4.js.map +1 -1
- package/dist/lib/classes/Wearable.d.ts +1 -1
- package/dist/lib/classes/Zerocoder.js +2 -2
- package/dist/lib/classes/Zerocoder.js.map +1 -1
- package/dist/lib/classes/commands/AgentCommands.d.ts +7 -5
- package/dist/lib/classes/commands/AgentCommands.js +60 -76
- package/dist/lib/classes/commands/AgentCommands.js.map +1 -1
- package/dist/lib/classes/commands/AssetCommands.d.ts +5 -10
- package/dist/lib/classes/commands/AssetCommands.js +176 -179
- package/dist/lib/classes/commands/AssetCommands.js.map +1 -1
- package/dist/lib/classes/commands/CommandsBase.d.ts +4 -4
- package/dist/lib/classes/commands/CommandsBase.js.map +1 -1
- package/dist/lib/classes/commands/CommunicationsCommands.d.ts +3 -3
- package/dist/lib/classes/commands/CommunicationsCommands.js +350 -426
- package/dist/lib/classes/commands/CommunicationsCommands.js.map +1 -1
- package/dist/lib/classes/commands/FriendCommands.d.ts +9 -10
- package/dist/lib/classes/commands/FriendCommands.js +238 -236
- package/dist/lib/classes/commands/FriendCommands.js.map +1 -1
- package/dist/lib/classes/commands/GridCommands.d.ts +3 -3
- package/dist/lib/classes/commands/GridCommands.js +299 -336
- package/dist/lib/classes/commands/GridCommands.js.map +1 -1
- package/dist/lib/classes/commands/GroupCommands.d.ts +2 -2
- package/dist/lib/classes/commands/GroupCommands.js +293 -336
- package/dist/lib/classes/commands/GroupCommands.js.map +1 -1
- package/dist/lib/classes/commands/InventoryCommands.d.ts +4 -4
- package/dist/lib/classes/commands/InventoryCommands.js +54 -69
- package/dist/lib/classes/commands/InventoryCommands.js.map +1 -1
- package/dist/lib/classes/commands/MovementCommands.d.ts +2 -2
- package/dist/lib/classes/commands/MovementCommands.js +23 -38
- package/dist/lib/classes/commands/MovementCommands.js.map +1 -1
- package/dist/lib/classes/commands/NetworkCommands.js +35 -46
- package/dist/lib/classes/commands/NetworkCommands.js.map +1 -1
- package/dist/lib/classes/commands/ParcelCommands.d.ts +4 -4
- package/dist/lib/classes/commands/ParcelCommands.js +64 -77
- package/dist/lib/classes/commands/ParcelCommands.js.map +1 -1
- package/dist/lib/classes/commands/RegionCommands.d.ts +11 -10
- package/dist/lib/classes/commands/RegionCommands.js +1126 -1211
- package/dist/lib/classes/commands/RegionCommands.js.map +1 -1
- package/dist/lib/classes/commands/TeleportCommands.d.ts +8 -8
- package/dist/lib/classes/commands/TeleportCommands.js +58 -58
- package/dist/lib/classes/commands/TeleportCommands.js.map +1 -1
- package/dist/lib/classes/interfaces/IGameObjectData.d.ts +18 -20
- package/dist/lib/classes/interfaces/ILandBlock.d.ts +2 -2
- package/dist/lib/classes/interfaces/IObjectStore.d.ts +12 -12
- package/dist/lib/classes/interfaces/IResolveJob.d.ts +2 -2
- package/dist/lib/classes/interfaces/ITreeBoundingBox.d.ts +2 -2
- package/dist/lib/classes/llsd/LLSD.d.ts +12 -0
- package/dist/lib/classes/llsd/LLSD.js +128 -0
- package/dist/lib/classes/llsd/LLSD.js.map +1 -0
- package/dist/lib/classes/llsd/LLSD.spec.d.ts +1 -0
- package/dist/lib/classes/llsd/LLSD.spec.js +249 -0
- package/dist/lib/classes/llsd/LLSD.spec.js.map +1 -0
- package/dist/lib/classes/llsd/LLSDArray.d.ts +26 -3
- package/dist/lib/classes/llsd/LLSDArray.js +182 -6
- package/dist/lib/classes/llsd/LLSDArray.js.map +1 -1
- package/dist/lib/classes/llsd/LLSDBinary.d.ts +7 -0
- package/dist/lib/classes/llsd/LLSDBinary.js +114 -0
- package/dist/lib/classes/llsd/LLSDBinary.js.map +1 -0
- package/dist/lib/classes/llsd/LLSDInteger.d.ts +9 -0
- package/dist/lib/classes/llsd/LLSDInteger.js +25 -0
- package/dist/lib/classes/llsd/LLSDInteger.js.map +1 -0
- package/dist/lib/classes/llsd/LLSDMap.d.ts +16 -5
- package/dist/lib/classes/llsd/LLSDMap.js +197 -16
- package/dist/lib/classes/llsd/LLSDMap.js.map +1 -1
- package/dist/lib/classes/llsd/LLSDNotation.d.ts +11 -0
- package/dist/lib/classes/llsd/LLSDNotation.js +271 -0
- package/dist/lib/classes/llsd/LLSDNotation.js.map +1 -0
- package/dist/lib/classes/llsd/LLSDReal.d.ts +10 -0
- package/dist/lib/classes/llsd/LLSDReal.js +71 -0
- package/dist/lib/classes/llsd/LLSDReal.js.map +1 -0
- package/dist/lib/classes/llsd/LLSDToken.d.ts +1 -1
- package/dist/lib/classes/llsd/LLSDTokenContainer.d.ts +2 -2
- package/dist/lib/classes/llsd/LLSDTokenGenerator.d.ts +1 -1
- package/dist/lib/classes/llsd/LLSDTokenSpec.d.ts +1 -1
- package/dist/lib/classes/llsd/LLSDTokenType.d.ts +18 -18
- package/dist/lib/classes/llsd/LLSDTokenType.js +18 -18
- package/dist/lib/classes/llsd/LLSDTokenType.js.map +1 -1
- package/dist/lib/classes/llsd/LLSDType.d.ts +6 -3
- package/dist/lib/classes/llsd/LLSDURI.d.ts +7 -0
- package/dist/lib/classes/llsd/LLSDURI.js +19 -0
- package/dist/lib/classes/llsd/LLSDURI.js.map +1 -0
- package/dist/lib/classes/llsd/LLSDXML.d.ts +5 -0
- package/dist/lib/classes/llsd/LLSDXML.js +245 -0
- package/dist/lib/classes/llsd/LLSDXML.js.map +1 -0
- package/dist/lib/classes/messages/ObjectUpdate.d.ts +4 -5
- package/dist/lib/classes/messages/ObjectUpdate.js +115 -115
- package/dist/lib/classes/messages/ObjectUpdate.js.map +1 -1
- package/dist/lib/classes/messages/SimStats.d.ts +3 -2
- package/dist/lib/classes/messages/SimStats.js +17 -17
- package/dist/lib/classes/messages/SimStats.js.map +1 -1
- package/dist/lib/classes/public/Avatar.d.ts +4 -4
- package/dist/lib/classes/public/Avatar.js +39 -33
- package/dist/lib/classes/public/Avatar.js.map +1 -1
- package/dist/lib/classes/public/AvatarQueryResult.d.ts +4 -4
- package/dist/lib/classes/public/AvatarQueryResult.js.map +1 -1
- package/dist/lib/classes/public/ExtendedMeshData.d.ts +1 -1
- package/dist/lib/classes/public/ExtendedMeshData.js.map +1 -1
- package/dist/lib/classes/public/ExtraParams.d.ts +6 -6
- package/dist/lib/classes/public/ExtraParams.js +36 -39
- package/dist/lib/classes/public/ExtraParams.js.map +1 -1
- package/dist/lib/classes/public/ExtraParams.spec.js +2 -11
- package/dist/lib/classes/public/ExtraParams.spec.js.map +1 -1
- package/dist/lib/classes/public/FlexibleData.js.map +1 -1
- package/dist/lib/classes/public/Friend.js.map +1 -1
- package/dist/lib/classes/public/GameObject.d.ts +23 -21
- package/dist/lib/classes/public/GameObject.js +1294 -1306
- package/dist/lib/classes/public/GameObject.js.map +1 -1
- package/dist/lib/classes/public/GameObject.spec.js +8 -18
- package/dist/lib/classes/public/GameObject.spec.js.map +1 -1
- package/dist/lib/classes/public/LLMesh.d.ts +5 -7
- package/dist/lib/classes/public/LLMesh.js +194 -216
- package/dist/lib/classes/public/LLMesh.js.map +1 -1
- package/dist/lib/classes/public/LightData.js.map +1 -1
- package/dist/lib/classes/public/LightImageData.js.map +1 -1
- package/dist/lib/classes/public/Material.js +45 -56
- package/dist/lib/classes/public/Material.js.map +1 -1
- package/dist/lib/classes/public/MeshData.js.map +1 -1
- package/dist/lib/classes/public/Parcel.d.ts +4 -4
- package/dist/lib/classes/public/Parcel.js +1 -2
- package/dist/lib/classes/public/Parcel.js.map +1 -1
- package/dist/lib/classes/public/ReflectionProbeData.d.ts +1 -1
- package/dist/lib/classes/public/ReflectionProbeData.js.map +1 -1
- package/dist/lib/classes/public/RegionEnvironment.d.ts +14 -13
- package/dist/lib/classes/public/RegionEnvironment.js +94 -53
- package/dist/lib/classes/public/RegionEnvironment.js.map +1 -1
- package/dist/lib/classes/public/RegionEnvironmentSky.d.ts +2 -0
- package/dist/lib/classes/public/RegionEnvironmentSky.js +7 -0
- package/dist/lib/classes/public/RegionEnvironmentSky.js.map +1 -0
- package/dist/lib/classes/public/RegionEnvironmentWater.d.ts +2 -0
- package/dist/lib/classes/public/RegionEnvironmentWater.js +7 -0
- package/dist/lib/classes/public/RegionEnvironmentWater.js.map +1 -0
- package/dist/lib/classes/public/RenderMaterialData.js.map +1 -1
- package/dist/lib/classes/public/RenderMaterialParam.d.ts +1 -1
- package/dist/lib/classes/public/SculptData.js.map +1 -1
- package/dist/lib/classes/public/TextureAnim.js +2 -1
- package/dist/lib/classes/public/TextureAnim.js.map +1 -1
- package/dist/lib/classes/public/interfaces/GlobalPosition.d.ts +1 -1
- package/dist/lib/classes/public/interfaces/LLPhysicsConvex.d.ts +1 -1
- package/dist/lib/classes/public/interfaces/LLSkin.d.ts +1 -1
- package/dist/lib/classes/public/interfaces/LLSubMesh.d.ts +3 -5
- package/dist/lib/classes/public/interfaces/MapLocation.d.ts +3 -3
- package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.d.ts +26 -0
- package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js +3 -0
- package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js.map +1 -0
- package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.d.ts +15 -0
- package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js +3 -0
- package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js.map +1 -0
- package/dist/lib/classes/public/interfaces/SkyPreset.d.ts +3 -3
- package/dist/lib/classes/public/interfaces/WaterPreset.d.ts +4 -4
- package/dist/lib/deviceToken.json +1 -0
- package/dist/lib/enums/AssetType.d.ts +6 -4
- package/dist/lib/enums/AssetType.js +5 -3
- package/dist/lib/enums/AssetType.js.map +1 -1
- package/dist/lib/enums/AttachmentPoint.d.ts +0 -1
- package/dist/lib/enums/AttachmentPoint.js +0 -1
- package/dist/lib/enums/AttachmentPoint.js.map +1 -1
- package/dist/lib/enums/InventoryType.d.ts +3 -5
- package/dist/lib/enums/InventoryType.js +2 -4
- package/dist/lib/enums/InventoryType.js.map +1 -1
- package/dist/lib/enums/LayerType.d.ts +1 -1
- package/dist/lib/enums/LayerType.js +1 -1
- package/dist/lib/events/AvatarPropertiesReplyEvent.d.ts +1 -1
- package/dist/lib/events/BalanceUpdatedEvent.d.ts +2 -2
- package/dist/lib/events/BulkUpdateInventoryEvent.d.ts +2 -2
- package/dist/lib/events/BulkUpdateInventoryEvent.js.map +1 -1
- package/dist/lib/events/ChatEvent.d.ts +5 -5
- package/dist/lib/events/FriendOnlineEvent.d.ts +1 -1
- package/dist/lib/events/FriendRemovedEvent.d.ts +1 -1
- package/dist/lib/events/FriendRequestEvent.d.ts +1 -1
- package/dist/lib/events/FriendResponseEvent.d.ts +1 -1
- package/dist/lib/events/FriendRightsEvent.d.ts +2 -2
- package/dist/lib/events/GroupChatClosedEvent.d.ts +1 -1
- package/dist/lib/events/GroupChatEvent.d.ts +1 -1
- package/dist/lib/events/GroupChatSessionAgentListEvent.d.ts +1 -1
- package/dist/lib/events/GroupChatSessionJoinEvent.d.ts +1 -1
- package/dist/lib/events/GroupInviteEvent.d.ts +1 -1
- package/dist/lib/events/GroupNoticeEvent.d.ts +1 -1
- package/dist/lib/events/GroupProfileReplyEvent.d.ts +2 -2
- package/dist/lib/events/InstantMessageEvent.d.ts +3 -3
- package/dist/lib/events/InventoryOfferedEvent.d.ts +3 -3
- package/dist/lib/events/InventoryResponseEvent.d.ts +1 -1
- package/dist/lib/events/LandStatsEvent.d.ts +4 -4
- package/dist/lib/events/LandStatsEvent.js.map +1 -1
- package/dist/lib/events/LureEvent.d.ts +2 -2
- package/dist/lib/events/MapInfoRangeReplyEvent.d.ts +1 -1
- package/dist/lib/events/MapInfoReplyEvent.d.ts +2 -2
- package/dist/lib/events/NewObjectEvent.d.ts +2 -2
- package/dist/lib/events/ObjectKilledEvent.d.ts +2 -2
- package/dist/lib/events/ObjectPhysicsDataEvent.d.ts +1 -1
- package/dist/lib/events/ObjectResolvedEvent.d.ts +1 -1
- package/dist/lib/events/ObjectUpdatedEvent.d.ts +2 -2
- package/dist/lib/events/ParcelInfoReplyEvent.d.ts +3 -3
- package/dist/lib/events/ParcelPropertiesEvent.d.ts +3 -3
- package/dist/lib/events/RegionInfoReplyEvent.d.ts +2 -2
- package/dist/lib/events/ScriptDialogEvent.d.ts +1 -1
- package/dist/lib/events/SelectedObjectEvent.d.ts +1 -1
- package/dist/lib/events/TeleportEvent.d.ts +1 -1
- package/dist/lib/index.d.ts +6 -8
- package/dist/lib/index.js +4 -7
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/tsm/common.d.ts +1 -1
- package/dist/lib/tsm/common.js +3 -1
- package/dist/lib/tsm/common.js.map +1 -1
- package/dist/lib/tsm/mat2.d.ts +8 -8
- package/dist/lib/tsm/mat2.js +8 -7
- package/dist/lib/tsm/mat2.js.map +1 -1
- package/dist/lib/tsm/mat3.d.ts +7 -7
- package/dist/lib/tsm/mat3.js +8 -7
- package/dist/lib/tsm/mat3.js.map +1 -1
- package/dist/lib/tsm/mat4.d.ts +9 -9
- package/dist/lib/tsm/mat4.js +8 -7
- package/dist/lib/tsm/mat4.js.map +1 -1
- package/dist/lib/tsm/quat.d.ts +19 -19
- package/dist/lib/tsm/quat.js +69 -68
- package/dist/lib/tsm/quat.js.map +1 -1
- package/dist/lib/tsm/vec2.d.ts +13 -13
- package/dist/lib/tsm/vec2.js +30 -29
- package/dist/lib/tsm/vec2.js.map +1 -1
- package/dist/lib/tsm/vec3.d.ts +16 -16
- package/dist/lib/tsm/vec3.js +48 -47
- package/dist/lib/tsm/vec3.js.map +1 -1
- package/dist/lib/tsm/vec4.d.ts +22 -22
- package/dist/lib/tsm/vec4.js +94 -93
- package/dist/lib/tsm/vec4.js.map +1 -1
- package/eslint.config.mjs +104 -0
- package/examples/Inventory/Inventory.ts +4 -2
- package/examples/Money/Money.ts +6 -6
- package/examples/Objects/TaskInventory.ts +4 -3
- package/examples/Region/Settings.ts +19 -0
- package/package.json +10 -9
- package/.eslintrc +0 -224
- package/dist/lib/classes/llsd/LLSDNotationParser.d.ts +0 -9
- package/dist/lib/classes/llsd/LLSDNotationParser.js +0 -177
- package/dist/lib/classes/llsd/LLSDNotationParser.js.map +0 -1
- package/dist/lib/classes/llsd/LLSDNotationParser.spec.js +0 -167
- package/dist/lib/classes/llsd/LLSDNotationParser.spec.js.map +0 -1
- package/dist/lib/enums/AssetTypeLL.d.ts +0 -27
- package/dist/lib/enums/AssetTypeLL.js +0 -32
- package/dist/lib/enums/AssetTypeLL.js.map +0 -1
- package/dist/lib/enums/HTTPAssets.d.ts +0 -24
- package/dist/lib/enums/HTTPAssets.js +0 -29
- package/dist/lib/enums/HTTPAssets.js.map +0 -1
- /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
|
|
57
|
-
|
|
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
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
137
|
-
|
|
126
|
+
}
|
|
127
|
+
throw new Error('Failed to create inventory folder');
|
|
138
128
|
}
|
|
139
|
-
delete() {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
242
|
+
await this.addItem(item, false);
|
|
195
243
|
}
|
|
244
|
+
return item;
|
|
196
245
|
}
|
|
197
|
-
|
|
198
|
-
throw new Error('
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
|
|
216
|
-
|
|
217
|
-
if (
|
|
218
|
-
|
|
262
|
+
findFolder(id) {
|
|
263
|
+
for (const folder of this.folders) {
|
|
264
|
+
if (folder.folderID.equals(id)) {
|
|
265
|
+
return folder;
|
|
219
266
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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
|
-
|
|
263
|
-
|
|
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
|
-
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
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
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
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
|
-
|
|
350
|
-
if (wearableInFlags > 0) {
|
|
351
|
-
wearableType = wearableInFlags;
|
|
352
|
-
}
|
|
412
|
+
throw new Error('Old version');
|
|
353
413
|
}
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
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
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
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
|
-
|
|
396
|
-
|
|
397
|
-
|
|
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
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
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
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
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
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
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
|
|
666
|
-
if (
|
|
667
|
-
|
|
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
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
'
|
|
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
|
-
|
|
716
|
-
|
|
594
|
+
const itemID = createInventoryResponse.InventoryData[0].ItemID;
|
|
595
|
+
if (inventoryType === InventoryType_1.InventoryType.Notecard && data.length === 0) {
|
|
596
|
+
return itemID;
|
|
717
597
|
}
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
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
|
-
|
|
615
|
+
const invItemID = await this.uploadInventoryAssetLegacy(assetType, inventoryType, data, name, description, flags);
|
|
616
|
+
return invItemID;
|
|
733
617
|
}
|
|
734
618
|
}
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
throw new Error('Upload cost declined');
|
|
619
|
+
default:
|
|
620
|
+
throw new Error(`Currently unsupported CreateInventoryType: ${inventoryType}`);
|
|
740
621
|
}
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
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;
|