@playdrop/playdrop-cli 0.16.2 → 0.16.11
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/bin/playdrop +1 -2
- package/config/client-meta.json +4 -4
- package/dist/apiClient.d.ts +2 -2
- package/dist/apiClient.js +16 -20
- package/dist/appUrls.d.ts +2 -2
- package/dist/appUrls.js +31 -33
- package/dist/apps/build.d.ts +2 -2
- package/dist/apps/build.js +83 -83
- package/dist/apps/index.d.ts +7 -7
- package/dist/apps/index.js +8 -8
- package/dist/apps/loadCheck.d.ts +28 -16
- package/dist/apps/loadCheck.js +411 -279
- package/dist/apps/registration.d.ts +3 -3
- package/dist/apps/registration.js +1 -1
- package/dist/apps/staticHtml.d.ts +3 -3
- package/dist/apps/staticHtml.js +90 -91
- package/dist/apps/surfaceProfiles.d.ts +2 -2
- package/dist/apps/surfaceProfiles.js +6 -6
- package/dist/apps/upload.d.ts +5 -5
- package/dist/apps/upload.js +75 -81
- package/dist/apps/validate.d.ts +2 -2
- package/dist/apps/validate.js +18 -22
- package/dist/assetSpecs.d.ts +2 -2
- package/dist/assetSpecs.js +35 -35
- package/dist/assets/model-artifacts.d.ts +1 -1
- package/dist/assets/model-artifacts.js +81 -77
- package/dist/assets/model-worker.d.ts +1 -1
- package/dist/assets/model-worker.js +6 -6
- package/dist/browser.js +9 -9
- package/dist/catalogue-utils.d.ts +1 -1
- package/dist/catalogue-utils.js +26 -26
- package/dist/catalogue.d.ts +21 -16
- package/dist/catalogue.js +509 -413
- package/dist/clientInfo.d.ts +1 -1
- package/dist/clientInfo.js +28 -28
- package/dist/commandContext.d.ts +5 -5
- package/dist/commandContext.js +19 -23
- package/dist/commands/accounts.js +6 -6
- package/dist/commands/ads.js +16 -16
- package/dist/commands/agents.d.ts +2 -2
- package/dist/commands/agents.js +131 -127
- package/dist/commands/boosts.js +41 -31
- package/dist/commands/browse.d.ts +2 -2
- package/dist/commands/browse.js +168 -128
- package/dist/commands/build.js +9 -9
- package/dist/commands/captureListing.d.ts +8 -8
- package/dist/commands/captureListing.js +292 -332
- package/dist/commands/changelog.js +1 -1
- package/dist/commands/chat.js +51 -53
- package/dist/commands/check.d.ts +1 -1
- package/dist/commands/check.js +44 -44
- package/dist/commands/clients.d.ts +3 -3
- package/dist/commands/clients.js +67 -64
- package/dist/commands/comments.js +36 -29
- package/dist/commands/create.js +305 -312
- package/dist/commands/createRemixContent.d.ts +1 -1
- package/dist/commands/createRemixContent.js +65 -60
- package/dist/commands/creations.js +205 -135
- package/dist/commands/credits.js +37 -27
- package/dist/commands/detail.js +40 -34
- package/dist/commands/dev.js +103 -126
- package/dist/commands/devBrowser.js +74 -65
- package/dist/commands/devRuntimeAssets.d.ts +4 -4
- package/dist/commands/devRuntimeAssets.js +38 -40
- package/dist/commands/devServer.d.ts +4 -4
- package/dist/commands/devServer.js +183 -174
- package/dist/commands/devShared.d.ts +3 -3
- package/dist/commands/devShared.js +31 -31
- package/dist/commands/doctor.d.ts +5 -5
- package/dist/commands/doctor.js +63 -57
- package/dist/commands/documentation.js +42 -32
- package/dist/commands/feedback.js +59 -42
- package/dist/commands/format.js +9 -9
- package/dist/commands/generation.d.ts +2 -2
- package/dist/commands/generation.js +344 -326
- package/dist/commands/init.d.ts +4 -4
- package/dist/commands/init.js +64 -61
- package/dist/commands/login.d.ts +2 -2
- package/dist/commands/login.js +42 -62
- package/dist/commands/logout.js +4 -4
- package/dist/commands/marketing.d.ts +8 -8
- package/dist/commands/marketing.js +246 -297
- package/dist/commands/notes.js +19 -19
- package/dist/commands/notifications.js +34 -22
- package/dist/commands/npmProcess.js +3 -3
- package/dist/commands/ownedRuntimeImageValidation.d.ts +1 -1
- package/dist/commands/ownedRuntimeImageValidation.js +19 -17
- package/dist/commands/play.js +12 -21
- package/dist/commands/publicPages.js +8 -4
- package/dist/commands/review.js +123 -110
- package/dist/commands/search.js +107 -88
- package/dist/commands/tags.js +10 -12
- package/dist/commands/taskCaptureSession.d.ts +3 -3
- package/dist/commands/taskCaptureSession.js +3 -3
- package/dist/commands/tweaks.js +25 -23
- package/dist/commands/upgrade.js +40 -31
- package/dist/commands/upload-content.d.ts +5 -5
- package/dist/commands/upload-content.js +130 -122
- package/dist/commands/upload-graph.d.ts +1 -1
- package/dist/commands/upload-graph.js +7 -11
- package/dist/commands/upload.d.ts +7 -7
- package/dist/commands/upload.js +196 -217
- package/dist/commands/validate.js +33 -32
- package/dist/commands/versionsBrowse.js +61 -51
- package/dist/commands/whoami.js +11 -14
- package/dist/commands/worker/archive-staging.d.ts +9 -0
- package/dist/commands/worker/archive-staging.js +257 -0
- package/dist/commands/worker/instrument-evidence.d.ts +1 -1
- package/dist/commands/worker/instrument-evidence.js +41 -43
- package/dist/commands/worker/provider-telemetry.d.ts +2 -1
- package/dist/commands/worker/provider-telemetry.js +181 -64
- package/dist/commands/worker/runtime.d.ts +18 -3
- package/dist/commands/worker/runtime.js +291 -239
- package/dist/commands/worker.d.ts +83 -22
- package/dist/commands/worker.js +1980 -1411
- package/dist/commands/workspaces.d.ts +2 -2
- package/dist/commands/workspaces.js +57 -57
- package/dist/config.js +23 -20
- package/dist/devAuth.d.ts +3 -3
- package/dist/devAuth.js +20 -17
- package/dist/environment.d.ts +1 -1
- package/dist/environment.js +34 -34
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +7 -7
- package/dist/externalAssetPackValidation.d.ts +1 -1
- package/dist/externalAssetPackValidation.js +9 -9
- package/dist/http.d.ts +1 -1
- package/dist/http.js +9 -9
- package/dist/index.js +657 -664
- package/dist/listingCaptureLease.js +23 -23
- package/dist/listingPreflight.d.ts +2 -2
- package/dist/listingPreflight.js +33 -33
- package/dist/messages.js +6 -14
- package/dist/output.js +9 -9
- package/dist/playwright.d.ts +1 -1
- package/dist/playwright.js +35 -40
- package/dist/proxyFetch.js +30 -27
- package/dist/recorderRelease.js +8 -8
- package/dist/refs.d.ts +5 -5
- package/dist/refs.js +40 -37
- package/dist/sessionCookie.js +15 -21
- package/dist/shellProbe.js +5 -5
- package/dist/taskSelection.d.ts +3 -3
- package/dist/taskSelection.js +67 -62
- package/dist/taskUtils.d.ts +1 -1
- package/dist/taskUtils.js +4 -4
- package/dist/tweakStaleness.d.ts +3 -3
- package/dist/tweakStaleness.js +8 -8
- package/dist/uploadLog.d.ts +3 -3
- package/dist/uploadLog.js +51 -51
- package/dist/versionCompare.js +3 -3
- package/dist/workerAppProject.d.ts +1 -1
- package/dist/workerAppProject.js +10 -17
- package/dist/workspaceAuth.d.ts +1 -1
- package/dist/workspaceAuth.js +28 -22
- package/node_modules/@playdrop/ai-client/dist/index.d.ts +35 -35
- package/node_modules/@playdrop/ai-client/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/client.d.ts +34 -33
- package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/core/errors.d.ts +1 -1
- package/node_modules/@playdrop/api-client/dist/core/errors.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/core/request.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/core/request.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/admin.js +4 -1
- package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.d.ts +4 -3
- package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.js +12 -0
- package/node_modules/@playdrop/api-client/dist/domains/ai.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/ai.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +4 -4
- package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts +4 -4
- package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +4 -4
- package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/auth.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/auth.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/comments.d.ts +3 -3
- package/node_modules/@playdrop/api-client/dist/domains/comments.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/free-credits.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/free-credits.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/me.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/me.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/player-meta.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/player-meta.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/playtrade.d.ts +3 -3
- package/node_modules/@playdrop/api-client/dist/domains/playtrade.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/playtrade.js +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/search.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/search.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts +2 -2
- package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/index.d.ts +19 -18
- package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/index.js +7 -2
- package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.js +47 -47
- package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.d.ts +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.js +32 -47
- package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/format-utils.js +16 -18
- package/node_modules/@playdrop/boxel-core/dist/src/format-utils.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/geometry.d.ts +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/index.d.ts +4 -4
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/common.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/index.d.ts +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.d.ts +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.js +44 -45
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/types.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.d.ts +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.js +40 -44
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.d.ts +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.js +30 -34
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/index.d.ts +4 -4
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/index.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.d.ts +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.js +23 -20
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/artifacts.d.ts +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/artifacts.js +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.js +21 -21
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/index.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/index.js +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/index.d.ts +19 -19
- package/node_modules/@playdrop/boxel-core/dist/src/materials.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/materials.js +12 -16
- package/node_modules/@playdrop/boxel-core/dist/src/materials.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.js +38 -41
- package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/serialization.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/serialization.js +54 -56
- package/node_modules/@playdrop/boxel-core/dist/src/serialization.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/textures.d.ts +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/textures.js +39 -45
- package/node_modules/@playdrop/boxel-core/dist/src/textures.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.d.ts +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.js +39 -43
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.d.ts +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.js +35 -35
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.js +18 -18
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.d.ts +3 -3
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.js +50 -48
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.js +22 -26
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.d.ts +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.js +8 -8
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.d.ts +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.js +23 -28
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/types.d.ts +8 -8
- package/node_modules/@playdrop/boxel-core/dist/src/validation.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/validation.js +93 -95
- package/node_modules/@playdrop/boxel-core/dist/src/validation.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.js +2 -2
- package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.js.map +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/voxels.d.ts +1 -1
- package/node_modules/@playdrop/boxel-core/dist/src/voxels.js +2 -7
- package/node_modules/@playdrop/boxel-core/dist/src/voxels.js.map +1 -1
- package/node_modules/@playdrop/boxel-three/dist/src/animations.d.ts +3 -3
- package/node_modules/@playdrop/boxel-three/dist/src/builders.d.ts +4 -4
- package/node_modules/@playdrop/boxel-three/dist/src/context.d.ts +3 -3
- package/node_modules/@playdrop/boxel-three/dist/src/exporters/glb.d.ts +6 -6
- package/node_modules/@playdrop/boxel-three/dist/src/exporters/glb.js +9 -1
- package/node_modules/@playdrop/boxel-three/dist/src/exporters/image.d.ts +3 -3
- package/node_modules/@playdrop/boxel-three/dist/src/index.d.ts +17 -17
- package/node_modules/@playdrop/boxel-three/dist/src/instantiate.d.ts +9 -9
- package/node_modules/@playdrop/boxel-three/dist/src/nodes.d.ts +3 -3
- package/node_modules/@playdrop/boxel-three/dist/src/nodes.js +1 -1
- package/node_modules/@playdrop/boxel-three/dist/src/overlays.d.ts +2 -2
- package/node_modules/@playdrop/boxel-three/dist/src/primitives.d.ts +1 -1
- package/node_modules/@playdrop/boxel-three/dist/src/scene.d.ts +1 -1
- package/node_modules/@playdrop/boxel-three/dist/src/skinned-mesh.d.ts +2 -2
- package/node_modules/@playdrop/boxel-three/dist/src/texture-atlas.d.ts +1 -1
- package/node_modules/@playdrop/boxel-three/dist/src/textures.d.ts +3 -3
- package/node_modules/@playdrop/boxel-three/dist/src/types.d.ts +4 -4
- package/node_modules/@playdrop/boxel-three/dist/src/voxels/faces.d.ts +2 -2
- package/node_modules/@playdrop/boxel-three/dist/src/voxels/mesher.d.ts +1 -1
- package/node_modules/@playdrop/boxel-three/dist/test/fixtures/render-worker.d.ts +1 -1
- package/node_modules/@playdrop/config/client-meta.json +4 -4
- package/node_modules/@playdrop/config/dist/src/client-meta.d.ts +1 -1
- package/node_modules/@playdrop/config/dist/src/client-meta.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/client-meta.js +10 -10
- package/node_modules/@playdrop/config/dist/src/constants.js +10 -10
- package/node_modules/@playdrop/config/dist/src/creator-plans.d.ts +1 -1
- package/node_modules/@playdrop/config/dist/src/creator-plans.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/creator-plans.js +27 -28
- package/node_modules/@playdrop/config/dist/src/deployment.d.ts +4 -4
- package/node_modules/@playdrop/config/dist/src/deployment.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/deployment.js +42 -41
- package/node_modules/@playdrop/config/dist/src/game-arena.js +12 -12
- package/node_modules/@playdrop/config/dist/src/index.d.ts +9 -9
- package/node_modules/@playdrop/config/dist/src/index.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/index.js +24 -25
- package/node_modules/@playdrop/config/dist/src/public-deployment.d.ts +4 -4
- package/node_modules/@playdrop/config/dist/src/public-deployment.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/public-deployment.js +41 -39
- package/node_modules/@playdrop/config/dist/src/runtime-client-meta.js +1 -3
- package/node_modules/@playdrop/config/dist/src/runtime-service-origins.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/runtime-service-origins.js +23 -25
- package/node_modules/@playdrop/config/dist/src/server/fastify.d.ts +5 -5
- package/node_modules/@playdrop/config/dist/src/server/fastify.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/server/fastify.js +44 -46
- package/node_modules/@playdrop/config/dist/src/server/logging.d.ts +1 -1
- package/node_modules/@playdrop/config/dist/src/server/logging.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/server/logging.js +6 -8
- package/node_modules/@playdrop/config/dist/src/types.d.ts +2 -2
- package/node_modules/@playdrop/config/dist/test/creator-plans.test.js +12 -12
- package/node_modules/@playdrop/config/dist/test/deployment.test.js +59 -59
- package/node_modules/@playdrop/config/dist/test/fastify.test.js +4 -4
- package/node_modules/@playdrop/config/dist/test/game-arena.test.js +8 -8
- package/node_modules/@playdrop/config/dist/test/logging.test.js +6 -6
- package/node_modules/@playdrop/config/dist/test/validateClientEnvironment.test.js +57 -57
- package/node_modules/@playdrop/config/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@playdrop/types/dist/agent-task-playtest.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/agent-task-terminal.d.ts +2 -2
- package/node_modules/@playdrop/types/dist/agent-task-terminal.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/api.d.ts +314 -250
- package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/api.js +40 -59
- package/node_modules/@playdrop/types/dist/app-capability-filters.d.ts +2 -2
- package/node_modules/@playdrop/types/dist/app-playtest-tape.d.ts +6 -6
- package/node_modules/@playdrop/types/dist/app-playtest-tape.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/app-review.d.ts +2 -2
- package/node_modules/@playdrop/types/dist/app-review.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/app-review.js +1 -6
- package/node_modules/@playdrop/types/dist/app.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/asset-pack.d.ts +5 -5
- package/node_modules/@playdrop/types/dist/asset-spec.d.ts +4 -4
- package/node_modules/@playdrop/types/dist/asset.d.ts +11 -11
- package/node_modules/@playdrop/types/dist/attachment-policy.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/chat.d.ts +3 -3
- package/node_modules/@playdrop/types/dist/creator-public-image.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/graph.d.ts +4 -4
- package/node_modules/@playdrop/types/dist/index.d.ts +25 -25
- package/node_modules/@playdrop/types/dist/instrument-evidence.d.ts +2 -2
- package/node_modules/@playdrop/types/dist/instrument-evidence.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/instrument-evidence.js +2 -11
- package/node_modules/@playdrop/types/dist/locale.d.ts +2 -2
- package/node_modules/@playdrop/types/dist/locale.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/locale.js +2 -17
- package/node_modules/@playdrop/types/dist/owned-assets.d.ts +2 -2
- package/node_modules/@playdrop/types/dist/owned-assets.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/player-meta.d.ts +3 -3
- package/node_modules/@playdrop/types/dist/player-meta.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/playtest-notes.d.ts +11 -11
- package/node_modules/@playdrop/types/dist/playtest-notes.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/playtrade.d.ts +8 -5
- package/node_modules/@playdrop/types/dist/playtrade.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/realtime.d.ts +1 -1
- package/node_modules/@playdrop/types/dist/tweaks.d.ts +4 -4
- package/node_modules/@playdrop/types/dist/tweaks.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/tweaks.js +12 -2
- package/node_modules/@playdrop/types/dist/version.d.ts +14 -14
- package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/version.js +4 -1
- package/node_modules/@playdrop/vox-three/dist/src/index.d.ts +1 -1
- package/node_modules/@playdrop/vox-three/dist/src/vox.d.ts +2 -2
- package/node_modules/@playdrop/vox-three/dist/src/vox.js +20 -18
- package/node_modules/@playdrop/vox-three/dist/src/vox.js.map +1 -1
- package/node_modules/@playdrop/vox-three/dist/test/vox.test.js +11 -14
- package/node_modules/@playdrop/vox-three/dist/test/vox.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -46,93 +46,93 @@ const boxel_core_1 = require("@playdrop/boxel-core");
|
|
|
46
46
|
const vox_three_1 = require("@playdrop/vox-three");
|
|
47
47
|
const types_1 = require("@playdrop/types");
|
|
48
48
|
const playwright_1 = require("../playwright");
|
|
49
|
-
const GENERATED_MODEL_3D_FORMATS = new Set([
|
|
50
|
-
const BOXEL_REQUIRED_FILE_ROLES = [
|
|
51
|
-
const VOX_REQUIRED_FILE_ROLES = [
|
|
49
|
+
const GENERATED_MODEL_3D_FORMATS = new Set(["PLAYDROP_BOXEL_JSON", "VOX"]);
|
|
50
|
+
const BOXEL_REQUIRED_FILE_ROLES = ["primary", "mesh", "preview"];
|
|
51
|
+
const VOX_REQUIRED_FILE_ROLES = ["primary", "boxel", "mesh", "preview"];
|
|
52
52
|
const DEFAULT_PRESET = {
|
|
53
|
-
meshMode:
|
|
54
|
-
previewMode:
|
|
55
|
-
previewDirection:
|
|
53
|
+
meshMode: "merged",
|
|
54
|
+
previewMode: "merged",
|
|
55
|
+
previewDirection: "preview",
|
|
56
56
|
width: 1024,
|
|
57
57
|
height: 1024,
|
|
58
58
|
};
|
|
59
59
|
const MODEL_PRESET_BY_SUBCATEGORY = {
|
|
60
60
|
avatar: {
|
|
61
|
-
meshMode:
|
|
62
|
-
previewMode:
|
|
63
|
-
previewDirection:
|
|
61
|
+
meshMode: "skinned",
|
|
62
|
+
previewMode: "skinned",
|
|
63
|
+
previewDirection: "headshot",
|
|
64
64
|
width: 1024,
|
|
65
65
|
height: 1024,
|
|
66
66
|
},
|
|
67
67
|
humanoid: {
|
|
68
|
-
meshMode:
|
|
69
|
-
previewMode:
|
|
70
|
-
previewDirection:
|
|
68
|
+
meshMode: "skinned",
|
|
69
|
+
previewMode: "skinned",
|
|
70
|
+
previewDirection: "headshot",
|
|
71
71
|
width: 1024,
|
|
72
72
|
height: 1024,
|
|
73
73
|
},
|
|
74
74
|
creature: {
|
|
75
|
-
meshMode:
|
|
76
|
-
previewMode:
|
|
77
|
-
previewDirection:
|
|
75
|
+
meshMode: "skinned",
|
|
76
|
+
previewMode: "skinned",
|
|
77
|
+
previewDirection: "headshot",
|
|
78
78
|
width: 1024,
|
|
79
79
|
height: 1024,
|
|
80
80
|
},
|
|
81
81
|
block: {
|
|
82
|
-
meshMode:
|
|
83
|
-
previewMode:
|
|
84
|
-
previewDirection:
|
|
82
|
+
meshMode: "merged",
|
|
83
|
+
previewMode: "merged",
|
|
84
|
+
previewDirection: "preview",
|
|
85
85
|
width: 1024,
|
|
86
86
|
height: 1024,
|
|
87
87
|
},
|
|
88
88
|
generic: {
|
|
89
|
-
meshMode:
|
|
90
|
-
previewMode:
|
|
91
|
-
previewDirection:
|
|
89
|
+
meshMode: "merged",
|
|
90
|
+
previewMode: "merged",
|
|
91
|
+
previewDirection: "preview",
|
|
92
92
|
width: 1024,
|
|
93
93
|
height: 1024,
|
|
94
94
|
},
|
|
95
95
|
};
|
|
96
|
-
const TOOL_NAME =
|
|
97
|
-
const WORKER_ENTRY_BASENAMES = [
|
|
96
|
+
const TOOL_NAME = "playdrop";
|
|
97
|
+
const WORKER_ENTRY_BASENAMES = ["model-worker.ts", "model-worker.js"];
|
|
98
98
|
let workerBundlePromise = null;
|
|
99
99
|
function normalizeRole(role) {
|
|
100
100
|
return role.trim().toLowerCase();
|
|
101
101
|
}
|
|
102
102
|
function resolveTaskLabel(task) {
|
|
103
|
-
if (
|
|
103
|
+
if ("kind" in task && task.kind === "owned-asset") {
|
|
104
104
|
return `${task.appName}:${task.name}`;
|
|
105
105
|
}
|
|
106
106
|
return task.name;
|
|
107
107
|
}
|
|
108
108
|
function getRolePath(task, role) {
|
|
109
109
|
for (const [entryRole, filePath] of Object.entries(task.filePaths)) {
|
|
110
|
-
if (normalizeRole(entryRole) === role && typeof filePath ===
|
|
110
|
+
if (normalizeRole(entryRole) === role && typeof filePath === "string" && filePath.trim().length > 0) {
|
|
111
111
|
return filePath;
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
return null;
|
|
115
115
|
}
|
|
116
116
|
function inferGeneratedModel3DFormat(task, explicitFormat) {
|
|
117
|
-
const normalizedFormat = typeof explicitFormat ===
|
|
117
|
+
const normalizedFormat = typeof explicitFormat === "string" ? explicitFormat.trim().toUpperCase() : "";
|
|
118
118
|
if (GENERATED_MODEL_3D_FORMATS.has(normalizedFormat)) {
|
|
119
119
|
return normalizedFormat;
|
|
120
120
|
}
|
|
121
|
-
const primaryPath = getRolePath(task,
|
|
121
|
+
const primaryPath = getRolePath(task, "primary");
|
|
122
122
|
if (!primaryPath) {
|
|
123
123
|
return null;
|
|
124
124
|
}
|
|
125
125
|
const normalizedPath = primaryPath.trim().toLowerCase();
|
|
126
|
-
if (normalizedPath.endsWith(
|
|
127
|
-
return
|
|
126
|
+
if (normalizedPath.endsWith(".boxel.json")) {
|
|
127
|
+
return "PLAYDROP_BOXEL_JSON";
|
|
128
128
|
}
|
|
129
|
-
if (normalizedPath.endsWith(
|
|
130
|
-
return
|
|
129
|
+
if (normalizedPath.endsWith(".vox")) {
|
|
130
|
+
return "VOX";
|
|
131
131
|
}
|
|
132
132
|
return null;
|
|
133
133
|
}
|
|
134
134
|
function getRequiredFileRoles(format) {
|
|
135
|
-
return format ===
|
|
135
|
+
return format === "VOX" ? VOX_REQUIRED_FILE_ROLES : BOXEL_REQUIRED_FILE_ROLES;
|
|
136
136
|
}
|
|
137
137
|
function getMissingRequiredRoles(task, format) {
|
|
138
138
|
const normalizedRoles = new Set(Object.keys(task.filePaths).map((role) => normalizeRole(role)));
|
|
@@ -148,7 +148,7 @@ function resolveWorkerEntryPath() {
|
|
|
148
148
|
throw new Error(`[${TOOL_NAME}] Boxel worker entry file not found from ${__dirname}.`);
|
|
149
149
|
}
|
|
150
150
|
async function loadEsbuild() {
|
|
151
|
-
const module = await Promise.resolve().then(() => __importStar(require(
|
|
151
|
+
const module = await Promise.resolve().then(() => __importStar(require("esbuild")));
|
|
152
152
|
return module.build;
|
|
153
153
|
}
|
|
154
154
|
async function getWorkerBundle() {
|
|
@@ -158,12 +158,12 @@ async function getWorkerBundle() {
|
|
|
158
158
|
const result = await build({
|
|
159
159
|
entryPoints: [resolveWorkerEntryPath()],
|
|
160
160
|
bundle: true,
|
|
161
|
-
platform:
|
|
162
|
-
format:
|
|
163
|
-
target:
|
|
161
|
+
platform: "browser",
|
|
162
|
+
format: "esm",
|
|
163
|
+
target: "es2022",
|
|
164
164
|
write: false,
|
|
165
165
|
sourcemap: false,
|
|
166
|
-
logLevel:
|
|
166
|
+
logLevel: "silent",
|
|
167
167
|
});
|
|
168
168
|
const output = result.outputFiles?.[0]?.text;
|
|
169
169
|
if (!output) {
|
|
@@ -177,32 +177,35 @@ async function getWorkerBundle() {
|
|
|
177
177
|
async function withModelWorkerPage(callback, viewport) {
|
|
178
178
|
return (0, playwright_1.withChromiumPage)(async ({ page }) => {
|
|
179
179
|
const consoleErrors = [];
|
|
180
|
-
page.on(
|
|
181
|
-
if (message.type() ===
|
|
180
|
+
page.on("console", (message) => {
|
|
181
|
+
if (message.type() === "error") {
|
|
182
182
|
consoleErrors.push(message.text());
|
|
183
183
|
}
|
|
184
184
|
});
|
|
185
|
-
page.on(
|
|
185
|
+
page.on("pageerror", (error) => {
|
|
186
186
|
consoleErrors.push(error?.message ?? String(error));
|
|
187
187
|
});
|
|
188
|
-
await page.setContent('<canvas id="viewport"></canvas>', { waitUntil:
|
|
188
|
+
await page.setContent('<canvas id="viewport"></canvas>', { waitUntil: "domcontentloaded" });
|
|
189
189
|
const bundle = await getWorkerBundle();
|
|
190
|
-
await page.addScriptTag({ type:
|
|
191
|
-
await page.waitForFunction(() => typeof window.playdropBoxelWorker !==
|
|
190
|
+
await page.addScriptTag({ type: "module", content: bundle });
|
|
191
|
+
await page.waitForFunction(() => typeof window.playdropBoxelWorker !== "undefined");
|
|
192
192
|
const result = await callback(page);
|
|
193
193
|
if (consoleErrors.length > 0) {
|
|
194
|
-
throw new Error(consoleErrors.join(
|
|
194
|
+
throw new Error(consoleErrors.join("\n"));
|
|
195
195
|
}
|
|
196
196
|
return result;
|
|
197
197
|
}, { viewport });
|
|
198
198
|
}
|
|
199
199
|
async function exportBoxelWithWorker(boxel, mode) {
|
|
200
200
|
try {
|
|
201
|
-
const base64 = await withModelWorkerPage((page) => page.evaluate(({ model, exportMode }) => window.playdropBoxelWorker.exportBoxel(model, { mode: exportMode }), {
|
|
202
|
-
|
|
203
|
-
|
|
201
|
+
const base64 = await withModelWorkerPage((page) => page.evaluate(({ model, exportMode }) => window.playdropBoxelWorker.exportBoxel(model, { mode: exportMode }), {
|
|
202
|
+
model: boxel,
|
|
203
|
+
exportMode: mode,
|
|
204
|
+
}), { width: 1024, height: 1024 });
|
|
205
|
+
if (typeof base64 !== "string" || base64.length === 0) {
|
|
206
|
+
throw new Error("Model exporter did not return GLB data.");
|
|
204
207
|
}
|
|
205
|
-
return Buffer.from(base64,
|
|
208
|
+
return Buffer.from(base64, "base64");
|
|
206
209
|
}
|
|
207
210
|
catch (error) {
|
|
208
211
|
throw (0, playwright_1.createPlaywrightLaunchError)(TOOL_NAME, error);
|
|
@@ -219,10 +222,10 @@ async function renderPreviewWithWorker(boxel, options) {
|
|
|
219
222
|
height: options.height,
|
|
220
223
|
},
|
|
221
224
|
}), { width: options.width, height: options.height });
|
|
222
|
-
if (typeof dataUrl !==
|
|
223
|
-
throw new Error(
|
|
225
|
+
if (typeof dataUrl !== "string" || !dataUrl.startsWith("data:image/png;base64,")) {
|
|
226
|
+
throw new Error("Model renderer did not return PNG data.");
|
|
224
227
|
}
|
|
225
|
-
return Buffer.from(dataUrl.slice(
|
|
228
|
+
return Buffer.from(dataUrl.slice("data:image/png;base64,".length), "base64");
|
|
226
229
|
}
|
|
227
230
|
catch (error) {
|
|
228
231
|
throw (0, playwright_1.createPlaywrightLaunchError)(TOOL_NAME, error);
|
|
@@ -231,16 +234,16 @@ async function renderPreviewWithWorker(boxel, options) {
|
|
|
231
234
|
async function renderVoxPreviewWithWorker(voxBuffer, options) {
|
|
232
235
|
try {
|
|
233
236
|
const dataUrl = await withModelWorkerPage((page) => page.evaluate(({ voxBase64, renderOptions }) => window.playdropBoxelWorker.renderVox(voxBase64, renderOptions), {
|
|
234
|
-
voxBase64: voxBuffer.toString(
|
|
237
|
+
voxBase64: voxBuffer.toString("base64"),
|
|
235
238
|
renderOptions: {
|
|
236
239
|
width: options.width,
|
|
237
240
|
height: options.height,
|
|
238
241
|
},
|
|
239
242
|
}), { width: options.width, height: options.height });
|
|
240
|
-
if (typeof dataUrl !==
|
|
241
|
-
throw new Error(
|
|
243
|
+
if (typeof dataUrl !== "string" || !dataUrl.startsWith("data:image/png;base64,")) {
|
|
244
|
+
throw new Error("VOX preview renderer did not return PNG data.");
|
|
242
245
|
}
|
|
243
|
-
return Buffer.from(dataUrl.slice(
|
|
246
|
+
return Buffer.from(dataUrl.slice("data:image/png;base64,".length), "base64");
|
|
244
247
|
}
|
|
245
248
|
catch (error) {
|
|
246
249
|
throw (0, playwright_1.createPlaywrightLaunchError)(TOOL_NAME, error);
|
|
@@ -257,8 +260,11 @@ function parseAndValidateBoxel(raw, label) {
|
|
|
257
260
|
}
|
|
258
261
|
const validation = (0, boxel_core_1.validateBoxel)(parsed);
|
|
259
262
|
if (!validation.boxel || validation.issues.length > 0) {
|
|
260
|
-
const summary = validation.issues
|
|
261
|
-
|
|
263
|
+
const summary = validation.issues
|
|
264
|
+
.slice(0, 3)
|
|
265
|
+
.map((issue) => `${issue.path}: ${issue.message}`)
|
|
266
|
+
.join("; ");
|
|
267
|
+
throw new Error(`Asset "${label}" files.primary failed boxel validation${summary ? `: ${summary}` : ""}`);
|
|
262
268
|
}
|
|
263
269
|
return validation.boxel;
|
|
264
270
|
}
|
|
@@ -267,9 +273,9 @@ function resolvePreset(subcategory) {
|
|
|
267
273
|
return MODEL_PRESET_BY_SUBCATEGORY[normalized] ?? DEFAULT_PRESET;
|
|
268
274
|
}
|
|
269
275
|
function isGeneratedModel3DAssetTask(task, format) {
|
|
270
|
-
const category = typeof task.category ===
|
|
271
|
-
const subcategory = typeof task.subcategory ===
|
|
272
|
-
if (category !==
|
|
276
|
+
const category = typeof task.category === "string" ? task.category.trim().toUpperCase() : "";
|
|
277
|
+
const subcategory = typeof task.subcategory === "string" ? task.subcategory.trim() : "";
|
|
278
|
+
if (category !== "MODEL_3D" || !(0, types_1.isModel3DAssetSubcategory)("MODEL_3D", subcategory)) {
|
|
273
279
|
return false;
|
|
274
280
|
}
|
|
275
281
|
return inferGeneratedModel3DFormat(task, format) !== null;
|
|
@@ -282,7 +288,7 @@ function assertGeneratedModel3DAssetRoles(task, format) {
|
|
|
282
288
|
const missing = getMissingRequiredRoles(task, generatedFormat);
|
|
283
289
|
if (missing.length > 0) {
|
|
284
290
|
const label = resolveTaskLabel(task);
|
|
285
|
-
throw new Error(`Asset "${label}" requires files.${missing.join(
|
|
291
|
+
throw new Error(`Asset "${label}" requires files.${missing.join(", files.")} for format "${generatedFormat}".`);
|
|
286
292
|
}
|
|
287
293
|
}
|
|
288
294
|
async function ensureExistingFile(filePath, label, role) {
|
|
@@ -299,20 +305,20 @@ async function ensureExistingFile(filePath, label, role) {
|
|
|
299
305
|
}
|
|
300
306
|
}
|
|
301
307
|
async function loadBoxelFromPrimary(task, label) {
|
|
302
|
-
const primaryPath = getRolePath(task,
|
|
308
|
+
const primaryPath = getRolePath(task, "primary");
|
|
303
309
|
if (!primaryPath) {
|
|
304
310
|
throw new Error(`Asset "${label}" is missing files.primary.`);
|
|
305
311
|
}
|
|
306
|
-
await ensureExistingFile(primaryPath, label,
|
|
307
|
-
const raw = await (0, promises_1.readFile)(primaryPath,
|
|
312
|
+
await ensureExistingFile(primaryPath, label, "primary");
|
|
313
|
+
const raw = await (0, promises_1.readFile)(primaryPath, "utf8");
|
|
308
314
|
return parseAndValidateBoxel(raw, label);
|
|
309
315
|
}
|
|
310
316
|
async function loadValidatedVoxBuffer(task, label) {
|
|
311
|
-
const primaryPath = getRolePath(task,
|
|
317
|
+
const primaryPath = getRolePath(task, "primary");
|
|
312
318
|
if (!primaryPath) {
|
|
313
319
|
throw new Error(`Asset "${label}" is missing files.primary.`);
|
|
314
320
|
}
|
|
315
|
-
await ensureExistingFile(primaryPath, label,
|
|
321
|
+
await ensureExistingFile(primaryPath, label, "primary");
|
|
316
322
|
const buffer = await (0, promises_1.readFile)(primaryPath);
|
|
317
323
|
try {
|
|
318
324
|
(0, vox_three_1.assertValidVoxBuffer)(buffer);
|
|
@@ -330,27 +336,25 @@ async function prepareModel3DAssetArtifacts(task, options = {}) {
|
|
|
330
336
|
}
|
|
331
337
|
assertGeneratedModel3DAssetRoles(task, task.format);
|
|
332
338
|
const label = resolveTaskLabel(task);
|
|
333
|
-
const meshPath = getRolePath(task,
|
|
334
|
-
const previewPath = getRolePath(task,
|
|
339
|
+
const meshPath = getRolePath(task, "mesh");
|
|
340
|
+
const previewPath = getRolePath(task, "preview");
|
|
335
341
|
if (!meshPath || !previewPath) {
|
|
336
342
|
throw new Error(`Asset "${label}" is missing required generated 3D file paths.`);
|
|
337
343
|
}
|
|
338
|
-
const voxBuffer = generatedFormat ===
|
|
339
|
-
|
|
340
|
-
: null;
|
|
341
|
-
const boxel = generatedFormat === 'VOX'
|
|
344
|
+
const voxBuffer = generatedFormat === "VOX" ? await loadValidatedVoxBuffer(task, label) : null;
|
|
345
|
+
const boxel = generatedFormat === "VOX"
|
|
342
346
|
? await (0, vox_three_1.convertVoxToBoxel)(voxBuffer, task.name)
|
|
343
347
|
: await loadBoxelFromPrimary(task, label);
|
|
344
348
|
if (options.dryRun) {
|
|
345
349
|
return true;
|
|
346
350
|
}
|
|
347
|
-
if (typeof task.subcategory !==
|
|
351
|
+
if (typeof task.subcategory !== "string" || task.subcategory.trim().length === 0) {
|
|
348
352
|
throw new Error(`Asset "${label}" is missing a model subcategory.`);
|
|
349
353
|
}
|
|
350
354
|
const preset = resolvePreset(task.subcategory);
|
|
351
355
|
const [meshBuffer, previewBuffer] = await Promise.all([
|
|
352
356
|
exportBoxelWithWorker(boxel, preset.meshMode),
|
|
353
|
-
generatedFormat ===
|
|
357
|
+
generatedFormat === "VOX"
|
|
354
358
|
? renderVoxPreviewWithWorker(voxBuffer, {
|
|
355
359
|
width: preset.width,
|
|
356
360
|
height: preset.height,
|
|
@@ -366,13 +370,13 @@ async function prepareModel3DAssetArtifacts(task, options = {}) {
|
|
|
366
370
|
await (0, promises_1.mkdir)(node_path_1.default.dirname(previewPath), { recursive: true });
|
|
367
371
|
await (0, promises_1.writeFile)(meshPath, meshBuffer);
|
|
368
372
|
await (0, promises_1.writeFile)(previewPath, previewBuffer);
|
|
369
|
-
if (generatedFormat ===
|
|
370
|
-
const boxelPath = getRolePath(task,
|
|
373
|
+
if (generatedFormat === "VOX") {
|
|
374
|
+
const boxelPath = getRolePath(task, "boxel");
|
|
371
375
|
if (!boxelPath) {
|
|
372
376
|
throw new Error(`Asset "${label}" is missing files.boxel.`);
|
|
373
377
|
}
|
|
374
378
|
await (0, promises_1.mkdir)(node_path_1.default.dirname(boxelPath), { recursive: true });
|
|
375
|
-
await (0, promises_1.writeFile)(boxelPath, `${(0, boxel_core_1.formatBoxel)(boxel)}\n`,
|
|
379
|
+
await (0, promises_1.writeFile)(boxelPath, `${(0, boxel_core_1.formatBoxel)(boxel)}\n`, "utf8");
|
|
376
380
|
}
|
|
377
381
|
return true;
|
|
378
382
|
}
|
|
@@ -41,7 +41,7 @@ const vox_three_1 = require("@playdrop/vox-three");
|
|
|
41
41
|
function arrayBufferToBase64(buffer) {
|
|
42
42
|
const bytes = new Uint8Array(buffer);
|
|
43
43
|
const chunkSize = 0x8000;
|
|
44
|
-
let binary =
|
|
44
|
+
let binary = "";
|
|
45
45
|
for (let index = 0; index < bytes.length; index += chunkSize) {
|
|
46
46
|
const chunk = bytes.subarray(index, index + chunkSize);
|
|
47
47
|
binary += String.fromCharCode(...chunk);
|
|
@@ -53,9 +53,9 @@ function getOrCreateRenderer() {
|
|
|
53
53
|
if (cachedRenderer) {
|
|
54
54
|
return cachedRenderer;
|
|
55
55
|
}
|
|
56
|
-
const canvas = document.getElementById(
|
|
56
|
+
const canvas = document.getElementById("viewport");
|
|
57
57
|
if (!canvas) {
|
|
58
|
-
throw new Error(
|
|
58
|
+
throw new Error("render_canvas_unavailable");
|
|
59
59
|
}
|
|
60
60
|
cachedRenderer = new THREE.WebGLRenderer({
|
|
61
61
|
canvas,
|
|
@@ -93,7 +93,7 @@ async function renderBoxel(modelJson, options) {
|
|
|
93
93
|
THREE,
|
|
94
94
|
renderer,
|
|
95
95
|
entity: model,
|
|
96
|
-
mode: options?.mode ??
|
|
96
|
+
mode: options?.mode ?? "hierarchical",
|
|
97
97
|
animationIds: options?.animationIds,
|
|
98
98
|
animationId: options?.animationId ?? undefined,
|
|
99
99
|
width: options?.width,
|
|
@@ -103,8 +103,8 @@ async function renderBoxel(modelJson, options) {
|
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
105
|
async function renderVox(voxBase64, options) {
|
|
106
|
-
if (typeof voxBase64 !==
|
|
107
|
-
throw new Error(
|
|
106
|
+
if (typeof voxBase64 !== "string" || voxBase64.length === 0) {
|
|
107
|
+
throw new Error("vox_preview_input_missing");
|
|
108
108
|
}
|
|
109
109
|
const renderer = getOrCreateRenderer();
|
|
110
110
|
renderer.setPixelRatio(1);
|
package/dist/browser.js
CHANGED
|
@@ -5,14 +5,14 @@ exports.setOpenBrowserForTests = setOpenBrowserForTests;
|
|
|
5
5
|
exports.resetOpenBrowserForTests = resetOpenBrowserForTests;
|
|
6
6
|
const node_child_process_1 = require("node:child_process");
|
|
7
7
|
function getBrowserCommand(url) {
|
|
8
|
-
if (process.platform ===
|
|
9
|
-
return { command:
|
|
8
|
+
if (process.platform === "darwin") {
|
|
9
|
+
return { command: "open", args: [url] };
|
|
10
10
|
}
|
|
11
|
-
if (process.platform ===
|
|
12
|
-
return { command:
|
|
11
|
+
if (process.platform === "win32") {
|
|
12
|
+
return { command: "cmd", args: ["/c", "start", "", url] };
|
|
13
13
|
}
|
|
14
|
-
if (process.platform ===
|
|
15
|
-
return { command:
|
|
14
|
+
if (process.platform === "linux") {
|
|
15
|
+
return { command: "xdg-open", args: [url] };
|
|
16
16
|
}
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
@@ -24,10 +24,10 @@ async function defaultOpenBrowser(url) {
|
|
|
24
24
|
return await new Promise((resolve) => {
|
|
25
25
|
const child = (0, node_child_process_1.spawn)(command.command, command.args, {
|
|
26
26
|
detached: true,
|
|
27
|
-
stdio:
|
|
27
|
+
stdio: "ignore",
|
|
28
28
|
});
|
|
29
|
-
child.once(
|
|
30
|
-
child.once(
|
|
29
|
+
child.once("error", () => resolve(false));
|
|
30
|
+
child.once("spawn", () => {
|
|
31
31
|
child.unref();
|
|
32
32
|
resolve(true);
|
|
33
33
|
});
|
package/dist/catalogue-utils.js
CHANGED
|
@@ -10,52 +10,52 @@ function parseSurfaceTargets(input) {
|
|
|
10
10
|
const map = { desktop: false, mobileLandscape: false, mobilePortrait: false };
|
|
11
11
|
if (Array.isArray(input)) {
|
|
12
12
|
for (const entry of input) {
|
|
13
|
-
if (entry ===
|
|
13
|
+
if (entry === "DESKTOP")
|
|
14
14
|
map.desktop = true;
|
|
15
|
-
if (entry ===
|
|
15
|
+
if (entry === "MOBILE_LANDSCAPE")
|
|
16
16
|
map.mobileLandscape = true;
|
|
17
|
-
if (entry ===
|
|
17
|
+
if (entry === "MOBILE_PORTRAIT")
|
|
18
18
|
map.mobilePortrait = true;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
else if (input && typeof input ===
|
|
21
|
+
else if (input && typeof input === "object") {
|
|
22
22
|
const source = input;
|
|
23
|
-
for (const key of [
|
|
24
|
-
if (typeof source[key] !==
|
|
23
|
+
for (const key of ["desktop", "mobileLandscape", "mobilePortrait"]) {
|
|
24
|
+
if (typeof source[key] !== "boolean")
|
|
25
25
|
throw new Error(`surfaceTargets.${key} must be a boolean.`);
|
|
26
26
|
map[key] = Boolean(source[key]);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
30
|
-
throw new Error(
|
|
30
|
+
throw new Error("surfaceTargets must be an object with desktop, mobileLandscape, and mobilePortrait booleans.");
|
|
31
31
|
}
|
|
32
32
|
if (!map.desktop && !map.mobileLandscape && !map.mobilePortrait) {
|
|
33
|
-
throw new Error(
|
|
33
|
+
throw new Error("surfaceTargets must enable at least one platform.");
|
|
34
34
|
}
|
|
35
35
|
const list = [];
|
|
36
36
|
if (map.desktop)
|
|
37
|
-
list.push(
|
|
37
|
+
list.push("DESKTOP");
|
|
38
38
|
if (map.mobileLandscape)
|
|
39
|
-
list.push(
|
|
39
|
+
list.push("MOBILE_LANDSCAPE");
|
|
40
40
|
if (map.mobilePortrait)
|
|
41
|
-
list.push(
|
|
41
|
+
list.push("MOBILE_PORTRAIT");
|
|
42
42
|
return { map, list };
|
|
43
43
|
}
|
|
44
44
|
const DEFAULT_SURFACE_TARGETS_OBJECT = { desktop: true, mobileLandscape: false, mobilePortrait: false };
|
|
45
|
-
const LEGACY_CATALOGUE_VERSION_KEY = [
|
|
45
|
+
const LEGACY_CATALOGUE_VERSION_KEY = ["schema", "Version"].join("");
|
|
46
46
|
function parseCatalogueEntries(cataloguePath) {
|
|
47
47
|
try {
|
|
48
|
-
const raw = (0, node_fs_1.readFileSync)(cataloguePath,
|
|
48
|
+
const raw = (0, node_fs_1.readFileSync)(cataloguePath, "utf8");
|
|
49
49
|
const data = JSON.parse(raw);
|
|
50
|
-
if (!data || typeof data !==
|
|
51
|
-
throw new Error(
|
|
50
|
+
if (!data || typeof data !== "object" || Array.isArray(data)) {
|
|
51
|
+
throw new Error("catalogue.json must be an object");
|
|
52
52
|
}
|
|
53
53
|
if (Object.prototype.hasOwnProperty.call(data, LEGACY_CATALOGUE_VERSION_KEY)) {
|
|
54
|
-
throw new Error(
|
|
54
|
+
throw new Error("legacy top-level version field is not supported");
|
|
55
55
|
}
|
|
56
56
|
const entries = data?.apps;
|
|
57
57
|
return Array.isArray(entries)
|
|
58
|
-
? entries.filter((entry) => Boolean(entry && typeof entry ===
|
|
58
|
+
? entries.filter((entry) => Boolean(entry && typeof entry === "object"))
|
|
59
59
|
: [];
|
|
60
60
|
}
|
|
61
61
|
catch {
|
|
@@ -64,9 +64,9 @@ function parseCatalogueEntries(cataloguePath) {
|
|
|
64
64
|
}
|
|
65
65
|
function findMatchingCatalogueEntries(apps, relativePath, fileName) {
|
|
66
66
|
return apps.filter((entry) => {
|
|
67
|
-
const entryName = typeof entry.name ===
|
|
68
|
-
const entryFile = typeof entry.file ===
|
|
69
|
-
const normalized = entryFile.replace(/\\/g,
|
|
67
|
+
const entryName = typeof entry.name === "string" ? entry.name.trim() : "";
|
|
68
|
+
const entryFile = typeof entry.file === "string" ? entry.file.trim() : `${entryName}.html`;
|
|
69
|
+
const normalized = entryFile.replace(/\\/g, "/");
|
|
70
70
|
return normalized === relativePath || normalized === fileName;
|
|
71
71
|
});
|
|
72
72
|
}
|
|
@@ -80,9 +80,9 @@ function findAppCatalogueInfo(htmlPath) {
|
|
|
80
80
|
const absolute = (0, node_path_1.resolve)(htmlPath);
|
|
81
81
|
const fileName = (0, node_path_1.basename)(absolute);
|
|
82
82
|
for (let dir = (0, node_path_1.dirname)(absolute);; dir = (0, node_path_1.dirname)(dir)) {
|
|
83
|
-
const cataloguePath = (0, node_path_1.join)(dir,
|
|
83
|
+
const cataloguePath = (0, node_path_1.join)(dir, "catalogue.json");
|
|
84
84
|
if ((0, node_fs_1.existsSync)(cataloguePath) && (0, node_fs_1.statSync)(cataloguePath).isFile()) {
|
|
85
|
-
const rel = (0, node_path_1.relative)(dir, absolute).replace(/\\/g,
|
|
85
|
+
const rel = (0, node_path_1.relative)(dir, absolute).replace(/\\/g, "/");
|
|
86
86
|
const apps = parseCatalogueEntries(cataloguePath);
|
|
87
87
|
const matches = findMatchingCatalogueEntries(apps, rel, fileName);
|
|
88
88
|
if (matches.length > 1) {
|
|
@@ -90,14 +90,14 @@ function findAppCatalogueInfo(htmlPath) {
|
|
|
90
90
|
}
|
|
91
91
|
if (matches.length === 1) {
|
|
92
92
|
const match = matches[0];
|
|
93
|
-
const typeValue = typeof match.type ===
|
|
93
|
+
const typeValue = typeof match.type === "string" ? match.type.trim() : "";
|
|
94
94
|
const parsedType = (0, types_1.parseAppType)(typeValue);
|
|
95
95
|
if (!parsedType) {
|
|
96
|
-
throw new Error(`Entry in ${cataloguePath} must include a valid type (${types_1.APP_TYPE_VALUES.join(
|
|
96
|
+
throw new Error(`Entry in ${cataloguePath} must include a valid type (${types_1.APP_TYPE_VALUES.join(", ")}).`);
|
|
97
97
|
}
|
|
98
|
-
const name = typeof match.name ===
|
|
98
|
+
const name = typeof match.name === "string" && match.name.trim().length > 0
|
|
99
99
|
? match.name.trim()
|
|
100
|
-
: fileName.replace(/\.html$/i,
|
|
100
|
+
: fileName.replace(/\.html$/i, "");
|
|
101
101
|
let surfaceTargets;
|
|
102
102
|
try {
|
|
103
103
|
surfaceTargets = parseSurfaceTargets(match.surfaceTargets);
|