@playdrop/playdrop-cli 0.16.12 → 0.17.0
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/config/client-meta.json +4 -4
- package/dist/apiClient.d.ts +1 -2
- package/dist/apiClient.js +1 -16
- package/dist/appUrls.js +4 -0
- package/dist/apps/build.d.ts +12 -4
- package/dist/apps/build.js +55 -22
- package/dist/apps/index.d.ts +2 -1
- package/dist/apps/index.js +4 -1
- package/dist/apps/loadCheck.d.ts +5 -1
- package/dist/apps/loadCheck.js +52 -18
- package/dist/apps/serverBuild.d.ts +17 -0
- package/dist/apps/serverBuild.js +155 -0
- package/dist/apps/staticHtml.d.ts +1 -0
- package/dist/apps/staticHtml.js +19 -10
- package/dist/apps/upload.d.ts +12 -2
- package/dist/apps/upload.js +127 -46
- package/dist/catalogue.d.ts +23 -1
- package/dist/catalogue.js +126 -100
- package/dist/commandContext.d.ts +6 -3
- package/dist/commandContext.js +108 -18
- package/dist/commands/build.js +0 -7
- package/dist/commands/captureListing.d.ts +3 -0
- package/dist/commands/captureListing.js +48 -4
- package/dist/commands/chat.d.ts +4 -7
- package/dist/commands/chat.js +165 -77
- package/dist/commands/check.js +34 -1
- package/dist/commands/create.js +30 -263
- package/dist/commands/dev.js +37 -3
- package/dist/commands/devBrowser.js +2 -2
- package/dist/commands/devGameServer.d.ts +16 -0
- package/dist/commands/devGameServer.js +237 -0
- package/dist/commands/devRuntimeAssets.d.ts +1 -0
- package/dist/commands/devRuntimeAssets.js +2 -0
- package/dist/commands/devServer.d.ts +3 -0
- package/dist/commands/devServer.js +111 -5
- package/dist/commands/generation.d.ts +33 -4
- package/dist/commands/generation.js +304 -115
- package/dist/commands/login.js +23 -7
- package/dist/commands/review.d.ts +1 -1
- package/dist/commands/review.js +68 -95
- package/dist/commands/source.d.ts +19 -0
- package/dist/commands/source.js +142 -0
- package/dist/commands/tweaks.js +5 -11
- package/dist/commands/upload-content.d.ts +1 -1
- package/dist/commands/upload-content.js +16 -12
- package/dist/commands/upload.d.ts +17 -1
- package/dist/commands/upload.js +47 -10
- package/dist/commands/worker/archive-staging.d.ts +1 -0
- package/dist/commands/worker/archive-staging.js +13 -2
- package/dist/commands/worker/e2e-fixtures.d.ts +32 -0
- package/dist/commands/worker/e2e-fixtures.js +466 -0
- package/dist/commands/worker/game-server-infra.d.ts +80 -0
- package/dist/commands/worker/game-server-infra.js +595 -0
- package/dist/commands/worker/game-source-git.d.ts +126 -0
- package/dist/commands/worker/game-source-git.js +780 -0
- package/dist/commands/worker/generation.d.ts +94 -0
- package/dist/commands/worker/generation.js +1458 -0
- package/dist/commands/worker/provider-telemetry.js +1 -1
- package/dist/commands/worker/runtime.d.ts +8 -10
- package/dist/commands/worker/runtime.js +53 -48
- package/dist/commands/worker.d.ts +79 -19
- package/dist/commands/worker.js +1796 -419
- package/dist/config.d.ts +2 -0
- package/dist/config.js +16 -3
- package/dist/environment.d.ts +0 -1
- package/dist/environment.js +0 -8
- package/dist/index.js +92 -22
- package/dist/workerAppProject.d.ts +1 -1
- package/dist/workerAppProject.js +15 -2
- package/node_modules/@playdrop/api-client/dist/client.d.ts +143 -39
- package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/client.js +33 -0
- package/node_modules/@playdrop/api-client/dist/core/request.d.ts +1 -0
- package/node_modules/@playdrop/api-client/dist/core/request.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/core/request.js +17 -11
- package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.d.ts +51 -6
- 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 +338 -41
- package/node_modules/@playdrop/api-client/dist/domains/ai.d.ts +24 -1
- package/node_modules/@playdrop/api-client/dist/domains/ai.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/ai.js +20 -0
- package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +13 -8
- package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/apps.js +158 -90
- package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +4 -0
- package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/assets.js +27 -0
- package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts +152 -21
- package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/chat.js +477 -100
- package/node_modules/@playdrop/api-client/dist/domains/player-meta.d.ts +2 -1
- package/node_modules/@playdrop/api-client/dist/domains/player-meta.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/player-meta.js +9 -0
- package/node_modules/@playdrop/api-client/dist/domains/playtrade.d.ts +1 -2
- package/node_modules/@playdrop/api-client/dist/domains/playtrade.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/playtrade.js +0 -11
- package/node_modules/@playdrop/api-client/dist/domains/social.d.ts +29 -0
- package/node_modules/@playdrop/api-client/dist/domains/social.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/domains/social.js +79 -0
- package/node_modules/@playdrop/api-client/dist/index.d.ts +81 -30
- package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/index.js +217 -56
- package/node_modules/@playdrop/api-client/dist/runtime.d.ts +18 -0
- package/node_modules/@playdrop/api-client/dist/runtime.d.ts.map +1 -0
- package/node_modules/@playdrop/api-client/dist/runtime.js +54 -0
- package/node_modules/@playdrop/api-client/package.json +7 -0
- package/node_modules/@playdrop/config/client-meta.json +4 -4
- package/node_modules/@playdrop/config/dist/src/creator-plans.d.ts +11 -0
- package/node_modules/@playdrop/config/dist/src/creator-plans.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/creator-plans.js +13 -1
- package/node_modules/@playdrop/config/dist/src/deployment.d.ts +0 -1
- package/node_modules/@playdrop/config/dist/src/deployment.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/deployment.js +0 -8
- package/node_modules/@playdrop/config/dist/src/public-deployment.d.ts +0 -1
- package/node_modules/@playdrop/config/dist/src/public-deployment.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/public-deployment.js +0 -8
- package/node_modules/@playdrop/config/dist/src/runtime-service-origins.d.ts +1 -1
- package/node_modules/@playdrop/config/dist/src/runtime-service-origins.js +2 -2
- package/node_modules/@playdrop/config/dist/src/server/logging.d.ts.map +1 -1
- package/node_modules/@playdrop/config/dist/src/server/logging.js +31 -2
- package/node_modules/@playdrop/config/dist/test/creator-plans.test.js +10 -0
- package/node_modules/@playdrop/config/dist/test/deployment.test.js +0 -4
- package/node_modules/@playdrop/config/dist/test/runtime-service-origins.test.js +2 -0
- package/node_modules/@playdrop/config/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@playdrop/config/package.json +6 -0
- package/node_modules/@playdrop/game-source-git/dist/src/archive.d.ts +9 -0
- package/node_modules/@playdrop/game-source-git/dist/src/archive.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/archive.js +107 -0
- package/node_modules/@playdrop/game-source-git/dist/src/bundle-storage.d.ts +29 -0
- package/node_modules/@playdrop/game-source-git/dist/src/bundle-storage.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/bundle-storage.js +64 -0
- package/node_modules/@playdrop/game-source-git/dist/src/export.d.ts +8 -0
- package/node_modules/@playdrop/game-source-git/dist/src/export.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/export.js +25 -0
- package/node_modules/@playdrop/game-source-git/dist/src/git.d.ts +39 -0
- package/node_modules/@playdrop/game-source-git/dist/src/git.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/git.js +195 -0
- package/node_modules/@playdrop/game-source-git/dist/src/ignore.d.ts +6 -0
- package/node_modules/@playdrop/game-source-git/dist/src/ignore.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/ignore.js +51 -0
- package/node_modules/@playdrop/game-source-git/dist/src/index.d.ts +10 -0
- package/node_modules/@playdrop/game-source-git/dist/src/index.d.ts.map +1 -0
- package/node_modules/@playdrop/{boxel-core/dist/src/humanoid/r15 → game-source-git/dist/src}/index.js +9 -4
- package/node_modules/@playdrop/game-source-git/dist/src/lock.d.ts +17 -0
- package/node_modules/@playdrop/game-source-git/dist/src/lock.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/lock.js +72 -0
- package/node_modules/@playdrop/game-source-git/dist/src/materialize.d.ts +10 -0
- package/node_modules/@playdrop/game-source-git/dist/src/materialize.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/materialize.js +99 -0
- package/node_modules/@playdrop/game-source-git/dist/src/paths.d.ts +24 -0
- package/node_modules/@playdrop/game-source-git/dist/src/paths.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/paths.js +207 -0
- package/node_modules/@playdrop/game-source-git/dist/src/repository.d.ts +66 -0
- package/node_modules/@playdrop/game-source-git/dist/src/repository.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/src/repository.js +213 -0
- package/node_modules/@playdrop/game-source-git/dist/test/core.test.d.ts +2 -0
- package/node_modules/@playdrop/game-source-git/dist/test/core.test.d.ts.map +1 -0
- package/node_modules/@playdrop/game-source-git/dist/test/core.test.js +441 -0
- package/node_modules/@playdrop/game-source-git/dist/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@playdrop/game-source-git/package.json +28 -0
- 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/agent-task-terminal.js +15 -9
- package/node_modules/@playdrop/types/dist/api.d.ts +730 -166
- package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/api.js +65 -18
- package/node_modules/@playdrop/types/dist/asset-pack.d.ts +2 -0
- package/node_modules/@playdrop/types/dist/asset-pack.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/asset.d.ts +22 -8
- package/node_modules/@playdrop/types/dist/asset.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/asset.js +26 -26
- package/node_modules/@playdrop/types/dist/chat.d.ts +273 -31
- package/node_modules/@playdrop/types/dist/chat.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/chat.js +38 -4
- package/node_modules/@playdrop/types/dist/index.d.ts +3 -0
- package/node_modules/@playdrop/types/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/index.js +7 -1
- package/node_modules/@playdrop/types/dist/public-cache-tags.d.ts +11 -0
- package/node_modules/@playdrop/types/dist/public-cache-tags.d.ts.map +1 -0
- package/node_modules/@playdrop/types/dist/public-cache-tags.js +78 -0
- package/node_modules/@playdrop/types/dist/realtime.d.ts +3 -15
- package/node_modules/@playdrop/types/dist/realtime.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/social.d.ts +64 -0
- package/node_modules/@playdrop/types/dist/social.d.ts.map +1 -0
- package/node_modules/@playdrop/{boxel-three/dist/src/types.js → types/dist/social.js} +14 -2
- package/node_modules/@playdrop/types/dist/spritesheet.d.ts +51 -0
- package/node_modules/@playdrop/types/dist/spritesheet.d.ts.map +1 -0
- package/node_modules/@playdrop/types/dist/spritesheet.js +73 -0
- package/node_modules/@playdrop/types/dist/version.d.ts +86 -58
- package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/version.js +111 -0
- package/node_modules/@playdrop/types/package.json +14 -0
- package/node_modules/@playdrop/vox-three/dist/src/index.d.ts +1 -1
- package/node_modules/@playdrop/vox-three/dist/src/index.js +1 -1
- package/node_modules/@playdrop/vox-three/dist/src/index.js.map +1 -1
- package/node_modules/@playdrop/vox-three/dist/src/vox.d.ts +0 -3
- package/node_modules/@playdrop/vox-three/dist/src/vox.js +0 -110
- package/node_modules/@playdrop/vox-three/dist/src/vox.js.map +1 -1
- package/node_modules/@playdrop/vox-three/dist/test/vox.test.js +0 -18
- package/node_modules/@playdrop/vox-three/dist/test/vox.test.js.map +1 -1
- package/node_modules/@playdrop/vox-three/package.json +8 -4
- package/package.json +9 -11
- package/dist/assets/model-artifacts.d.ts +0 -8
- package/dist/assets/model-artifacts.js +0 -382
- package/dist/assets/model-worker.d.ts +0 -22
- package/dist/assets/model-worker.js +0 -123
- package/node_modules/@playdrop/ai-client/dist/index.d.ts +0 -441
- package/node_modules/@playdrop/ai-client/dist/index.d.ts.map +0 -1
- package/node_modules/@playdrop/ai-client/dist/index.js +0 -499
- package/node_modules/@playdrop/ai-client/package.json +0 -22
- package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.d.ts +0 -13
- package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.js +0 -141
- package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.d.ts +0 -47
- package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.js +0 -313
- package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/format-utils.d.ts +0 -3
- package/node_modules/@playdrop/boxel-core/dist/src/format-utils.js +0 -36
- package/node_modules/@playdrop/boxel-core/dist/src/format-utils.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/geometry.d.ts +0 -23
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/geometry.js +0 -11
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/geometry.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/index.d.ts +0 -4
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/index.js +0 -21
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/index.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/common.d.ts +0 -4
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/common.js +0 -24
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/common.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/index.d.ts +0 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/index.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.d.ts +0 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.js +0 -387
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/types.d.ts +0 -6
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/types.js +0 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/types.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.d.ts +0 -3
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.js +0 -373
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.d.ts +0 -12
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.js +0 -215
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/index.d.ts +0 -4
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/index.js +0 -18
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/index.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.d.ts +0 -42
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.js +0 -145
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/artifacts.d.ts +0 -26
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/artifacts.js +0 -65
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/artifacts.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.d.ts +0 -33
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.js +0 -175
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/humanoid_r15.json +0 -1517
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/humanoid_r6.json +0 -61
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/index.d.ts +0 -10
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/index.js +0 -23
- package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/index.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/index.d.ts +0 -19
- package/node_modules/@playdrop/boxel-core/dist/src/index.js +0 -36
- package/node_modules/@playdrop/boxel-core/dist/src/index.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/materials.d.ts +0 -26
- package/node_modules/@playdrop/boxel-core/dist/src/materials.js +0 -184
- package/node_modules/@playdrop/boxel-core/dist/src/materials.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.d.ts +0 -68
- package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.js +0 -488
- package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/serialization.d.ts +0 -4
- package/node_modules/@playdrop/boxel-core/dist/src/serialization.js +0 -380
- package/node_modules/@playdrop/boxel-core/dist/src/serialization.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/textures.d.ts +0 -29
- package/node_modules/@playdrop/boxel-core/dist/src/textures.js +0 -208
- package/node_modules/@playdrop/boxel-core/dist/src/textures.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.d.ts +0 -9
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.js +0 -312
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.d.ts +0 -9
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.js +0 -154
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.d.ts +0 -2
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.js +0 -121
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.d.ts +0 -20
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.js +0 -389
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.d.ts +0 -3
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.js +0 -206
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.d.ts +0 -12
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.js +0 -81
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.d.ts +0 -12
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.js +0 -318
- package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/types.d.ts +0 -168
- package/node_modules/@playdrop/boxel-core/dist/src/types.js +0 -3
- package/node_modules/@playdrop/boxel-core/dist/src/types.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/validation.d.ts +0 -24
- package/node_modules/@playdrop/boxel-core/dist/src/validation.js +0 -620
- package/node_modules/@playdrop/boxel-core/dist/src/validation.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.d.ts +0 -11
- package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.js +0 -135
- package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/dist/src/voxels.d.ts +0 -23
- package/node_modules/@playdrop/boxel-core/dist/src/voxels.js +0 -52
- package/node_modules/@playdrop/boxel-core/dist/src/voxels.js.map +0 -1
- package/node_modules/@playdrop/boxel-core/package.json +0 -19
- package/node_modules/@playdrop/boxel-three/dist/src/animations.d.ts +0 -4
- package/node_modules/@playdrop/boxel-three/dist/src/animations.js +0 -92
- package/node_modules/@playdrop/boxel-three/dist/src/builders.d.ts +0 -8
- package/node_modules/@playdrop/boxel-three/dist/src/builders.js +0 -363
- package/node_modules/@playdrop/boxel-three/dist/src/context.d.ts +0 -24
- package/node_modules/@playdrop/boxel-three/dist/src/context.js +0 -58
- package/node_modules/@playdrop/boxel-three/dist/src/exporters/glb.d.ts +0 -100
- package/node_modules/@playdrop/boxel-three/dist/src/exporters/glb.js +0 -927
- package/node_modules/@playdrop/boxel-three/dist/src/exporters/image.d.ts +0 -18
- package/node_modules/@playdrop/boxel-three/dist/src/exporters/image.js +0 -294
- package/node_modules/@playdrop/boxel-three/dist/src/index.d.ts +0 -17
- package/node_modules/@playdrop/boxel-three/dist/src/index.js +0 -64
- package/node_modules/@playdrop/boxel-three/dist/src/instantiate.d.ts +0 -40
- package/node_modules/@playdrop/boxel-three/dist/src/instantiate.js +0 -96
- package/node_modules/@playdrop/boxel-three/dist/src/nodes.d.ts +0 -8
- package/node_modules/@playdrop/boxel-three/dist/src/nodes.js +0 -88
- package/node_modules/@playdrop/boxel-three/dist/src/overlays.d.ts +0 -7
- package/node_modules/@playdrop/boxel-three/dist/src/overlays.js +0 -123
- package/node_modules/@playdrop/boxel-three/dist/src/primitives.d.ts +0 -4
- package/node_modules/@playdrop/boxel-three/dist/src/primitives.js +0 -48
- package/node_modules/@playdrop/boxel-three/dist/src/scene.d.ts +0 -3
- package/node_modules/@playdrop/boxel-three/dist/src/scene.js +0 -168
- package/node_modules/@playdrop/boxel-three/dist/src/skinned-mesh.d.ts +0 -29
- package/node_modules/@playdrop/boxel-three/dist/src/skinned-mesh.js +0 -623
- package/node_modules/@playdrop/boxel-three/dist/src/texture-atlas.d.ts +0 -13
- package/node_modules/@playdrop/boxel-three/dist/src/texture-atlas.js +0 -133
- package/node_modules/@playdrop/boxel-three/dist/src/textures.d.ts +0 -17
- package/node_modules/@playdrop/boxel-three/dist/src/textures.js +0 -216
- package/node_modules/@playdrop/boxel-three/dist/src/types.d.ts +0 -112
- package/node_modules/@playdrop/boxel-three/dist/src/voxels/faces.d.ts +0 -28
- package/node_modules/@playdrop/boxel-three/dist/src/voxels/faces.js +0 -344
- package/node_modules/@playdrop/boxel-three/dist/src/voxels/mesher.d.ts +0 -24
- package/node_modules/@playdrop/boxel-three/dist/src/voxels/mesher.js +0 -113
- package/node_modules/@playdrop/boxel-three/dist/test/export-image.playwright.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/export-image.playwright.test.js +0 -137
- package/node_modules/@playdrop/boxel-three/dist/test/fixtures/render-worker.d.ts +0 -20
- package/node_modules/@playdrop/boxel-three/dist/test/fixtures/render-worker.js +0 -85
- package/node_modules/@playdrop/boxel-three/dist/test/glb-skinned.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/glb-skinned.test.js +0 -104
- package/node_modules/@playdrop/boxel-three/dist/test/index.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/index.test.js +0 -30
- package/node_modules/@playdrop/boxel-three/dist/test/instantiate.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/instantiate.test.js +0 -88
- package/node_modules/@playdrop/boxel-three/dist/test/overlays.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/overlays.test.js +0 -42
- package/node_modules/@playdrop/boxel-three/dist/test/scene-filter.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/scene-filter.test.js +0 -73
- package/node_modules/@playdrop/boxel-three/dist/test/scene-smoke.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/scene-smoke.test.js +0 -85
- package/node_modules/@playdrop/boxel-three/dist/test/skinned-mesh.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/skinned-mesh.test.js +0 -73
- package/node_modules/@playdrop/boxel-three/dist/test/textured-overlay.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/textured-overlay.test.js +0 -136
- package/node_modules/@playdrop/boxel-three/dist/test/voxels.test.d.ts +0 -1
- package/node_modules/@playdrop/boxel-three/dist/test/voxels.test.js +0 -42
- package/node_modules/@playdrop/boxel-three/package.json +0 -28
package/dist/catalogue.js
CHANGED
|
@@ -23,13 +23,9 @@ const LISTING_VIDEO_EXTENSIONS = new Set([".mp4"]);
|
|
|
23
23
|
exports.APP_DESCRIPTION_RECOMMENDED_MIN_CHARACTERS = 120;
|
|
24
24
|
exports.APP_DESCRIPTION_RECOMMENDED_MIN_WORDS = 20;
|
|
25
25
|
exports.APP_RELEASE_NOTES_MAX_CHARACTERS = 240;
|
|
26
|
-
const BOXEL_GENERATED_FILE_ROLES = new Set(["mesh", "preview"]);
|
|
27
|
-
const BOXEL_REQUIRED_FILE_ROLES = ["primary", "mesh", "preview"];
|
|
28
|
-
const VOX_GENERATED_FILE_ROLES = new Set(["boxel", "mesh", "preview"]);
|
|
29
|
-
const VOX_REQUIRED_FILE_ROLES = ["primary", "boxel", "mesh", "preview"];
|
|
30
26
|
const MAX_CONTENT_TAGS_PER_ITEM = 20;
|
|
31
27
|
const APP_ALLOWED_LICENSES = new Set(["CLOSED", "PLAYDROP", "MIT"]);
|
|
32
|
-
const ASSET_ALLOWED_LICENSES = new Set(["CLOSED", "PLAYDROP", "CC0"]);
|
|
28
|
+
const ASSET_ALLOWED_LICENSES = new Set(["CLOSED", "PLAYDROP", "MIT", "CC0"]);
|
|
33
29
|
const ASSET_SUBCATEGORY_SET_BY_CATEGORY = types_1.ASSET_SUBCATEGORY_DEFINITIONS.reduce((acc, definition) => {
|
|
34
30
|
if (!acc[definition.category]) {
|
|
35
31
|
acc[definition.category] = new Set();
|
|
@@ -56,38 +52,6 @@ function normalizeAppReleaseNotes(value, options = {}) {
|
|
|
56
52
|
}
|
|
57
53
|
return releaseNotes;
|
|
58
54
|
}
|
|
59
|
-
function normalizeFileRole(role) {
|
|
60
|
-
return role.trim().toLowerCase();
|
|
61
|
-
}
|
|
62
|
-
function inferGeneratedModel3DFormat(category, subcategory, format, files) {
|
|
63
|
-
if (category !== "MODEL_3D" || !(0, types_1.isModel3DAssetSubcategory)("MODEL_3D", subcategory)) {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
const normalizedFormat = typeof format === "string" ? format.trim().toUpperCase() : "";
|
|
67
|
-
if (normalizedFormat === "PLAYDROP_BOXEL_JSON" || normalizedFormat === "VOX") {
|
|
68
|
-
return normalizedFormat;
|
|
69
|
-
}
|
|
70
|
-
const primary = typeof files?.primary === "string" ? files.primary.trim().toLowerCase() : "";
|
|
71
|
-
if (primary.endsWith(".boxel.json")) {
|
|
72
|
-
return "PLAYDROP_BOXEL_JSON";
|
|
73
|
-
}
|
|
74
|
-
if (primary.endsWith(".vox")) {
|
|
75
|
-
return "VOX";
|
|
76
|
-
}
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
function getGeneratedModel3DFileRoles(format) {
|
|
80
|
-
if (format === "VOX") {
|
|
81
|
-
return {
|
|
82
|
-
generated: VOX_GENERATED_FILE_ROLES,
|
|
83
|
-
required: VOX_REQUIRED_FILE_ROLES,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
generated: BOXEL_GENERATED_FILE_ROLES,
|
|
88
|
-
required: BOXEL_REQUIRED_FILE_ROLES,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
55
|
function extractGlbJsonChunk(buffer) {
|
|
92
56
|
if (buffer.length < 20) {
|
|
93
57
|
throw new Error("invalid_glb_payload");
|
|
@@ -1228,6 +1192,56 @@ function buildAppTasks(rootDir, catalogues, options) {
|
|
|
1228
1192
|
}
|
|
1229
1193
|
authMode = rawAuthMode;
|
|
1230
1194
|
}
|
|
1195
|
+
let server = null;
|
|
1196
|
+
if (Object.prototype.hasOwnProperty.call(entry, "server")) {
|
|
1197
|
+
const rawServer = entry.server;
|
|
1198
|
+
if (!rawServer || typeof rawServer !== "object" || Array.isArray(rawServer)) {
|
|
1199
|
+
errors.push(`[${label}] Skipping ${rawName}: server must be an object with entry and rooms.`);
|
|
1200
|
+
continue;
|
|
1201
|
+
}
|
|
1202
|
+
const unknownServerKeys = Object.keys(rawServer).filter((key) => key !== "entry" && key !== "rooms");
|
|
1203
|
+
if (unknownServerKeys.length > 0) {
|
|
1204
|
+
errors.push(`[${label}] Skipping ${rawName}: server contains unsupported key "${unknownServerKeys[0]}".`);
|
|
1205
|
+
continue;
|
|
1206
|
+
}
|
|
1207
|
+
const serverEntry = typeof rawServer.entry === "string" ? rawServer.entry.trim().replace(/\\/g, "/") : "";
|
|
1208
|
+
if (!serverEntry || (!serverEntry.endsWith(".ts") && !serverEntry.endsWith(".mts"))) {
|
|
1209
|
+
errors.push(`[${label}] Skipping ${rawName}: server.entry must be a project-local TypeScript file.`);
|
|
1210
|
+
continue;
|
|
1211
|
+
}
|
|
1212
|
+
const serverEntryPath = (0, node_path_1.resolve)(file.directory, serverEntry);
|
|
1213
|
+
const relativeServerEntry = (0, node_path_1.relative)(file.directory, serverEntryPath);
|
|
1214
|
+
if (relativeServerEntry.startsWith("..") || relativeServerEntry === "") {
|
|
1215
|
+
errors.push(`[${label}] Skipping ${rawName}: server.entry must stay inside the project directory.`);
|
|
1216
|
+
continue;
|
|
1217
|
+
}
|
|
1218
|
+
if (!(0, node_fs_1.existsSync)(serverEntryPath) || !(0, node_fs_1.statSync)(serverEntryPath).isFile()) {
|
|
1219
|
+
errors.push(`[${label}] Skipping ${rawName}: server.entry was not found at ${serverEntryPath}.`);
|
|
1220
|
+
continue;
|
|
1221
|
+
}
|
|
1222
|
+
if (!Array.isArray(rawServer.rooms) || rawServer.rooms.length < 1 || rawServer.rooms.length > 2) {
|
|
1223
|
+
errors.push(`[${label}] Skipping ${rawName}: server.rooms must contain one or two room names.`);
|
|
1224
|
+
continue;
|
|
1225
|
+
}
|
|
1226
|
+
const roomNames = rawServer.rooms.map((value) => (typeof value === "string" ? value.trim() : ""));
|
|
1227
|
+
if (roomNames.some((room) => !/^[a-z][a-z0-9_-]{0,63}$/.test(room))) {
|
|
1228
|
+
errors.push(`[${label}] Skipping ${rawName}: server room names must start with a lowercase letter and use only lowercase letters, digits, _ or - (max 64 characters).`);
|
|
1229
|
+
continue;
|
|
1230
|
+
}
|
|
1231
|
+
if (new Set(roomNames).size !== roomNames.length) {
|
|
1232
|
+
errors.push(`[${label}] Skipping ${rawName}: server.rooms must not contain duplicates.`);
|
|
1233
|
+
continue;
|
|
1234
|
+
}
|
|
1235
|
+
if (isExternalMode) {
|
|
1236
|
+
errors.push(`[${label}] Skipping ${rawName}: server is supported only for HOSTED apps.`);
|
|
1237
|
+
continue;
|
|
1238
|
+
}
|
|
1239
|
+
if (!packageJsonPath) {
|
|
1240
|
+
errors.push(`[${label}] Skipping ${rawName}: server apps require a package.json in the project.`);
|
|
1241
|
+
continue;
|
|
1242
|
+
}
|
|
1243
|
+
server = { entry: serverEntry, entryPath: serverEntryPath, rooms: roomNames };
|
|
1244
|
+
}
|
|
1231
1245
|
let controllerMode;
|
|
1232
1246
|
const rawControllerMode = typeof entry.controllerMode === "string" ? entry.controllerMode.trim().toUpperCase() : "";
|
|
1233
1247
|
if (rawControllerMode) {
|
|
@@ -1454,6 +1468,60 @@ function buildAppTasks(rootDir, catalogues, options) {
|
|
|
1454
1468
|
}
|
|
1455
1469
|
design = parsedDesign.value;
|
|
1456
1470
|
}
|
|
1471
|
+
let players;
|
|
1472
|
+
if (Object.prototype.hasOwnProperty.call(entry, "players")) {
|
|
1473
|
+
const parsedPlayers = (0, types_1.normalizeAppPlayers)(entry.players);
|
|
1474
|
+
if (!parsedPlayers.ok) {
|
|
1475
|
+
errors.push(`[${label}] App "${rawName}" ${parsedPlayers.error}`);
|
|
1476
|
+
continue;
|
|
1477
|
+
}
|
|
1478
|
+
players = parsedPlayers.value;
|
|
1479
|
+
}
|
|
1480
|
+
const normalizeLongFormText = (field) => {
|
|
1481
|
+
if (!Object.prototype.hasOwnProperty.call(entry, field)) {
|
|
1482
|
+
return undefined;
|
|
1483
|
+
}
|
|
1484
|
+
const raw = entry[field];
|
|
1485
|
+
if (typeof raw !== "string" || raw.trim().length === 0) {
|
|
1486
|
+
errors.push(`[${label}] App "${rawName}" ${field} must be a non-empty Markdown string.`);
|
|
1487
|
+
return undefined;
|
|
1488
|
+
}
|
|
1489
|
+
return raw.trim();
|
|
1490
|
+
};
|
|
1491
|
+
const makingOf = normalizeLongFormText("makingOf");
|
|
1492
|
+
const controls = normalizeLongFormText("controls");
|
|
1493
|
+
if ((Object.prototype.hasOwnProperty.call(entry, "makingOf") && !makingOf) ||
|
|
1494
|
+
(Object.prototype.hasOwnProperty.call(entry, "controls") && !controls)) {
|
|
1495
|
+
continue;
|
|
1496
|
+
}
|
|
1497
|
+
let creation;
|
|
1498
|
+
if (Object.prototype.hasOwnProperty.call(entry, "creation")) {
|
|
1499
|
+
const parsedCreation = (0, types_1.normalizeAppCreationMetadata)(entry.creation);
|
|
1500
|
+
if (!parsedCreation.ok) {
|
|
1501
|
+
errors.push(`[${label}] App "${rawName}" ${parsedCreation.error}`);
|
|
1502
|
+
continue;
|
|
1503
|
+
}
|
|
1504
|
+
creation = parsedCreation.value;
|
|
1505
|
+
}
|
|
1506
|
+
let sourceRepository;
|
|
1507
|
+
if (Object.prototype.hasOwnProperty.call(entry, "sourceRepository")) {
|
|
1508
|
+
const rawSourceRepository = entry.sourceRepository;
|
|
1509
|
+
if (typeof rawSourceRepository !== "string" || rawSourceRepository.trim().length === 0) {
|
|
1510
|
+
errors.push(`[${label}] App "${rawName}" sourceRepository must be a non-empty HTTPS URL.`);
|
|
1511
|
+
continue;
|
|
1512
|
+
}
|
|
1513
|
+
try {
|
|
1514
|
+
const parsedSourceRepository = new URL(rawSourceRepository.trim());
|
|
1515
|
+
if (parsedSourceRepository.protocol !== "https:") {
|
|
1516
|
+
throw new Error("invalid_source_repository");
|
|
1517
|
+
}
|
|
1518
|
+
sourceRepository = parsedSourceRepository.toString();
|
|
1519
|
+
}
|
|
1520
|
+
catch {
|
|
1521
|
+
errors.push(`[${label}] App "${rawName}" sourceRepository must be a non-empty HTTPS URL.`);
|
|
1522
|
+
continue;
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1457
1525
|
let tweaks;
|
|
1458
1526
|
if (Object.prototype.hasOwnProperty.call(entry, "tweaks")) {
|
|
1459
1527
|
const parsedTweaks = (0, types_1.normalizeAppTweaks)(entry.tweaks);
|
|
@@ -1503,12 +1571,6 @@ function buildAppTasks(rootDir, catalogues, options) {
|
|
|
1503
1571
|
const ownedFormat = typeof owned?.format === "string" && owned.format.trim().length > 0
|
|
1504
1572
|
? owned.format.trim().toUpperCase()
|
|
1505
1573
|
: undefined;
|
|
1506
|
-
const generatedModel3DFormat = subcategory
|
|
1507
|
-
? inferGeneratedModel3DFormat(category, subcategory, ownedFormat, fileEntries)
|
|
1508
|
-
: null;
|
|
1509
|
-
const generatedModel3DRoles = generatedModel3DFormat
|
|
1510
|
-
? getGeneratedModel3DFileRoles(generatedModel3DFormat)
|
|
1511
|
-
: null;
|
|
1512
1574
|
if (!fileEntries || Object.keys(fileEntries).length === 0) {
|
|
1513
1575
|
errors.push(`[${label}] Skipping ${rawName}: owned asset "${ownedName}" must define files.`);
|
|
1514
1576
|
continue;
|
|
@@ -1524,14 +1586,7 @@ function buildAppTasks(rootDir, catalogues, options) {
|
|
|
1524
1586
|
}
|
|
1525
1587
|
const relativeEmbeddedPath = fileValue.trim();
|
|
1526
1588
|
const absoluteEmbeddedPath = (0, node_path_1.resolve)(file.directory, relativeEmbeddedPath);
|
|
1527
|
-
const normalizedRole = normalizeFileRole(role);
|
|
1528
|
-
const allowMissingGenerated = Boolean(generatedModel3DRoles?.generated.has(normalizedRole));
|
|
1529
1589
|
if (!(0, node_fs_1.existsSync)(absoluteEmbeddedPath) || !(0, node_fs_1.statSync)(absoluteEmbeddedPath).isFile()) {
|
|
1530
|
-
if (allowMissingGenerated) {
|
|
1531
|
-
files[role] = relativeEmbeddedPath.replace(/\\/g, "/");
|
|
1532
|
-
filePaths[role] = absoluteEmbeddedPath;
|
|
1533
|
-
continue;
|
|
1534
|
-
}
|
|
1535
1590
|
errors.push(`[${label}] Skipping ${rawName}: owned asset "${ownedName}" file not found at ${absoluteEmbeddedPath}.`);
|
|
1536
1591
|
ownedAssetHasError = true;
|
|
1537
1592
|
continue;
|
|
@@ -1542,14 +1597,6 @@ function buildAppTasks(rootDir, catalogues, options) {
|
|
|
1542
1597
|
if (ownedAssetHasError) {
|
|
1543
1598
|
continue;
|
|
1544
1599
|
}
|
|
1545
|
-
if (generatedModel3DRoles) {
|
|
1546
|
-
const normalizedRoles = new Set(Object.keys(files).map((role) => normalizeFileRole(role)));
|
|
1547
|
-
const missingRoles = generatedModel3DRoles.required.filter((role) => !normalizedRoles.has(role));
|
|
1548
|
-
if (missingRoles.length > 0) {
|
|
1549
|
-
errors.push(`[${label}] Skipping ${rawName}: owned asset "${ownedName}" with subcategory=${subcategory} must define files.${missingRoles.join(" and files.")}.`);
|
|
1550
|
-
continue;
|
|
1551
|
-
}
|
|
1552
|
-
}
|
|
1553
1600
|
if (category === "SPRITESHEET") {
|
|
1554
1601
|
const hasAtlas = Object.prototype.hasOwnProperty.call(files, "atlas");
|
|
1555
1602
|
const hasManifest = Object.prototype.hasOwnProperty.call(files, "manifest");
|
|
@@ -1671,6 +1718,11 @@ function buildAppTasks(rootDir, catalogues, options) {
|
|
|
1671
1718
|
primarySurface: metadata.primarySurface,
|
|
1672
1719
|
playtestTapes: metadata.playtestTapes,
|
|
1673
1720
|
design,
|
|
1721
|
+
players,
|
|
1722
|
+
makingOf,
|
|
1723
|
+
controls,
|
|
1724
|
+
creation,
|
|
1725
|
+
sourceRepository,
|
|
1674
1726
|
tweaks,
|
|
1675
1727
|
missingMetadata: metadata.missingFields,
|
|
1676
1728
|
// Versioning fields
|
|
@@ -1684,6 +1736,7 @@ function buildAppTasks(rootDir, catalogues, options) {
|
|
|
1684
1736
|
controllerMode,
|
|
1685
1737
|
previewable,
|
|
1686
1738
|
editorSupported,
|
|
1739
|
+
server,
|
|
1687
1740
|
externalUrl,
|
|
1688
1741
|
listing,
|
|
1689
1742
|
// Admin-only field
|
|
@@ -1900,12 +1953,6 @@ function buildAssetTasks(catalogues, assetSpecTasks) {
|
|
|
1900
1953
|
const fileEntries = entry.files && typeof entry.files === "object" && !Array.isArray(entry.files)
|
|
1901
1954
|
? entry.files
|
|
1902
1955
|
: null;
|
|
1903
|
-
const generatedModel3DFormat = !isCustomAsset && category && subcategory
|
|
1904
|
-
? inferGeneratedModel3DFormat(category, subcategory, format, fileEntries)
|
|
1905
|
-
: null;
|
|
1906
|
-
const generatedModel3DRoles = generatedModel3DFormat
|
|
1907
|
-
? getGeneratedModel3DFileRoles(generatedModel3DFormat)
|
|
1908
|
-
: null;
|
|
1909
1956
|
if (!fileEntries || Object.keys(fileEntries).length === 0) {
|
|
1910
1957
|
errors.push(`[${label}] Asset "${name}" must define files.`);
|
|
1911
1958
|
continue;
|
|
@@ -1921,14 +1968,7 @@ function buildAssetTasks(catalogues, assetSpecTasks) {
|
|
|
1921
1968
|
}
|
|
1922
1969
|
const relativePath = value.trim();
|
|
1923
1970
|
const absolutePath = (0, node_path_1.resolve)(file.directory, relativePath);
|
|
1924
|
-
const normalizedRole = normalizeFileRole(role);
|
|
1925
|
-
const allowMissingGenerated = Boolean(generatedModel3DRoles?.generated.has(normalizedRole));
|
|
1926
1971
|
if (!(0, node_fs_1.existsSync)(absolutePath) || !(0, node_fs_1.statSync)(absolutePath).isFile()) {
|
|
1927
|
-
if (allowMissingGenerated) {
|
|
1928
|
-
files[role] = relativePath.replace(/\\/g, "/");
|
|
1929
|
-
filePaths[role] = absolutePath;
|
|
1930
|
-
continue;
|
|
1931
|
-
}
|
|
1932
1972
|
errors.push(`[${label}] Asset "${name}" file not found at ${absolutePath}.`);
|
|
1933
1973
|
hasError = true;
|
|
1934
1974
|
continue;
|
|
@@ -1939,14 +1979,6 @@ function buildAssetTasks(catalogues, assetSpecTasks) {
|
|
|
1939
1979
|
if (hasError) {
|
|
1940
1980
|
continue;
|
|
1941
1981
|
}
|
|
1942
|
-
if (!isCustomAsset && generatedModel3DRoles) {
|
|
1943
|
-
const normalizedRoles = new Set(Object.keys(files).map((role) => normalizeFileRole(role)));
|
|
1944
|
-
const missingRoles = generatedModel3DRoles.required.filter((role) => !normalizedRoles.has(role));
|
|
1945
|
-
if (missingRoles.length > 0) {
|
|
1946
|
-
errors.push(`[${label}] Asset "${name}" with subcategory=${subcategory} must define files.${missingRoles.join(" and files.")}.`);
|
|
1947
|
-
continue;
|
|
1948
|
-
}
|
|
1949
|
-
}
|
|
1950
1982
|
if (!isCustomAsset && category === "SPRITESHEET") {
|
|
1951
1983
|
const hasAtlas = Object.prototype.hasOwnProperty.call(files, "atlas");
|
|
1952
1984
|
const hasManifest = Object.prototype.hasOwnProperty.call(files, "manifest");
|
|
@@ -2090,12 +2122,6 @@ function buildAssetPackTasks(catalogues) {
|
|
|
2090
2122
|
const ownedFormat = typeof owned?.format === "string" && owned.format.trim().length > 0
|
|
2091
2123
|
? owned.format.trim().toUpperCase()
|
|
2092
2124
|
: undefined;
|
|
2093
|
-
const generatedModel3DFormat = subcategory
|
|
2094
|
-
? inferGeneratedModel3DFormat(category, subcategory, ownedFormat, fileEntries)
|
|
2095
|
-
: null;
|
|
2096
|
-
const generatedModel3DRoles = generatedModel3DFormat
|
|
2097
|
-
? getGeneratedModel3DFileRoles(generatedModel3DFormat)
|
|
2098
|
-
: null;
|
|
2099
2125
|
if (!fileEntries || Object.keys(fileEntries).length === 0) {
|
|
2100
2126
|
errors.push(`[${label}] Skipping asset pack "${name}": owned asset "${ownedName}" must define files.`);
|
|
2101
2127
|
continue;
|
|
@@ -2111,14 +2137,7 @@ function buildAssetPackTasks(catalogues) {
|
|
|
2111
2137
|
}
|
|
2112
2138
|
const relativeOwnedPath = fileValue.trim();
|
|
2113
2139
|
const absoluteOwnedPath = (0, node_path_1.resolve)(file.directory, relativeOwnedPath);
|
|
2114
|
-
const normalizedRole = normalizeFileRole(role);
|
|
2115
|
-
const allowMissingGenerated = Boolean(generatedModel3DRoles?.generated.has(normalizedRole));
|
|
2116
2140
|
if (!(0, node_fs_1.existsSync)(absoluteOwnedPath) || !(0, node_fs_1.statSync)(absoluteOwnedPath).isFile()) {
|
|
2117
|
-
if (allowMissingGenerated) {
|
|
2118
|
-
files[role] = relativeOwnedPath.replace(/\\/g, "/");
|
|
2119
|
-
filePaths[role] = absoluteOwnedPath;
|
|
2120
|
-
continue;
|
|
2121
|
-
}
|
|
2122
2141
|
errors.push(`[${label}] Skipping asset pack "${name}": owned asset "${ownedName}" file not found at ${absoluteOwnedPath}.`);
|
|
2123
2142
|
ownedAssetHasError = true;
|
|
2124
2143
|
continue;
|
|
@@ -2129,14 +2148,6 @@ function buildAssetPackTasks(catalogues) {
|
|
|
2129
2148
|
if (ownedAssetHasError) {
|
|
2130
2149
|
continue;
|
|
2131
2150
|
}
|
|
2132
|
-
if (generatedModel3DRoles) {
|
|
2133
|
-
const normalizedRoles = new Set(Object.keys(files).map((role) => normalizeFileRole(role)));
|
|
2134
|
-
const missingRoles = generatedModel3DRoles.required.filter((role) => !normalizedRoles.has(role));
|
|
2135
|
-
if (missingRoles.length > 0) {
|
|
2136
|
-
errors.push(`[${label}] Skipping asset pack "${name}": owned asset "${ownedName}" with subcategory=${subcategory} must define files.${missingRoles.join(" and files.")}.`);
|
|
2137
|
-
continue;
|
|
2138
|
-
}
|
|
2139
|
-
}
|
|
2140
2151
|
if (category === "SPRITESHEET") {
|
|
2141
2152
|
const hasAtlas = Object.prototype.hasOwnProperty.call(files, "atlas");
|
|
2142
2153
|
const hasManifest = Object.prototype.hasOwnProperty.call(files, "manifest");
|
|
@@ -2233,6 +2244,20 @@ function buildAssetPackTasks(catalogues) {
|
|
|
2233
2244
|
errors.push(`[${label}] Asset pack "${name}" visibility must be PUBLIC or PRIVATE.`);
|
|
2234
2245
|
continue;
|
|
2235
2246
|
}
|
|
2247
|
+
let sourcePath;
|
|
2248
|
+
if (typeof entry.source === "string" && entry.source.trim()) {
|
|
2249
|
+
const relativeSourcePath = entry.source.trim();
|
|
2250
|
+
const absoluteSourcePath = (0, node_path_1.resolve)(file.directory, relativeSourcePath);
|
|
2251
|
+
if (!relativeSourcePath.toLowerCase().endsWith(".zip")) {
|
|
2252
|
+
errors.push(`[${label}] Asset pack "${name}" source must be a ZIP archive.`);
|
|
2253
|
+
continue;
|
|
2254
|
+
}
|
|
2255
|
+
if (!(0, node_fs_1.existsSync)(absoluteSourcePath) || !(0, node_fs_1.statSync)(absoluteSourcePath).isFile()) {
|
|
2256
|
+
errors.push(`[${label}] Asset pack "${name}" source not found at ${absoluteSourcePath}.`);
|
|
2257
|
+
continue;
|
|
2258
|
+
}
|
|
2259
|
+
sourcePath = absoluteSourcePath;
|
|
2260
|
+
}
|
|
2236
2261
|
let listing;
|
|
2237
2262
|
const rawListing = entry.listing;
|
|
2238
2263
|
let listingValidationFailed = false;
|
|
@@ -2375,6 +2400,7 @@ function buildAssetPackTasks(catalogues) {
|
|
|
2375
2400
|
visibility,
|
|
2376
2401
|
license,
|
|
2377
2402
|
releaseNotes: typeof entry.releaseNotes === "string" ? entry.releaseNotes : undefined,
|
|
2403
|
+
sourcePath,
|
|
2378
2404
|
tags,
|
|
2379
2405
|
listing,
|
|
2380
2406
|
relations,
|
package/dist/commandContext.d.ts
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
import type { ApiClient } from "@playdrop/api-client";
|
|
2
|
-
import type { AiClient } from "@playdrop/ai-client";
|
|
3
2
|
import { type CliAccountSession, type CliConfig } from "./config";
|
|
4
3
|
import { type EnvironmentConfig } from "./environment";
|
|
5
4
|
import { type ResolvedWorkspaceAuthConfig } from "./workspaceAuth";
|
|
6
5
|
export type EnvironmentContext = {
|
|
7
6
|
client: ApiClient;
|
|
8
|
-
aiClient: AiClient;
|
|
9
7
|
env: string;
|
|
10
8
|
envConfig: EnvironmentConfig;
|
|
11
9
|
token: string;
|
|
12
10
|
config: CliConfig;
|
|
13
11
|
account: CliAccountSession | null;
|
|
14
12
|
workspaceAuth: ResolvedWorkspaceAuthConfig | null;
|
|
13
|
+
getToken: () => string;
|
|
14
|
+
refreshToken: (force?: boolean) => Promise<string>;
|
|
15
15
|
};
|
|
16
16
|
type EnvironmentCallback = (ctx: EnvironmentContext) => Promise<void> | void;
|
|
17
17
|
export type ResolveAuthenticatedEnvironmentOptions = {
|
|
18
18
|
env?: string;
|
|
19
19
|
workspacePath?: string;
|
|
20
|
+
forceRefresh?: boolean;
|
|
20
21
|
};
|
|
21
22
|
export declare function resolveAuthenticatedEnvironmentContext(command: string, actionLabel: string, options?: ResolveAuthenticatedEnvironmentOptions): Promise<EnvironmentContext | null>;
|
|
22
23
|
export declare function resolveOptionalEnvironmentContext(command: string, options?: ResolveAuthenticatedEnvironmentOptions): Promise<EnvironmentContext | null>;
|
|
23
24
|
export declare function withEnvironment(command: string, actionLabel: string, callback: EnvironmentCallback, options?: ResolveAuthenticatedEnvironmentOptions): Promise<void>;
|
|
24
|
-
export declare function withPublicEnvironment(command: string, callback: EnvironmentCallback
|
|
25
|
+
export declare function withPublicEnvironment(command: string, callback: EnvironmentCallback, options?: {
|
|
26
|
+
env?: string;
|
|
27
|
+
}): Promise<void>;
|
|
25
28
|
export {};
|
package/dist/commandContext.js
CHANGED
|
@@ -4,12 +4,82 @@ exports.resolveAuthenticatedEnvironmentContext = resolveAuthenticatedEnvironment
|
|
|
4
4
|
exports.resolveOptionalEnvironmentContext = resolveOptionalEnvironmentContext;
|
|
5
5
|
exports.withEnvironment = withEnvironment;
|
|
6
6
|
exports.withPublicEnvironment = withPublicEnvironment;
|
|
7
|
+
const types_1 = require("@playdrop/types");
|
|
7
8
|
const config_1 = require("./config");
|
|
8
9
|
const apiClient_1 = require("./apiClient");
|
|
9
10
|
const environment_1 = require("./environment");
|
|
10
11
|
const messages_1 = require("./messages");
|
|
11
12
|
const workspaceAuth_1 = require("./workspaceAuth");
|
|
12
13
|
const DEFAULT_PUBLIC_ENV = "prod";
|
|
14
|
+
const ACCESS_TOKEN_REFRESH_WINDOW_MS = 5 * 60 * 1000;
|
|
15
|
+
function readAccessTokenExpiryMs(token) {
|
|
16
|
+
try {
|
|
17
|
+
const payloadSegment = token.split(".")[1];
|
|
18
|
+
if (!payloadSegment)
|
|
19
|
+
return null;
|
|
20
|
+
const payload = JSON.parse(Buffer.from(payloadSegment, "base64url").toString("utf8"));
|
|
21
|
+
return typeof payload.exp === "number" && Number.isFinite(payload.exp) ? payload.exp * 1000 : null;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function accessTokenIsValid(token, nowMs = Date.now()) {
|
|
28
|
+
const expiresAtMs = readAccessTokenExpiryMs(token);
|
|
29
|
+
return expiresAtMs !== null && expiresAtMs > nowMs;
|
|
30
|
+
}
|
|
31
|
+
function accessTokenNeedsRefresh(token, nowMs = Date.now()) {
|
|
32
|
+
const expiresAtMs = readAccessTokenExpiryMs(token);
|
|
33
|
+
return expiresAtMs === null || expiresAtMs - nowMs <= ACCESS_TOKEN_REFRESH_WINDOW_MS;
|
|
34
|
+
}
|
|
35
|
+
function extractLoginAccessToken(data) {
|
|
36
|
+
const token = data.accessToken ?? (typeof data === "object" && data !== null && "token" in data ? String(data.token) : "");
|
|
37
|
+
if (!token.trim())
|
|
38
|
+
throw new Error("cli_session_refresh_token_missing");
|
|
39
|
+
return token.trim();
|
|
40
|
+
}
|
|
41
|
+
async function refreshStoredAccountSession(input) {
|
|
42
|
+
if (!input.force && !accessTokenNeedsRefresh(input.account.token)) {
|
|
43
|
+
return input.account;
|
|
44
|
+
}
|
|
45
|
+
if (!input.account.deviceApiKey) {
|
|
46
|
+
const expiryMs = readAccessTokenExpiryMs(input.account.token);
|
|
47
|
+
const storedConfigVersion = (0, config_1.loadConfig)().version ?? 0;
|
|
48
|
+
if (!input.force && storedConfigVersion < 3 && expiryMs === null) {
|
|
49
|
+
return input.account;
|
|
50
|
+
}
|
|
51
|
+
throw new Error('cli_session_refresh_requires_login: this session predates durable CLI auth. Run "playdrop auth login" once to upgrade it.');
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const login = await (0, apiClient_1.createCliApiClient)({ baseUrl: input.envConfig.apiBase }).loginWithApiKey({
|
|
55
|
+
apiKey: input.account.deviceApiKey,
|
|
56
|
+
});
|
|
57
|
+
const username = login.user?.username?.trim() ?? "";
|
|
58
|
+
if (username !== input.account.username) {
|
|
59
|
+
throw new Error("cli_session_refresh_account_mismatch");
|
|
60
|
+
}
|
|
61
|
+
const token = extractLoginAccessToken(login);
|
|
62
|
+
(0, config_1.saveAccountSession)({
|
|
63
|
+
username,
|
|
64
|
+
env: input.account.env,
|
|
65
|
+
token,
|
|
66
|
+
deviceApiKey: input.account.deviceApiKey,
|
|
67
|
+
});
|
|
68
|
+
return (0, config_1.findAccountSession)(username, input.account.env) ?? { ...input.account, token };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (error instanceof Error && error.message === "cli_session_refresh_account_mismatch") {
|
|
72
|
+
throw new Error('cli_device_credentials_invalid: this computer token belongs to another account. Run "playdrop auth login" again.');
|
|
73
|
+
}
|
|
74
|
+
if (error instanceof types_1.ApiError && (error.status === 401 || error.status === 403)) {
|
|
75
|
+
throw new Error('cli_device_credentials_invalid: this computer token was revoked or is no longer authorized. Run "playdrop auth login" again.');
|
|
76
|
+
}
|
|
77
|
+
if (accessTokenIsValid(input.account.token)) {
|
|
78
|
+
return input.account;
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`cli_session_refresh_failed: no valid access token remains (${error instanceof Error ? error.message : String(error)}).`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
13
83
|
function normalizeRequestedEnv(value) {
|
|
14
84
|
if (typeof value !== "string") {
|
|
15
85
|
return undefined;
|
|
@@ -37,37 +107,43 @@ function resolveConfiguredEnvironment(envName, command, options) {
|
|
|
37
107
|
return envConfig;
|
|
38
108
|
}
|
|
39
109
|
function buildContext(cfg, envConfig, account, workspaceAuth = null) {
|
|
40
|
-
|
|
110
|
+
let activeAccount = account;
|
|
111
|
+
let token = activeAccount?.token ?? cfg.token ?? "";
|
|
41
112
|
const onBehalfCreatorUsername = workspaceAuth?.config.ownerUsername ?? null;
|
|
42
113
|
const agentTaskToken = workspaceAuth?.config.taskToken ?? null;
|
|
43
114
|
const agentTaskId = workspaceAuth?.config.taskId ?? null;
|
|
44
115
|
const agentTaskAttempt = workspaceAuth?.config.taskAttempt ?? null;
|
|
45
116
|
const client = (0, apiClient_1.createCliApiClient)({
|
|
46
117
|
baseUrl: envConfig.apiBase,
|
|
47
|
-
token,
|
|
48
|
-
onBehalfCreatorUsername,
|
|
49
|
-
agentTaskToken,
|
|
50
|
-
agentTaskId,
|
|
51
|
-
agentTaskAttempt,
|
|
52
|
-
});
|
|
53
|
-
const aiClient = (0, apiClient_1.createCliAiClient)({
|
|
54
|
-
baseUrl: envConfig.aiBase,
|
|
55
|
-
token,
|
|
118
|
+
tokenProvider: () => token,
|
|
56
119
|
onBehalfCreatorUsername,
|
|
57
120
|
agentTaskToken,
|
|
58
121
|
agentTaskId,
|
|
59
122
|
agentTaskAttempt,
|
|
60
123
|
});
|
|
61
|
-
|
|
124
|
+
const context = {
|
|
62
125
|
client,
|
|
63
|
-
aiClient,
|
|
64
126
|
env: envConfig.name,
|
|
65
127
|
envConfig,
|
|
66
|
-
token
|
|
128
|
+
get token() {
|
|
129
|
+
return token;
|
|
130
|
+
},
|
|
67
131
|
config: cfg,
|
|
68
132
|
account,
|
|
69
133
|
workspaceAuth,
|
|
134
|
+
getToken: () => token,
|
|
135
|
+
refreshToken: async (force = true) => {
|
|
136
|
+
if (!activeAccount) {
|
|
137
|
+
throw new Error("cli_session_refresh_requires_login");
|
|
138
|
+
}
|
|
139
|
+
activeAccount = await refreshStoredAccountSession({ account: activeAccount, envConfig, force });
|
|
140
|
+
token = activeAccount.token;
|
|
141
|
+
context.account = activeAccount;
|
|
142
|
+
context.config = (0, config_1.loadConfig)();
|
|
143
|
+
return token;
|
|
144
|
+
},
|
|
70
145
|
};
|
|
146
|
+
return context;
|
|
71
147
|
}
|
|
72
148
|
function buildLegacyAccountSession(cfg) {
|
|
73
149
|
if (!cfg.token || !cfg.env) {
|
|
@@ -274,7 +350,12 @@ async function resolveAuthenticatedEnvironmentContext(command, actionLabel, opti
|
|
|
274
350
|
if (!resolved) {
|
|
275
351
|
return null;
|
|
276
352
|
}
|
|
277
|
-
|
|
353
|
+
const account = await refreshStoredAccountSession({
|
|
354
|
+
account: resolved.account,
|
|
355
|
+
envConfig: resolved.envConfig,
|
|
356
|
+
force: options.forceRefresh,
|
|
357
|
+
});
|
|
358
|
+
return buildContext((0, config_1.loadConfig)(), resolved.envConfig, account, resolved.workspaceAuth);
|
|
278
359
|
}
|
|
279
360
|
async function resolveOptionalEnvironmentContext(command, options = {}) {
|
|
280
361
|
const loaded = await loadWorkspaceAwareConfig(command, options);
|
|
@@ -325,7 +406,12 @@ async function resolveOptionalEnvironmentContext(command, options = {}) {
|
|
|
325
406
|
if (!envConfig) {
|
|
326
407
|
return null;
|
|
327
408
|
}
|
|
328
|
-
|
|
409
|
+
const account = await refreshStoredAccountSession({
|
|
410
|
+
account: selectedAccount,
|
|
411
|
+
envConfig,
|
|
412
|
+
force: options.forceRefresh,
|
|
413
|
+
});
|
|
414
|
+
return buildContext((0, config_1.loadConfig)(), envConfig, account, workspaceAuth);
|
|
329
415
|
}
|
|
330
416
|
async function withEnvironment(command, actionLabel, callback, options = {}) {
|
|
331
417
|
const ctx = await resolveAuthenticatedEnvironmentContext(command, actionLabel, options);
|
|
@@ -334,10 +420,14 @@ async function withEnvironment(command, actionLabel, callback, options = {}) {
|
|
|
334
420
|
}
|
|
335
421
|
await callback(ctx);
|
|
336
422
|
}
|
|
337
|
-
async function withPublicEnvironment(command, callback) {
|
|
423
|
+
async function withPublicEnvironment(command, callback, options = {}) {
|
|
338
424
|
const cfg = (0, config_1.loadConfig)();
|
|
339
|
-
const
|
|
340
|
-
const
|
|
425
|
+
const currentAccount = (0, config_1.getCurrentAccountSession)(cfg);
|
|
426
|
+
const requestedEnv = options.env?.trim();
|
|
427
|
+
const account = requestedEnv && currentAccount
|
|
428
|
+
? (0, config_1.findAccountSession)(currentAccount.username, requestedEnv, cfg)
|
|
429
|
+
: currentAccount;
|
|
430
|
+
const envConfig = resolveConfiguredEnvironment(requestedEnv ?? account?.env ?? cfg.env, command, {
|
|
341
431
|
requireAuth: false,
|
|
342
432
|
allowDefaultPublicEnv: true,
|
|
343
433
|
});
|
package/dist/commands/build.js
CHANGED
|
@@ -5,7 +5,6 @@ const taskSelection_1 = require("../taskSelection");
|
|
|
5
5
|
const taskUtils_1 = require("../taskUtils");
|
|
6
6
|
const uploadLog_1 = require("../uploadLog");
|
|
7
7
|
const apps_1 = require("../apps");
|
|
8
|
-
const model_artifacts_1 = require("../assets/model-artifacts");
|
|
9
8
|
async function build(pathOrName) {
|
|
10
9
|
const selection = (0, taskSelection_1.selectTasks)(pathOrName);
|
|
11
10
|
if (selection.errors.length > 0) {
|
|
@@ -29,12 +28,6 @@ async function build(pathOrName) {
|
|
|
29
28
|
const artifacts = await (0, apps_1.buildApp)(task);
|
|
30
29
|
detail = `bundleHash=${artifacts.bundleHash}`;
|
|
31
30
|
}
|
|
32
|
-
else if (task.kind === "asset" || task.kind === "owned-asset") {
|
|
33
|
-
const generated = await (0, model_artifacts_1.prepareModel3DAssetArtifacts)(task);
|
|
34
|
-
if (!generated) {
|
|
35
|
-
throw new Error(`project build does not support ${task.kind} "${entityId}" because it has no local build step.`);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
31
|
else {
|
|
39
32
|
throw new Error(`project build does not support ${task.kind} "${entityId}".`);
|
|
40
33
|
}
|
|
@@ -3,6 +3,7 @@ import type { BrowserContextOptions } from "playwright-core";
|
|
|
3
3
|
import { type TaskCaptureSession } from "../appUrls";
|
|
4
4
|
type CaptureListingOptions = {
|
|
5
5
|
app?: string;
|
|
6
|
+
surface?: string;
|
|
6
7
|
duration?: string | number;
|
|
7
8
|
width?: string | number;
|
|
8
9
|
height?: string | number;
|
|
@@ -15,6 +16,7 @@ type CaptureListingOptions = {
|
|
|
15
16
|
type ParsedCaptureListingOptions = {
|
|
16
17
|
targetArg?: string;
|
|
17
18
|
appName?: string;
|
|
19
|
+
surface: AppSurface | null;
|
|
18
20
|
durationSeconds: number;
|
|
19
21
|
width: number;
|
|
20
22
|
height: number;
|
|
@@ -124,6 +126,7 @@ export type ExportedListingAudio = {
|
|
|
124
126
|
mimeType: string;
|
|
125
127
|
base64: string;
|
|
126
128
|
};
|
|
129
|
+
export declare function resolveCaptureSurfaces(declared: AppSurface[], selected: AppSurface | null): AppSurface[];
|
|
127
130
|
export declare function resolveListingCaptureRouteSegment(previewable: boolean): "dev-preview";
|
|
128
131
|
export declare function resolveCaptureListingDevRouterPort(env?: NodeJS.ProcessEnv): number;
|
|
129
132
|
export declare function resolveListingCaptureLocalDevPort(devRouterPort: number): number | null;
|