@hypersoniclabs/helix-cli 0.1.7 → 0.1.24-helix3.438
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/README.md +631 -8
- package/assets/bridge/metahuman-eye-baked.png +0 -0
- package/assets/item-def-sounds/Common/A_DryShot.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverA.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverB.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_ChargingHandle.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_01.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_02.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_03.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_003.ogg +0 -0
- package/bridge-plugins/helix.bridge.unreal/bin/unreal-skeletal-mesh-extract.js +812 -0
- package/bridge-plugins/helix.bridge.unreal/bridge-plugin.json +40 -0
- package/bridge-plugins/helix.bridge.unreal/test/exporter.test.js +418 -0
- package/bridge-plugins/helix.bridge.unreal/test/handler.test.js +417 -0
- package/bridge-plugins/helix.bridge.unreal/unreal/export_skeletal_mesh.py +384 -0
- package/bridge-recipes/cyberpunk/cyberpunk-female-bone-map.json +476 -0
- package/bridge-recipes/sims4/README.md +43 -0
- package/bridge-recipes/sims4/sims4-female-bone-map.json +65 -0
- package/bridge-recipes/unreal/character-customizer/README.md +58 -0
- package/bridge-recipes/unreal/character-customizer/all.json +13 -0
- package/bridge-recipes/unreal/character-customizer/base-male-body.json +6 -0
- package/bridge-recipes/unreal/character-customizer/base-male-head.json +6 -0
- package/bridge-recipes/unreal/character-customizer/beard.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/beard.json +6 -0
- package/bridge-recipes/unreal/character-customizer/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/bottom.json +6 -0
- package/bridge-recipes/unreal/character-customizer/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/eyewear.json +6 -0
- package/bridge-recipes/unreal/character-customizer/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/footwear.json +6 -0
- package/bridge-recipes/unreal/character-customizer/hair.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/hair.json +6 -0
- package/bridge-recipes/unreal/character-customizer/test/recipes.test.js +74 -0
- package/bridge-recipes/unreal/character-customizer/top.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/top.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-female/README.md +57 -0
- package/bridge-recipes/unreal/helix-character-creator-female/all.json +18 -0
- package/bridge-recipes/unreal/helix-character-creator-female/back.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/back.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/base-female-face.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/base-female.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/bottom.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/eyewear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-hair.json +23 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-nebula-urbanghost.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-singles.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch5.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch6.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch7.json +11 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-chain.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-chain.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-maska.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-maska.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panama.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panama.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-swat.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-swat.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/footwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/hair.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/hair.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/headwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/headwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/neck.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/neck.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/README.md +15 -0
- package/bridge-recipes/unreal/helix-character-creator-male/all.json +18 -0
- package/bridge-recipes/unreal/helix-character-creator-male/back.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/back.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/base-male-face.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/base-male.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/bottom.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/eyewear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/footwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/hair.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/hair.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/headwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/headwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-hair.json +23 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-nebula-urbanghost.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-uniforms.json +10 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch6-slot2.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch7-slot3.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch8-combined.json +11 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-boots-25.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-man-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-mikejack-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-socks.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-socks.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/neck.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/neck.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/palette-pilot.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/test/recipes.test.js +122 -0
- package/bridge-recipes/unreal/helix-character-creator-male/top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/bottom-nopalette.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/headwear-nopalette.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/neck-nopalette.addon.json +1 -0
- package/dist/ability.d.ts +2 -2
- package/dist/ability.js +6 -5
- package/dist/ability.js.map +1 -1
- package/dist/achievement.d.ts +123 -0
- package/dist/achievement.js +400 -0
- package/dist/achievement.js.map +1 -0
- package/dist/api.d.ts +19 -1
- package/dist/api.js +80 -6
- package/dist/api.js.map +1 -1
- package/dist/assets.d.ts +595 -0
- package/dist/assets.js +1121 -0
- package/dist/assets.js.map +1 -0
- package/dist/audioCommand.d.ts +65 -0
- package/dist/audioCommand.js +181 -0
- package/dist/audioCommand.js.map +1 -0
- package/dist/bakeBodyRegionsCli.d.ts +19 -0
- package/dist/bakeBodyRegionsCli.js +25 -0
- package/dist/bakeBodyRegionsCli.js.map +1 -0
- package/dist/bakeLighting.d.ts +173 -0
- package/dist/bakeLighting.js +452 -0
- package/dist/bakeLighting.js.map +1 -0
- package/dist/bridge/bridge.testutil.d.ts +105 -0
- package/dist/bridge/bridge.testutil.js +259 -0
- package/dist/bridge/bridge.testutil.js.map +1 -0
- package/dist/bridge/characterAddon.d.ts +47 -0
- package/dist/bridge/characterAddon.js +146 -0
- package/dist/bridge/characterAddon.js.map +1 -0
- package/dist/bridge/detect.d.ts +4 -0
- package/dist/bridge/detect.js +154 -0
- package/dist/bridge/detect.js.map +1 -0
- package/dist/bridge/execute.d.ts +3 -0
- package/dist/bridge/execute.js +206 -0
- package/dist/bridge/execute.js.map +1 -0
- package/dist/bridge/glb.d.ts +60 -0
- package/dist/bridge/glb.js +81 -0
- package/dist/bridge/glb.js.map +1 -0
- package/dist/bridge/hash.d.ts +6 -0
- package/dist/bridge/hash.js +40 -0
- package/dist/bridge/hash.js.map +1 -0
- package/dist/bridge/index.d.ts +11 -0
- package/dist/bridge/index.js +28 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/internal/artifacts.d.ts +5 -0
- package/dist/bridge/internal/artifacts.js +31 -0
- package/dist/bridge/internal/artifacts.js.map +1 -0
- package/dist/bridge/internal/builtInExecution.d.ts +4 -0
- package/dist/bridge/internal/builtInExecution.js +514 -0
- package/dist/bridge/internal/builtInExecution.js.map +1 -0
- package/dist/bridge/internal/externalExecution.d.ts +12 -0
- package/dist/bridge/internal/externalExecution.js +261 -0
- package/dist/bridge/internal/externalExecution.js.map +1 -0
- package/dist/bridge/internal/outputReservation.d.ts +13 -0
- package/dist/bridge/internal/outputReservation.js +151 -0
- package/dist/bridge/internal/outputReservation.js.map +1 -0
- package/dist/bridge/internal/snapshots.d.ts +32 -0
- package/dist/bridge/internal/snapshots.js +562 -0
- package/dist/bridge/internal/snapshots.js.map +1 -0
- package/dist/bridge/management.d.ts +40 -0
- package/dist/bridge/management.js +333 -0
- package/dist/bridge/management.js.map +1 -0
- package/dist/bridge/manifest.d.ts +8 -0
- package/dist/bridge/manifest.js +192 -0
- package/dist/bridge/manifest.js.map +1 -0
- package/dist/bridge/metahuman.d.ts +26 -0
- package/dist/bridge/metahuman.js +332 -0
- package/dist/bridge/metahuman.js.map +1 -0
- package/dist/bridge/planner.d.ts +9 -0
- package/dist/bridge/planner.js +246 -0
- package/dist/bridge/planner.js.map +1 -0
- package/dist/bridge/plugins.d.ts +17 -0
- package/dist/bridge/plugins.js +307 -0
- package/dist/bridge/plugins.js.map +1 -0
- package/dist/bridge/resolution.d.ts +8 -0
- package/dist/bridge/resolution.js +55 -0
- package/dist/bridge/resolution.js.map +1 -0
- package/dist/bridge/types.d.ts +247 -0
- package/dist/bridge/types.js +60 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/bridge/validate.d.ts +12 -0
- package/dist/bridge/validate.js +370 -0
- package/dist/bridge/validate.js.map +1 -0
- package/dist/bridge/zipSource.d.ts +27 -0
- package/dist/bridge/zipSource.js +90 -0
- package/dist/bridge/zipSource.js.map +1 -0
- package/dist/browser/hostSlots.d.ts +57 -0
- package/dist/browser/hostSlots.js +371 -0
- package/dist/browser/hostSlots.js.map +1 -0
- package/dist/browser/launch.d.ts +25 -0
- package/dist/browser/launch.js +74 -0
- package/dist/browser/launch.js.map +1 -0
- package/dist/browser/nonSystemChrome.d.ts +15 -0
- package/dist/browser/nonSystemChrome.js +91 -0
- package/dist/browser/nonSystemChrome.js.map +1 -0
- package/dist/builds/index.d.ts +54 -0
- package/dist/builds/index.js +215 -0
- package/dist/builds/index.js.map +1 -0
- package/dist/bundle.d.ts +35 -2
- package/dist/bundle.js +437 -20
- package/dist/bundle.js.map +1 -1
- package/dist/canary/cli.d.ts +17 -0
- package/dist/canary/cli.js +95 -0
- package/dist/canary/cli.js.map +1 -0
- package/dist/canary/index.d.ts +4 -0
- package/dist/canary/index.js +21 -0
- package/dist/canary/index.js.map +1 -0
- package/dist/canary/inventory.d.ts +46 -0
- package/dist/canary/inventory.js +499 -0
- package/dist/canary/inventory.js.map +1 -0
- package/dist/canary/pacifica.d.ts +51 -0
- package/dist/canary/pacifica.js +247 -0
- package/dist/canary/pacifica.js.map +1 -0
- package/dist/canary/plan.d.ts +115 -0
- package/dist/canary/plan.js +479 -0
- package/dist/canary/plan.js.map +1 -0
- package/dist/character/addonPushOut.d.ts +66 -0
- package/dist/character/addonPushOut.js +211 -0
- package/dist/character/addonPushOut.js.map +1 -0
- package/dist/character/avatarPreflight.d.ts +92 -0
- package/dist/character/avatarPreflight.js +261 -0
- package/dist/character/avatarPreflight.js.map +1 -0
- package/dist/character/bakeBodyRegions.d.ts +80 -0
- package/dist/character/bakeBodyRegions.js +190 -0
- package/dist/character/bakeBodyRegions.js.map +1 -0
- package/dist/character/baseColorGuard.d.ts +62 -0
- package/dist/character/baseColorGuard.js +141 -0
- package/dist/character/baseColorGuard.js.map +1 -0
- package/dist/character/bodyGeometryGuard.d.ts +243 -0
- package/dist/character/bodyGeometryGuard.js +417 -0
- package/dist/character/bodyGeometryGuard.js.map +1 -0
- package/dist/character/bodyRegionHide.d.ts +57 -0
- package/dist/character/bodyRegionHide.js +97 -0
- package/dist/character/bodyRegionHide.js.map +1 -0
- package/dist/character/composeBaseMale.d.ts +25 -0
- package/dist/character/composeBaseMale.js +712 -0
- package/dist/character/composeBaseMale.js.map +1 -0
- package/dist/character/esm.js +3 -1
- package/dist/character/esm.js.map +1 -1
- package/dist/character/faceManifest.d.ts +53 -0
- package/dist/character/faceManifest.js +256 -0
- package/dist/character/faceManifest.js.map +1 -0
- package/dist/character/fbx.d.ts +70 -0
- package/dist/character/fbx.js +396 -0
- package/dist/character/fbx.js.map +1 -0
- package/dist/character/fitGarmentFile.d.ts +39 -0
- package/dist/character/fitGarmentFile.js +53 -0
- package/dist/character/fitGarmentFile.js.map +1 -0
- package/dist/character/helixPalette.d.ts +68 -0
- package/dist/character/helixPalette.js +183 -0
- package/dist/character/helixPalette.js.map +1 -0
- package/dist/character/hideCoverage.d.ts +135 -0
- package/dist/character/hideCoverage.js +450 -0
- package/dist/character/hideCoverage.js.map +1 -0
- package/dist/character/imageLimits.d.ts +3 -0
- package/dist/character/imageLimits.js +7 -0
- package/dist/character/imageLimits.js.map +1 -0
- package/dist/character/importCharacter.d.ts +188 -10
- package/dist/character/importCharacter.js +854 -76
- package/dist/character/importCharacter.js.map +1 -1
- package/dist/character/importTrust.d.ts +11 -0
- package/dist/character/importTrust.js +56 -0
- package/dist/character/importTrust.js.map +1 -0
- package/dist/character/ktx2Decode.d.ts +11 -0
- package/dist/character/ktx2Decode.js +87 -0
- package/dist/character/ktx2Decode.js.map +1 -0
- package/dist/character/mat4.d.ts +7 -0
- package/dist/character/mat4.js +25 -2
- package/dist/character/mat4.js.map +1 -1
- package/dist/character/meshyToHelixMap.d.ts +14 -0
- package/dist/character/meshyToHelixMap.js +155 -3
- package/dist/character/meshyToHelixMap.js.map +1 -1
- package/dist/character/metahumanToHelixMap.d.ts +2 -0
- package/dist/character/metahumanToHelixMap.js +34 -0
- package/dist/character/metahumanToHelixMap.js.map +1 -0
- package/dist/character/normalMapGuard.d.ts +59 -0
- package/dist/character/normalMapGuard.js +139 -0
- package/dist/character/normalMapGuard.js.map +1 -0
- package/dist/character/quat.js +2 -2
- package/dist/character/quat.js.map +1 -1
- package/dist/character/reframeSkeletonFile.d.ts +19 -0
- package/dist/character/reframeSkeletonFile.js +45 -0
- package/dist/character/reframeSkeletonFile.js.map +1 -0
- package/dist/character/repairLodSkeletonsFile.d.ts +25 -0
- package/dist/character/repairLodSkeletonsFile.js +49 -0
- package/dist/character/repairLodSkeletonsFile.js.map +1 -0
- package/dist/character/restFrameGuard.d.ts +52 -0
- package/dist/character/restFrameGuard.js +90 -0
- package/dist/character/restFrameGuard.js.map +1 -0
- package/dist/character/slotBudgets.d.ts +37 -0
- package/dist/character/slotBudgets.generated.d.ts +15 -0
- package/dist/character/slotBudgets.generated.js +110 -0
- package/dist/character/slotBudgets.generated.js.map +1 -0
- package/dist/character/slotBudgets.js +45 -0
- package/dist/character/slotBudgets.js.map +1 -0
- package/dist/character/stages/atlasMaterials.d.ts +53 -0
- package/dist/character/stages/atlasMaterials.js +246 -0
- package/dist/character/stages/atlasMaterials.js.map +1 -0
- package/dist/character/stages/bakeTexture.d.ts +28 -7
- package/dist/character/stages/bakeTexture.js +586 -108
- package/dist/character/stages/bakeTexture.js.map +1 -1
- package/dist/character/stages/conform.d.ts +54 -9
- package/dist/character/stages/conform.js +686 -113
- package/dist/character/stages/conform.js.map +1 -1
- package/dist/character/stages/earClearance.d.ts +105 -0
- package/dist/character/stages/earClearance.js +480 -0
- package/dist/character/stages/earClearance.js.map +1 -0
- package/dist/character/stages/faceRegion.d.ts +55 -0
- package/dist/character/stages/faceRegion.js +183 -0
- package/dist/character/stages/faceRegion.js.map +1 -0
- package/dist/character/stages/firstPersonHide.d.ts +42 -0
- package/dist/character/stages/firstPersonHide.js +140 -0
- package/dist/character/stages/firstPersonHide.js.map +1 -0
- package/dist/character/stages/joinPerMesh.d.ts +18 -0
- package/dist/character/stages/joinPerMesh.js +46 -0
- package/dist/character/stages/joinPerMesh.js.map +1 -0
- package/dist/character/stages/ktx2.d.ts +6 -4
- package/dist/character/stages/ktx2.js +81 -29
- package/dist/character/stages/ktx2.js.map +1 -1
- package/dist/character/stages/limbBridge.d.ts +114 -0
- package/dist/character/stages/limbBridge.js +1286 -0
- package/dist/character/stages/limbBridge.js.map +1 -0
- package/dist/character/stages/mergeLods.d.ts +19 -0
- package/dist/character/stages/mergeLods.js +58 -2
- package/dist/character/stages/mergeLods.js.map +1 -1
- package/dist/character/stages/poseAwareFit.d.ts +192 -0
- package/dist/character/stages/poseAwareFit.js +417 -0
- package/dist/character/stages/poseAwareFit.js.map +1 -0
- package/dist/character/stages/poseFit/math.d.ts +141 -0
- package/dist/character/stages/poseFit/math.js +514 -0
- package/dist/character/stages/poseFit/math.js.map +1 -0
- package/dist/character/stages/poseFit/measure.d.ts +88 -0
- package/dist/character/stages/poseFit/measure.js +148 -0
- package/dist/character/stages/poseFit/measure.js.map +1 -0
- package/dist/character/stages/poseFit/model.d.ts +46 -0
- package/dist/character/stages/poseFit/model.js +147 -0
- package/dist/character/stages/poseFit/model.js.map +1 -0
- package/dist/character/stages/poseFit/offsetField.d.ts +76 -0
- package/dist/character/stages/poseFit/offsetField.js +249 -0
- package/dist/character/stages/poseFit/offsetField.js.map +1 -0
- package/dist/character/stages/poseFit/posing.d.ts +52 -0
- package/dist/character/stages/poseFit/posing.js +330 -0
- package/dist/character/stages/poseFit/posing.js.map +1 -0
- package/dist/character/stages/poseFit/testRig.d.ts +31 -0
- package/dist/character/stages/poseFit/testRig.js +85 -0
- package/dist/character/stages/poseFit/testRig.js.map +1 -0
- package/dist/character/stages/reframeSkeletonToHost.d.ts +35 -0
- package/dist/character/stages/reframeSkeletonToHost.js +111 -0
- package/dist/character/stages/reframeSkeletonToHost.js.map +1 -0
- package/dist/character/stages/report.js +0 -2
- package/dist/character/stages/report.js.map +1 -1
- package/dist/character/stages/resizeTextures.js +4 -4
- package/dist/character/stages/resizeTextures.js.map +1 -1
- package/dist/character/stages/retarget.d.ts +26 -2
- package/dist/character/stages/retarget.js +52 -4
- package/dist/character/stages/retarget.js.map +1 -1
- package/dist/character/stages/retargetClip.d.ts +6 -2
- package/dist/character/stages/retargetClip.js +109 -17
- package/dist/character/stages/retargetClip.js.map +1 -1
- package/dist/character/stages/sanitizeMaterials.d.ts +39 -0
- package/dist/character/stages/sanitizeMaterials.js +136 -0
- package/dist/character/stages/sanitizeMaterials.js.map +1 -0
- package/dist/character/stages/simplifyMesh.js +6 -3
- package/dist/character/stages/simplifyMesh.js.map +1 -1
- package/dist/character/stages/splitFacePrimitive.js +0 -2
- package/dist/character/stages/splitFacePrimitive.js.map +1 -1
- package/dist/character/stages/splitSharedLodSkeletons.d.ts +31 -0
- package/dist/character/stages/splitSharedLodSkeletons.js +104 -0
- package/dist/character/stages/splitSharedLodSkeletons.js.map +1 -0
- package/dist/character/stages/unifyMaterial.d.ts +66 -0
- package/dist/character/stages/unifyMaterial.js +136 -0
- package/dist/character/stages/unifyMaterial.js.map +1 -0
- package/dist/character/stages/vrmDynamics.d.ts +144 -0
- package/dist/character/stages/vrmDynamics.js +421 -0
- package/dist/character/stages/vrmDynamics.js.map +1 -0
- package/dist/character/stages/vrmFace.d.ts +82 -0
- package/dist/character/stages/vrmFace.js +280 -0
- package/dist/character/stages/vrmFace.js.map +1 -0
- package/dist/character/stages/weldedSimplify.d.ts +15 -1
- package/dist/character/stages/weldedSimplify.js +90 -9
- package/dist/character/stages/weldedSimplify.js.map +1 -1
- package/dist/character/testutil/meshyBridgeFixture.d.ts +33 -0
- package/dist/character/testutil/meshyBridgeFixture.js +219 -0
- package/dist/character/testutil/meshyBridgeFixture.js.map +1 -0
- package/dist/character/testutil/meshyHead.d.ts +19 -0
- package/dist/character/testutil/meshyHead.js +99 -0
- package/dist/character/testutil/meshyHead.js.map +1 -0
- package/dist/character/testutil/meshyRig.d.ts +17 -0
- package/dist/character/testutil/meshyRig.js +117 -0
- package/dist/character/testutil/meshyRig.js.map +1 -0
- package/dist/character/testutil/slotBudgetExpectations.d.ts +11 -0
- package/dist/character/testutil/slotBudgetExpectations.js +21 -0
- package/dist/character/testutil/slotBudgetExpectations.js.map +1 -0
- package/dist/character/testutil/syntheticRig.d.ts +12 -1
- package/dist/character/testutil/syntheticRig.js +88 -3
- package/dist/character/testutil/syntheticRig.js.map +1 -1
- package/dist/character/unrealMaterialSidecar.d.ts +94 -0
- package/dist/character/unrealMaterialSidecar.js +879 -0
- package/dist/character/unrealMaterialSidecar.js.map +1 -0
- package/dist/character/untrustedSource.d.ts +54 -0
- package/dist/character/untrustedSource.js +181 -0
- package/dist/character/untrustedSource.js.map +1 -0
- package/dist/character/vrmCharacter.d.ts +156 -0
- package/dist/character/vrmCharacter.js +678 -0
- package/dist/character/vrmCharacter.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +72 -24
- package/dist/config.js.map +1 -1
- package/dist/continuum/adminPackagePinCommand.d.ts +14 -0
- package/dist/continuum/adminPackagePinCommand.js +46 -0
- package/dist/continuum/adminPackagePinCommand.js.map +1 -0
- package/dist/continuum/adminPackagePublishCommand.d.ts +13 -0
- package/dist/continuum/adminPackagePublishCommand.js +22 -0
- package/dist/continuum/adminPackagePublishCommand.js.map +1 -0
- package/dist/continuum/authoring.d.ts +52 -0
- package/dist/continuum/authoring.js +143 -0
- package/dist/continuum/authoring.js.map +1 -0
- package/dist/continuum/characterMigrationGenerator.d.ts +17 -0
- package/dist/continuum/characterMigrationGenerator.js +242 -0
- package/dist/continuum/characterMigrationGenerator.js.map +1 -0
- package/dist/continuum/cli.d.ts +69 -0
- package/dist/continuum/cli.js +145 -0
- package/dist/continuum/cli.js.map +1 -0
- package/dist/continuum/cliAuthority.d.ts +17 -0
- package/dist/continuum/cliAuthority.js +28 -0
- package/dist/continuum/cliAuthority.js.map +1 -0
- package/dist/continuum/client.d.ts +103 -0
- package/dist/continuum/client.js +190 -0
- package/dist/continuum/client.js.map +1 -0
- package/dist/continuum/homeScenePackage.d.ts +159 -0
- package/dist/continuum/homeScenePackage.js +267 -0
- package/dist/continuum/homeScenePackage.js.map +1 -0
- package/dist/continuum/homeScenePackageCommand.d.ts +44 -0
- package/dist/continuum/homeScenePackageCommand.js +107 -0
- package/dist/continuum/homeScenePackageCommand.js.map +1 -0
- package/dist/continuum/identity.d.ts +4 -0
- package/dist/continuum/identity.js +20 -0
- package/dist/continuum/identity.js.map +1 -0
- package/dist/continuum/index.d.ts +11 -0
- package/dist/continuum/index.js +28 -0
- package/dist/continuum/index.js.map +1 -0
- package/dist/continuum/missingNormals.d.ts +48 -0
- package/dist/continuum/missingNormals.js +99 -0
- package/dist/continuum/missingNormals.js.map +1 -0
- package/dist/continuum/objectUpload.d.ts +64 -0
- package/dist/continuum/objectUpload.js +375 -0
- package/dist/continuum/objectUpload.js.map +1 -0
- package/dist/continuum/pull.d.ts +22 -0
- package/dist/continuum/pull.js +47 -0
- package/dist/continuum/pull.js.map +1 -0
- package/dist/continuum/sourceBundle.d.ts +18 -0
- package/dist/continuum/sourceBundle.js +160 -0
- package/dist/continuum/sourceBundle.js.map +1 -0
- package/dist/continuum/state.d.ts +41 -0
- package/dist/continuum/state.js +198 -0
- package/dist/continuum/state.js.map +1 -0
- package/dist/continuum/types.d.ts +156 -0
- package/dist/continuum/types.js +6 -0
- package/dist/continuum/types.js.map +1 -0
- package/dist/continuum/workflow.d.ts +62 -0
- package/dist/continuum/workflow.js +592 -0
- package/dist/continuum/workflow.js.map +1 -0
- package/dist/cs2/areas.d.ts +41 -0
- package/dist/cs2/areas.js +82 -0
- package/dist/cs2/areas.js.map +1 -0
- package/dist/cs2/binary.d.ts +10 -0
- package/dist/cs2/binary.js +59 -0
- package/dist/cs2/binary.js.map +1 -0
- package/dist/cs2/cityLegacy.d.ts +29 -0
- package/dist/cs2/cityLegacy.js +48 -0
- package/dist/cs2/cityLegacy.js.map +1 -0
- package/dist/cs2/convert/areas.d.ts +32 -0
- package/dist/cs2/convert/areas.js +96 -0
- package/dist/cs2/convert/areas.js.map +1 -0
- package/dist/cs2/convert/glb.d.ts +48 -0
- package/dist/cs2/convert/glb.js +178 -0
- package/dist/cs2/convert/glb.js.map +1 -0
- package/dist/cs2/convert/markings.d.ts +96 -0
- package/dist/cs2/convert/markings.js +329 -0
- package/dist/cs2/convert/markings.js.map +1 -0
- package/dist/cs2/convert/nodeSeams.d.ts +20 -0
- package/dist/cs2/convert/nodeSeams.js +164 -0
- package/dist/cs2/convert/nodeSeams.js.map +1 -0
- package/dist/cs2/convert/roadBake.d.ts +112 -0
- package/dist/cs2/convert/roadBake.js +290 -0
- package/dist/cs2/convert/roadBake.js.map +1 -0
- package/dist/cs2/convert/roads.d.ts +110 -0
- package/dist/cs2/convert/roads.js +419 -0
- package/dist/cs2/convert/roads.js.map +1 -0
- package/dist/cs2/convert/terrain.d.ts +67 -0
- package/dist/cs2/convert/terrain.js +141 -0
- package/dist/cs2/convert/terrain.js.map +1 -0
- package/dist/cs2/convert/terrainConform.d.ts +58 -0
- package/dist/cs2/convert/terrainConform.js +284 -0
- package/dist/cs2/convert/terrainConform.js.map +1 -0
- package/dist/cs2/convert/treeRoadClearance.d.ts +17 -0
- package/dist/cs2/convert/treeRoadClearance.js +78 -0
- package/dist/cs2/convert/treeRoadClearance.js.map +1 -0
- package/dist/cs2/convert/trees.d.ts +33 -0
- package/dist/cs2/convert/trees.js +68 -0
- package/dist/cs2/convert/trees.js.map +1 -0
- package/dist/cs2/csm2.d.ts +58 -0
- package/dist/cs2/csm2.js +188 -0
- package/dist/cs2/csm2.js.map +1 -0
- package/dist/cs2/fixtures.d.ts +5 -0
- package/dist/cs2/fixtures.js +15 -0
- package/dist/cs2/fixtures.js.map +1 -0
- package/dist/cs2/impostors.d.ts +31 -0
- package/dist/cs2/impostors.js +42 -0
- package/dist/cs2/impostors.js.map +1 -0
- package/dist/cs2/index.d.ts +22 -0
- package/dist/cs2/index.js +191 -0
- package/dist/cs2/index.js.map +1 -0
- package/dist/cs2/inspect.d.ts +81 -0
- package/dist/cs2/inspect.js +181 -0
- package/dist/cs2/inspect.js.map +1 -0
- package/dist/cs2/lods.d.ts +22 -0
- package/dist/cs2/lods.js +136 -0
- package/dist/cs2/lods.js.map +1 -0
- package/dist/cs2/materials.d.ts +43 -0
- package/dist/cs2/materials.js +137 -0
- package/dist/cs2/materials.js.map +1 -0
- package/dist/cs2/placements.d.ts +57 -0
- package/dist/cs2/placements.js +116 -0
- package/dist/cs2/placements.js.map +1 -0
- package/dist/cs2/roadPieces.d.ts +79 -0
- package/dist/cs2/roadPieces.js +263 -0
- package/dist/cs2/roadPieces.js.map +1 -0
- package/dist/cs2/roads.d.ts +92 -0
- package/dist/cs2/roads.js +329 -0
- package/dist/cs2/roads.js.map +1 -0
- package/dist/cs2/terrain.d.ts +37 -0
- package/dist/cs2/terrain.js +91 -0
- package/dist/cs2/terrain.js.map +1 -0
- package/dist/cs2/types.d.ts +444 -0
- package/dist/cs2/types.js +22 -0
- package/dist/cs2/types.js.map +1 -0
- package/dist/cs2/water.d.ts +26 -0
- package/dist/cs2/water.js +58 -0
- package/dist/cs2/water.js.map +1 -0
- package/dist/currency.d.ts +94 -0
- package/dist/currency.js +425 -0
- package/dist/currency.js.map +1 -0
- package/dist/dev/devServer.d.ts +53 -0
- package/dist/dev/devServer.js +228 -0
- package/dist/dev/devServer.js.map +1 -0
- package/dist/dev/shellPage.d.ts +3 -0
- package/dist/dev/shellPage.js +297 -0
- package/dist/dev/shellPage.js.map +1 -0
- package/dist/dev/state.d.ts +84 -0
- package/dist/dev/state.js +265 -0
- package/dist/dev/state.js.map +1 -0
- package/dist/device.d.ts +104 -0
- package/dist/device.js +2744 -0
- package/dist/device.js.map +1 -0
- package/dist/deviceActionValidation.d.ts +21 -0
- package/dist/deviceActionValidation.js +460 -0
- package/dist/deviceActionValidation.js.map +1 -0
- package/dist/distribution.d.ts +69 -0
- package/dist/distribution.js +138 -0
- package/dist/distribution.js.map +1 -0
- package/dist/enginePins.d.ts +45 -0
- package/dist/enginePins.js +134 -0
- package/dist/enginePins.js.map +1 -0
- package/dist/gesture/axisReference.d.ts +22 -0
- package/dist/gesture/axisReference.js +32 -0
- package/dist/gesture/axisReference.js.map +1 -0
- package/dist/gesture/capture.d.ts +84 -0
- package/dist/gesture/capture.js +303 -0
- package/dist/gesture/capture.js.map +1 -0
- package/dist/gesture/harnessPage.d.ts +23 -0
- package/dist/gesture/harnessPage.js +153 -0
- package/dist/gesture/harnessPage.js.map +1 -0
- package/dist/gesture/inspect.d.ts +189 -0
- package/dist/gesture/inspect.js +678 -0
- package/dist/gesture/inspect.js.map +1 -0
- package/dist/gesture/rig.d.ts +12 -0
- package/dist/gesture/rig.js +111 -0
- package/dist/gesture/rig.js.map +1 -0
- package/dist/gesture/worldRuntime.d.ts +65 -0
- package/dist/gesture/worldRuntime.js +110 -0
- package/dist/gesture/worldRuntime.js.map +1 -0
- package/dist/glb/draw-calls.d.ts +60 -0
- package/dist/glb/draw-calls.js +160 -0
- package/dist/glb/draw-calls.js.map +1 -0
- package/dist/glb/glb-summary.d.ts +68 -0
- package/dist/glb/glb-summary.js +450 -0
- package/dist/glb/glb-summary.js.map +1 -0
- package/dist/glb/index.d.ts +12 -0
- package/dist/glb/index.js +24 -0
- package/dist/glb/index.js.map +1 -0
- package/dist/glb/smooth-normals.d.ts +98 -0
- package/dist/glb/smooth-normals.js +395 -0
- package/dist/glb/smooth-normals.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6786 -128
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +35 -1
- package/dist/init.js +1115 -47
- package/dist/init.js.map +1 -1
- package/dist/install.d.ts +16 -5
- package/dist/install.js +123 -23
- package/dist/install.js.map +1 -1
- package/dist/interactable.d.ts +154 -0
- package/dist/interactable.js +1219 -0
- package/dist/interactable.js.map +1 -0
- package/dist/item.d.ts +217 -0
- package/dist/item.js +892 -0
- package/dist/item.js.map +1 -0
- package/dist/itemDef/distribute.d.ts +17 -0
- package/dist/itemDef/distribute.js +29 -0
- package/dist/itemDef/distribute.js.map +1 -0
- package/dist/itemDef/emoteRules.d.ts +85 -0
- package/dist/itemDef/emoteRules.js +368 -0
- package/dist/itemDef/emoteRules.js.map +1 -0
- package/dist/itemDef/gunConfigRules.d.ts +24 -0
- package/dist/itemDef/gunConfigRules.js +300 -0
- package/dist/itemDef/gunConfigRules.js.map +1 -0
- package/dist/itemDef/inspect.d.ts +19 -0
- package/dist/itemDef/inspect.js +144 -0
- package/dist/itemDef/inspect.js.map +1 -0
- package/dist/itemDef/scaffold.d.ts +41 -0
- package/dist/itemDef/scaffold.js +303 -0
- package/dist/itemDef/scaffold.js.map +1 -0
- package/dist/itemDef/tables.d.ts +81 -0
- package/dist/itemDef/tables.js +226 -0
- package/dist/itemDef/tables.js.map +1 -0
- package/dist/itemDef/validate.d.ts +30 -0
- package/dist/itemDef/validate.js +175 -0
- package/dist/itemDef/validate.js.map +1 -0
- package/dist/itemPublishVersion.d.ts +46 -0
- package/dist/itemPublishVersion.js +242 -0
- package/dist/itemPublishVersion.js.map +1 -0
- package/dist/itemSearch.d.ts +128 -0
- package/dist/itemSearch.js +140 -0
- package/dist/itemSearch.js.map +1 -0
- package/dist/itemSetVersion.d.ts +77 -0
- package/dist/itemSetVersion.js +170 -0
- package/dist/itemSetVersion.js.map +1 -0
- package/dist/itemThumbnail.d.ts +40 -0
- package/dist/itemThumbnail.js +116 -0
- package/dist/itemThumbnail.js.map +1 -0
- package/dist/lib.d.ts +571 -7
- package/dist/lib.js +1178 -15
- package/dist/lib.js.map +1 -1
- package/dist/looks.d.ts +103 -0
- package/dist/looks.js +102 -0
- package/dist/looks.js.map +1 -0
- package/dist/materials/availability.d.ts +8 -0
- package/dist/materials/availability.js +22 -0
- package/dist/materials/availability.js.map +1 -0
- package/dist/materials/identity.d.ts +30 -0
- package/dist/materials/identity.js +68 -0
- package/dist/materials/identity.js.map +1 -0
- package/dist/materials/pins.d.ts +23 -0
- package/dist/materials/pins.js +93 -0
- package/dist/materials/pins.js.map +1 -0
- package/dist/mesh/surfaceBvh.d.ts +13 -0
- package/dist/mesh/surfaceBvh.js +197 -0
- package/dist/mesh/surfaceBvh.js.map +1 -0
- package/dist/module-validation.d.ts +2 -0
- package/dist/module-validation.js +24 -0
- package/dist/module-validation.js.map +1 -0
- package/dist/money.d.ts +183 -0
- package/dist/money.js +299 -0
- package/dist/money.js.map +1 -0
- package/dist/npc/capture.d.ts +41 -0
- package/dist/npc/capture.js +99 -0
- package/dist/npc/capture.js.map +1 -0
- package/dist/npc/format.d.ts +2 -0
- package/dist/npc/format.js +102 -0
- package/dist/npc/format.js.map +1 -0
- package/dist/npc/inspect.d.ts +23 -0
- package/dist/npc/inspect.js +54 -0
- package/dist/npc/inspect.js.map +1 -0
- package/dist/npc/metrics.d.ts +132 -0
- package/dist/npc/metrics.js +214 -0
- package/dist/npc/metrics.js.map +1 -0
- package/dist/npc/session.d.ts +35 -0
- package/dist/npc/session.js +172 -0
- package/dist/npc/session.js.map +1 -0
- package/dist/pack/locomotionReference.d.ts +40 -0
- package/dist/pack/locomotionReference.js +132 -0
- package/dist/pack/locomotionReference.js.map +1 -0
- package/dist/pack/scaffold.d.ts +15 -0
- package/dist/pack/scaffold.js +144 -0
- package/dist/pack/scaffold.js.map +1 -0
- package/dist/pack/validate.d.ts +67 -0
- package/dist/pack/validate.js +317 -0
- package/dist/pack/validate.js.map +1 -0
- package/dist/package.d.ts +14 -1
- package/dist/package.js +106 -7
- package/dist/package.js.map +1 -1
- package/dist/paletteShowcase.d.ts +183 -0
- package/dist/paletteShowcase.js +454 -0
- package/dist/paletteShowcase.js.map +1 -0
- package/dist/paletteShowcaseProfiles.d.ts +112 -0
- package/dist/paletteShowcaseProfiles.js +121 -0
- package/dist/paletteShowcaseProfiles.js.map +1 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.js +11 -0
- package/dist/paths.js.map +1 -0
- package/dist/placementRequest.d.ts +37 -0
- package/dist/placementRequest.js +220 -0
- package/dist/placementRequest.js.map +1 -0
- package/dist/placements/assets.d.ts +7 -0
- package/dist/placements/assets.js +114 -0
- package/dist/placements/assets.js.map +1 -0
- package/dist/placements/attachFoliageLods.d.ts +4 -0
- package/dist/placements/attachFoliageLods.js +70 -0
- package/dist/placements/attachFoliageLods.js.map +1 -0
- package/dist/placements/attachImpostors.d.ts +3 -0
- package/dist/placements/attachImpostors.js +51 -0
- package/dist/placements/attachImpostors.js.map +1 -0
- package/dist/placements/authored.d.ts +11 -0
- package/dist/placements/authored.js +65 -0
- package/dist/placements/authored.js.map +1 -0
- package/dist/placements/bake.d.ts +2 -0
- package/dist/placements/bake.js +235 -0
- package/dist/placements/bake.js.map +1 -0
- package/dist/placements/captureHost.d.ts +4 -0
- package/dist/placements/captureHost.js +125 -0
- package/dist/placements/captureHost.js.map +1 -0
- package/dist/placements/foliageCapture.d.ts +2 -0
- package/dist/placements/foliageCapture.js +98 -0
- package/dist/placements/foliageCapture.js.map +1 -0
- package/dist/placements/foliageCards.d.ts +17 -0
- package/dist/placements/foliageCards.js +120 -0
- package/dist/placements/foliageCards.js.map +1 -0
- package/dist/placements/foliageLods.d.ts +8 -0
- package/dist/placements/foliageLods.js +240 -0
- package/dist/placements/foliageLods.js.map +1 -0
- package/dist/placements/foliageTexture.d.ts +4 -0
- package/dist/placements/foliageTexture.js +91 -0
- package/dist/placements/foliageTexture.js.map +1 -0
- package/dist/placements/impostorCapture.d.ts +2 -0
- package/dist/placements/impostorCapture.js +111 -0
- package/dist/placements/impostorCapture.js.map +1 -0
- package/dist/placements/impostors.d.ts +18 -0
- package/dist/placements/impostors.js +279 -0
- package/dist/placements/impostors.js.map +1 -0
- package/dist/placements/source.d.ts +53 -0
- package/dist/placements/source.js +111 -0
- package/dist/placements/source.js.map +1 -0
- package/dist/product.d.ts +84 -0
- package/dist/product.js +285 -0
- package/dist/product.js.map +1 -0
- package/dist/publications.d.ts +116 -0
- package/dist/publications.js +180 -0
- package/dist/publications.js.map +1 -0
- package/dist/publishDuplicateGuard.d.ts +92 -0
- package/dist/publishDuplicateGuard.js +128 -0
- package/dist/publishDuplicateGuard.js.map +1 -0
- package/dist/realizability.d.ts +36 -0
- package/dist/realizability.js +269 -0
- package/dist/realizability.js.map +1 -0
- package/dist/resolve.d.ts +7 -1
- package/dist/resolve.js +77 -11
- package/dist/resolve.js.map +1 -1
- package/dist/sceneElements/compiler.d.ts +21 -0
- package/dist/sceneElements/compiler.js +976 -0
- package/dist/sceneElements/compiler.js.map +1 -0
- package/dist/sceneElements/continuum.d.ts +54 -0
- package/dist/sceneElements/continuum.js +451 -0
- package/dist/sceneElements/continuum.js.map +1 -0
- package/dist/sceneElements/devices.d.ts +12 -0
- package/dist/sceneElements/devices.js +212 -0
- package/dist/sceneElements/devices.js.map +1 -0
- package/dist/sceneElements/meshCells.d.ts +49 -0
- package/dist/sceneElements/meshCells.js +174 -0
- package/dist/sceneElements/meshCells.js.map +1 -0
- package/dist/sceneElements/types.d.ts +261 -0
- package/dist/sceneElements/types.js +3 -0
- package/dist/sceneElements/types.js.map +1 -0
- package/dist/sceneHlod/approximate.d.ts +23 -0
- package/dist/sceneHlod/approximate.js +171 -0
- package/dist/sceneHlod/approximate.js.map +1 -0
- package/dist/sceneHlod/artifact.d.ts +3 -0
- package/dist/sceneHlod/artifact.js +29 -0
- package/dist/sceneHlod/artifact.js.map +1 -0
- package/dist/sceneHlod/bakeSurface.d.ts +2 -0
- package/dist/sceneHlod/bakeSurface.js +59 -0
- package/dist/sceneHlod/bakeSurface.js.map +1 -0
- package/dist/sceneHlod/basisEncoder.d.ts +3 -0
- package/dist/sceneHlod/basisEncoder.js +68 -0
- package/dist/sceneHlod/basisEncoder.js.map +1 -0
- package/dist/sceneHlod/cellArtifact.d.ts +17 -0
- package/dist/sceneHlod/cellArtifact.js +78 -0
- package/dist/sceneHlod/cellArtifact.js.map +1 -0
- package/dist/sceneHlod/commands.d.ts +2 -0
- package/dist/sceneHlod/commands.js +114 -0
- package/dist/sceneHlod/commands.js.map +1 -0
- package/dist/sceneHlod/complete.d.ts +78 -0
- package/dist/sceneHlod/complete.js +261 -0
- package/dist/sceneHlod/complete.js.map +1 -0
- package/dist/sceneHlod/completePrototype.d.ts +39 -0
- package/dist/sceneHlod/completePrototype.js +121 -0
- package/dist/sceneHlod/completePrototype.js.map +1 -0
- package/dist/sceneHlod/geometry.d.ts +6 -0
- package/dist/sceneHlod/geometry.js +101 -0
- package/dist/sceneHlod/geometry.js.map +1 -0
- package/dist/sceneHlod/imageSampling.d.ts +11 -0
- package/dist/sceneHlod/imageSampling.js +100 -0
- package/dist/sceneHlod/imageSampling.js.map +1 -0
- package/dist/sceneHlod/refinement.d.ts +46 -0
- package/dist/sceneHlod/refinement.js +204 -0
- package/dist/sceneHlod/refinement.js.map +1 -0
- package/dist/sceneHlod/scene.d.ts +80 -0
- package/dist/sceneHlod/scene.js +264 -0
- package/dist/sceneHlod/scene.js.map +1 -0
- package/dist/sceneHlod/sharedAtlas.d.ts +37 -0
- package/dist/sceneHlod/sharedAtlas.js +84 -0
- package/dist/sceneHlod/sharedAtlas.js.map +1 -0
- package/dist/sceneHlod/source.d.ts +17 -0
- package/dist/sceneHlod/source.js +241 -0
- package/dist/sceneHlod/source.js.map +1 -0
- package/dist/sceneHlod/textureCodec.d.ts +4 -0
- package/dist/sceneHlod/textureCodec.js +66 -0
- package/dist/sceneHlod/textureCodec.js.map +1 -0
- package/dist/sceneHlod/transfer.d.ts +8 -0
- package/dist/sceneHlod/transfer.js +147 -0
- package/dist/sceneHlod/transfer.js.map +1 -0
- package/dist/sceneHlod/types.d.ts +69 -0
- package/dist/sceneHlod/types.js +3 -0
- package/dist/sceneHlod/types.js.map +1 -0
- package/dist/sceneImport/archive.d.ts +30 -0
- package/dist/sceneImport/archive.js +336 -0
- package/dist/sceneImport/archive.js.map +1 -0
- package/dist/sceneImport/bistroMaterialBake.d.ts +20 -0
- package/dist/sceneImport/bistroMaterialBake.js +169 -0
- package/dist/sceneImport/bistroMaterialBake.js.map +1 -0
- package/dist/sceneImport/bistroTexturePlan.d.ts +6 -0
- package/dist/sceneImport/bistroTexturePlan.js +23 -0
- package/dist/sceneImport/bistroTexturePlan.js.map +1 -0
- package/dist/sceneImport/compiler.d.ts +36 -0
- package/dist/sceneImport/compiler.js +251 -0
- package/dist/sceneImport/compiler.js.map +1 -0
- package/dist/sceneImport/composeMounts.d.ts +159 -0
- package/dist/sceneImport/composeMounts.js +687 -0
- package/dist/sceneImport/composeMounts.js.map +1 -0
- package/dist/sceneImport/defaultMaterials.d.ts +45 -0
- package/dist/sceneImport/defaultMaterials.js +121 -0
- package/dist/sceneImport/defaultMaterials.js.map +1 -0
- package/dist/sceneImport/externalTextures.d.ts +44 -0
- package/dist/sceneImport/externalTextures.js +146 -0
- package/dist/sceneImport/externalTextures.js.map +1 -0
- package/dist/sceneImport/fbx.d.ts +101 -0
- package/dist/sceneImport/fbx.js +307 -0
- package/dist/sceneImport/fbx.js.map +1 -0
- package/dist/sceneImport/glbSplit.d.ts +24 -0
- package/dist/sceneImport/glbSplit.js +95 -0
- package/dist/sceneImport/glbSplit.js.map +1 -0
- package/dist/sceneImport/gltfIo.d.ts +32 -0
- package/dist/sceneImport/gltfIo.js +39 -0
- package/dist/sceneImport/gltfIo.js.map +1 -0
- package/dist/sceneImport/helsinkiTiles.d.ts +31 -0
- package/dist/sceneImport/helsinkiTiles.js +52 -0
- package/dist/sceneImport/helsinkiTiles.js.map +1 -0
- package/dist/sceneImport/materials/binding.d.ts +16 -0
- package/dist/sceneImport/materials/binding.js +42 -0
- package/dist/sceneImport/materials/binding.js.map +1 -0
- package/dist/sceneImport/materials/catalog.d.ts +36 -0
- package/dist/sceneImport/materials/catalog.js +233 -0
- package/dist/sceneImport/materials/catalog.js.map +1 -0
- package/dist/sceneImport/materials/index.d.ts +4 -0
- package/dist/sceneImport/materials/index.js +21 -0
- package/dist/sceneImport/materials/index.js.map +1 -0
- package/dist/sceneImport/materials/matcher.d.ts +33 -0
- package/dist/sceneImport/materials/matcher.js +127 -0
- package/dist/sceneImport/materials/matcher.js.map +1 -0
- package/dist/sceneImport/materials/recipe.d.ts +30 -0
- package/dist/sceneImport/materials/recipe.js +134 -0
- package/dist/sceneImport/materials/recipe.js.map +1 -0
- package/dist/sceneImport/multiAsset.d.ts +79 -0
- package/dist/sceneImport/multiAsset.js +535 -0
- package/dist/sceneImport/multiAsset.js.map +1 -0
- package/dist/sceneImport/multiAssetSpawn.d.ts +40 -0
- package/dist/sceneImport/multiAssetSpawn.js +98 -0
- package/dist/sceneImport/multiAssetSpawn.js.map +1 -0
- package/dist/sceneImport/obj.d.ts +41 -0
- package/dist/sceneImport/obj.js +276 -0
- package/dist/sceneImport/obj.js.map +1 -0
- package/dist/sceneImport/package.d.ts +104 -0
- package/dist/sceneImport/package.js +1004 -0
- package/dist/sceneImport/package.js.map +1 -0
- package/dist/sceneImport/packageReader.d.ts +10 -0
- package/dist/sceneImport/packageReader.js +250 -0
- package/dist/sceneImport/packageReader.js.map +1 -0
- package/dist/sceneImport/proxy.d.ts +100 -0
- package/dist/sceneImport/proxy.js +334 -0
- package/dist/sceneImport/proxy.js.map +1 -0
- package/dist/sceneImport/publish.d.ts +47 -0
- package/dist/sceneImport/publish.js +98 -0
- package/dist/sceneImport/publish.js.map +1 -0
- package/dist/sceneImport/semantic.d.ts +75 -0
- package/dist/sceneImport/semantic.js +296 -0
- package/dist/sceneImport/semantic.js.map +1 -0
- package/dist/sceneImport/spawnProbe.d.ts +55 -0
- package/dist/sceneImport/spawnProbe.js +159 -0
- package/dist/sceneImport/spawnProbe.js.map +1 -0
- package/dist/sceneImport/streamLayout.d.ts +96 -0
- package/dist/sceneImport/streamLayout.js +203 -0
- package/dist/sceneImport/streamLayout.js.map +1 -0
- package/dist/sceneImport/textureDecode.d.ts +21 -0
- package/dist/sceneImport/textureDecode.js +292 -0
- package/dist/sceneImport/textureDecode.js.map +1 -0
- package/dist/sceneImport/types.d.ts +84 -0
- package/dist/sceneImport/types.js +58 -0
- package/dist/sceneImport/types.js.map +1 -0
- package/dist/scenePerformance.d.ts +162 -0
- package/dist/scenePerformance.js +905 -0
- package/dist/scenePerformance.js.map +1 -0
- package/dist/screenshot/captureScreenshots.d.ts +36 -0
- package/dist/screenshot/captureScreenshots.js +229 -0
- package/dist/screenshot/captureScreenshots.js.map +1 -0
- package/dist/screenshot/encodeImagePreview.d.ts +5 -0
- package/dist/screenshot/encodeImagePreview.js +42 -0
- package/dist/screenshot/encodeImagePreview.js.map +1 -0
- package/dist/screenshot/publishThumbnail.d.ts +4 -0
- package/dist/screenshot/publishThumbnail.js +56 -0
- package/dist/screenshot/publishThumbnail.js.map +1 -0
- package/dist/screenshot/staticServe.d.ts +14 -0
- package/dist/screenshot/staticServe.js +120 -0
- package/dist/screenshot/staticServe.js.map +1 -0
- package/dist/source-archive.d.ts +101 -0
- package/dist/source-archive.js +309 -0
- package/dist/source-archive.js.map +1 -0
- package/dist/stdioBlocking.d.ts +1 -0
- package/dist/stdioBlocking.js +9 -0
- package/dist/stdioBlocking.js.map +1 -0
- package/dist/terrain/bake.d.ts +40 -0
- package/dist/terrain/bake.js +318 -0
- package/dist/terrain/bake.js.map +1 -0
- package/dist/terrain/generate.d.ts +21 -0
- package/dist/terrain/generate.js +239 -0
- package/dist/terrain/generate.js.map +1 -0
- package/dist/terrain/grid.d.ts +48 -0
- package/dist/terrain/grid.js +133 -0
- package/dist/terrain/grid.js.map +1 -0
- package/dist/terrain/import.d.ts +40 -0
- package/dist/terrain/import.js +252 -0
- package/dist/terrain/import.js.map +1 -0
- package/dist/terrain/index.d.ts +11 -0
- package/dist/terrain/index.js +88 -0
- package/dist/terrain/index.js.map +1 -0
- package/dist/terrain/inspect.d.ts +35 -0
- package/dist/terrain/inspect.js +115 -0
- package/dist/terrain/inspect.js.map +1 -0
- package/dist/terrain/island.d.ts +31 -0
- package/dist/terrain/island.js +128 -0
- package/dist/terrain/island.js.map +1 -0
- package/dist/terrain/noise.d.ts +79 -0
- package/dist/terrain/noise.js +162 -0
- package/dist/terrain/noise.js.map +1 -0
- package/dist/terrain/normals.d.ts +21 -0
- package/dist/terrain/normals.js +55 -0
- package/dist/terrain/normals.js.map +1 -0
- package/dist/terrain/presets/alpine.json +20 -0
- package/dist/terrain/presets/coast.json +20 -0
- package/dist/terrain/presets/desert.json +22 -0
- package/dist/terrain/presets/forest.json +20 -0
- package/dist/terrain/presets/meadow.json +20 -0
- package/dist/terrain/presets/volcanic.json +22 -0
- package/dist/terrain/presets.d.ts +29 -0
- package/dist/terrain/presets.js +128 -0
- package/dist/terrain/presets.js.map +1 -0
- package/dist/terrain/source.d.ts +42 -0
- package/dist/terrain/source.js +241 -0
- package/dist/terrain/source.js.map +1 -0
- package/dist/terrain/tile.d.ts +92 -0
- package/dist/terrain/tile.js +268 -0
- package/dist/terrain/tile.js.map +1 -0
- package/dist/textureAudit.d.ts +23 -0
- package/dist/textureAudit.js +192 -0
- package/dist/textureAudit.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/unreal/avatarMode.d.ts +21 -0
- package/dist/unreal/avatarMode.js +33 -0
- package/dist/unreal/avatarMode.js.map +1 -0
- package/dist/unreal/delivery.d.ts +46 -0
- package/dist/unreal/delivery.js +89 -0
- package/dist/unreal/delivery.js.map +1 -0
- package/dist/unreal/doctor.d.ts +50 -0
- package/dist/unreal/doctor.js +102 -0
- package/dist/unreal/doctor.js.map +1 -0
- package/dist/unreal/package.d.ts +80 -0
- package/dist/unreal/package.js +273 -0
- package/dist/unreal/package.js.map +1 -0
- package/dist/unreal/release.d.ts +41 -0
- package/dist/unreal/release.js +122 -0
- package/dist/unreal/release.js.map +1 -0
- package/dist/unreal.d.ts +30 -0
- package/dist/unreal.js +362 -0
- package/dist/unreal.js.map +1 -0
- package/dist/unrealCandidate.d.ts +213 -0
- package/dist/unrealCandidate.js +765 -0
- package/dist/unrealCandidate.js.map +1 -0
- package/dist/unrealManifest.d.ts +74 -0
- package/dist/unrealManifest.js +354 -0
- package/dist/unrealManifest.js.map +1 -0
- package/dist/unrealPublish.d.ts +111 -0
- package/dist/unrealPublish.js +331 -0
- package/dist/unrealPublish.js.map +1 -0
- package/dist/vault.d.ts +121 -0
- package/dist/vault.js +136 -0
- package/dist/vault.js.map +1 -0
- package/dist/vehicle/addOnDefinition.d.ts +19 -0
- package/dist/vehicle/addOnDefinition.js +21 -0
- package/dist/vehicle/addOnDefinition.js.map +1 -0
- package/dist/vehicle/addon.d.ts +158 -0
- package/dist/vehicle/addon.js +441 -0
- package/dist/vehicle/addon.js.map +1 -0
- package/dist/vehicle/addonDefinitionGuard.d.ts +53 -0
- package/dist/vehicle/addonDefinitionGuard.js +206 -0
- package/dist/vehicle/addonDefinitionGuard.js.map +1 -0
- package/dist/vehicle/addonPublished.d.ts +80 -0
- package/dist/vehicle/addonPublished.js +221 -0
- package/dist/vehicle/addonPublished.js.map +1 -0
- package/dist/vehicle/audio.d.ts +259 -0
- package/dist/vehicle/audio.js +1069 -0
- package/dist/vehicle/audio.js.map +1 -0
- package/dist/vehicle/audioDefects.d.ts +125 -0
- package/dist/vehicle/audioDefects.js +591 -0
- package/dist/vehicle/audioDefects.js.map +1 -0
- package/dist/vehicle/audioDistinct.d.ts +62 -0
- package/dist/vehicle/audioDistinct.js +479 -0
- package/dist/vehicle/audioDistinct.js.map +1 -0
- package/dist/vehicle/audioImport.d.ts +217 -0
- package/dist/vehicle/audioImport.js +610 -0
- package/dist/vehicle/audioImport.js.map +1 -0
- package/dist/vehicle/audioProvenance.d.ts +47 -0
- package/dist/vehicle/audioProvenance.js +364 -0
- package/dist/vehicle/audioProvenance.js.map +1 -0
- package/dist/vehicle/audioReference.d.ts +36 -0
- package/dist/vehicle/audioReference.js +176 -0
- package/dist/vehicle/audioReference.js.map +1 -0
- package/dist/vehicle/audioSlots.d.ts +27 -0
- package/dist/vehicle/audioSlots.js +43 -0
- package/dist/vehicle/audioSlots.js.map +1 -0
- package/dist/vehicle/audioSpectral.d.ts +71 -0
- package/dist/vehicle/audioSpectral.js +534 -0
- package/dist/vehicle/audioSpectral.js.map +1 -0
- package/dist/vehicle/cabinCheck.d.ts +209 -0
- package/dist/vehicle/cabinCheck.js +799 -0
- package/dist/vehicle/cabinCheck.js.map +1 -0
- package/dist/vehicle/drive.d.ts +66 -0
- package/dist/vehicle/drive.js +228 -0
- package/dist/vehicle/drive.js.map +1 -0
- package/dist/vehicle/enginePolicy.d.ts +68 -0
- package/dist/vehicle/enginePolicy.js +209 -0
- package/dist/vehicle/enginePolicy.js.map +1 -0
- package/dist/vehicle/hostFrame.d.ts +78 -0
- package/dist/vehicle/hostFrame.js +136 -0
- package/dist/vehicle/hostFrame.js.map +1 -0
- package/dist/vehicle/inspectionSheets.d.ts +42 -0
- package/dist/vehicle/inspectionSheets.js +173 -0
- package/dist/vehicle/inspectionSheets.js.map +1 -0
- package/dist/vehicle/keyboardLaunch.d.ts +189 -0
- package/dist/vehicle/keyboardLaunch.js +340 -0
- package/dist/vehicle/keyboardLaunch.js.map +1 -0
- package/dist/vehicle/lampCoverage.d.ts +49 -0
- package/dist/vehicle/lampCoverage.js +252 -0
- package/dist/vehicle/lampCoverage.js.map +1 -0
- package/dist/vehicle/mintAddOn.d.ts +110 -0
- package/dist/vehicle/mintAddOn.js +321 -0
- package/dist/vehicle/mintAddOn.js.map +1 -0
- package/dist/vehicle/mintVehicle.d.ts +189 -0
- package/dist/vehicle/mintVehicle.js +417 -0
- package/dist/vehicle/mintVehicle.js.map +1 -0
- package/dist/vehicle/paintHue.d.ts +89 -0
- package/dist/vehicle/paintHue.js +248 -0
- package/dist/vehicle/paintHue.js.map +1 -0
- package/dist/vehicle/panelCoverage.d.ts +37 -0
- package/dist/vehicle/panelCoverage.js +93 -0
- package/dist/vehicle/panelCoverage.js.map +1 -0
- package/dist/vehicle/platform.d.ts +71 -0
- package/dist/vehicle/platform.js +144 -0
- package/dist/vehicle/platform.js.map +1 -0
- package/dist/vehicle/preview.d.ts +339 -0
- package/dist/vehicle/preview.js +854 -0
- package/dist/vehicle/preview.js.map +1 -0
- package/dist/vehicle/previewAddon.d.ts +197 -0
- package/dist/vehicle/previewAddon.js +520 -0
- package/dist/vehicle/previewAddon.js.map +1 -0
- package/dist/vehicle/previewSeats.d.ts +102 -0
- package/dist/vehicle/previewSeats.js +190 -0
- package/dist/vehicle/previewSeats.js.map +1 -0
- package/dist/vehicle/publish.d.ts +78 -0
- package/dist/vehicle/publish.js +111 -0
- package/dist/vehicle/publish.js.map +1 -0
- package/dist/vehicle/recheckListed.d.ts +87 -0
- package/dist/vehicle/recheckListed.js +200 -0
- package/dist/vehicle/recheckListed.js.map +1 -0
- package/dist/vehicle/renditionManifest.d.ts +10 -0
- package/dist/vehicle/renditionManifest.js +56 -0
- package/dist/vehicle/renditionManifest.js.map +1 -0
- package/dist/vehicle/sealCheck.d.ts +30 -0
- package/dist/vehicle/sealCheck.js +59 -0
- package/dist/vehicle/sealCheck.js.map +1 -0
- package/dist/vehicle/simulate.d.ts +219 -0
- package/dist/vehicle/simulate.js +536 -0
- package/dist/vehicle/simulate.js.map +1 -0
- package/dist/vehicle/simulateRuntime.d.ts +76 -0
- package/dist/vehicle/simulateRuntime.js +252 -0
- package/dist/vehicle/simulateRuntime.js.map +1 -0
- package/dist/vehicle/testutil/sourcedAudio.d.ts +13 -0
- package/dist/vehicle/testutil/sourcedAudio.js +96 -0
- package/dist/vehicle/testutil/sourcedAudio.js.map +1 -0
- package/dist/vehicle/validate.d.ts +225 -0
- package/dist/vehicle/validate.js +956 -0
- package/dist/vehicle/validate.js.map +1 -0
- package/dist/vehicle/wheelDesign.d.ts +98 -0
- package/dist/vehicle/wheelDesign.js +276 -0
- package/dist/vehicle/wheelDesign.js.map +1 -0
- package/dist/verifySubPath.d.ts +69 -0
- package/dist/verifySubPath.js +458 -0
- package/dist/verifySubPath.js.map +1 -0
- package/dist/visualQa/animation.d.ts +57 -0
- package/dist/visualQa/animation.js +503 -0
- package/dist/visualQa/animation.js.map +1 -0
- package/dist/visualQa/avatar.d.ts +3 -0
- package/dist/visualQa/avatar.js +443 -0
- package/dist/visualQa/avatar.js.map +1 -0
- package/dist/visualQa/avatarMath.d.ts +180 -0
- package/dist/visualQa/avatarMath.js +318 -0
- package/dist/visualQa/avatarMath.js.map +1 -0
- package/dist/visualQa/avatarPreview.d.ts +26 -0
- package/dist/visualQa/avatarPreview.js +167 -0
- package/dist/visualQa/avatarPreview.js.map +1 -0
- package/dist/visualQa/avatarPreviewMath.d.ts +189 -0
- package/dist/visualQa/avatarPreviewMath.js +696 -0
- package/dist/visualQa/avatarPreviewMath.js.map +1 -0
- package/dist/visualQa/avatarPreviewProbe.d.ts +7 -0
- package/dist/visualQa/avatarPreviewProbe.js +181 -0
- package/dist/visualQa/avatarPreviewProbe.js.map +1 -0
- package/dist/visualQa/avatarProbe.d.ts +1 -0
- package/dist/visualQa/avatarProbe.js +264 -0
- package/dist/visualQa/avatarProbe.js.map +1 -0
- package/dist/visualQa/browser.d.ts +116 -0
- package/dist/visualQa/browser.js +817 -0
- package/dist/visualQa/browser.js.map +1 -0
- package/dist/visualQa/candidate.d.ts +116 -0
- package/dist/visualQa/candidate.js +265 -0
- package/dist/visualQa/candidate.js.map +1 -0
- package/dist/visualQa/checklists.d.ts +31 -0
- package/dist/visualQa/checklists.js +160 -0
- package/dist/visualQa/checklists.js.map +1 -0
- package/dist/visualQa/command.d.ts +110 -0
- package/dist/visualQa/command.js +521 -0
- package/dist/visualQa/command.js.map +1 -0
- package/dist/visualQa/commonAsserts.d.ts +68 -0
- package/dist/visualQa/commonAsserts.js +239 -0
- package/dist/visualQa/commonAsserts.js.map +1 -0
- package/dist/visualQa/contactSheet.d.ts +32 -0
- package/dist/visualQa/contactSheet.js +153 -0
- package/dist/visualQa/contactSheet.js.map +1 -0
- package/dist/visualQa/critic.d.ts +18 -0
- package/dist/visualQa/critic.js +179 -0
- package/dist/visualQa/critic.js.map +1 -0
- package/dist/visualQa/emotePage.d.ts +10 -0
- package/dist/visualQa/emotePage.js +249 -0
- package/dist/visualQa/emotePage.js.map +1 -0
- package/dist/visualQa/evidenceOverlay.d.ts +74 -0
- package/dist/visualQa/evidenceOverlay.js +268 -0
- package/dist/visualQa/evidenceOverlay.js.map +1 -0
- package/dist/visualQa/harness.d.ts +57 -0
- package/dist/visualQa/harness.js +3 -0
- package/dist/visualQa/harness.js.map +1 -0
- package/dist/visualQa/hosted.d.ts +152 -0
- package/dist/visualQa/hosted.js +367 -0
- package/dist/visualQa/hosted.js.map +1 -0
- package/dist/visualQa/labelLimit.d.ts +12 -0
- package/dist/visualQa/labelLimit.js +31 -0
- package/dist/visualQa/labelLimit.js.map +1 -0
- package/dist/visualQa/mirror.d.ts +36 -0
- package/dist/visualQa/mirror.js +98 -0
- package/dist/visualQa/mirror.js.map +1 -0
- package/dist/visualQa/moveUx.d.ts +44 -0
- package/dist/visualQa/moveUx.js +103 -0
- package/dist/visualQa/moveUx.js.map +1 -0
- package/dist/visualQa/pinnedChrome.d.ts +63 -0
- package/dist/visualQa/pinnedChrome.js +214 -0
- package/dist/visualQa/pinnedChrome.js.map +1 -0
- package/dist/visualQa/resolve.d.ts +88 -0
- package/dist/visualQa/resolve.js +248 -0
- package/dist/visualQa/resolve.js.map +1 -0
- package/dist/visualQa/scene.d.ts +14 -0
- package/dist/visualQa/scene.js +688 -0
- package/dist/visualQa/scene.js.map +1 -0
- package/dist/visualQa/shot.d.ts +2 -0
- package/dist/visualQa/shot.js +27 -0
- package/dist/visualQa/shot.js.map +1 -0
- package/dist/visualQa/signIn.d.ts +35 -0
- package/dist/visualQa/signIn.js +144 -0
- package/dist/visualQa/signIn.js.map +1 -0
- package/dist/visualQa/submitBudget.d.ts +25 -0
- package/dist/visualQa/submitBudget.js +82 -0
- package/dist/visualQa/submitBudget.js.map +1 -0
- package/dist/visualQa/types.d.ts +195 -0
- package/dist/visualQa/types.js +12 -0
- package/dist/visualQa/types.js.map +1 -0
- package/dist/visualQa/vehicle.d.ts +130 -0
- package/dist/visualQa/vehicle.js +2002 -0
- package/dist/visualQa/vehicle.js.map +1 -0
- package/dist/visualQa/vehicleAddonProbe.d.ts +1 -0
- package/dist/visualQa/vehicleAddonProbe.js +115 -0
- package/dist/visualQa/vehicleAddonProbe.js.map +1 -0
- package/dist/visualQa/vehicleCabinFit.d.ts +78 -0
- package/dist/visualQa/vehicleCabinFit.js +55 -0
- package/dist/visualQa/vehicleCabinFit.js.map +1 -0
- package/dist/visualQa/vehicleClearance.d.ts +135 -0
- package/dist/visualQa/vehicleClearance.js +299 -0
- package/dist/visualQa/vehicleClearance.js.map +1 -0
- package/dist/visualQa/vehicleDriveAlive.d.ts +55 -0
- package/dist/visualQa/vehicleDriveAlive.js +103 -0
- package/dist/visualQa/vehicleDriveAlive.js.map +1 -0
- package/dist/visualQa/vehicleGrip.d.ts +156 -0
- package/dist/visualQa/vehicleGrip.js +439 -0
- package/dist/visualQa/vehicleGrip.js.map +1 -0
- package/dist/visualQa/vehicleInspection.d.ts +70 -0
- package/dist/visualQa/vehicleInspection.js +318 -0
- package/dist/visualQa/vehicleInspection.js.map +1 -0
- package/dist/visualQa/vehicleLamps.d.ts +120 -0
- package/dist/visualQa/vehicleLamps.js +377 -0
- package/dist/visualQa/vehicleLamps.js.map +1 -0
- package/dist/visualQa/vehicleMath.d.ts +440 -0
- package/dist/visualQa/vehicleMath.js +967 -0
- package/dist/visualQa/vehicleMath.js.map +1 -0
- package/dist/visualQa/vehicleOccupants.d.ts +66 -0
- package/dist/visualQa/vehicleOccupants.js +448 -0
- package/dist/visualQa/vehicleOccupants.js.map +1 -0
- package/dist/visualQa/vehiclePenetration.d.ts +172 -0
- package/dist/visualQa/vehiclePenetration.js +1157 -0
- package/dist/visualQa/vehiclePenetration.js.map +1 -0
- package/dist/visualQa/vehiclePoses.d.ts +25 -0
- package/dist/visualQa/vehiclePoses.js +56 -0
- package/dist/visualQa/vehiclePoses.js.map +1 -0
- package/dist/visualQa/vehiclePosture.d.ts +78 -0
- package/dist/visualQa/vehiclePosture.js +263 -0
- package/dist/visualQa/vehiclePosture.js.map +1 -0
- package/dist/visualQa/vehiclePreview.d.ts +103 -0
- package/dist/visualQa/vehiclePreview.js +312 -0
- package/dist/visualQa/vehiclePreview.js.map +1 -0
- package/dist/visualQa/vehicleProbe.d.ts +3 -0
- package/dist/visualQa/vehicleProbe.js +670 -0
- package/dist/visualQa/vehicleProbe.js.map +1 -0
- package/dist/visualQa/vehicleStance.d.ts +108 -0
- package/dist/visualQa/vehicleStance.js +200 -0
- package/dist/visualQa/vehicleStance.js.map +1 -0
- package/dist/visualQa/viewer.d.ts +6 -0
- package/dist/visualQa/viewer.js +750 -0
- package/dist/visualQa/viewer.js.map +1 -0
- package/dist/visualQa/viewerGeometry.d.ts +116 -0
- package/dist/visualQa/viewerGeometry.js +476 -0
- package/dist/visualQa/viewerGeometry.js.map +1 -0
- package/dist/visualQa/viewerPage.d.ts +11 -0
- package/dist/visualQa/viewerPage.js +414 -0
- package/dist/visualQa/viewerPage.js.map +1 -0
- package/dist/visualQa/webgpuSelfTest.d.ts +52 -0
- package/dist/visualQa/webgpuSelfTest.js +113 -0
- package/dist/visualQa/webgpuSelfTest.js.map +1 -0
- package/dist/visualQa/winChrome.d.ts +92 -0
- package/dist/visualQa/winChrome.js +445 -0
- package/dist/visualQa/winChrome.js.map +1 -0
- package/dist/visualQa/worldWalk.d.ts +59 -0
- package/dist/visualQa/worldWalk.js +523 -0
- package/dist/visualQa/worldWalk.js.map +1 -0
- package/dist/visualQa/worldWalkMath.d.ts +263 -0
- package/dist/visualQa/worldWalkMath.js +873 -0
- package/dist/visualQa/worldWalkMath.js.map +1 -0
- package/dist/visualQa/worldWalkProbe.d.ts +1 -0
- package/dist/visualQa/worldWalkProbe.js +206 -0
- package/dist/visualQa/worldWalkProbe.js.map +1 -0
- package/dist/visualsConfig.d.ts +65 -0
- package/dist/visualsConfig.js +1333 -0
- package/dist/visualsConfig.js.map +1 -0
- package/dist/voiceCommand.d.ts +11 -0
- package/dist/voiceCommand.js +101 -0
- package/dist/voiceCommand.js.map +1 -0
- package/dist/world/analyze.d.ts +51 -0
- package/dist/world/analyze.js +767 -0
- package/dist/world/analyze.js.map +1 -0
- package/dist/world/baseline.d.ts +33 -0
- package/dist/world/baseline.js +111 -0
- package/dist/world/baseline.js.map +1 -0
- package/dist/world/canonicalize.d.ts +7 -0
- package/dist/world/canonicalize.js +110 -0
- package/dist/world/canonicalize.js.map +1 -0
- package/dist/world/diff.d.ts +18 -0
- package/dist/world/diff.js +58 -0
- package/dist/world/diff.js.map +1 -0
- package/dist/world/focus.d.ts +11 -0
- package/dist/world/focus.js +161 -0
- package/dist/world/focus.js.map +1 -0
- package/dist/world/format.d.ts +6 -0
- package/dist/world/format.js +125 -0
- package/dist/world/format.js.map +1 -0
- package/dist/world/readWorldMetrics.d.ts +10 -0
- package/dist/world/readWorldMetrics.js +31 -0
- package/dist/world/readWorldMetrics.js.map +1 -0
- package/dist/world/snapshotTypes.d.ts +59 -0
- package/dist/world/snapshotTypes.js +8 -0
- package/dist/world/snapshotTypes.js.map +1 -0
- package/dist/world/snapshotWorld.d.ts +16 -0
- package/dist/world/snapshotWorld.js +142 -0
- package/dist/world/snapshotWorld.js.map +1 -0
- package/dist/world/wiring.d.ts +21 -0
- package/dist/world/wiring.js +73 -0
- package/dist/world/wiring.js.map +1 -0
- package/dist/world/zones.d.ts +23 -0
- package/dist/world/zones.js +134 -0
- package/dist/world/zones.js.map +1 -0
- package/docs/bridge.md +304 -0
- package/docs/device-hand-reach.md +44 -0
- package/docs/scene-hlod.md +139 -0
- package/docs/vehicle-audio-import.md +299 -0
- package/docs/vehicle-simulate.md +165 -0
- package/docs/visual-qa-candidate-versions.md +71 -0
- package/docs/visual-qa.md +462 -0
- package/package.json +69 -4
- package/plugins/beamng-vehicle/README.md +129 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/beamng-vehicle.mjs +1295 -0
- package/plugins/beamng-vehicle/bin/beamng_abs.py +408 -0
- package/plugins/beamng-vehicle/bin/beamng_audio.py +394 -0
- package/plugins/beamng-vehicle/bin/beamng_engine.py +184 -0
- package/plugins/beamng-vehicle/bin/beamng_expression.py +373 -0
- package/plugins/beamng-vehicle/bin/beamng_jbeam.py +858 -0
- package/plugins/beamng-vehicle/bin/beamng_materials.py +261 -0
- package/plugins/beamng-vehicle/bin/beamng_stock_events.py +171 -0
- package/plugins/beamng-vehicle/bin/convert-beamng.py +1563 -0
- package/plugins/beamng-vehicle/bin/fmod_studio.py +524 -0
- package/plugins/beamng-vehicle/bin/fsb5.py +304 -0
- package/plugins/beamng-vehicle/bin/index-beamng-common.mjs +16 -0
- package/plugins/beamng-vehicle/bin/index-beamng.py +69 -0
- package/plugins/beamng-vehicle/bin/lower-beamng.py +2399 -0
- package/plugins/beamng-vehicle/bin/sim_audio.py +250 -0
- package/plugins/beamng-vehicle/bin/sim_audio_ac.py +378 -0
- package/plugins/beamng-vehicle/bin/sim_audio_beamng.py +878 -0
- package/plugins/beamng-vehicle/bin/sim_audio_fixtures.py +287 -0
- package/plugins/beamng-vehicle/bin/sim_audio_import.py +135 -0
- package/plugins/beamng-vehicle/bin/test_beamng_engine.py +124 -0
- package/plugins/beamng-vehicle/bin/test_beamng_jbeam.py +383 -0
- package/plugins/beamng-vehicle/bin/test_beamng_precedence.py +134 -0
- package/plugins/beamng-vehicle/bin/test_sim_audio.py +249 -0
- package/plugins/beamng-vehicle/bridge-plugin.json +55 -0
- package/plugins/beamng-vehicle/controller-adapters/beamng-0.39.4-abs.json +52 -0
- package/plugins/beamng-vehicle/lib/common-dependency.mjs +357 -0
- package/plugins/beamng-vehicle/lib/dae-scan.mjs +40 -0
- package/plugins/beamng-vehicle/lib/file-identity.mjs +46 -0
- package/plugins/beamng-vehicle/lib/material-semantics.mjs +312 -0
- package/plugins/beamng-vehicle/lib/palette-contract.mjs +6 -0
- package/plugins/beamng-vehicle/lib/vehicle-qa.mjs +567 -0
- package/plugins/beamng-vehicle/lib/vehicle-source.mjs +247 -0
- package/plugins/beamng-vehicle/profiles/source-compatibility.json +14 -0
- package/plugins/beamng-vehicle/vendor/vehicle-package-v2.mjs +6451 -0
- package/vendor/README.md +63 -0
- package/vendor/ability-manifest.mjs +527 -6
- package/vendor/audits/asset-credits.mjs +96 -0
- package/vendor/audits/check-loaders.mjs +80 -0
- package/vendor/audits/perf-gate.mjs +759 -0
- package/vendor/audits/prove-live.mjs +307 -0
- package/vendor/audits/source-audit.mjs +530 -0
- package/vendor/audits/world-audit.mjs +439 -0
- package/vendor/capture-body.glb +0 -0
- package/vendor/capture-face.glb +0 -0
- package/vendor/installed-index.mjs +1 -1
- package/vendor/vehicle-package-v2.mjs +6451 -0
package/dist/lib.js
CHANGED
|
@@ -34,11 +34,62 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
return result;
|
|
35
35
|
};
|
|
36
36
|
})();
|
|
37
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
38
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
39
|
+
};
|
|
37
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.
|
|
41
|
+
exports.compileSceneElements = exports.cs2 = exports.terrain = exports.labelModuleValidationErrors = exports.updateInteractable = exports.subtractInteractableContribution = exports.parseInteractablePosition = exports.namespaceInteractableFragment = exports.moduleInteractableFragment = exports.instanceOrdinalOf = exports.interactableModuleId = exports.composeInteractableManifest = exports.composeInteractableModuleManifest = exports.addInteractable = exports.frozenBuildArtifactKey = exports.freezeBuildDraft = exports.createPrivateBuildDraft = exports.PRIVATE_BUILD_DRAFT_SCHEMA = exports.checkPackageBundle = exports.MULTIPLAYER_CONFIG_FILENAME = exports.multiplayerConfigBundleFile = exports.PLATFORM_THREE_VERSION = exports.tiledTerrainBakedLightingWarning = exports.checkBundle = exports.validateDeviceProject = exports.testDeviceProject = exports.readDeviceGlbNodeNames = exports.createDeviceProject = exports.DEVICE_FILENAME = exports.placementsContinuum = exports.placementsBundle = exports.inspectPlacementsBake = exports.readPlacementsBake = exports.attachTreeImpostors = exports.bakeTreeImpostors = exports.bakePlacements = exports.publicRequester = exports.formatPublishedVerdict = exports.formatHostAddOns = exports.checkPublishedAddOn = exports.checkHostAddOns = exports.uploadToTicket = exports.HelixApi = exports.ApiError = exports.PLACEMENT_REQUEST_FILENAME = exports.writePlacementRequest = exports.placementRequestBundleFile = exports.validatePlacementRequest = exports.createPlacementRequest = exports.WORLD_THUMBNAIL_PUBLICATION_VERSION = void 0;
|
|
42
|
+
exports.buildItemDistribution = exports.ITEM_EDITION_MODES = exports.ITEM_DISTRIBUTION_CHANNELS = exports.DISTRIBUTION_KEY_PATTERN = exports.renderCcSlotTable = exports.renderCcGenderList = exports.parseTags = exports.parseGenders = exports.parseJsonOrFile = exports.parseJsonObjectOrFile = exports.parseJsonArrayOrFile = exports.normalizeItemKind = exports.meshContentTypeFromExtension = exports.CLIP_SET_SLOT_TYPES = exports.isCcWearableSlot = exports.isCcGender = exports.ccSlotIsRequiredForKind = exports.ccSlotIsAllowedForKind = exports.ccGendersAreRequiredForKind = exports.ccGendersAreAllowedForKind = exports.CC_WEARABLE_SLOT_GROUPS = exports.CC_WEARABLE_SLOTS = exports.CC_GENDERS = exports.assertLooksLikeGlb = exports.assertCcSlot = exports.assertCcGenders = exports.SOURCE_MAX_BYTES = exports.SOURCE_HARD_EXCLUDES = exports.SOURCE_CONTENT_TYPE = exports.SOURCE_ARCHIVE_FILENAME = exports.parseGitignore = exports.isSourceExcluded = exports.formatArchiveSize = exports.createSourceArchive = exports.collectSourceFiles = exports.formatScenePerformanceReport = exports.analyzeScenePerformance = exports.importSourceSceneMap = exports.SOURCE_SCENE_IMPORT_BUDGETS = exports.NATIVE_SCENE_CONVERSION_CONFIDENCE = exports.matchCanonicalMaterial = exports.createSharedMaterialBinding = exports.buildMaterialPackageRecipe = exports.buildMaterialBulkRecipe = exports.MATERIAL_REVIEW_CONFIDENCE = exports.MATERIAL_AUTO_REPLACE_CONFIDENCE = exports.HELIX_OFFICIAL_MATERIAL_SUBSET = exports.compileContinuumScenePackage = exports.CONTINUUM_SCENE_DOCUMENT_MEDIA_TYPE = exports.compileSceneElementsBundle = void 0;
|
|
43
|
+
exports.assessThreeCurrency = exports.assessPlatformDelivery = exports.assessInteractables = exports.enginePinOverrideLogPath = exports.detectExactEnginePins = exports.ALLOW_EXACT_ENGINE_PIN_FLAG = exports.WORLD_MANIFEST_LOCATIONS = exports.MODULES_DIR = exports.LOCKFILE = exports.INSTALLED_INDEX = exports.installWorld = exports.resolvePins = exports.validateAssetPackConstraints = exports.normalizePinRange = exports.loadInstalledIndexValidator = exports.loadVendoredValidator = exports.installLocalAbility = exports.checkAbilityBundle = exports.productTypeGrantsItem = exports.isProductKey = exports.buildProductUpdate = exports.buildProductRegistration = exports.WORLD_PRODUCT_TYPES = exports.PRODUCT_TITLE_MAX = exports.PRODUCT_KEY_PATTERN = exports.PRODUCT_KEY_MAX = exports.PRODUCT_DESCRIPTION_MAX = exports.MAX_PASS_DURATION_SECONDS = exports.MAX_GRANT_ITEM_QUANTITY = exports.MAX_GRANT_EFFECTS = exports.MAX_GRANT_CURRENCY_AMOUNT = exports.GRANT_CODE_PATTERN = exports.GRANT_CODE_MAX = exports.resolveUnlockMode = exports.isAchievementKey = exports.iconContentTypeFromExtension = exports.formatAchievementCriteria = exports.buildAchievementUpdate = exports.buildAchievementRegistration = exports.buildAchievementCriteria = exports.DATA_STORE_CRITERIA_KEY_TEMPLATES = exports.ACHIEVEMENT_UNLOCK_MODES = exports.ACHIEVEMENT_TROPHY_MAX_BYTES = exports.ACHIEVEMENT_KEY_PATTERN = exports.ACHIEVEMENT_ICON_MAX_BYTES = exports.ACHIEVEMENT_CRITERIA_SIGNALS = exports.ACHIEVEMENT_CRITERIA_OPS = exports.ACHIEVEMENT_CRITERIA_METRICS = exports.editionFields = exports.buildItemDistributionUpdate = void 0;
|
|
44
|
+
exports.getVaultAsset = exports.getStandaloneAssetGenerationJob = exports.getDreamerAssetGenerationJob = exports.generateStandaloneAsset = exports.generateImage = exports.generateAudio = exports.generateAndPublishAssetFromReference = exports.generateAndPublishAsset = exports.formatStrandedJob = exports.extensionFor = exports.describeGateAdvance = exports.approveDreamerGate = exports.DEFAULT_MOUNT_PREFIX = exports.formatSubPathResult = exports.verifySubPath = exports.roundLix = exports.receiptLix = exports.formatWaitState = exports.formatReceipt = exports.formatLix = exports.formatQuote = exports.formatBalance = exports.normalizeQuote = exports.quoteGeneration = exports.formatJobs = exports.listJobs = exports.getLixBalance = exports.TICK_NODE_CEILING = exports.renderRealizabilityRefusal = exports.registryRealizabilityDeps = exports.checkRealizability = exports.initAbilityTemplate = exports.slugify = exports.initTemplate = exports.defaultClientTokenName = exports.browserLogin = exports.jwtExpiresAtIso = exports.clearCredentials = exports.saveCredentials = exports.loadCredentials = exports.HELIX_SCOPE = exports.HELIX_ENV = exports.DEFAULT_WEB_URL = exports.DEFAULT_API_URL = exports.credsEnvMismatchWarning = exports.apiUrlMatchesEnv = exports.ADVISORY_SYSTEMS = exports.assessWorldCurrency = exports.assessWeaponPins = exports.assessVaultAssets = void 0;
|
|
45
|
+
exports.formatWorldInspection = exports.sortFindings = exports.analyzeWorld = exports.validateUnrealProject = exports.packageUnrealProject = exports.initUnrealManifest = exports.HELIX_UNREAL_ENGINE_VERSION = exports.HELIX_UNREAL_CONTRACT_VERSION = exports.formatUnrealValidationReport = exports.uploadArtifact = exports.resolveWorldId = exports.renderPublishFailure = exports.publishUnrealBuild = exports.assertReceipt = exports.assertCreateResponseMatchesPlan = exports.assertClientDeliveryMatchesPlan = exports.verifyUnrealCandidate = exports.UnrealCandidateError = exports.planSharedRuntimePublish = exports.defaultIdempotencyKey = exports.candidateArtifactDigest = exports.auditCookScope = exports.clearMaterialPinCache = exports.platformMaterialTag = exports.parseVaultMaterialSearch = exports.parseContinuumCurrentVersion = exports.materialContinuumIdentity = exports.matchMaterialResolution = exports.materialResolutionOptions = exports.materialDefaultResolutionKey = exports.DEFAULT_RESOLUTION_KEY = exports.VAULT_ASSET_KINDS = exports.UnavailableCapabilityError = exports.updateVaultAssetMetadata = exports.startStandaloneAssetGeneration = exports.startDreamerAssetGenerationFromReference = exports.startDreamerAssetGeneration = exports.searchVaultAssets = exports.StrandedJobError = exports.saveGeneratedAsset = exports.reviseDreamerGate = exports.retryDreamerJob = exports.resumeAndPublishAsset = exports.resolveMaterial = exports.MATERIAL_RENDITION_SELECTIONS = exports.listMaterials = exports.listDreamerVoices = exports.installVaultAsset = exports.getVaultAssetVersions = exports.getVaultAssetUsage = void 0;
|
|
46
|
+
exports.bakeSharedHlodAtlas = exports.planSharedHlodAtlas = exports.approximateHlodGeometry = exports.bakeHlodSurface = exports.HLOD_BAKER_VERSION = exports.DEFAULT_HLOD_LAYER = exports.planSceneHlod = exports.tagSceneHlod = exports.inspectSceneHlod = exports.bakeSceneHlod = exports.attachFoliageLods = exports.bakeFoliageLods = exports.MAX_ITEM_THUMBNAIL_BYTES = exports.renderItemThumbnailResult = exports.describeThumbnailError = exports.setItemThumbnail = exports.refreshItemThumbnail = exports.DOCTOR_REPORT_SCHEMA = exports.findUProject = exports.locateEditorCmd = exports.runUnrealDoctor = exports.TOOLCHAIN_PACKAGES = exports.productsWorldPath = exports.CREATOR_WORLDS_PATH = exports.PRODUCTS_PATH = exports.ITEM_DISTRIBUTIONS_CREATOR_PATH = exports.ITEM_DISTRIBUTIONS_PATH = exports.achievementsWorldPath = exports.ITEMS_FROM_PACKAGE_PATH = exports.PUBLICATIONS_UPLOAD_PATH = exports.publishOwnedItemFromPackage = exports.makeItemFromPackage = exports.publishGlb = exports.SERVER_CREATION_PERMISSIONS = exports.WORLD_DESCRIPTION_MAX = exports.WORLD_METRICS_UNSUPPORTED = exports.BASELINE_FILENAME = exports.anchorOf = exports.parseBaseline = exports.buildBaseline = exports.applyBaseline = exports.canonicalizeSnapshot = exports.detectNpcWiring = exports.detectInspectWiring = exports.resolveFocus = exports.formatWorldFocus = exports.analyzeZones = exports.formatWorldDiff = exports.diffWorldSnapshots = exports.DEFAULT_REPORT = void 0;
|
|
47
|
+
exports.DEFAULT_HLOD_REFINEMENT_SETTINGS = exports.bakeSceneHlodRefinements = exports.DEFAULT_COMPLETE_HLOD_SETTINGS = exports.bakeCompleteSceneHlod = exports.writeSharedHlodMaterialGlb = exports.writeHlodCellGlb = void 0;
|
|
39
48
|
exports.importCharacter = importCharacter;
|
|
49
|
+
exports.captureScreenshots = captureScreenshots;
|
|
50
|
+
exports.encodeImagePreview = encodeImagePreview;
|
|
51
|
+
exports.inspectGesture = inspectGesture;
|
|
52
|
+
exports.formatGestureInspection = formatGestureInspection;
|
|
53
|
+
exports.captureGesture = captureGesture;
|
|
54
|
+
exports.snapshotWorld = snapshotWorld;
|
|
55
|
+
exports.inspectNpc = inspectNpc;
|
|
56
|
+
exports.formatNpcInspection = formatNpcInspection;
|
|
57
|
+
exports.captureNpc = captureNpc;
|
|
58
|
+
exports.readWorldMetrics = readWorldMetrics;
|
|
59
|
+
exports.renderWorldMetricsText = renderWorldMetricsText;
|
|
60
|
+
exports.readAxisTable = readAxisTable;
|
|
40
61
|
exports.publishWorld = publishWorld;
|
|
62
|
+
exports.createWorld = createWorld;
|
|
63
|
+
exports.uploadWorldSource = uploadWorldSource;
|
|
64
|
+
exports.describeSourceFailure = describeSourceFailure;
|
|
65
|
+
exports.editSiteHost = editSiteHost;
|
|
66
|
+
exports.sourceOutcomeLine = sourceOutcomeLine;
|
|
67
|
+
exports.mediaContentTypeFromExtension = mediaContentTypeFromExtension;
|
|
68
|
+
exports.findBundleThumbnail = findBundleThumbnail;
|
|
69
|
+
exports.assertMediaSizeOk = assertMediaSizeOk;
|
|
70
|
+
exports.assertMediaSlotWritable = assertMediaSlotWritable;
|
|
71
|
+
exports.setWorldMedia = setWorldMedia;
|
|
72
|
+
exports.clearWorldMedia = clearWorldMedia;
|
|
73
|
+
exports.delistItem = delistItem;
|
|
74
|
+
exports.planAchievementRegistration = planAchievementRegistration;
|
|
75
|
+
exports.registerAchievement = registerAchievement;
|
|
76
|
+
exports.listAchievements = listAchievements;
|
|
77
|
+
exports.updateAchievement = updateAchievement;
|
|
78
|
+
exports.setAchievementIcon = setAchievementIcon;
|
|
79
|
+
exports.isClaimRoute = isClaimRoute;
|
|
80
|
+
exports.distributionCreatedHeadline = distributionCreatedHeadline;
|
|
81
|
+
exports.createItemDistribution = createItemDistribution;
|
|
82
|
+
exports.listItemDistributions = listItemDistributions;
|
|
83
|
+
exports.updateItemDistribution = updateItemDistribution;
|
|
84
|
+
exports.disableItemDistribution = disableItemDistribution;
|
|
85
|
+
exports.planProductRegistration = planProductRegistration;
|
|
86
|
+
exports.registerProduct = registerProduct;
|
|
87
|
+
exports.listProducts = listProducts;
|
|
88
|
+
exports.listProductWorlds = listProductWorlds;
|
|
89
|
+
exports.updateProduct = updateProduct;
|
|
90
|
+
exports.setProductActive = setProductActive;
|
|
41
91
|
exports.publishPackage = publishPackage;
|
|
92
|
+
exports.publishInteractable = publishInteractable;
|
|
42
93
|
exports.listPackages = listPackages;
|
|
43
94
|
exports.getPackageManifest = getPackageManifest;
|
|
44
95
|
exports.authStatus = authStatus;
|
|
@@ -51,23 +102,214 @@ exports.cliVersion = cliVersion;
|
|
|
51
102
|
exports.latestOnNpm = latestOnNpm;
|
|
52
103
|
exports.installHint = installHint;
|
|
53
104
|
exports.checkForUpdates = checkForUpdates;
|
|
105
|
+
const helix_manifest_1 = require("@hypersoniclabs/helix-manifest");
|
|
106
|
+
const publishThumbnail_1 = require("./screenshot/publishThumbnail");
|
|
107
|
+
var publishThumbnail_2 = require("./screenshot/publishThumbnail");
|
|
108
|
+
Object.defineProperty(exports, "WORLD_THUMBNAIL_PUBLICATION_VERSION", { enumerable: true, get: function () { return publishThumbnail_2.WORLD_THUMBNAIL_PUBLICATION_VERSION; } });
|
|
54
109
|
const node_fs_1 = require("node:fs");
|
|
110
|
+
const node_crypto_1 = require("node:crypto");
|
|
111
|
+
const node_os_1 = require("node:os");
|
|
55
112
|
const node_path_1 = require("node:path");
|
|
56
113
|
const api_1 = require("./api");
|
|
114
|
+
const placementRequest_1 = require("./placementRequest");
|
|
115
|
+
var placementRequest_2 = require("./placementRequest");
|
|
116
|
+
Object.defineProperty(exports, "createPlacementRequest", { enumerable: true, get: function () { return placementRequest_2.createPlacementRequest; } });
|
|
117
|
+
Object.defineProperty(exports, "validatePlacementRequest", { enumerable: true, get: function () { return placementRequest_2.validatePlacementRequest; } });
|
|
118
|
+
Object.defineProperty(exports, "placementRequestBundleFile", { enumerable: true, get: function () { return placementRequest_2.placementRequestBundleFile; } });
|
|
119
|
+
Object.defineProperty(exports, "writePlacementRequest", { enumerable: true, get: function () { return placementRequest_2.writePlacementRequest; } });
|
|
120
|
+
Object.defineProperty(exports, "PLACEMENT_REQUEST_FILENAME", { enumerable: true, get: function () { return placementRequest_2.PLACEMENT_REQUEST_FILENAME; } });
|
|
57
121
|
const bundle_1 = require("./bundle");
|
|
58
122
|
const package_1 = require("./package");
|
|
123
|
+
/**
|
|
124
|
+
* The item kinds this process can judge before the upload.
|
|
125
|
+
*
|
|
126
|
+
* A kind absent here is not unchecked — the server checks every kind. It is
|
|
127
|
+
* only unchecked EARLY, which costs a round trip. Adding a kind here means
|
|
128
|
+
* mirroring its server ceilings in `avatarPreflight.ts`, and a mirror that
|
|
129
|
+
* guesses LOOSER numbers than the server is worse than no mirror at all: it
|
|
130
|
+
* prints confident green for a file that will be refused.
|
|
131
|
+
*/
|
|
132
|
+
const PREFLIGHT_KINDS = new Set([
|
|
133
|
+
'avatar',
|
|
134
|
+
'wearable',
|
|
135
|
+
'add_on',
|
|
136
|
+
'home_item',
|
|
137
|
+
'vehicle',
|
|
138
|
+
'weapon',
|
|
139
|
+
]);
|
|
59
140
|
const ability_1 = require("./ability");
|
|
141
|
+
const item_1 = require("./item");
|
|
142
|
+
const achievement_1 = require("./achievement");
|
|
143
|
+
const product_1 = require("./product");
|
|
144
|
+
const distribution_1 = require("./distribution");
|
|
60
145
|
const config_1 = require("./config");
|
|
146
|
+
const realizability_1 = require("./realizability");
|
|
147
|
+
const browserLogin_1 = require("./browserLogin");
|
|
148
|
+
const enginePins_1 = require("./enginePins");
|
|
149
|
+
const source_archive_1 = require("./source-archive");
|
|
61
150
|
var api_2 = require("./api");
|
|
62
151
|
Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return api_2.ApiError; } });
|
|
63
152
|
Object.defineProperty(exports, "HelixApi", { enumerable: true, get: function () { return api_2.HelixApi; } });
|
|
64
153
|
Object.defineProperty(exports, "uploadToTicket", { enumerable: true, get: function () { return api_2.uploadToTicket; } });
|
|
154
|
+
var addonPublished_1 = require("./vehicle/addonPublished");
|
|
155
|
+
Object.defineProperty(exports, "checkHostAddOns", { enumerable: true, get: function () { return addonPublished_1.checkHostAddOns; } });
|
|
156
|
+
Object.defineProperty(exports, "checkPublishedAddOn", { enumerable: true, get: function () { return addonPublished_1.checkPublishedAddOn; } });
|
|
157
|
+
Object.defineProperty(exports, "formatHostAddOns", { enumerable: true, get: function () { return addonPublished_1.formatHostAddOns; } });
|
|
158
|
+
Object.defineProperty(exports, "formatPublishedVerdict", { enumerable: true, get: function () { return addonPublished_1.formatPublishedVerdict; } });
|
|
159
|
+
Object.defineProperty(exports, "publicRequester", { enumerable: true, get: function () { return addonPublished_1.publicRequester; } });
|
|
160
|
+
var bake_1 = require("./placements/bake");
|
|
161
|
+
Object.defineProperty(exports, "bakePlacements", { enumerable: true, get: function () { return bake_1.bakePlacements; } });
|
|
162
|
+
var impostors_1 = require("./placements/impostors");
|
|
163
|
+
Object.defineProperty(exports, "bakeTreeImpostors", { enumerable: true, get: function () { return impostors_1.bakeTreeImpostors; } });
|
|
164
|
+
var attachImpostors_1 = require("./placements/attachImpostors");
|
|
165
|
+
Object.defineProperty(exports, "attachTreeImpostors", { enumerable: true, get: function () { return attachImpostors_1.attachTreeImpostors; } });
|
|
166
|
+
var source_1 = require("./placements/source");
|
|
167
|
+
Object.defineProperty(exports, "readPlacementsBake", { enumerable: true, get: function () { return source_1.readPlacementsBake; } });
|
|
168
|
+
Object.defineProperty(exports, "inspectPlacementsBake", { enumerable: true, get: function () { return source_1.inspectPlacementsBake; } });
|
|
169
|
+
Object.defineProperty(exports, "placementsBundle", { enumerable: true, get: function () { return source_1.placementsBundle; } });
|
|
170
|
+
Object.defineProperty(exports, "placementsContinuum", { enumerable: true, get: function () { return source_1.placementsContinuum; } });
|
|
171
|
+
var device_1 = require("./device");
|
|
172
|
+
Object.defineProperty(exports, "DEVICE_FILENAME", { enumerable: true, get: function () { return device_1.DEVICE_FILENAME; } });
|
|
173
|
+
Object.defineProperty(exports, "createDeviceProject", { enumerable: true, get: function () { return device_1.createDeviceProject; } });
|
|
174
|
+
Object.defineProperty(exports, "readDeviceGlbNodeNames", { enumerable: true, get: function () { return device_1.readDeviceGlbNodeNames; } });
|
|
175
|
+
Object.defineProperty(exports, "testDeviceProject", { enumerable: true, get: function () { return device_1.testDeviceProject; } });
|
|
176
|
+
Object.defineProperty(exports, "validateDeviceProject", { enumerable: true, get: function () { return device_1.validateDeviceProject; } });
|
|
65
177
|
var bundle_2 = require("./bundle");
|
|
66
178
|
Object.defineProperty(exports, "checkBundle", { enumerable: true, get: function () { return bundle_2.checkBundle; } });
|
|
179
|
+
Object.defineProperty(exports, "tiledTerrainBakedLightingWarning", { enumerable: true, get: function () { return bundle_2.tiledTerrainBakedLightingWarning; } });
|
|
180
|
+
Object.defineProperty(exports, "PLATFORM_THREE_VERSION", { enumerable: true, get: function () { return bundle_2.PLATFORM_THREE_VERSION; } });
|
|
67
181
|
Object.defineProperty(exports, "multiplayerConfigBundleFile", { enumerable: true, get: function () { return bundle_2.multiplayerConfigBundleFile; } });
|
|
68
182
|
Object.defineProperty(exports, "MULTIPLAYER_CONFIG_FILENAME", { enumerable: true, get: function () { return bundle_2.MULTIPLAYER_CONFIG_FILENAME; } });
|
|
69
183
|
var package_2 = require("./package");
|
|
70
184
|
Object.defineProperty(exports, "checkPackageBundle", { enumerable: true, get: function () { return package_2.checkPackageBundle; } });
|
|
185
|
+
var builds_1 = require("./builds");
|
|
186
|
+
Object.defineProperty(exports, "PRIVATE_BUILD_DRAFT_SCHEMA", { enumerable: true, get: function () { return builds_1.PRIVATE_BUILD_DRAFT_SCHEMA; } });
|
|
187
|
+
Object.defineProperty(exports, "createPrivateBuildDraft", { enumerable: true, get: function () { return builds_1.createPrivateBuildDraft; } });
|
|
188
|
+
Object.defineProperty(exports, "freezeBuildDraft", { enumerable: true, get: function () { return builds_1.freezeBuildDraft; } });
|
|
189
|
+
Object.defineProperty(exports, "frozenBuildArtifactKey", { enumerable: true, get: function () { return builds_1.frozenBuildArtifactKey; } });
|
|
190
|
+
var interactable_1 = require("./interactable");
|
|
191
|
+
Object.defineProperty(exports, "addInteractable", { enumerable: true, get: function () { return interactable_1.addInteractable; } });
|
|
192
|
+
Object.defineProperty(exports, "composeInteractableModuleManifest", { enumerable: true, get: function () { return interactable_1.composeInteractableModuleManifest; } });
|
|
193
|
+
Object.defineProperty(exports, "composeInteractableManifest", { enumerable: true, get: function () { return interactable_1.composeInteractableManifest; } });
|
|
194
|
+
Object.defineProperty(exports, "interactableModuleId", { enumerable: true, get: function () { return interactable_1.interactableModuleId; } });
|
|
195
|
+
Object.defineProperty(exports, "instanceOrdinalOf", { enumerable: true, get: function () { return interactable_1.instanceOrdinalOf; } });
|
|
196
|
+
Object.defineProperty(exports, "moduleInteractableFragment", { enumerable: true, get: function () { return interactable_1.moduleInteractableFragment; } });
|
|
197
|
+
Object.defineProperty(exports, "namespaceInteractableFragment", { enumerable: true, get: function () { return interactable_1.namespaceInteractableFragment; } });
|
|
198
|
+
Object.defineProperty(exports, "parseInteractablePosition", { enumerable: true, get: function () { return interactable_1.parseInteractablePosition; } });
|
|
199
|
+
Object.defineProperty(exports, "subtractInteractableContribution", { enumerable: true, get: function () { return interactable_1.subtractInteractableContribution; } });
|
|
200
|
+
Object.defineProperty(exports, "updateInteractable", { enumerable: true, get: function () { return interactable_1.updateInteractable; } });
|
|
201
|
+
var module_validation_1 = require("./module-validation");
|
|
202
|
+
Object.defineProperty(exports, "labelModuleValidationErrors", { enumerable: true, get: function () { return module_validation_1.labelModuleValidationErrors; } });
|
|
203
|
+
// Namespaced: the terrain authoring library shares plain names (`generate`, `import`, `bake`) with the rest of this surface.
|
|
204
|
+
exports.terrain = __importStar(require("./terrain/index"));
|
|
205
|
+
// Namespaced for the same reason: the CS2 bundle readers and their converters carry plain names of their own.
|
|
206
|
+
exports.cs2 = __importStar(require("./cs2/index"));
|
|
207
|
+
var compiler_1 = require("./sceneElements/compiler");
|
|
208
|
+
Object.defineProperty(exports, "compileSceneElements", { enumerable: true, get: function () { return compiler_1.compileSceneElements; } });
|
|
209
|
+
Object.defineProperty(exports, "compileSceneElementsBundle", { enumerable: true, get: function () { return compiler_1.compileSceneElementsBundle; } });
|
|
210
|
+
var continuum_1 = require("./sceneElements/continuum");
|
|
211
|
+
Object.defineProperty(exports, "CONTINUUM_SCENE_DOCUMENT_MEDIA_TYPE", { enumerable: true, get: function () { return continuum_1.CONTINUUM_SCENE_DOCUMENT_MEDIA_TYPE; } });
|
|
212
|
+
Object.defineProperty(exports, "compileContinuumScenePackage", { enumerable: true, get: function () { return continuum_1.compileContinuumScenePackage; } });
|
|
213
|
+
var materials_1 = require("./sceneImport/materials");
|
|
214
|
+
Object.defineProperty(exports, "HELIX_OFFICIAL_MATERIAL_SUBSET", { enumerable: true, get: function () { return materials_1.HELIX_OFFICIAL_MATERIAL_SUBSET; } });
|
|
215
|
+
Object.defineProperty(exports, "MATERIAL_AUTO_REPLACE_CONFIDENCE", { enumerable: true, get: function () { return materials_1.MATERIAL_AUTO_REPLACE_CONFIDENCE; } });
|
|
216
|
+
Object.defineProperty(exports, "MATERIAL_REVIEW_CONFIDENCE", { enumerable: true, get: function () { return materials_1.MATERIAL_REVIEW_CONFIDENCE; } });
|
|
217
|
+
Object.defineProperty(exports, "buildMaterialBulkRecipe", { enumerable: true, get: function () { return materials_1.buildMaterialBulkRecipe; } });
|
|
218
|
+
Object.defineProperty(exports, "buildMaterialPackageRecipe", { enumerable: true, get: function () { return materials_1.buildMaterialPackageRecipe; } });
|
|
219
|
+
Object.defineProperty(exports, "createSharedMaterialBinding", { enumerable: true, get: function () { return materials_1.createSharedMaterialBinding; } });
|
|
220
|
+
Object.defineProperty(exports, "matchCanonicalMaterial", { enumerable: true, get: function () { return materials_1.matchCanonicalMaterial; } });
|
|
221
|
+
var semantic_1 = require("./sceneImport/semantic");
|
|
222
|
+
Object.defineProperty(exports, "NATIVE_SCENE_CONVERSION_CONFIDENCE", { enumerable: true, get: function () { return semantic_1.NATIVE_SCENE_CONVERSION_CONFIDENCE; } });
|
|
223
|
+
Object.defineProperty(exports, "SOURCE_SCENE_IMPORT_BUDGETS", { enumerable: true, get: function () { return semantic_1.SOURCE_SCENE_IMPORT_BUDGETS; } });
|
|
224
|
+
Object.defineProperty(exports, "importSourceSceneMap", { enumerable: true, get: function () { return semantic_1.importSourceSceneMap; } });
|
|
225
|
+
__exportStar(require("./continuum"), exports);
|
|
226
|
+
__exportStar(require("./canary"), exports);
|
|
227
|
+
var scenePerformance_1 = require("./scenePerformance");
|
|
228
|
+
Object.defineProperty(exports, "analyzeScenePerformance", { enumerable: true, get: function () { return scenePerformance_1.analyzeScenePerformance; } });
|
|
229
|
+
Object.defineProperty(exports, "formatScenePerformanceReport", { enumerable: true, get: function () { return scenePerformance_1.formatScenePerformanceReport; } });
|
|
230
|
+
// The opt-in source archive (CH-1457 §9). Exported so the MCP server and any
|
|
231
|
+
// other in-process caller build the archive through the same selection policy
|
|
232
|
+
// the CLI uses — a second implementation is a second exclude list.
|
|
233
|
+
var source_archive_2 = require("./source-archive");
|
|
234
|
+
Object.defineProperty(exports, "collectSourceFiles", { enumerable: true, get: function () { return source_archive_2.collectSourceFiles; } });
|
|
235
|
+
Object.defineProperty(exports, "createSourceArchive", { enumerable: true, get: function () { return source_archive_2.createSourceArchive; } });
|
|
236
|
+
Object.defineProperty(exports, "formatArchiveSize", { enumerable: true, get: function () { return source_archive_2.formatArchiveSize; } });
|
|
237
|
+
Object.defineProperty(exports, "isSourceExcluded", { enumerable: true, get: function () { return source_archive_2.isSourceExcluded; } });
|
|
238
|
+
Object.defineProperty(exports, "parseGitignore", { enumerable: true, get: function () { return source_archive_2.parseGitignore; } });
|
|
239
|
+
Object.defineProperty(exports, "SOURCE_ARCHIVE_FILENAME", { enumerable: true, get: function () { return source_archive_2.SOURCE_ARCHIVE_FILENAME; } });
|
|
240
|
+
Object.defineProperty(exports, "SOURCE_CONTENT_TYPE", { enumerable: true, get: function () { return source_archive_2.SOURCE_CONTENT_TYPE; } });
|
|
241
|
+
Object.defineProperty(exports, "SOURCE_HARD_EXCLUDES", { enumerable: true, get: function () { return source_archive_2.SOURCE_HARD_EXCLUDES; } });
|
|
242
|
+
Object.defineProperty(exports, "SOURCE_MAX_BYTES", { enumerable: true, get: function () { return source_archive_2.SOURCE_MAX_BYTES; } });
|
|
243
|
+
// Existing Item reads and validation. MCP imports this library directly;
|
|
244
|
+
// new Item creation uses the sealed-Package publication exports above.
|
|
245
|
+
var item_2 = require("./item");
|
|
246
|
+
Object.defineProperty(exports, "assertCcGenders", { enumerable: true, get: function () { return item_2.assertCcGenders; } });
|
|
247
|
+
Object.defineProperty(exports, "assertCcSlot", { enumerable: true, get: function () { return item_2.assertCcSlot; } });
|
|
248
|
+
Object.defineProperty(exports, "assertLooksLikeGlb", { enumerable: true, get: function () { return item_2.assertLooksLikeGlb; } });
|
|
249
|
+
Object.defineProperty(exports, "CC_GENDERS", { enumerable: true, get: function () { return item_2.CC_GENDERS; } });
|
|
250
|
+
Object.defineProperty(exports, "CC_WEARABLE_SLOTS", { enumerable: true, get: function () { return item_2.CC_WEARABLE_SLOTS; } });
|
|
251
|
+
Object.defineProperty(exports, "CC_WEARABLE_SLOT_GROUPS", { enumerable: true, get: function () { return item_2.CC_WEARABLE_SLOT_GROUPS; } });
|
|
252
|
+
Object.defineProperty(exports, "ccGendersAreAllowedForKind", { enumerable: true, get: function () { return item_2.ccGendersAreAllowedForKind; } });
|
|
253
|
+
Object.defineProperty(exports, "ccGendersAreRequiredForKind", { enumerable: true, get: function () { return item_2.ccGendersAreRequiredForKind; } });
|
|
254
|
+
Object.defineProperty(exports, "ccSlotIsAllowedForKind", { enumerable: true, get: function () { return item_2.ccSlotIsAllowedForKind; } });
|
|
255
|
+
Object.defineProperty(exports, "ccSlotIsRequiredForKind", { enumerable: true, get: function () { return item_2.ccSlotIsRequiredForKind; } });
|
|
256
|
+
Object.defineProperty(exports, "isCcGender", { enumerable: true, get: function () { return item_2.isCcGender; } });
|
|
257
|
+
Object.defineProperty(exports, "isCcWearableSlot", { enumerable: true, get: function () { return item_2.isCcWearableSlot; } });
|
|
258
|
+
Object.defineProperty(exports, "CLIP_SET_SLOT_TYPES", { enumerable: true, get: function () { return item_2.CLIP_SET_SLOT_TYPES; } });
|
|
259
|
+
Object.defineProperty(exports, "meshContentTypeFromExtension", { enumerable: true, get: function () { return item_2.meshContentTypeFromExtension; } });
|
|
260
|
+
Object.defineProperty(exports, "normalizeItemKind", { enumerable: true, get: function () { return item_2.normalizeItemKind; } });
|
|
261
|
+
Object.defineProperty(exports, "parseJsonArrayOrFile", { enumerable: true, get: function () { return item_2.parseJsonArrayOrFile; } });
|
|
262
|
+
Object.defineProperty(exports, "parseJsonObjectOrFile", { enumerable: true, get: function () { return item_2.parseJsonObjectOrFile; } });
|
|
263
|
+
Object.defineProperty(exports, "parseJsonOrFile", { enumerable: true, get: function () { return item_2.parseJsonOrFile; } });
|
|
264
|
+
Object.defineProperty(exports, "parseGenders", { enumerable: true, get: function () { return item_2.parseGenders; } });
|
|
265
|
+
Object.defineProperty(exports, "parseTags", { enumerable: true, get: function () { return item_2.parseTags; } });
|
|
266
|
+
Object.defineProperty(exports, "renderCcGenderList", { enumerable: true, get: function () { return item_2.renderCcGenderList; } });
|
|
267
|
+
Object.defineProperty(exports, "renderCcSlotTable", { enumerable: true, get: function () { return item_2.renderCcSlotTable; } });
|
|
268
|
+
var distribution_2 = require("./distribution");
|
|
269
|
+
Object.defineProperty(exports, "DISTRIBUTION_KEY_PATTERN", { enumerable: true, get: function () { return distribution_2.DISTRIBUTION_KEY_PATTERN; } });
|
|
270
|
+
Object.defineProperty(exports, "ITEM_DISTRIBUTION_CHANNELS", { enumerable: true, get: function () { return distribution_2.ITEM_DISTRIBUTION_CHANNELS; } });
|
|
271
|
+
Object.defineProperty(exports, "ITEM_EDITION_MODES", { enumerable: true, get: function () { return distribution_2.ITEM_EDITION_MODES; } });
|
|
272
|
+
Object.defineProperty(exports, "buildItemDistribution", { enumerable: true, get: function () { return distribution_2.buildItemDistribution; } });
|
|
273
|
+
Object.defineProperty(exports, "buildItemDistributionUpdate", { enumerable: true, get: function () { return distribution_2.buildItemDistributionUpdate; } });
|
|
274
|
+
Object.defineProperty(exports, "editionFields", { enumerable: true, get: function () { return distribution_2.editionFields; } });
|
|
275
|
+
// Achievements. Same rule as the item exports above: the MCP server reaches the
|
|
276
|
+
// registration surface ONLY through these, so an un-exported helper is
|
|
277
|
+
// unreachable to an agent.
|
|
278
|
+
var achievement_2 = require("./achievement");
|
|
279
|
+
Object.defineProperty(exports, "ACHIEVEMENT_CRITERIA_METRICS", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_CRITERIA_METRICS; } });
|
|
280
|
+
Object.defineProperty(exports, "ACHIEVEMENT_CRITERIA_OPS", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_CRITERIA_OPS; } });
|
|
281
|
+
Object.defineProperty(exports, "ACHIEVEMENT_CRITERIA_SIGNALS", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_CRITERIA_SIGNALS; } });
|
|
282
|
+
Object.defineProperty(exports, "ACHIEVEMENT_ICON_MAX_BYTES", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_ICON_MAX_BYTES; } });
|
|
283
|
+
Object.defineProperty(exports, "ACHIEVEMENT_KEY_PATTERN", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_KEY_PATTERN; } });
|
|
284
|
+
Object.defineProperty(exports, "ACHIEVEMENT_TROPHY_MAX_BYTES", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_TROPHY_MAX_BYTES; } });
|
|
285
|
+
Object.defineProperty(exports, "ACHIEVEMENT_UNLOCK_MODES", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_UNLOCK_MODES; } });
|
|
286
|
+
Object.defineProperty(exports, "DATA_STORE_CRITERIA_KEY_TEMPLATES", { enumerable: true, get: function () { return achievement_2.DATA_STORE_CRITERIA_KEY_TEMPLATES; } });
|
|
287
|
+
Object.defineProperty(exports, "buildAchievementCriteria", { enumerable: true, get: function () { return achievement_2.buildAchievementCriteria; } });
|
|
288
|
+
Object.defineProperty(exports, "buildAchievementRegistration", { enumerable: true, get: function () { return achievement_2.buildAchievementRegistration; } });
|
|
289
|
+
Object.defineProperty(exports, "buildAchievementUpdate", { enumerable: true, get: function () { return achievement_2.buildAchievementUpdate; } });
|
|
290
|
+
Object.defineProperty(exports, "formatAchievementCriteria", { enumerable: true, get: function () { return achievement_2.formatAchievementCriteria; } });
|
|
291
|
+
Object.defineProperty(exports, "iconContentTypeFromExtension", { enumerable: true, get: function () { return achievement_2.iconContentTypeFromExtension; } });
|
|
292
|
+
Object.defineProperty(exports, "isAchievementKey", { enumerable: true, get: function () { return achievement_2.isAchievementKey; } });
|
|
293
|
+
Object.defineProperty(exports, "resolveUnlockMode", { enumerable: true, get: function () { return achievement_2.resolveUnlockMode; } });
|
|
294
|
+
// In-world products. Same rule as the exports above: the MCP server reaches the
|
|
295
|
+
// product registry ONLY through these, so an un-exported helper is unreachable
|
|
296
|
+
// to an agent.
|
|
297
|
+
var product_2 = require("./product");
|
|
298
|
+
Object.defineProperty(exports, "GRANT_CODE_MAX", { enumerable: true, get: function () { return product_2.GRANT_CODE_MAX; } });
|
|
299
|
+
Object.defineProperty(exports, "GRANT_CODE_PATTERN", { enumerable: true, get: function () { return product_2.GRANT_CODE_PATTERN; } });
|
|
300
|
+
Object.defineProperty(exports, "MAX_GRANT_CURRENCY_AMOUNT", { enumerable: true, get: function () { return product_2.MAX_GRANT_CURRENCY_AMOUNT; } });
|
|
301
|
+
Object.defineProperty(exports, "MAX_GRANT_EFFECTS", { enumerable: true, get: function () { return product_2.MAX_GRANT_EFFECTS; } });
|
|
302
|
+
Object.defineProperty(exports, "MAX_GRANT_ITEM_QUANTITY", { enumerable: true, get: function () { return product_2.MAX_GRANT_ITEM_QUANTITY; } });
|
|
303
|
+
Object.defineProperty(exports, "MAX_PASS_DURATION_SECONDS", { enumerable: true, get: function () { return product_2.MAX_PASS_DURATION_SECONDS; } });
|
|
304
|
+
Object.defineProperty(exports, "PRODUCT_DESCRIPTION_MAX", { enumerable: true, get: function () { return product_2.PRODUCT_DESCRIPTION_MAX; } });
|
|
305
|
+
Object.defineProperty(exports, "PRODUCT_KEY_MAX", { enumerable: true, get: function () { return product_2.PRODUCT_KEY_MAX; } });
|
|
306
|
+
Object.defineProperty(exports, "PRODUCT_KEY_PATTERN", { enumerable: true, get: function () { return product_2.PRODUCT_KEY_PATTERN; } });
|
|
307
|
+
Object.defineProperty(exports, "PRODUCT_TITLE_MAX", { enumerable: true, get: function () { return product_2.PRODUCT_TITLE_MAX; } });
|
|
308
|
+
Object.defineProperty(exports, "WORLD_PRODUCT_TYPES", { enumerable: true, get: function () { return product_2.WORLD_PRODUCT_TYPES; } });
|
|
309
|
+
Object.defineProperty(exports, "buildProductRegistration", { enumerable: true, get: function () { return product_2.buildProductRegistration; } });
|
|
310
|
+
Object.defineProperty(exports, "buildProductUpdate", { enumerable: true, get: function () { return product_2.buildProductUpdate; } });
|
|
311
|
+
Object.defineProperty(exports, "isProductKey", { enumerable: true, get: function () { return product_2.isProductKey; } });
|
|
312
|
+
Object.defineProperty(exports, "productTypeGrantsItem", { enumerable: true, get: function () { return product_2.productTypeGrantsItem; } });
|
|
71
313
|
var ability_2 = require("./ability");
|
|
72
314
|
Object.defineProperty(exports, "checkAbilityBundle", { enumerable: true, get: function () { return ability_2.checkAbilityBundle; } });
|
|
73
315
|
Object.defineProperty(exports, "installLocalAbility", { enumerable: true, get: function () { return ability_2.installLocalAbility; } });
|
|
@@ -75,12 +317,26 @@ Object.defineProperty(exports, "loadVendoredValidator", { enumerable: true, get:
|
|
|
75
317
|
Object.defineProperty(exports, "loadInstalledIndexValidator", { enumerable: true, get: function () { return ability_2.loadInstalledIndexValidator; } });
|
|
76
318
|
var resolve_1 = require("./resolve");
|
|
77
319
|
Object.defineProperty(exports, "normalizePinRange", { enumerable: true, get: function () { return resolve_1.normalizePinRange; } });
|
|
320
|
+
Object.defineProperty(exports, "validateAssetPackConstraints", { enumerable: true, get: function () { return resolve_1.validateAssetPackConstraints; } });
|
|
78
321
|
Object.defineProperty(exports, "resolvePins", { enumerable: true, get: function () { return resolve_1.resolvePins; } });
|
|
79
322
|
var install_1 = require("./install");
|
|
80
323
|
Object.defineProperty(exports, "installWorld", { enumerable: true, get: function () { return install_1.installWorld; } });
|
|
81
324
|
Object.defineProperty(exports, "INSTALLED_INDEX", { enumerable: true, get: function () { return install_1.INSTALLED_INDEX; } });
|
|
82
325
|
Object.defineProperty(exports, "LOCKFILE", { enumerable: true, get: function () { return install_1.LOCKFILE; } });
|
|
83
326
|
Object.defineProperty(exports, "MODULES_DIR", { enumerable: true, get: function () { return install_1.MODULES_DIR; } });
|
|
327
|
+
Object.defineProperty(exports, "WORLD_MANIFEST_LOCATIONS", { enumerable: true, get: function () { return install_1.WORLD_MANIFEST_LOCATIONS; } });
|
|
328
|
+
var enginePins_2 = require("./enginePins");
|
|
329
|
+
Object.defineProperty(exports, "ALLOW_EXACT_ENGINE_PIN_FLAG", { enumerable: true, get: function () { return enginePins_2.ALLOW_EXACT_ENGINE_PIN_FLAG; } });
|
|
330
|
+
Object.defineProperty(exports, "detectExactEnginePins", { enumerable: true, get: function () { return enginePins_2.detectExactEnginePins; } });
|
|
331
|
+
Object.defineProperty(exports, "enginePinOverrideLogPath", { enumerable: true, get: function () { return enginePins_2.enginePinOverrideLogPath; } });
|
|
332
|
+
var currency_1 = require("./currency");
|
|
333
|
+
Object.defineProperty(exports, "assessInteractables", { enumerable: true, get: function () { return currency_1.assessInteractables; } });
|
|
334
|
+
Object.defineProperty(exports, "assessPlatformDelivery", { enumerable: true, get: function () { return currency_1.assessPlatformDelivery; } });
|
|
335
|
+
Object.defineProperty(exports, "assessThreeCurrency", { enumerable: true, get: function () { return currency_1.assessThreeCurrency; } });
|
|
336
|
+
Object.defineProperty(exports, "assessVaultAssets", { enumerable: true, get: function () { return currency_1.assessVaultAssets; } });
|
|
337
|
+
Object.defineProperty(exports, "assessWeaponPins", { enumerable: true, get: function () { return currency_1.assessWeaponPins; } });
|
|
338
|
+
Object.defineProperty(exports, "assessWorldCurrency", { enumerable: true, get: function () { return currency_1.assessWorldCurrency; } });
|
|
339
|
+
Object.defineProperty(exports, "ADVISORY_SYSTEMS", { enumerable: true, get: function () { return currency_1.ADVISORY_SYSTEMS; } });
|
|
84
340
|
var config_2 = require("./config");
|
|
85
341
|
Object.defineProperty(exports, "apiUrlMatchesEnv", { enumerable: true, get: function () { return config_2.apiUrlMatchesEnv; } });
|
|
86
342
|
Object.defineProperty(exports, "credsEnvMismatchWarning", { enumerable: true, get: function () { return config_2.credsEnvMismatchWarning; } });
|
|
@@ -92,13 +348,102 @@ Object.defineProperty(exports, "loadCredentials", { enumerable: true, get: funct
|
|
|
92
348
|
Object.defineProperty(exports, "saveCredentials", { enumerable: true, get: function () { return config_2.saveCredentials; } });
|
|
93
349
|
Object.defineProperty(exports, "clearCredentials", { enumerable: true, get: function () { return config_2.clearCredentials; } });
|
|
94
350
|
Object.defineProperty(exports, "jwtExpiresAtIso", { enumerable: true, get: function () { return config_2.jwtExpiresAtIso; } });
|
|
95
|
-
var
|
|
96
|
-
Object.defineProperty(exports, "browserLogin", { enumerable: true, get: function () { return
|
|
97
|
-
Object.defineProperty(exports, "defaultClientTokenName", { enumerable: true, get: function () { return
|
|
351
|
+
var browserLogin_2 = require("./browserLogin");
|
|
352
|
+
Object.defineProperty(exports, "browserLogin", { enumerable: true, get: function () { return browserLogin_2.browserLogin; } });
|
|
353
|
+
Object.defineProperty(exports, "defaultClientTokenName", { enumerable: true, get: function () { return browserLogin_2.defaultClientTokenName; } });
|
|
98
354
|
var init_1 = require("./init");
|
|
99
355
|
Object.defineProperty(exports, "initTemplate", { enumerable: true, get: function () { return init_1.initTemplate; } });
|
|
356
|
+
Object.defineProperty(exports, "slugify", { enumerable: true, get: function () { return init_1.slugify; } });
|
|
100
357
|
var initAbility_1 = require("./initAbility");
|
|
101
358
|
Object.defineProperty(exports, "initAbilityTemplate", { enumerable: true, get: function () { return initAbility_1.initAbilityTemplate; } });
|
|
359
|
+
var realizability_2 = require("./realizability");
|
|
360
|
+
Object.defineProperty(exports, "checkRealizability", { enumerable: true, get: function () { return realizability_2.checkRealizability; } });
|
|
361
|
+
Object.defineProperty(exports, "registryRealizabilityDeps", { enumerable: true, get: function () { return realizability_2.registryRealizabilityDeps; } });
|
|
362
|
+
Object.defineProperty(exports, "renderRealizabilityRefusal", { enumerable: true, get: function () { return realizability_2.renderRealizabilityRefusal; } });
|
|
363
|
+
Object.defineProperty(exports, "TICK_NODE_CEILING", { enumerable: true, get: function () { return realizability_2.TICK_NODE_CEILING; } });
|
|
364
|
+
var money_1 = require("./money");
|
|
365
|
+
Object.defineProperty(exports, "getLixBalance", { enumerable: true, get: function () { return money_1.getLixBalance; } });
|
|
366
|
+
Object.defineProperty(exports, "listJobs", { enumerable: true, get: function () { return money_1.listJobs; } });
|
|
367
|
+
Object.defineProperty(exports, "formatJobs", { enumerable: true, get: function () { return money_1.formatJobs; } });
|
|
368
|
+
Object.defineProperty(exports, "quoteGeneration", { enumerable: true, get: function () { return money_1.quoteGeneration; } });
|
|
369
|
+
Object.defineProperty(exports, "normalizeQuote", { enumerable: true, get: function () { return money_1.normalizeQuote; } });
|
|
370
|
+
Object.defineProperty(exports, "formatBalance", { enumerable: true, get: function () { return money_1.formatBalance; } });
|
|
371
|
+
Object.defineProperty(exports, "formatQuote", { enumerable: true, get: function () { return money_1.formatQuote; } });
|
|
372
|
+
Object.defineProperty(exports, "formatLix", { enumerable: true, get: function () { return money_1.formatLix; } });
|
|
373
|
+
Object.defineProperty(exports, "formatReceipt", { enumerable: true, get: function () { return money_1.formatReceipt; } });
|
|
374
|
+
Object.defineProperty(exports, "formatWaitState", { enumerable: true, get: function () { return money_1.formatWaitState; } });
|
|
375
|
+
Object.defineProperty(exports, "receiptLix", { enumerable: true, get: function () { return money_1.receiptLix; } });
|
|
376
|
+
Object.defineProperty(exports, "roundLix", { enumerable: true, get: function () { return money_1.roundLix; } });
|
|
377
|
+
var verifySubPath_1 = require("./verifySubPath");
|
|
378
|
+
Object.defineProperty(exports, "verifySubPath", { enumerable: true, get: function () { return verifySubPath_1.verifySubPath; } });
|
|
379
|
+
Object.defineProperty(exports, "formatSubPathResult", { enumerable: true, get: function () { return verifySubPath_1.formatSubPathResult; } });
|
|
380
|
+
Object.defineProperty(exports, "DEFAULT_MOUNT_PREFIX", { enumerable: true, get: function () { return verifySubPath_1.DEFAULT_MOUNT_PREFIX; } });
|
|
381
|
+
var assets_1 = require("./assets");
|
|
382
|
+
Object.defineProperty(exports, "approveDreamerGate", { enumerable: true, get: function () { return assets_1.approveDreamerGate; } });
|
|
383
|
+
Object.defineProperty(exports, "describeGateAdvance", { enumerable: true, get: function () { return assets_1.describeGateAdvance; } });
|
|
384
|
+
Object.defineProperty(exports, "extensionFor", { enumerable: true, get: function () { return assets_1.extensionFor; } });
|
|
385
|
+
Object.defineProperty(exports, "formatStrandedJob", { enumerable: true, get: function () { return assets_1.formatStrandedJob; } });
|
|
386
|
+
Object.defineProperty(exports, "generateAndPublishAsset", { enumerable: true, get: function () { return assets_1.generateAndPublishAsset; } });
|
|
387
|
+
Object.defineProperty(exports, "generateAndPublishAssetFromReference", { enumerable: true, get: function () { return assets_1.generateAndPublishAssetFromReference; } });
|
|
388
|
+
Object.defineProperty(exports, "generateAudio", { enumerable: true, get: function () { return assets_1.generateAudio; } });
|
|
389
|
+
Object.defineProperty(exports, "generateImage", { enumerable: true, get: function () { return assets_1.generateImage; } });
|
|
390
|
+
Object.defineProperty(exports, "generateStandaloneAsset", { enumerable: true, get: function () { return assets_1.generateStandaloneAsset; } });
|
|
391
|
+
Object.defineProperty(exports, "getDreamerAssetGenerationJob", { enumerable: true, get: function () { return assets_1.getDreamerAssetGenerationJob; } });
|
|
392
|
+
Object.defineProperty(exports, "getStandaloneAssetGenerationJob", { enumerable: true, get: function () { return assets_1.getStandaloneAssetGenerationJob; } });
|
|
393
|
+
Object.defineProperty(exports, "getVaultAsset", { enumerable: true, get: function () { return assets_1.getVaultAsset; } });
|
|
394
|
+
Object.defineProperty(exports, "getVaultAssetUsage", { enumerable: true, get: function () { return assets_1.getVaultAssetUsage; } });
|
|
395
|
+
Object.defineProperty(exports, "getVaultAssetVersions", { enumerable: true, get: function () { return assets_1.getVaultAssetVersions; } });
|
|
396
|
+
Object.defineProperty(exports, "installVaultAsset", { enumerable: true, get: function () { return assets_1.installVaultAsset; } });
|
|
397
|
+
Object.defineProperty(exports, "listDreamerVoices", { enumerable: true, get: function () { return assets_1.listDreamerVoices; } });
|
|
398
|
+
Object.defineProperty(exports, "listMaterials", { enumerable: true, get: function () { return assets_1.listMaterials; } });
|
|
399
|
+
Object.defineProperty(exports, "MATERIAL_RENDITION_SELECTIONS", { enumerable: true, get: function () { return assets_1.MATERIAL_RENDITION_SELECTIONS; } });
|
|
400
|
+
Object.defineProperty(exports, "resolveMaterial", { enumerable: true, get: function () { return assets_1.resolveMaterial; } });
|
|
401
|
+
Object.defineProperty(exports, "resumeAndPublishAsset", { enumerable: true, get: function () { return assets_1.resumeAndPublishAsset; } });
|
|
402
|
+
Object.defineProperty(exports, "retryDreamerJob", { enumerable: true, get: function () { return assets_1.retryDreamerJob; } });
|
|
403
|
+
Object.defineProperty(exports, "reviseDreamerGate", { enumerable: true, get: function () { return assets_1.reviseDreamerGate; } });
|
|
404
|
+
Object.defineProperty(exports, "saveGeneratedAsset", { enumerable: true, get: function () { return assets_1.saveGeneratedAsset; } });
|
|
405
|
+
Object.defineProperty(exports, "StrandedJobError", { enumerable: true, get: function () { return assets_1.StrandedJobError; } });
|
|
406
|
+
Object.defineProperty(exports, "searchVaultAssets", { enumerable: true, get: function () { return assets_1.searchVaultAssets; } });
|
|
407
|
+
Object.defineProperty(exports, "startDreamerAssetGeneration", { enumerable: true, get: function () { return assets_1.startDreamerAssetGeneration; } });
|
|
408
|
+
Object.defineProperty(exports, "startDreamerAssetGenerationFromReference", { enumerable: true, get: function () { return assets_1.startDreamerAssetGenerationFromReference; } });
|
|
409
|
+
Object.defineProperty(exports, "startStandaloneAssetGeneration", { enumerable: true, get: function () { return assets_1.startStandaloneAssetGeneration; } });
|
|
410
|
+
Object.defineProperty(exports, "updateVaultAssetMetadata", { enumerable: true, get: function () { return assets_1.updateVaultAssetMetadata; } });
|
|
411
|
+
Object.defineProperty(exports, "UnavailableCapabilityError", { enumerable: true, get: function () { return assets_1.UnavailableCapabilityError; } });
|
|
412
|
+
Object.defineProperty(exports, "VAULT_ASSET_KINDS", { enumerable: true, get: function () { return assets_1.VAULT_ASSET_KINDS; } });
|
|
413
|
+
Object.defineProperty(exports, "DEFAULT_RESOLUTION_KEY", { enumerable: true, get: function () { return assets_1.DEFAULT_RESOLUTION_KEY; } });
|
|
414
|
+
Object.defineProperty(exports, "materialDefaultResolutionKey", { enumerable: true, get: function () { return assets_1.materialDefaultResolutionKey; } });
|
|
415
|
+
Object.defineProperty(exports, "materialResolutionOptions", { enumerable: true, get: function () { return assets_1.materialResolutionOptions; } });
|
|
416
|
+
Object.defineProperty(exports, "matchMaterialResolution", { enumerable: true, get: function () { return assets_1.matchMaterialResolution; } });
|
|
417
|
+
var identity_1 = require("./materials/identity");
|
|
418
|
+
Object.defineProperty(exports, "materialContinuumIdentity", { enumerable: true, get: function () { return identity_1.materialContinuumIdentity; } });
|
|
419
|
+
Object.defineProperty(exports, "parseContinuumCurrentVersion", { enumerable: true, get: function () { return identity_1.parseContinuumCurrentVersion; } });
|
|
420
|
+
Object.defineProperty(exports, "parseVaultMaterialSearch", { enumerable: true, get: function () { return identity_1.parseVaultMaterialSearch; } });
|
|
421
|
+
Object.defineProperty(exports, "platformMaterialTag", { enumerable: true, get: function () { return identity_1.platformMaterialTag; } });
|
|
422
|
+
var pins_1 = require("./materials/pins");
|
|
423
|
+
Object.defineProperty(exports, "clearMaterialPinCache", { enumerable: true, get: function () { return pins_1.clearMaterialPinCache; } });
|
|
424
|
+
// --- Unreal: cook candidate → HELIX World Build -----------------------------
|
|
425
|
+
var unrealCandidate_1 = require("./unrealCandidate");
|
|
426
|
+
Object.defineProperty(exports, "auditCookScope", { enumerable: true, get: function () { return unrealCandidate_1.auditCookScope; } });
|
|
427
|
+
Object.defineProperty(exports, "candidateArtifactDigest", { enumerable: true, get: function () { return unrealCandidate_1.candidateArtifactDigest; } });
|
|
428
|
+
Object.defineProperty(exports, "defaultIdempotencyKey", { enumerable: true, get: function () { return unrealCandidate_1.defaultIdempotencyKey; } });
|
|
429
|
+
Object.defineProperty(exports, "planSharedRuntimePublish", { enumerable: true, get: function () { return unrealCandidate_1.planSharedRuntimePublish; } });
|
|
430
|
+
Object.defineProperty(exports, "UnrealCandidateError", { enumerable: true, get: function () { return unrealCandidate_1.UnrealCandidateError; } });
|
|
431
|
+
Object.defineProperty(exports, "verifyUnrealCandidate", { enumerable: true, get: function () { return unrealCandidate_1.verifyUnrealCandidate; } });
|
|
432
|
+
var unrealPublish_1 = require("./unrealPublish");
|
|
433
|
+
Object.defineProperty(exports, "assertClientDeliveryMatchesPlan", { enumerable: true, get: function () { return unrealPublish_1.assertClientDeliveryMatchesPlan; } });
|
|
434
|
+
Object.defineProperty(exports, "assertCreateResponseMatchesPlan", { enumerable: true, get: function () { return unrealPublish_1.assertCreateResponseMatchesPlan; } });
|
|
435
|
+
Object.defineProperty(exports, "assertReceipt", { enumerable: true, get: function () { return unrealPublish_1.assertReceipt; } });
|
|
436
|
+
Object.defineProperty(exports, "publishUnrealBuild", { enumerable: true, get: function () { return unrealPublish_1.publishUnrealBuild; } });
|
|
437
|
+
Object.defineProperty(exports, "renderPublishFailure", { enumerable: true, get: function () { return unrealPublish_1.renderPublishFailure; } });
|
|
438
|
+
Object.defineProperty(exports, "resolveWorldId", { enumerable: true, get: function () { return unrealPublish_1.resolveWorldId; } });
|
|
439
|
+
Object.defineProperty(exports, "uploadArtifact", { enumerable: true, get: function () { return unrealPublish_1.uploadArtifact; } });
|
|
440
|
+
var unreal_1 = require("./unreal");
|
|
441
|
+
Object.defineProperty(exports, "formatUnrealValidationReport", { enumerable: true, get: function () { return unreal_1.formatUnrealValidationReport; } });
|
|
442
|
+
Object.defineProperty(exports, "HELIX_UNREAL_CONTRACT_VERSION", { enumerable: true, get: function () { return unreal_1.HELIX_UNREAL_CONTRACT_VERSION; } });
|
|
443
|
+
Object.defineProperty(exports, "HELIX_UNREAL_ENGINE_VERSION", { enumerable: true, get: function () { return unreal_1.HELIX_UNREAL_ENGINE_VERSION; } });
|
|
444
|
+
Object.defineProperty(exports, "initUnrealManifest", { enumerable: true, get: function () { return unreal_1.initUnrealManifest; } });
|
|
445
|
+
Object.defineProperty(exports, "packageUnrealProject", { enumerable: true, get: function () { return unreal_1.packageUnrealProject; } });
|
|
446
|
+
Object.defineProperty(exports, "validateUnrealProject", { enumerable: true, get: function () { return unreal_1.validateUnrealProject; } });
|
|
102
447
|
// Character import (`helix character import`) as a programmatic API. The implementation pulls in
|
|
103
448
|
// gltf-transform + meshoptimizer (~165ms of require time), so it is loaded lazily at call time —
|
|
104
449
|
// requiring lib.js (and therefore `helix --help`) stays fast.
|
|
@@ -106,15 +451,148 @@ async function importCharacter(opts) {
|
|
|
106
451
|
const mod = await Promise.resolve().then(() => __importStar(require('./character/importCharacter')));
|
|
107
452
|
return mod.importCharacter(opts);
|
|
108
453
|
}
|
|
454
|
+
// Headless screenshot capture (`helix screenshot`) as a programmatic API. Pulls in Playwright, so it
|
|
455
|
+
// is loaded lazily at call time — requiring lib.js stays fast.
|
|
456
|
+
async function captureScreenshots(opts) {
|
|
457
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./screenshot/captureScreenshots')));
|
|
458
|
+
return mod.captureScreenshots(opts);
|
|
459
|
+
}
|
|
460
|
+
// Downscaled JPEG preview of a captured image (base64) — a compact stand-in for shipping a full-size
|
|
461
|
+
// PNG, e.g. as an MCP image content block. Pulls in sharp, so it is loaded lazily at call time.
|
|
462
|
+
async function encodeImagePreview(file, maxWidth) {
|
|
463
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./screenshot/encodeImagePreview')));
|
|
464
|
+
return mod.encodeImagePreview(file, maxWidth);
|
|
465
|
+
}
|
|
466
|
+
// Gesture inspection (`helix gesture inspect`) as a programmatic API. Loads the WORLD's installed
|
|
467
|
+
// character system + its three at call time, so it is lazy for the same reason as the others.
|
|
468
|
+
async function inspectGesture(opts) {
|
|
469
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./gesture/inspect')));
|
|
470
|
+
return mod.inspectGesture(opts);
|
|
471
|
+
}
|
|
472
|
+
async function formatGestureInspection(result, opts) {
|
|
473
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./gesture/inspect')));
|
|
474
|
+
return mod.formatInspect(result, opts);
|
|
475
|
+
}
|
|
476
|
+
// Gesture contact sheet (`helix gesture shot`) as a programmatic API. Pulls in Playwright, so it is loaded
|
|
477
|
+
// lazily at call time — requiring lib.js stays fast.
|
|
478
|
+
async function captureGesture(opts) {
|
|
479
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./gesture/capture')));
|
|
480
|
+
return mod.captureGesture(opts);
|
|
481
|
+
}
|
|
482
|
+
// World layout inspection (`helix world inspect`) as a programmatic API. The analyzer, formatter,
|
|
483
|
+
// and differ are pure over snapshot JSON and load directly; the transport pulls in Playwright, so
|
|
484
|
+
// it is loaded lazily at call time — requiring lib.js stays fast.
|
|
485
|
+
var analyze_1 = require("./world/analyze");
|
|
486
|
+
Object.defineProperty(exports, "analyzeWorld", { enumerable: true, get: function () { return analyze_1.analyzeWorld; } });
|
|
487
|
+
Object.defineProperty(exports, "sortFindings", { enumerable: true, get: function () { return analyze_1.sortFindings; } });
|
|
488
|
+
var format_1 = require("./world/format");
|
|
489
|
+
Object.defineProperty(exports, "formatWorldInspection", { enumerable: true, get: function () { return format_1.formatWorldInspection; } });
|
|
490
|
+
Object.defineProperty(exports, "DEFAULT_REPORT", { enumerable: true, get: function () { return format_1.DEFAULT_REPORT; } });
|
|
491
|
+
var diff_1 = require("./world/diff");
|
|
492
|
+
Object.defineProperty(exports, "diffWorldSnapshots", { enumerable: true, get: function () { return diff_1.diffWorldSnapshots; } });
|
|
493
|
+
Object.defineProperty(exports, "formatWorldDiff", { enumerable: true, get: function () { return diff_1.formatWorldDiff; } });
|
|
494
|
+
var zones_1 = require("./world/zones");
|
|
495
|
+
Object.defineProperty(exports, "analyzeZones", { enumerable: true, get: function () { return zones_1.analyzeZones; } });
|
|
496
|
+
var focus_1 = require("./world/focus");
|
|
497
|
+
Object.defineProperty(exports, "formatWorldFocus", { enumerable: true, get: function () { return focus_1.formatWorldFocus; } });
|
|
498
|
+
Object.defineProperty(exports, "resolveFocus", { enumerable: true, get: function () { return focus_1.resolveFocus; } });
|
|
499
|
+
var wiring_1 = require("./world/wiring");
|
|
500
|
+
Object.defineProperty(exports, "detectInspectWiring", { enumerable: true, get: function () { return wiring_1.detectInspectWiring; } });
|
|
501
|
+
Object.defineProperty(exports, "detectNpcWiring", { enumerable: true, get: function () { return wiring_1.detectNpcWiring; } });
|
|
502
|
+
var canonicalize_1 = require("./world/canonicalize");
|
|
503
|
+
Object.defineProperty(exports, "canonicalizeSnapshot", { enumerable: true, get: function () { return canonicalize_1.canonicalizeSnapshot; } });
|
|
504
|
+
var baseline_1 = require("./world/baseline");
|
|
505
|
+
Object.defineProperty(exports, "applyBaseline", { enumerable: true, get: function () { return baseline_1.applyBaseline; } });
|
|
506
|
+
Object.defineProperty(exports, "buildBaseline", { enumerable: true, get: function () { return baseline_1.buildBaseline; } });
|
|
507
|
+
Object.defineProperty(exports, "parseBaseline", { enumerable: true, get: function () { return baseline_1.parseBaseline; } });
|
|
508
|
+
Object.defineProperty(exports, "anchorOf", { enumerable: true, get: function () { return baseline_1.anchorOf; } });
|
|
509
|
+
Object.defineProperty(exports, "BASELINE_FILENAME", { enumerable: true, get: function () { return baseline_1.BASELINE_FILENAME; } });
|
|
510
|
+
async function snapshotWorld(opts) {
|
|
511
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./world/snapshotWorld')));
|
|
512
|
+
return mod.snapshotWorld(opts);
|
|
513
|
+
}
|
|
514
|
+
// NPC simulation measurement + filmstrip over the same headless inspect lane. Both pull in Playwright,
|
|
515
|
+
// so they load lazily at call time — requiring lib.js stays fast. The metric math itself is pure and
|
|
516
|
+
// lives in ./npc/metrics; the formatter is pure too, but stays lazy so one import path covers both.
|
|
517
|
+
async function inspectNpc(opts) {
|
|
518
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./npc/inspect')));
|
|
519
|
+
return mod.inspectNpc(opts);
|
|
520
|
+
}
|
|
521
|
+
async function formatNpcInspection(result) {
|
|
522
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./npc/format')));
|
|
523
|
+
return mod.formatNpcInspection(result);
|
|
524
|
+
}
|
|
525
|
+
async function captureNpc(opts) {
|
|
526
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./npc/capture')));
|
|
527
|
+
return mod.captureNpc(opts);
|
|
528
|
+
}
|
|
529
|
+
// Reads WORLD_METRICS from the world's installed system — loads real ESM, so lazy like the others.
|
|
530
|
+
async function readWorldMetrics(worldDir) {
|
|
531
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./world/readWorldMetrics')));
|
|
532
|
+
return mod.readWorldMetrics(worldDir);
|
|
533
|
+
}
|
|
534
|
+
async function renderWorldMetricsText(metrics) {
|
|
535
|
+
const mod = await Promise.resolve().then(() => __importStar(require('./world/readWorldMetrics')));
|
|
536
|
+
return mod.renderWorldMetrics(metrics);
|
|
537
|
+
}
|
|
538
|
+
exports.WORLD_METRICS_UNSUPPORTED = 'the installed humanoid-character does not export WORLD_METRICS — it predates the table (added in 0.2.13). ' +
|
|
539
|
+
'Any existing ^0.2 pin already allows it — rerun the install (MCP: install_world_packages · CLI: helix install) and rebuild.';
|
|
540
|
+
/** The bone axis table, read from a world's OWN pinned system — the engine holds the only authored copy. */
|
|
541
|
+
async function readAxisTable(worldDir) {
|
|
542
|
+
const [{ loadGestureRuntime }, { renderAxisTableMarkdown, renderAxisTableJson }] = await Promise.all([
|
|
543
|
+
Promise.resolve().then(() => __importStar(require('./gesture/worldRuntime'))),
|
|
544
|
+
Promise.resolve().then(() => __importStar(require('./gesture/axisReference'))),
|
|
545
|
+
]);
|
|
546
|
+
const runtime = await loadGestureRuntime(worldDir);
|
|
547
|
+
if (runtime.axisTable === null)
|
|
548
|
+
return null;
|
|
549
|
+
return { markdown: renderAxisTableMarkdown(runtime.axisTable), json: renderAxisTableJson(runtime.axisTable) };
|
|
550
|
+
}
|
|
109
551
|
const UPLOAD_CONCURRENCY = 6;
|
|
552
|
+
exports.WORLD_DESCRIPTION_MAX = 1000;
|
|
110
553
|
// Validate + resolve-or-create world + upload + finalize. Throws ApiError /
|
|
111
554
|
// Error with human-readable messages on any failure.
|
|
112
|
-
async function publishWorld(root, creds, onProgress = () => undefined) {
|
|
113
|
-
const
|
|
555
|
+
async function publishWorld(root, creds, onProgress = () => undefined, options = {}) {
|
|
556
|
+
const enginePinReason = options.allowExactEnginePin === undefined ? undefined : (0, enginePins_1.requireOverrideReason)(options.allowExactEnginePin);
|
|
557
|
+
const bundle = (0, bundle_1.checkBundle)(root, {
|
|
558
|
+
compatibleResolverOrigin: creds.apiUrl,
|
|
559
|
+
allowExactEnginePin: enginePinReason,
|
|
560
|
+
});
|
|
114
561
|
if (bundle.errors.length) {
|
|
115
562
|
throw new Error(`Bundle is invalid:\n${bundle.errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
116
563
|
}
|
|
564
|
+
if (enginePinReason && bundle.exactEnginePins?.length) {
|
|
565
|
+
// Audit BEFORE any network write: an override that cannot be logged is refused (recordEnginePinOverride throws).
|
|
566
|
+
const logPath = (0, enginePins_1.recordEnginePinOverride)({
|
|
567
|
+
at: new Date().toISOString(),
|
|
568
|
+
slug: bundle.manifest.slug,
|
|
569
|
+
reason: enginePinReason,
|
|
570
|
+
command: 'publish',
|
|
571
|
+
pins: bundle.exactEnginePins.map((pin) => ({ slug: pin.slug, range: pin.range, sources: pin.sources })),
|
|
572
|
+
apiUrl: creds.apiUrl,
|
|
573
|
+
});
|
|
574
|
+
onProgress(`⚠ ${(0, enginePins_1.exactEnginePinOverrideWarning)(bundle.exactEnginePins, enginePinReason)}`);
|
|
575
|
+
onProgress(` override recorded in ${logPath}`);
|
|
576
|
+
}
|
|
577
|
+
if (bundle.excluded.length) {
|
|
578
|
+
onProgress(`excluded ${bundle.excluded.length} path(s) via .helixignore`);
|
|
579
|
+
}
|
|
117
580
|
const manifest = bundle.manifest;
|
|
581
|
+
// Refuse a world the server cannot realize BEFORE anything touches the network. Publishing first
|
|
582
|
+
// and discovering it afterwards would leave a live world that no player can start, which is the
|
|
583
|
+
// failure this gate exists for. flat-v0 and pre-module multiplayer worlds are untouched by this
|
|
584
|
+
// and never reach the registry.
|
|
585
|
+
if (!options.skipRealizabilityCheck) {
|
|
586
|
+
const failures = await (0, realizability_1.checkRealizability)(manifest, options.realizabilityDeps ?? (0, realizability_1.registryRealizabilityDeps)(creds.apiUrl));
|
|
587
|
+
if (failures.length)
|
|
588
|
+
throw new Error((0, realizability_1.renderRealizabilityRefusal)(failures));
|
|
589
|
+
}
|
|
590
|
+
// Build the source archive BEFORE anything touches the network. An over-cap
|
|
591
|
+
// or unreadable source directory must refuse while nothing has happened yet —
|
|
592
|
+
// failing after the build is live would leave the creator with a published
|
|
593
|
+
// world and an error, which reads as a failed publish.
|
|
594
|
+
const sourceDir = options.sourceDir ?? (0, node_path_1.resolve)(root, '..');
|
|
595
|
+
const archive = options.uploadSource ? (0, source_archive_1.createSourceArchive)(sourceDir) : null;
|
|
118
596
|
// Emit the runtime multiplayer config (multiplayer.json) into the bundle for multiplayer worlds. It's
|
|
119
597
|
// generated in-memory from the validated manifest — the authoritative copy — so drop any hand-placed
|
|
120
598
|
// one first, keeping exactly one entry. The backend signs its URL into the room credential (configUrl).
|
|
@@ -123,28 +601,115 @@ async function publishWorld(root, creds, onProgress = () => undefined) {
|
|
|
123
601
|
bundle.files = bundle.files.filter((f) => f.path !== bundle_1.MULTIPLAYER_CONFIG_FILENAME);
|
|
124
602
|
bundle.files.push(multiplayerFile);
|
|
125
603
|
}
|
|
604
|
+
const placement = (0, placementRequest_1.placementRequestBundleFile)(root, bundle.files, multiplayerFile, options.placementBindings ? (0, node_fs_1.readFileSync)(options.placementBindings) : undefined);
|
|
605
|
+
if (placement) {
|
|
606
|
+
bundle.files = bundle.files.filter(f => f.path !== placementRequest_1.PLACEMENT_REQUEST_FILENAME);
|
|
607
|
+
bundle.files.push(placement.file);
|
|
608
|
+
}
|
|
126
609
|
const api = api_1.HelixApi.forCredentials(creds);
|
|
127
610
|
const mine = await api.request('GET', '/api/v1/instant-worlds/me');
|
|
128
611
|
let world = mine.data.find((w) => w.slug === manifest.slug);
|
|
612
|
+
if (placement && (!world || world.id !== placement.request.worldId)) {
|
|
613
|
+
throw new Error('Placement request must target the existing owned world; nothing was published');
|
|
614
|
+
}
|
|
615
|
+
// Resolve before capture, but capture/validate BEFORE any World/Build write.
|
|
616
|
+
const existingDetail = world ? await api.requestItem('GET', `/api/v1/instant-worlds/${manifest.slug}`) : null;
|
|
617
|
+
const requestedThumbnail = options.thumbnail ?? findBundleThumbnail(root);
|
|
618
|
+
bundle.files = bundle.files.filter(f => !/^helix\.thumbnail\.(auto|custom|required)\./.test(f.path));
|
|
619
|
+
let thumbnailSource = 'existing';
|
|
620
|
+
if (!existingDetail?.hasCustomThumbnail) {
|
|
621
|
+
let bytes;
|
|
622
|
+
let path;
|
|
623
|
+
if (requestedThumbnail) {
|
|
624
|
+
mediaContentTypeFromExtension(requestedThumbnail);
|
|
625
|
+
bytes = (0, node_fs_1.readFileSync)(requestedThumbnail);
|
|
626
|
+
// Consume the dedicated conventional cover once. Explicit selections may be
|
|
627
|
+
// runtime assets whose original paths must remain available to the World.
|
|
628
|
+
if (!options.thumbnail)
|
|
629
|
+
bundle.files = bundle.files.filter(f => (0, node_path_1.resolve)(f.absolutePath) !== (0, node_path_1.resolve)(requestedThumbnail));
|
|
630
|
+
path = `helix.thumbnail.custom${(0, node_path_1.extname)(requestedThumbnail).toLowerCase()}`;
|
|
631
|
+
thumbnailSource = options.thumbnail ? 'option' : 'bundle';
|
|
632
|
+
}
|
|
633
|
+
else {
|
|
634
|
+
onProgress('Capturing publication thumbnail from the ready world');
|
|
635
|
+
const snapshot = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'helix-publish-bundle-'));
|
|
636
|
+
try {
|
|
637
|
+
// Capture precisely the filtered/generated bundle, and upload those same immutable bytes.
|
|
638
|
+
for (const file of bundle.files) {
|
|
639
|
+
file.content = file.content ?? (0, node_fs_1.readFileSync)(file.absolutePath);
|
|
640
|
+
file.size = file.content.byteLength;
|
|
641
|
+
const staged = (0, node_path_1.join)(snapshot, file.path);
|
|
642
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(staged), { recursive: true });
|
|
643
|
+
(0, node_fs_1.writeFileSync)(staged, file.content);
|
|
644
|
+
}
|
|
645
|
+
bytes = await (options.captureThumbnail ?? publishThumbnail_1.capturePublishThumbnail)(snapshot, manifest.entry, onProgress);
|
|
646
|
+
}
|
|
647
|
+
catch (err) {
|
|
648
|
+
throw new Error(`Automatic thumbnail capture failed; nothing was published: ${describeSourceFailure(err)}`);
|
|
649
|
+
}
|
|
650
|
+
finally {
|
|
651
|
+
(0, node_fs_1.rmSync)(snapshot, { recursive: true, force: true });
|
|
652
|
+
}
|
|
653
|
+
path = publishThumbnail_1.AUTO_THUMBNAIL_PATH;
|
|
654
|
+
thumbnailSource = 'capture';
|
|
655
|
+
}
|
|
656
|
+
assertMediaSizeOk(bytes.byteLength, 'thumbnail');
|
|
657
|
+
if (!bytes.byteLength)
|
|
658
|
+
throw new Error('Publication thumbnail is empty; nothing was published');
|
|
659
|
+
// Keep generated bytes in memory: source and bundle directories remain untouched.
|
|
660
|
+
bundle.files = bundle.files.filter(f => !/^helix\.thumbnail\.(auto|custom)\./.test(f.path));
|
|
661
|
+
bundle.files.push({ path, size: bytes.byteLength, absolutePath: '', content: bytes });
|
|
662
|
+
}
|
|
663
|
+
if (bundle.files.length > helix_manifest_1.BUNDLE_MAX_FILES || bundle.files.reduce((sum, f) => sum + f.size, 0) > helix_manifest_1.BUNDLE_MAX_TOTAL_BYTES) {
|
|
664
|
+
throw new Error('Bundle including publication thumbnail exceeds the file count or byte budget; nothing was published');
|
|
665
|
+
}
|
|
129
666
|
if (!world) {
|
|
130
667
|
onProgress(`Creating world "${manifest.title}" (${manifest.slug})`);
|
|
131
668
|
world = await api.requestItem('POST', '/api/v1/instant-worlds', {
|
|
132
669
|
title: manifest.title,
|
|
133
670
|
slug: manifest.slug,
|
|
671
|
+
...(options.description !== undefined ? { description: options.description } : {}),
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
else if (options.description !== undefined) {
|
|
675
|
+
// Existing world: the create body never runs again, so the description needs its own write.
|
|
676
|
+
// An empty string deliberately CLEARS it — that is how you remove a description.
|
|
677
|
+
onProgress(options.description ? 'Updating the world description' : 'Clearing the world description');
|
|
678
|
+
await api.request('PATCH', `/api/v1/instant-worlds/${world.id}`, {
|
|
679
|
+
description: options.description,
|
|
134
680
|
});
|
|
135
681
|
}
|
|
136
682
|
onProgress(`Requesting upload for ${bundle.files.length} files`);
|
|
683
|
+
const buildFiles = bundle.files.map((file) => {
|
|
684
|
+
const body = file.content ?? (0, node_fs_1.readFileSync)(file.absolutePath);
|
|
685
|
+
return {
|
|
686
|
+
path: file.path,
|
|
687
|
+
size: file.size,
|
|
688
|
+
contentSha256: (0, node_crypto_1.createHash)('sha256').update(body).digest('hex'),
|
|
689
|
+
};
|
|
690
|
+
});
|
|
137
691
|
const build = await api.requestItem('POST', `/api/v1/instant-worlds/${world.id}/builds`, {
|
|
138
692
|
manifest,
|
|
139
|
-
files:
|
|
693
|
+
files: buildFiles,
|
|
140
694
|
});
|
|
695
|
+
if (build.thumbnailAssignmentVersion !== 1)
|
|
696
|
+
throw new Error('Backend does not support atomic publication thumbnails. Build remains inactive; activate the backend fix before retrying.');
|
|
697
|
+
const declaredByPath = new Map(buildFiles.map((file) => [file.path, file]));
|
|
141
698
|
let done = 0;
|
|
142
699
|
const queue = [...build.uploads];
|
|
143
700
|
await Promise.all(Array.from({ length: UPLOAD_CONCURRENCY }, async () => {
|
|
144
701
|
for (let ticket = queue.shift(); ticket; ticket = queue.shift()) {
|
|
145
702
|
const file = bundle.files.find((f) => f.path === ticket.path);
|
|
703
|
+
const declared = declaredByPath.get(ticket.path);
|
|
704
|
+
if (ticket.contentSha256 !== declared.contentSha256) {
|
|
705
|
+
throw new Error(`upload ticket digest changed for ${ticket.path}; refusing to upload different bytes`);
|
|
706
|
+
}
|
|
146
707
|
// Generated files (multiplayer.json) carry in-memory content; on-disk files are read by path.
|
|
147
|
-
|
|
708
|
+
const body = file.content ?? (0, node_fs_1.readFileSync)(file.absolutePath);
|
|
709
|
+
if ((0, node_crypto_1.createHash)('sha256').update(body).digest('hex') !== declared.contentSha256) {
|
|
710
|
+
throw new Error(`bundle bytes changed after upload intent for ${ticket.path}; rebuild before publishing`);
|
|
711
|
+
}
|
|
712
|
+
await (0, api_1.uploadToTicket)(ticket.url, body, ticket.contentType, ticket.cacheControl, { contentSha256: ticket.contentSha256, writeOnce: true });
|
|
148
713
|
done += 1;
|
|
149
714
|
onProgress(`Uploaded ${done}/${build.uploads.length}`);
|
|
150
715
|
}
|
|
@@ -152,6 +717,32 @@ async function publishWorld(root, creds, onProgress = () => undefined) {
|
|
|
152
717
|
onProgress('Finalizing');
|
|
153
718
|
await api.request('POST', `/api/v1/instant-worlds/${world.id}/builds/${build.buildId}/finalize`);
|
|
154
719
|
const detail = await api.requestItem('GET', `/api/v1/instant-worlds/${manifest.slug}`);
|
|
720
|
+
if (detail.id !== world.id || detail.activeBuildId !== build.buildId)
|
|
721
|
+
throw new Error(`Build ${build.buildId} finalized, but another Build is now active; publication result is superseded. Inspect the World before retrying.`);
|
|
722
|
+
if (!detail.thumbnailUrl || detail.thumbnailUrl.startsWith('data:image/svg')) {
|
|
723
|
+
throw new Error(`Build ${build.buildId} was activated but its thumbnail is missing; publication is incomplete. Inspect this Build before retrying.`);
|
|
724
|
+
}
|
|
725
|
+
if (detail.hasCustomThumbnail && thumbnailSource === 'capture')
|
|
726
|
+
thumbnailSource = 'existing';
|
|
727
|
+
const settledDetail = detail;
|
|
728
|
+
const thumbnailWarning = null;
|
|
729
|
+
let source = { state: 'skipped' };
|
|
730
|
+
if (archive) {
|
|
731
|
+
onProgress(`Uploading source (${archive.files.length} files, ${(0, source_archive_1.formatArchiveSize)(archive.bytes.byteLength)})`);
|
|
732
|
+
try {
|
|
733
|
+
const recorded = await uploadWorldSource(api, detail.id, archive.bytes);
|
|
734
|
+
source = {
|
|
735
|
+
state: 'uploaded',
|
|
736
|
+
sizeBytes: archive.bytes.byteLength,
|
|
737
|
+
fileCount: archive.files.length,
|
|
738
|
+
version: recorded.version,
|
|
739
|
+
projectId: recorded.projectId,
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
catch (err) {
|
|
743
|
+
source = { state: 'failed', message: describeSourceFailure(err) };
|
|
744
|
+
}
|
|
745
|
+
}
|
|
155
746
|
return {
|
|
156
747
|
slug: manifest.slug,
|
|
157
748
|
title: manifest.title,
|
|
@@ -159,30 +750,552 @@ async function publishWorld(root, creds, onProgress = () => undefined) {
|
|
|
159
750
|
buildNumber: build.buildNumber,
|
|
160
751
|
playUrl: detail.playUrl,
|
|
161
752
|
worldUrl: `${creds.apiUrl}/api/v1/instant-worlds/${manifest.slug}`,
|
|
753
|
+
worldId: detail.id,
|
|
754
|
+
hasCustomThumbnail: settledDetail.hasCustomThumbnail,
|
|
755
|
+
thumbnailUrl: settledDetail.thumbnailUrl ?? null,
|
|
756
|
+
thumbnailSource,
|
|
757
|
+
thumbnailWarning,
|
|
758
|
+
source,
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
// --- World identity, without a build ----------------------------------------
|
|
762
|
+
/** Who may stand up a persistent server for a world (backend `ServerCreationPermission`). */
|
|
763
|
+
exports.SERVER_CREATION_PERMISSIONS = ['creator', 'collaborators', 'anyone'];
|
|
764
|
+
/**
|
|
765
|
+
* Mint a world ROW without publishing a build — the identity products and
|
|
766
|
+
* achievements register against.
|
|
767
|
+
*
|
|
768
|
+
* Idempotency is CLIENT-side and lookup-first, exactly as publishWorld resolves
|
|
769
|
+
* a world: the backend 409s a duplicate slug even for its owner (its only
|
|
770
|
+
* server-side idempotency is keyed on projectId, which the public route's
|
|
771
|
+
* whitelisting ValidationPipe strips), so a bare re-POST is not an option. A
|
|
772
|
+
* slug owned by someone else surfaces the backend's 409 verbatim.
|
|
773
|
+
*/
|
|
774
|
+
async function createWorld(api, options) {
|
|
775
|
+
// The server trims + lowercases the slug before it stores one, so match on the
|
|
776
|
+
// same normalization or a stray "My-World" misses its own row and re-POSTs.
|
|
777
|
+
const slug = options.slug.trim().toLowerCase();
|
|
778
|
+
const mine = await api.request('GET', '/api/v1/instant-worlds/me');
|
|
779
|
+
const existing = mine.data.find((w) => w.slug === slug);
|
|
780
|
+
if (existing) {
|
|
781
|
+
return { id: existing.id, slug: existing.slug, status: existing.status, created: false };
|
|
782
|
+
}
|
|
783
|
+
// SingleResponseDto ({ item: T }), same envelope api.requestItem unwraps.
|
|
784
|
+
const response = await api.request('POST', '/api/v1/instant-worlds', {
|
|
785
|
+
title: options.title,
|
|
786
|
+
slug,
|
|
787
|
+
...(options.description !== undefined ? { description: options.description } : {}),
|
|
788
|
+
...(options.serverCreationPermission !== undefined
|
|
789
|
+
? { serverCreationPermission: options.serverCreationPermission }
|
|
790
|
+
: {}),
|
|
791
|
+
});
|
|
792
|
+
const created = response.item;
|
|
793
|
+
return { id: created.id, slug: created.slug, status: created.status, created: true };
|
|
794
|
+
}
|
|
795
|
+
/**
|
|
796
|
+
* Upload one source archive against an already-published world.
|
|
797
|
+
*
|
|
798
|
+
* ONE byte length is computed once and sent to BOTH calls. Finalize asserts that
|
|
799
|
+
* the stored object's size equals the declared size — the presign binds
|
|
800
|
+
* ContentLength into the signature, so a mismatch means a different object was
|
|
801
|
+
* finalized than was declared. Reading the length twice from two places is
|
|
802
|
+
* exactly how that assertion starts failing for no reason.
|
|
803
|
+
*/
|
|
804
|
+
async function uploadWorldSource(api, worldId, bytes) {
|
|
805
|
+
const size = bytes.byteLength;
|
|
806
|
+
const ticket = await api.requestItem('POST', `/api/v1/instant-worlds/${worldId}/source`, { contentType: source_archive_1.SOURCE_CONTENT_TYPE, size });
|
|
807
|
+
// contentType and cacheControl come back from the ticket, not from our
|
|
808
|
+
// constants: both are bound into the presigned signature, so the PUT has to
|
|
809
|
+
// echo the server's values rather than assert its own.
|
|
810
|
+
await (0, api_1.uploadToTicket)(ticket.url, bytes, ticket.contentType, ticket.cacheControl);
|
|
811
|
+
return api.requestItem('POST', `/api/v1/instant-worlds/${worldId}/source/finalize`, { key: ticket.key, size });
|
|
812
|
+
}
|
|
813
|
+
/**
|
|
814
|
+
* One plain sentence for a source-channel failure — never a stack trace.
|
|
815
|
+
*
|
|
816
|
+
* The case this exists for: a deployment with no source bucket answers 503 with
|
|
817
|
+
* a message naming the missing variable. That is operational information, and a
|
|
818
|
+
* creator should read it as a sentence, not as an `✖ Service Unavailable (503)`
|
|
819
|
+
* block stapled onto an otherwise successful publish. Pure, so every shape can
|
|
820
|
+
* be asserted without a server.
|
|
821
|
+
*/
|
|
822
|
+
function describeSourceFailure(err) {
|
|
823
|
+
// ApiError's `message` is already the server's own message list, joined, and
|
|
824
|
+
// it falls back to `HTTP <status>` when the body carried none — so there is no
|
|
825
|
+
// empty case to guard and no reason to special-case ApiError at all.
|
|
826
|
+
return err instanceof Error ? err.message : String(err);
|
|
827
|
+
}
|
|
828
|
+
/**
|
|
829
|
+
* The website host a creator would edit this world on, for the environment the
|
|
830
|
+
* credentials point at. Production reads `helixgame.com`, which is the string
|
|
831
|
+
* spec §9.3 writes out; staging and helix3 read their own hosts instead of
|
|
832
|
+
* pointing a staging creator at production. Same idiom `helix login` uses.
|
|
833
|
+
*/
|
|
834
|
+
function editSiteHost(apiUrl) {
|
|
835
|
+
const webUrl = apiUrl === config_1.DEFAULT_API_URL ? config_1.DEFAULT_WEB_URL : (0, browserLogin_1.deriveWebUrl)(apiUrl);
|
|
836
|
+
try {
|
|
837
|
+
return new URL(webUrl).host;
|
|
838
|
+
}
|
|
839
|
+
catch {
|
|
840
|
+
return webUrl;
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* The single creator-facing line about source, per spec §9.3. A FACT, printed
|
|
845
|
+
* once — not a warning, not repeated.
|
|
846
|
+
*
|
|
847
|
+
* Lives here rather than in the CLI's command layer because MCP renders the
|
|
848
|
+
* same outcome to an agent and the two must not drift; `howToEnable` is the
|
|
849
|
+
* only part that differs (a CLI flag vs a tool argument).
|
|
850
|
+
*/
|
|
851
|
+
function sourceOutcomeLine(outcome, apiUrl, howToEnable = '--upload-source') {
|
|
852
|
+
const site = editSiteHost(apiUrl);
|
|
853
|
+
if (outcome.state === 'uploaded') {
|
|
854
|
+
return `Source uploaded (${(0, source_archive_1.formatArchiveSize)(outcome.sizeBytes)}). Editable at ${site}/create.`;
|
|
855
|
+
}
|
|
856
|
+
if (outcome.state === 'failed') {
|
|
857
|
+
return `Source was NOT uploaded: ${outcome.message} The world published fine; it is not editable on ${site} until source uploads.`;
|
|
858
|
+
}
|
|
859
|
+
return `Source not uploaded. Pass ${howToEnable} to enable editing this world on ${site}.`;
|
|
860
|
+
}
|
|
861
|
+
const MEDIA_CONTENT_TYPES = {
|
|
862
|
+
'.png': 'image/png',
|
|
863
|
+
'.jpg': 'image/jpeg',
|
|
864
|
+
'.jpeg': 'image/jpeg',
|
|
865
|
+
'.webp': 'image/webp',
|
|
866
|
+
'.avif': 'image/avif',
|
|
867
|
+
'.gif': 'image/gif',
|
|
868
|
+
};
|
|
869
|
+
const THUMBNAIL_MAX_BYTES = 8 * 1024 * 1024;
|
|
870
|
+
const PREVIEW_MAX_BYTES = 32 * 1024 * 1024;
|
|
871
|
+
// Content type from file extension — png/jpg/jpeg/webp only. Pure/testable without touching disk.
|
|
872
|
+
function mediaContentTypeFromExtension(file) {
|
|
873
|
+
const ext = (0, node_path_1.extname)(file).toLowerCase();
|
|
874
|
+
const contentType = MEDIA_CONTENT_TYPES[ext];
|
|
875
|
+
if (!contentType)
|
|
876
|
+
throw new Error(`unsupported media file type "${ext || file}" — use png, jpg/jpeg, webp, avif, or gif`);
|
|
877
|
+
return contentType;
|
|
878
|
+
}
|
|
879
|
+
function findBundleThumbnail(root) {
|
|
880
|
+
for (const ext of Object.keys(MEDIA_CONTENT_TYPES)) {
|
|
881
|
+
const candidate = (0, node_path_1.join)(root, `thumbnail${ext}`);
|
|
882
|
+
if ((0, node_fs_1.existsSync)(candidate))
|
|
883
|
+
return candidate;
|
|
884
|
+
}
|
|
885
|
+
return undefined;
|
|
886
|
+
}
|
|
887
|
+
// Client-side size cap check — a friendlier failure than the server's 400 (world-media.ts:35-36).
|
|
888
|
+
function assertMediaSizeOk(size, kind) {
|
|
889
|
+
const max = kind === 'preview' ? PREVIEW_MAX_BYTES : THUMBNAIL_MAX_BYTES;
|
|
890
|
+
if (size > max) {
|
|
891
|
+
throw new Error(`file is ${(size / 1024 / 1024).toFixed(1)} MiB — the ${kind} limit is ${(max / 1024 / 1024).toFixed(0)} MiB`);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
// Anti-churn gate: an occupied slot refuses without an explicit --overwrite. Pure/testable —
|
|
895
|
+
// no HTTP — so every slot/overwrite combination is covered without mocking the API.
|
|
896
|
+
function assertMediaSlotWritable(world, kind, overwrite) {
|
|
897
|
+
const occupied = kind === 'thumbnail' ? world.hasCustomThumbnail : world.previewMediaUrl !== null;
|
|
898
|
+
if (!occupied || overwrite)
|
|
899
|
+
return;
|
|
900
|
+
const current = kind === 'thumbnail' ? world.thumbnailUrl : world.previewMediaUrl;
|
|
901
|
+
throw new Error(`The ${kind} slot is already set (${current}) — pass --overwrite to replace it (an explicit human decision, never automatic).`);
|
|
902
|
+
}
|
|
903
|
+
// Resolve the world (gate on the occupied-slot check) -> presign -> PUT -> finalize. Throws a clear
|
|
904
|
+
// Error on a refused slot, unsupported file type, oversize file, or any ApiError from the server.
|
|
905
|
+
async function setWorldMedia(slug, file, opts = {}) {
|
|
906
|
+
const creds = (0, config_1.loadCredentials)();
|
|
907
|
+
if (!creds)
|
|
908
|
+
throw new Error('Not logged in (or token expired). Run: helix login');
|
|
909
|
+
const api = api_1.HelixApi.forCredentials(creds);
|
|
910
|
+
return setWorldMediaWithApi(slug, file, api, opts);
|
|
911
|
+
}
|
|
912
|
+
async function setWorldMediaWithApi(slug, file, api, opts = {}) {
|
|
913
|
+
const kind = opts.kind ?? 'thumbnail';
|
|
914
|
+
const world = await api.requestItem('GET', `/api/v1/instant-worlds/${slug}`);
|
|
915
|
+
assertMediaSlotWritable(world, kind, opts.overwrite ?? false);
|
|
916
|
+
const contentType = mediaContentTypeFromExtension(file);
|
|
917
|
+
const bytes = (0, node_fs_1.readFileSync)(file);
|
|
918
|
+
assertMediaSizeOk(bytes.byteLength, kind);
|
|
919
|
+
const ticket = await api.requestItem('POST', `/api/v1/instant-worlds/${world.id}/media/upload`, {
|
|
920
|
+
contentType,
|
|
921
|
+
size: bytes.byteLength,
|
|
922
|
+
kind,
|
|
923
|
+
});
|
|
924
|
+
await (0, api_1.uploadToTicket)(ticket.url, bytes, ticket.contentType, ticket.cacheControl);
|
|
925
|
+
return api.requestItem('POST', `/api/v1/instant-worlds/${world.id}/media/finalize`, {
|
|
926
|
+
key: ticket.key,
|
|
927
|
+
kind,
|
|
928
|
+
});
|
|
929
|
+
}
|
|
930
|
+
// Clear a media slot back to the generated placeholder.
|
|
931
|
+
async function clearWorldMedia(slug, kind) {
|
|
932
|
+
const creds = (0, config_1.loadCredentials)();
|
|
933
|
+
if (!creds)
|
|
934
|
+
throw new Error('Not logged in (or token expired). Run: helix login');
|
|
935
|
+
const api = api_1.HelixApi.forCredentials(creds);
|
|
936
|
+
const world = await api.requestItem('GET', `/api/v1/instant-worlds/${slug}`);
|
|
937
|
+
return api.requestItem('DELETE', `/api/v1/instant-worlds/${world.id}/media?kind=${kind}`);
|
|
938
|
+
}
|
|
939
|
+
// New asset publication uses the sealed Package-first API in publications.ts.
|
|
940
|
+
var publications_1 = require("./publications");
|
|
941
|
+
Object.defineProperty(exports, "publishGlb", { enumerable: true, get: function () { return publications_1.publishGlb; } });
|
|
942
|
+
Object.defineProperty(exports, "makeItemFromPackage", { enumerable: true, get: function () { return publications_1.makeItemFromPackage; } });
|
|
943
|
+
Object.defineProperty(exports, "publishOwnedItemFromPackage", { enumerable: true, get: function () { return publications_1.publishOwnedItemFromPackage; } });
|
|
944
|
+
Object.defineProperty(exports, "PUBLICATIONS_UPLOAD_PATH", { enumerable: true, get: function () { return publications_1.PUBLICATIONS_UPLOAD_PATH; } });
|
|
945
|
+
Object.defineProperty(exports, "ITEMS_FROM_PACKAGE_PATH", { enumerable: true, get: function () { return publications_1.ITEMS_FROM_PACKAGE_PATH; } });
|
|
946
|
+
/**
|
|
947
|
+
* Delist a published universal item you own (CH-1671). Existing owners keep
|
|
948
|
+
* what they own; the item stops appearing on browse/marketplace and can no
|
|
949
|
+
* longer be newly acquired. This does NOT delete anything — `helix item
|
|
950
|
+
* publish` never made a delete path safe once anyone (including your own
|
|
951
|
+
* auto-granted copy) owns an instance, and delist is the actual way out.
|
|
952
|
+
* Only legal from a currently-published item; the server rejects a draft or
|
|
953
|
+
* an already-delisted one with a clear error (surfaced as ApiError).
|
|
954
|
+
*/
|
|
955
|
+
async function delistItem(itemId, creds, opts = {}, deps = {}) {
|
|
956
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
957
|
+
const body = opts.reason !== undefined ? { reason: opts.reason } : undefined;
|
|
958
|
+
const item = await api.requestItem('POST', `/api/v1/universal-items/${itemId}/delist`, body);
|
|
959
|
+
return item;
|
|
960
|
+
}
|
|
961
|
+
// --- Achievements -----------------------------------------------------------
|
|
962
|
+
//
|
|
963
|
+
// A world's achievement registry lives OUTSIDE the bundle: `helix.json` cannot
|
|
964
|
+
// declare one, and `helix publish` cannot check that a key exists — so a rule
|
|
965
|
+
// awarding an unregistered key publishes clean and no-ops at runtime. That is
|
|
966
|
+
// why these commands exist at all: registration was API/website-only, which put
|
|
967
|
+
// it out of reach of an agent building the world.
|
|
968
|
+
//
|
|
969
|
+
// Registration is ONE multipart round trip (text fields + a required 2D icon +
|
|
970
|
+
// an optional GLB trophy) and mints the soulbound item behind the badge. The
|
|
971
|
+
// world is addressed by SLUG here — the API is keyed by uuid, but a creator (and
|
|
972
|
+
// an agent that just published) knows the slug.
|
|
973
|
+
const achievementsWorldPath = (worldId) => `/api/v1/achievements/worlds/${worldId}`;
|
|
974
|
+
exports.achievementsWorldPath = achievementsWorldPath;
|
|
975
|
+
/**
|
|
976
|
+
* Everything `--dry-run` checks: the field rules, both files read and sniffed,
|
|
977
|
+
* and the icon proven to be a real, non-blank graphic. No network and no login,
|
|
978
|
+
* so an agent can verify a registration before asking a human to sign in.
|
|
979
|
+
*/
|
|
980
|
+
async function planAchievementRegistration(opts) {
|
|
981
|
+
const { fields, warnings } = (0, achievement_1.buildAchievementRegistration)(opts);
|
|
982
|
+
if (!opts.icon)
|
|
983
|
+
throw new Error('an achievement needs its 2D graphic — pass --icon <file>');
|
|
984
|
+
if (!(0, node_fs_1.existsSync)(opts.icon))
|
|
985
|
+
throw new Error(`icon file not found: ${opts.icon}`);
|
|
986
|
+
const iconContentType = (0, achievement_1.iconContentTypeFromExtension)(opts.icon);
|
|
987
|
+
const iconBytes = (0, node_fs_1.readFileSync)(opts.icon);
|
|
988
|
+
await (0, achievement_1.assertIconLooksReal)(iconBytes, opts.icon);
|
|
989
|
+
if (iconBytes.byteLength > achievement_1.ACHIEVEMENT_ICON_MAX_BYTES) {
|
|
990
|
+
throw new Error(`icon is ${(iconBytes.byteLength / 1024 / 1024).toFixed(1)} MiB — the limit is ${achievement_1.ACHIEVEMENT_ICON_MAX_BYTES / 1024 / 1024} MiB`);
|
|
991
|
+
}
|
|
992
|
+
let trophy = null;
|
|
993
|
+
let trophyBytes = null;
|
|
994
|
+
if (opts.trophy) {
|
|
995
|
+
if (!(0, node_fs_1.existsSync)(opts.trophy))
|
|
996
|
+
throw new Error(`trophy file not found: ${opts.trophy}`);
|
|
997
|
+
const trophyContentType = (0, item_1.meshContentTypeFromExtension)(opts.trophy);
|
|
998
|
+
trophyBytes = (0, node_fs_1.readFileSync)(opts.trophy);
|
|
999
|
+
(0, item_1.assertLooksLikeGlb)(trophyBytes, opts.trophy);
|
|
1000
|
+
if (trophyBytes.byteLength > achievement_1.ACHIEVEMENT_TROPHY_MAX_BYTES) {
|
|
1001
|
+
throw new Error(`trophy is ${(trophyBytes.byteLength / 1024 / 1024).toFixed(1)} MiB — the limit is ${achievement_1.ACHIEVEMENT_TROPHY_MAX_BYTES / 1024 / 1024} MiB`);
|
|
1002
|
+
}
|
|
1003
|
+
trophy = { file: opts.trophy, contentType: trophyContentType, sizeBytes: trophyBytes.byteLength };
|
|
1004
|
+
}
|
|
1005
|
+
else {
|
|
1006
|
+
warnings.push('no --trophy given; the backend bakes your icon onto the default plaque so the badge is still placeable in a home.');
|
|
1007
|
+
}
|
|
1008
|
+
return {
|
|
1009
|
+
worldSlug: opts.worldSlug,
|
|
1010
|
+
fields,
|
|
1011
|
+
icon: { file: opts.icon, contentType: iconContentType, sizeBytes: iconBytes.byteLength },
|
|
1012
|
+
trophy,
|
|
1013
|
+
warnings,
|
|
1014
|
+
iconBytes,
|
|
1015
|
+
trophyBytes,
|
|
162
1016
|
};
|
|
163
1017
|
}
|
|
1018
|
+
const filePart = (bytes, part) => [
|
|
1019
|
+
new Blob([new Uint8Array(bytes)], { type: part.contentType }),
|
|
1020
|
+
(0, node_path_1.basename)(part.file),
|
|
1021
|
+
];
|
|
1022
|
+
/**
|
|
1023
|
+
* Register (and mint the soulbound item for) a world achievement. Validate
|
|
1024
|
+
* locally → resolve the slug → one multipart POST. Throws ApiError
|
|
1025
|
+
* (render()-able) on any server rejection — a duplicate key included.
|
|
1026
|
+
*/
|
|
1027
|
+
async function registerAchievement(opts, creds, deps = {}) {
|
|
1028
|
+
const plan = await planAchievementRegistration(opts);
|
|
1029
|
+
const onProgress = deps.onProgress ?? (() => undefined);
|
|
1030
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1031
|
+
const world = await ownedWorldBySlug(api, opts.worldSlug);
|
|
1032
|
+
const form = new FormData();
|
|
1033
|
+
form.append('key', plan.fields.key);
|
|
1034
|
+
form.append('name', plan.fields.name);
|
|
1035
|
+
if (plan.fields.description !== undefined)
|
|
1036
|
+
form.append('description', plan.fields.description);
|
|
1037
|
+
if (plan.fields.points !== undefined)
|
|
1038
|
+
form.append('points', String(plan.fields.points));
|
|
1039
|
+
if (plan.fields.hidden !== undefined)
|
|
1040
|
+
form.append('hidden', String(plan.fields.hidden));
|
|
1041
|
+
form.append('unlockMode', plan.fields.unlockMode);
|
|
1042
|
+
// The nested criteria rides as a JSON STRING: multipart has no object field,
|
|
1043
|
+
// and the backend's DTO re-instantiates it from exactly this shape.
|
|
1044
|
+
if (plan.fields.criteria)
|
|
1045
|
+
form.append('criteria', JSON.stringify(plan.fields.criteria));
|
|
1046
|
+
form.append('image', ...filePart(plan.iconBytes, plan.icon));
|
|
1047
|
+
if (plan.trophy && plan.trophyBytes)
|
|
1048
|
+
form.append('mesh', ...filePart(plan.trophyBytes, plan.trophy));
|
|
1049
|
+
onProgress(`Registering "${plan.fields.key}" on ${world.slug} (${(plan.icon.sizeBytes / 1024).toFixed(1)} KiB icon)`);
|
|
1050
|
+
const achievement = await api.sendMultipart('POST', (0, exports.achievementsWorldPath)(world.id), form);
|
|
1051
|
+
return { achievement, warnings: plan.warnings };
|
|
1052
|
+
}
|
|
1053
|
+
/** Every achievement registered to a world, newest rollup data included. */
|
|
1054
|
+
async function listAchievements(worldSlug, creds, deps = {}) {
|
|
1055
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1056
|
+
const world = await ownedWorldBySlug(api, worldSlug);
|
|
1057
|
+
return api.request('GET', (0, exports.achievementsWorldPath)(world.id));
|
|
1058
|
+
}
|
|
1059
|
+
/**
|
|
1060
|
+
* Resolve a world-scoped `key` to the item id every mutation route is keyed by.
|
|
1061
|
+
* A creator (and every rule in their manifest) names the key; the uuid is an
|
|
1062
|
+
* implementation detail they should never have to carry.
|
|
1063
|
+
*/
|
|
1064
|
+
async function achievementByKey(api, worldSlug, key) {
|
|
1065
|
+
const world = await ownedWorldBySlug(api, worldSlug);
|
|
1066
|
+
const rows = await api.request('GET', (0, exports.achievementsWorldPath)(world.id));
|
|
1067
|
+
const wanted = key.trim().toLowerCase();
|
|
1068
|
+
const found = rows.find((a) => a.key === wanted);
|
|
1069
|
+
if (!found) {
|
|
1070
|
+
const known = rows.map((a) => a.key).join(', ') || '(none registered yet)';
|
|
1071
|
+
throw new Error(`No achievement with key "${wanted}" on world "${worldSlug}". Registered keys: ${known}`);
|
|
1072
|
+
}
|
|
1073
|
+
return found;
|
|
1074
|
+
}
|
|
1075
|
+
/**
|
|
1076
|
+
* Patch a registered achievement. `key`, `unlockMode` and `criteria` are NOT
|
|
1077
|
+
* patchable by design — a key is the identifier rules name, and re-declaring
|
|
1078
|
+
* how a badge is earned would silently re-label every copy already granted.
|
|
1079
|
+
*/
|
|
1080
|
+
async function updateAchievement(worldSlug, key, patch, creds, deps = {}) {
|
|
1081
|
+
const body = (0, achievement_1.buildAchievementUpdate)(patch);
|
|
1082
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1083
|
+
const target = await achievementByKey(api, worldSlug, key);
|
|
1084
|
+
return api.request('PATCH', `/api/v1/achievements/${target.id}`, body);
|
|
1085
|
+
}
|
|
1086
|
+
/**
|
|
1087
|
+
* Replace the 2D graphic. This endpoint exists because creators were driving the
|
|
1088
|
+
* generic universal-items presign route instead, which SUSPENDS the achievement;
|
|
1089
|
+
* it also re-bakes the default plaque, so the change reaches the 3D badge too.
|
|
1090
|
+
*/
|
|
1091
|
+
async function setAchievementIcon(worldSlug, key, file, creds, deps = {}) {
|
|
1092
|
+
if (!(0, node_fs_1.existsSync)(file))
|
|
1093
|
+
throw new Error(`icon file not found: ${file}`);
|
|
1094
|
+
const contentType = (0, achievement_1.iconContentTypeFromExtension)(file);
|
|
1095
|
+
const bytes = (0, node_fs_1.readFileSync)(file);
|
|
1096
|
+
await (0, achievement_1.assertIconLooksReal)(bytes, file);
|
|
1097
|
+
if (bytes.byteLength > achievement_1.ACHIEVEMENT_ICON_MAX_BYTES) {
|
|
1098
|
+
throw new Error(`icon is ${(bytes.byteLength / 1024 / 1024).toFixed(1)} MiB — the limit is ${achievement_1.ACHIEVEMENT_ICON_MAX_BYTES / 1024 / 1024} MiB`);
|
|
1099
|
+
}
|
|
1100
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1101
|
+
const target = await achievementByKey(api, worldSlug, key);
|
|
1102
|
+
const form = new FormData();
|
|
1103
|
+
form.append('image', ...filePart(bytes, { file, contentType, sizeBytes: bytes.byteLength }));
|
|
1104
|
+
return api.sendMultipart('PUT', `/api/v1/achievements/${target.id}/icon`, form);
|
|
1105
|
+
}
|
|
1106
|
+
// --- Universal-item distributions ------------------------------------------
|
|
1107
|
+
exports.ITEM_DISTRIBUTIONS_PATH = '/api/v1/item-distributions';
|
|
1108
|
+
exports.ITEM_DISTRIBUTIONS_CREATOR_PATH = `${exports.ITEM_DISTRIBUTIONS_PATH}/creator`;
|
|
1109
|
+
/** A route is a Claim (free) when the server says so or its price is 0; the price may arrive as a number or a decimal
|
|
1110
|
+
* string, so `=== 0` alone mislabels a free route "Buy". */
|
|
1111
|
+
function isClaimRoute(d) {
|
|
1112
|
+
if (d.isFree === true)
|
|
1113
|
+
return true;
|
|
1114
|
+
if (d.priceLix === null || d.priceLix === undefined || d.priceLix === '')
|
|
1115
|
+
return false;
|
|
1116
|
+
return Number(d.priceLix) === 0;
|
|
1117
|
+
}
|
|
1118
|
+
/** First line of `helix item distribution create`. `requestedPriceLix` backs up a response that omits the price. */
|
|
1119
|
+
function distributionCreatedHeadline(created, requestedPriceLix) {
|
|
1120
|
+
const claim = isClaimRoute(created) || ((created.priceLix === undefined || created.priceLix === null) && requestedPriceLix === 0);
|
|
1121
|
+
return claim ? '✔ Created Claim route (free).' : '✔ Created Buy route.';
|
|
1122
|
+
}
|
|
1123
|
+
const unwrapDistribution = (response) => 'item' in response ? response.item : response;
|
|
1124
|
+
/** Resolve an optional creator world slug, then create one canonical route. */
|
|
1125
|
+
async function createItemDistribution(options, creds, deps = {}) {
|
|
1126
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1127
|
+
let fields = (0, distribution_1.buildItemDistribution)(options);
|
|
1128
|
+
if (fields.worldSlug) {
|
|
1129
|
+
const world = await ownedWorldBySlug(api, fields.worldSlug);
|
|
1130
|
+
const { worldSlug: _worldSlug, ...withoutSlug } = fields;
|
|
1131
|
+
fields = { ...withoutSlug, worldId: world.id };
|
|
1132
|
+
}
|
|
1133
|
+
// Derived AFTER slug resolution so the idempotency key covers the worldId
|
|
1134
|
+
// the server will actually store, not the slug the caller typed.
|
|
1135
|
+
const body = {
|
|
1136
|
+
intentId: options.intentId ?? (0, distribution_1.distributionIntentId)(fields),
|
|
1137
|
+
...fields,
|
|
1138
|
+
};
|
|
1139
|
+
deps.onProgress?.(`${fields.priceLix === 0 ? 'Creating Claim' : 'Creating Buy'} distribution for ${options.itemId}`);
|
|
1140
|
+
const response = await api.request('POST', exports.ITEM_DISTRIBUTIONS_PATH, body);
|
|
1141
|
+
return unwrapDistribution(response);
|
|
1142
|
+
}
|
|
1143
|
+
async function listItemDistributions(itemId, creds, deps = {}) {
|
|
1144
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1145
|
+
const response = await api.request('GET', `${exports.ITEM_DISTRIBUTIONS_CREATOR_PATH}?itemId=${encodeURIComponent(itemId)}`);
|
|
1146
|
+
if (Array.isArray(response))
|
|
1147
|
+
return response;
|
|
1148
|
+
return response.distributions ?? response.data ?? [];
|
|
1149
|
+
}
|
|
1150
|
+
async function updateItemDistribution(distributionId, input, creds, deps = {}) {
|
|
1151
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1152
|
+
const patch = (0, distribution_1.buildItemDistributionUpdate)(input);
|
|
1153
|
+
const response = await api.request('PATCH', `${exports.ITEM_DISTRIBUTIONS_PATH}/${distributionId}`, patch);
|
|
1154
|
+
return unwrapDistribution(response);
|
|
1155
|
+
}
|
|
1156
|
+
async function disableItemDistribution(distributionId, creds, deps = {}) {
|
|
1157
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1158
|
+
const owned = await api.request('GET', exports.ITEM_DISTRIBUTIONS_CREATOR_PATH);
|
|
1159
|
+
const rows = Array.isArray(owned) ? owned : owned.distributions ?? owned.data ?? [];
|
|
1160
|
+
const current = rows.find((entry) => entry.id === distributionId);
|
|
1161
|
+
if (!current || !current.updatedAt || !Number.isFinite(Date.parse(current.updatedAt))) {
|
|
1162
|
+
throw new Error('Cannot disable distribution without its current creator-owned revision');
|
|
1163
|
+
}
|
|
1164
|
+
// One optimistic write: a conflict must reach the caller, never trigger a
|
|
1165
|
+
// blind retry against a newer policy another editor just saved.
|
|
1166
|
+
const response = await api.request('POST', `${exports.ITEM_DISTRIBUTIONS_PATH}/${distributionId}/disable`, { expectedUpdatedAt: current.updatedAt });
|
|
1167
|
+
return unwrapDistribution(response);
|
|
1168
|
+
}
|
|
1169
|
+
// --- In-world products ------------------------------------------------------
|
|
1170
|
+
//
|
|
1171
|
+
// A world's product registry is what `Helix.purchase` sells: the shell holds the
|
|
1172
|
+
// player's session, renders the confirm popup and settles server-side, so a
|
|
1173
|
+
// world can only sell what a CREATOR registered here first. Registration was
|
|
1174
|
+
// API/website-only, which put monetizing a world out of reach of the agent that
|
|
1175
|
+
// built it — that is the gap these commands close.
|
|
1176
|
+
//
|
|
1177
|
+
// ORDERING: registration needs the world ROW to exist and be owned, NOT a
|
|
1178
|
+
// Published status — `helix world create` mints that row before any build, and
|
|
1179
|
+
// `helix product list <slug>` reads a Draft world's registry. Only the no-slug
|
|
1180
|
+
// creator listing (`GET creator/worlds`) filters to Published.
|
|
1181
|
+
//
|
|
1182
|
+
// The world is addressed by SLUG here — the API is keyed by uuid, but a creator
|
|
1183
|
+
// (and an agent that just published) knows the slug.
|
|
1184
|
+
exports.PRODUCTS_PATH = '/api/v1/iwp/products';
|
|
1185
|
+
exports.CREATOR_WORLDS_PATH = '/api/v1/iwp/creator/worlds';
|
|
1186
|
+
const productsWorldPath = (worldId) => `${exports.CREATOR_WORLDS_PATH}/${worldId}/products`;
|
|
1187
|
+
exports.productsWorldPath = productsWorldPath;
|
|
1188
|
+
/**
|
|
1189
|
+
* Everything `--dry-run` checks: the field rules and the type/item coherence.
|
|
1190
|
+
* No network and no login, so an agent can verify a registration before asking
|
|
1191
|
+
* a human to sign in.
|
|
1192
|
+
*/
|
|
1193
|
+
function planProductRegistration(opts) {
|
|
1194
|
+
const { fields, warnings } = (0, product_1.buildProductRegistration)(opts);
|
|
1195
|
+
return { worldSlug: opts.worldSlug, fields, warnings };
|
|
1196
|
+
}
|
|
1197
|
+
/**
|
|
1198
|
+
* Register a purchasable product on a world: validate locally → resolve the slug
|
|
1199
|
+
* → one JSON POST. Throws ApiError (render()-able) on any server rejection — a
|
|
1200
|
+
* duplicate key, an unpublished linked item, or a non-owned world included.
|
|
1201
|
+
*/
|
|
1202
|
+
async function registerProduct(opts, creds, deps = {}) {
|
|
1203
|
+
const plan = planProductRegistration(opts);
|
|
1204
|
+
const onProgress = deps.onProgress ?? (() => undefined);
|
|
1205
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1206
|
+
const world = await ownedWorldBySlug(api, opts.worldSlug);
|
|
1207
|
+
onProgress(`Registering "${plan.fields.title}" on ${world.slug} at ${plan.fields.priceLix} LIX`);
|
|
1208
|
+
const product = await api.request('POST', exports.PRODUCTS_PATH, { worldId: world.id, ...plan.fields });
|
|
1209
|
+
return { product, warnings: plan.warnings };
|
|
1210
|
+
}
|
|
1211
|
+
/** Every product registered to a world, active or not. */
|
|
1212
|
+
async function listProducts(worldSlug, creds, deps = {}) {
|
|
1213
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1214
|
+
const world = await ownedWorldBySlug(api, worldSlug);
|
|
1215
|
+
const res = await api.request('GET', (0, exports.productsWorldPath)(world.id));
|
|
1216
|
+
return res.products ?? [];
|
|
1217
|
+
}
|
|
1218
|
+
/** Every PUBLISHED world of the caller's with its registry — the "where can I sell?" view. */
|
|
1219
|
+
async function listProductWorlds(creds, deps = {}) {
|
|
1220
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1221
|
+
const res = await api.request('GET', exports.CREATOR_WORLDS_PATH);
|
|
1222
|
+
return res.worlds ?? [];
|
|
1223
|
+
}
|
|
1224
|
+
/**
|
|
1225
|
+
* Resolve a product within a world to the uuid every mutation route is keyed by.
|
|
1226
|
+
* `ref` is the creator's `key` — or the uuid itself, because a key is optional
|
|
1227
|
+
* and a keyless product has nothing else to name it by.
|
|
1228
|
+
*/
|
|
1229
|
+
async function productByRef(api, worldSlug, ref) {
|
|
1230
|
+
const world = await ownedWorldBySlug(api, worldSlug);
|
|
1231
|
+
const res = await api.request('GET', (0, exports.productsWorldPath)(world.id));
|
|
1232
|
+
const rows = res.products ?? [];
|
|
1233
|
+
const wanted = ref.trim().toLowerCase();
|
|
1234
|
+
const found = rows.find((p) => p.id === ref.trim() || (p.key !== null && p.key === wanted));
|
|
1235
|
+
if (!found) {
|
|
1236
|
+
const known = rows.map((p) => p.key ?? `${p.title} (${p.id})`).join(', ') || '(none registered yet)';
|
|
1237
|
+
throw new Error(`No product with key or id "${ref}" on world "${worldSlug}". Registered products: ${known}`);
|
|
1238
|
+
}
|
|
1239
|
+
return found;
|
|
1240
|
+
}
|
|
1241
|
+
/**
|
|
1242
|
+
* Patch a registered product. `key` and `type` are NOT patchable by design — a
|
|
1243
|
+
* key is what world code buys (`pkey:<key>`), and changing what a purchase
|
|
1244
|
+
* hands over would re-label every copy already sold.
|
|
1245
|
+
*/
|
|
1246
|
+
async function updateProduct(worldSlug, ref, patch, creds, deps = {}) {
|
|
1247
|
+
const body = (0, product_1.buildProductUpdate)(patch);
|
|
1248
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1249
|
+
const target = await productByRef(api, worldSlug, ref);
|
|
1250
|
+
return api.request('PATCH', `${exports.PRODUCTS_PATH}/${target.id}`, body);
|
|
1251
|
+
}
|
|
1252
|
+
/**
|
|
1253
|
+
* Take a product off sale (or put it back). Deactivating is the only way to
|
|
1254
|
+
* retire one: the row stays, so past purchases and their grants still resolve.
|
|
1255
|
+
*/
|
|
1256
|
+
async function setProductActive(worldSlug, ref, active, creds, deps = {}) {
|
|
1257
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1258
|
+
const target = await productByRef(api, worldSlug, ref);
|
|
1259
|
+
return api.request('POST', `${exports.PRODUCTS_PATH}/${target.id}/active`, { active });
|
|
1260
|
+
}
|
|
164
1261
|
// Validate the bundle → create the version (presigned tickets per code/asset
|
|
165
1262
|
// channel) → upload → finalize. Admin-only on the server.
|
|
166
|
-
async function publishPackage(root, creds, onProgress = () => undefined) {
|
|
167
|
-
const validator = await (0, ability_1.loadVendoredValidator)();
|
|
1263
|
+
async function publishPackage(root, creds, onProgress = () => undefined, deps = {}) {
|
|
1264
|
+
const validator = deps.validator ?? (await (0, ability_1.loadVendoredValidator)());
|
|
168
1265
|
const check = (0, package_1.checkPackageBundle)(root, validator);
|
|
169
1266
|
if (check.errors.length || !check.envelope) {
|
|
170
1267
|
throw new Error(`Bundle is invalid:\n${check.errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
171
1268
|
}
|
|
172
1269
|
const envelope = check.envelope;
|
|
173
|
-
const api = api_1.HelixApi.forCredentials(creds);
|
|
1270
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1271
|
+
const files = check.files.map((file) => {
|
|
1272
|
+
const body = (0, node_fs_1.readFileSync)(file.absolutePath);
|
|
1273
|
+
return {
|
|
1274
|
+
...file,
|
|
1275
|
+
body,
|
|
1276
|
+
checksumSha256: (0, node_crypto_1.createHash)('sha256').update(body).digest('hex'),
|
|
1277
|
+
};
|
|
1278
|
+
});
|
|
174
1279
|
onProgress(`Publishing ${envelope.kind} "${envelope.title}" (${envelope.slug}@${envelope.version}) — ${check.files.length} files`);
|
|
175
1280
|
const created = await api.requestItem('POST', `/api/v1/instant-packages/${envelope.slug}/versions`, {
|
|
176
1281
|
manifest: envelope,
|
|
177
1282
|
payload: check.payload ?? undefined,
|
|
178
|
-
files:
|
|
1283
|
+
files: files.map((f) => ({
|
|
1284
|
+
path: f.path,
|
|
1285
|
+
size: f.size,
|
|
1286
|
+
checksumSha256: f.checksumSha256,
|
|
1287
|
+
})),
|
|
179
1288
|
});
|
|
1289
|
+
if (created.status === 'active' && created.uploads.length === 0) {
|
|
1290
|
+
onProgress('Already active with the same verified checksum — no-op');
|
|
1291
|
+
return api.requestItem('GET', `/api/v1/instant-packages/${envelope.slug}/versions/${encodeURIComponent(envelope.version)}`);
|
|
1292
|
+
}
|
|
180
1293
|
let done = 0;
|
|
181
1294
|
const queue = [...created.uploads];
|
|
182
1295
|
await Promise.all(Array.from({ length: UPLOAD_CONCURRENCY }, async () => {
|
|
183
1296
|
for (let ticket = queue.shift(); ticket; ticket = queue.shift()) {
|
|
184
|
-
const file =
|
|
185
|
-
await (
|
|
1297
|
+
const file = files.find((f) => f.path === ticket.path);
|
|
1298
|
+
await (deps.upload ?? api_1.uploadToTicket)(ticket.url, file.body, ticket.contentType, ticket.cacheControl);
|
|
186
1299
|
done += 1;
|
|
187
1300
|
onProgress(`Uploaded ${done}/${created.uploads.length}`);
|
|
188
1301
|
}
|
|
@@ -196,8 +1309,19 @@ async function publishPackage(root, creds, onProgress = () => undefined) {
|
|
|
196
1309
|
revision: final.revision,
|
|
197
1310
|
codeBaseUrl: final.codeBaseUrl,
|
|
198
1311
|
assetBaseUrl: final.assetBaseUrl,
|
|
1312
|
+
checksumSha256: final.checksumSha256,
|
|
199
1313
|
};
|
|
200
1314
|
}
|
|
1315
|
+
async function publishInteractable(root, creds, onProgress = () => undefined, deps = {}) {
|
|
1316
|
+
const published = await (deps.publishPackage ?? publishPackage)(root, creds, onProgress, deps);
|
|
1317
|
+
if (published.kind !== 'interactable' || !published.checksumSha256) {
|
|
1318
|
+
throw new Error(`publish-interactable requires an interactable bundle with a verified checksum; got ${published.kind}`);
|
|
1319
|
+
}
|
|
1320
|
+
const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
|
|
1321
|
+
onProgress('Linking the official free Marketplace item');
|
|
1322
|
+
const linked = await api.request('POST', `/api/v1/instant-packages/${published.slug}/versions/${encodeURIComponent(published.version)}/product`);
|
|
1323
|
+
return { ...published, ...linked };
|
|
1324
|
+
}
|
|
201
1325
|
// Public discovery — no auth. List published systems/abilities/asset-packs.
|
|
202
1326
|
function listPackages(apiUrl, kind, system) {
|
|
203
1327
|
const api = new api_1.HelixApi(apiUrl);
|
|
@@ -244,7 +1368,8 @@ async function ownedWorldBySlug(api, slug) {
|
|
|
244
1368
|
const world = mine.data.find((w) => w.slug === slug);
|
|
245
1369
|
if (!world) {
|
|
246
1370
|
const known = mine.data.map((w) => w.slug).join(', ') || '(none)';
|
|
247
|
-
throw new Error(`No world of yours has the slug "${slug}". Your worlds: ${known}`
|
|
1371
|
+
throw new Error(`No world of yours has the slug "${slug}". Your worlds: ${known}. ` +
|
|
1372
|
+
`Run 'helix world create --slug ${slug} --title <title>' first.`);
|
|
248
1373
|
}
|
|
249
1374
|
return world;
|
|
250
1375
|
}
|
|
@@ -407,4 +1532,42 @@ async function checkForUpdates(opts = {}) {
|
|
|
407
1532
|
return { name: registryName, installed, latest, status, updateHint };
|
|
408
1533
|
}));
|
|
409
1534
|
}
|
|
1535
|
+
var doctor_1 = require("./unreal/doctor");
|
|
1536
|
+
Object.defineProperty(exports, "runUnrealDoctor", { enumerable: true, get: function () { return doctor_1.runUnrealDoctor; } });
|
|
1537
|
+
Object.defineProperty(exports, "locateEditorCmd", { enumerable: true, get: function () { return doctor_1.locateEditorCmd; } });
|
|
1538
|
+
Object.defineProperty(exports, "findUProject", { enumerable: true, get: function () { return doctor_1.findUProject; } });
|
|
1539
|
+
Object.defineProperty(exports, "DOCTOR_REPORT_SCHEMA", { enumerable: true, get: function () { return doctor_1.DOCTOR_REPORT_SCHEMA; } });
|
|
1540
|
+
var itemThumbnail_1 = require("./itemThumbnail");
|
|
1541
|
+
Object.defineProperty(exports, "refreshItemThumbnail", { enumerable: true, get: function () { return itemThumbnail_1.refreshItemThumbnail; } });
|
|
1542
|
+
Object.defineProperty(exports, "setItemThumbnail", { enumerable: true, get: function () { return itemThumbnail_1.setItemThumbnail; } });
|
|
1543
|
+
Object.defineProperty(exports, "describeThumbnailError", { enumerable: true, get: function () { return itemThumbnail_1.describeThumbnailError; } });
|
|
1544
|
+
Object.defineProperty(exports, "renderItemThumbnailResult", { enumerable: true, get: function () { return itemThumbnail_1.renderItemThumbnailResult; } });
|
|
1545
|
+
Object.defineProperty(exports, "MAX_ITEM_THUMBNAIL_BYTES", { enumerable: true, get: function () { return itemThumbnail_1.MAX_ITEM_THUMBNAIL_BYTES; } });
|
|
1546
|
+
var foliageLods_1 = require("./placements/foliageLods");
|
|
1547
|
+
Object.defineProperty(exports, "bakeFoliageLods", { enumerable: true, get: function () { return foliageLods_1.bakeFoliageLods; } });
|
|
1548
|
+
var attachFoliageLods_1 = require("./placements/attachFoliageLods");
|
|
1549
|
+
Object.defineProperty(exports, "attachFoliageLods", { enumerable: true, get: function () { return attachFoliageLods_1.attachFoliageLods; } });
|
|
1550
|
+
var scene_1 = require("./sceneHlod/scene");
|
|
1551
|
+
Object.defineProperty(exports, "bakeSceneHlod", { enumerable: true, get: function () { return scene_1.bakeSceneHlod; } });
|
|
1552
|
+
Object.defineProperty(exports, "inspectSceneHlod", { enumerable: true, get: function () { return scene_1.inspectSceneHlod; } });
|
|
1553
|
+
Object.defineProperty(exports, "tagSceneHlod", { enumerable: true, get: function () { return scene_1.tagSceneHlod; } });
|
|
1554
|
+
Object.defineProperty(exports, "planSceneHlod", { enumerable: true, get: function () { return scene_1.planSceneHlod; } });
|
|
1555
|
+
Object.defineProperty(exports, "DEFAULT_HLOD_LAYER", { enumerable: true, get: function () { return scene_1.DEFAULT_HLOD_LAYER; } });
|
|
1556
|
+
Object.defineProperty(exports, "HLOD_BAKER_VERSION", { enumerable: true, get: function () { return scene_1.HLOD_BAKER_VERSION; } });
|
|
1557
|
+
var bakeSurface_1 = require("./sceneHlod/bakeSurface");
|
|
1558
|
+
Object.defineProperty(exports, "bakeHlodSurface", { enumerable: true, get: function () { return bakeSurface_1.bakeHlodSurface; } });
|
|
1559
|
+
var approximate_1 = require("./sceneHlod/approximate");
|
|
1560
|
+
Object.defineProperty(exports, "approximateHlodGeometry", { enumerable: true, get: function () { return approximate_1.approximateHlodGeometry; } });
|
|
1561
|
+
var sharedAtlas_1 = require("./sceneHlod/sharedAtlas");
|
|
1562
|
+
Object.defineProperty(exports, "planSharedHlodAtlas", { enumerable: true, get: function () { return sharedAtlas_1.planSharedHlodAtlas; } });
|
|
1563
|
+
Object.defineProperty(exports, "bakeSharedHlodAtlas", { enumerable: true, get: function () { return sharedAtlas_1.bakeSharedHlodAtlas; } });
|
|
1564
|
+
var cellArtifact_1 = require("./sceneHlod/cellArtifact");
|
|
1565
|
+
Object.defineProperty(exports, "writeHlodCellGlb", { enumerable: true, get: function () { return cellArtifact_1.writeHlodCellGlb; } });
|
|
1566
|
+
Object.defineProperty(exports, "writeSharedHlodMaterialGlb", { enumerable: true, get: function () { return cellArtifact_1.writeSharedHlodMaterialGlb; } });
|
|
1567
|
+
var complete_1 = require("./sceneHlod/complete");
|
|
1568
|
+
Object.defineProperty(exports, "bakeCompleteSceneHlod", { enumerable: true, get: function () { return complete_1.bakeCompleteSceneHlod; } });
|
|
1569
|
+
Object.defineProperty(exports, "DEFAULT_COMPLETE_HLOD_SETTINGS", { enumerable: true, get: function () { return complete_1.DEFAULT_COMPLETE_HLOD_SETTINGS; } });
|
|
1570
|
+
var refinement_1 = require("./sceneHlod/refinement");
|
|
1571
|
+
Object.defineProperty(exports, "bakeSceneHlodRefinements", { enumerable: true, get: function () { return refinement_1.bakeSceneHlodRefinements; } });
|
|
1572
|
+
Object.defineProperty(exports, "DEFAULT_HLOD_REFINEMENT_SETTINGS", { enumerable: true, get: function () { return refinement_1.DEFAULT_HLOD_REFINEMENT_SETTINGS; } });
|
|
410
1573
|
//# sourceMappingURL=lib.js.map
|