@playdrop/playdrop-cli 0.16.16 → 0.17.1
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 -0
- package/dist/commands/chat.js +133 -8
- 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 +782 -0
- package/dist/commands/worker/generation.d.ts +94 -0
- package/dist/commands/worker/generation.js +1458 -0
- package/dist/commands/worker/runtime.d.ts +8 -10
- package/dist/commands/worker/runtime.js +51 -45
- 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 -13
- package/dist/workerAppProject.d.ts +1 -1
- package/dist/workerAppProject.js +15 -2
- package/node_modules/@playdrop/api-client/dist/client.d.ts +72 -25
- 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 +35 -3
- package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/chat.js +89 -7
- 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 +80 -29
- 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 +728 -164
- package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/api.js +60 -11
- 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 +107 -3
- package/node_modules/@playdrop/types/dist/chat.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/chat.js +33 -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/node_modules/@playwright/mcp/node_modules/fsevents/LICENSE +22 -0
- package/node_modules/@playwright/mcp/node_modules/fsevents/README.md +83 -0
- package/node_modules/@playwright/mcp/node_modules/fsevents/fsevents.d.ts +46 -0
- package/node_modules/@playwright/mcp/node_modules/fsevents/fsevents.js +82 -0
- package/node_modules/@playwright/mcp/node_modules/fsevents/fsevents.node +0 -0
- package/node_modules/@playwright/mcp/node_modules/fsevents/package.json +62 -0
- 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
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GAME_SERVER_BUNDLE_MAX_BYTES = exports.GAME_SERVER_RUNTIME_VERSION = void 0;
|
|
4
|
+
exports.verifyGameServerDependencies = verifyGameServerDependencies;
|
|
5
|
+
exports.buildGameServer = buildGameServer;
|
|
6
|
+
exports.formatServerBuildPath = formatServerBuildPath;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const node_url_1 = require("node:url");
|
|
11
|
+
const esbuild_1 = require("esbuild");
|
|
12
|
+
exports.GAME_SERVER_RUNTIME_VERSION = "colyseus-0.17-v1";
|
|
13
|
+
exports.GAME_SERVER_BUNDLE_MAX_BYTES = 2 * 1024 * 1024;
|
|
14
|
+
const REQUIRED_PACKAGE_VERSIONS = Object.freeze({
|
|
15
|
+
colyseus: "0.17.10",
|
|
16
|
+
"@colyseus/core": "0.17.50",
|
|
17
|
+
"@colyseus/schema": "4.0.30",
|
|
18
|
+
mongodb: "7.5.0",
|
|
19
|
+
"@playdrop/server": "0.1.0",
|
|
20
|
+
typescript: "5.9.3",
|
|
21
|
+
});
|
|
22
|
+
const CREATOR_IMPORTS = new Set([
|
|
23
|
+
"colyseus",
|
|
24
|
+
"@colyseus/core",
|
|
25
|
+
"@colyseus/schema",
|
|
26
|
+
"mongodb",
|
|
27
|
+
"@playdrop/server",
|
|
28
|
+
]);
|
|
29
|
+
function resolveInstalledPackageVersion(projectPackageJsonPath, packageName) {
|
|
30
|
+
let current = (0, node_path_1.dirname)(projectPackageJsonPath);
|
|
31
|
+
while (true) {
|
|
32
|
+
const packageJsonPath = (0, node_path_1.join)(current, "node_modules", ...packageName.split("/"), "package.json");
|
|
33
|
+
if ((0, node_fs_1.existsSync)(packageJsonPath)) {
|
|
34
|
+
const manifest = JSON.parse((0, node_fs_1.readFileSync)(packageJsonPath, "utf8"));
|
|
35
|
+
if (manifest.name === packageName && typeof manifest.version === "string") {
|
|
36
|
+
return manifest.version;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const parent = (0, node_path_1.dirname)(current);
|
|
40
|
+
if (parent === current)
|
|
41
|
+
break;
|
|
42
|
+
current = parent;
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`server_dependency_missing:${packageName}`);
|
|
45
|
+
}
|
|
46
|
+
function verifyGameServerDependencies(task) {
|
|
47
|
+
if (!task.server)
|
|
48
|
+
return;
|
|
49
|
+
if (!task.packageJsonPath)
|
|
50
|
+
throw new Error("server_package_json_required");
|
|
51
|
+
for (const [packageName, expected] of Object.entries(REQUIRED_PACKAGE_VERSIONS)) {
|
|
52
|
+
const actual = resolveInstalledPackageVersion(task.packageJsonPath, packageName);
|
|
53
|
+
if (actual !== expected) {
|
|
54
|
+
throw new Error(`server_dependency_version_mismatch:${packageName}:expected=${expected}:actual=${actual}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function allowedImportsPlugin(projectDir) {
|
|
59
|
+
const normalizedProjectDir = `${(0, node_fs_1.realpathSync)(projectDir)}${node_path_1.sep}`;
|
|
60
|
+
return {
|
|
61
|
+
name: "playdrop-server-import-policy",
|
|
62
|
+
setup(builder) {
|
|
63
|
+
builder.onResolve({ filter: /.*/ }, (args) => {
|
|
64
|
+
if (args.kind === "entry-point")
|
|
65
|
+
return null;
|
|
66
|
+
if (CREATOR_IMPORTS.has(args.path)) {
|
|
67
|
+
return { path: args.path, external: true };
|
|
68
|
+
}
|
|
69
|
+
if (args.path.startsWith(".") || args.path.startsWith("/")) {
|
|
70
|
+
const candidate = (0, node_path_1.resolve)(args.resolveDir, args.path);
|
|
71
|
+
let resolvedPath = candidate;
|
|
72
|
+
try {
|
|
73
|
+
resolvedPath = (0, node_fs_1.realpathSync)(candidate);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// esbuild reports the more precise missing-module error.
|
|
77
|
+
}
|
|
78
|
+
if (`${resolvedPath}${node_path_1.sep}`.startsWith(normalizedProjectDir) || resolvedPath.startsWith(normalizedProjectDir)) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return { errors: [{ text: `server_import_outside_project:${args.path}` }] };
|
|
82
|
+
}
|
|
83
|
+
return { errors: [{ text: `server_import_not_allowed:${args.path}` }] };
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function validateRoomExports(task, bundlePath) {
|
|
89
|
+
if (!task.server)
|
|
90
|
+
return;
|
|
91
|
+
const moduleUrl = `${(0, node_url_1.pathToFileURL)(bundlePath).href}?validation=${Date.now()}`;
|
|
92
|
+
let imported;
|
|
93
|
+
try {
|
|
94
|
+
const importEsm = new Function("specifier", "return import(specifier)");
|
|
95
|
+
imported = await importEsm(moduleUrl);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
throw new Error(`server_bundle_load_failed:${error instanceof Error ? error.message : String(error)}`);
|
|
99
|
+
}
|
|
100
|
+
if (!imported.rooms || typeof imported.rooms !== "object" || Array.isArray(imported.rooms)) {
|
|
101
|
+
throw new Error("server_rooms_export_missing");
|
|
102
|
+
}
|
|
103
|
+
const exportedRoomNames = Object.keys(imported.rooms).sort();
|
|
104
|
+
const declaredRoomNames = [...task.server.rooms].sort();
|
|
105
|
+
if (JSON.stringify(exportedRoomNames) !== JSON.stringify(declaredRoomNames)) {
|
|
106
|
+
throw new Error(`server_rooms_mismatch:declared=${declaredRoomNames.join(",")}:exported=${exportedRoomNames.join(",")}`);
|
|
107
|
+
}
|
|
108
|
+
for (const roomName of exportedRoomNames) {
|
|
109
|
+
const handler = imported.rooms[roomName];
|
|
110
|
+
if (!handler || typeof handler.klass !== "function")
|
|
111
|
+
throw new Error(`server_room_invalid:${roomName}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async function buildGameServer(task) {
|
|
115
|
+
if (!task.server)
|
|
116
|
+
return null;
|
|
117
|
+
verifyGameServerDependencies(task);
|
|
118
|
+
const outputDir = (0, node_path_1.join)(task.projectDir, ".playdrop", "server");
|
|
119
|
+
const bundlePath = (0, node_path_1.join)(outputDir, "bundle.mjs");
|
|
120
|
+
const manifestPath = (0, node_path_1.join)(outputDir, "manifest.json");
|
|
121
|
+
(0, node_fs_1.mkdirSync)(outputDir, { recursive: true });
|
|
122
|
+
await (0, esbuild_1.build)({
|
|
123
|
+
entryPoints: [task.server.entryPath],
|
|
124
|
+
outfile: bundlePath,
|
|
125
|
+
absWorkingDir: task.projectDir,
|
|
126
|
+
bundle: true,
|
|
127
|
+
format: "esm",
|
|
128
|
+
platform: "node",
|
|
129
|
+
target: "node22",
|
|
130
|
+
packages: "bundle",
|
|
131
|
+
sourcemap: false,
|
|
132
|
+
legalComments: "none",
|
|
133
|
+
treeShaking: true,
|
|
134
|
+
metafile: true,
|
|
135
|
+
logLevel: "silent",
|
|
136
|
+
plugins: [allowedImportsPlugin(task.projectDir)],
|
|
137
|
+
});
|
|
138
|
+
const size = (0, node_fs_1.statSync)(bundlePath).size;
|
|
139
|
+
if (size > exports.GAME_SERVER_BUNDLE_MAX_BYTES) {
|
|
140
|
+
throw new Error(`server_bundle_too_large:max=${exports.GAME_SERVER_BUNDLE_MAX_BYTES}:actual=${size}`);
|
|
141
|
+
}
|
|
142
|
+
await validateRoomExports(task, bundlePath);
|
|
143
|
+
const sha256 = (0, node_crypto_1.createHash)("sha256").update((0, node_fs_1.readFileSync)(bundlePath)).digest("hex");
|
|
144
|
+
const manifest = {
|
|
145
|
+
runtimeVersion: exports.GAME_SERVER_RUNTIME_VERSION,
|
|
146
|
+
rooms: [...task.server.rooms],
|
|
147
|
+
size,
|
|
148
|
+
sha256,
|
|
149
|
+
};
|
|
150
|
+
(0, node_fs_1.writeFileSync)(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
151
|
+
return { bundlePath, manifestPath, manifest };
|
|
152
|
+
}
|
|
153
|
+
function formatServerBuildPath(task, absolutePath) {
|
|
154
|
+
return (0, node_path_1.relative)(task.projectDir, absolutePath).split(node_path_1.sep).join("/");
|
|
155
|
+
}
|
|
@@ -25,5 +25,6 @@ export declare function prepareStaticHtmlProject(input: {
|
|
|
25
25
|
appName?: string;
|
|
26
26
|
primarySurface: AppSurface;
|
|
27
27
|
cdnBase: string;
|
|
28
|
+
gameSourceGit?: boolean;
|
|
28
29
|
}): Promise<PreparedStaticHtmlProject>;
|
|
29
30
|
export declare function sha256File(filePath: string): string;
|
package/dist/apps/staticHtml.js
CHANGED
|
@@ -12,7 +12,18 @@ const node_path_1 = require("node:path");
|
|
|
12
12
|
const parse5_1 = require("parse5");
|
|
13
13
|
const build_1 = require("./build");
|
|
14
14
|
const STATIC_GAME_SURFACES = ["DESKTOP", "MOBILE_LANDSCAPE", "MOBILE_PORTRAIT"];
|
|
15
|
-
const STATIC_SOURCE_EXCLUDES = ["AGENTS.md", "CLAUDE.md", ".playdrop/", "bin/playdrop"];
|
|
15
|
+
const STATIC_SOURCE_EXCLUDES = ["AGENTS.md", "CLAUDE.md", ".playdrop/", "bin/playdrop", "tasks/"];
|
|
16
|
+
const STATIC_GAME_SOURCE_GIT_EXCLUDES = [
|
|
17
|
+
"AGENTS.md",
|
|
18
|
+
"CLAUDE.md",
|
|
19
|
+
".DS_Store",
|
|
20
|
+
".playdrop.json",
|
|
21
|
+
"bin/playdrop",
|
|
22
|
+
"next-steps.json",
|
|
23
|
+
"player-feedback.md",
|
|
24
|
+
"platform-feedback.md",
|
|
25
|
+
"source.zip",
|
|
26
|
+
];
|
|
16
27
|
const STATIC_BUNDLE_EXCLUDES = [...STATIC_SOURCE_EXCLUDES];
|
|
17
28
|
function attribute(node, name) {
|
|
18
29
|
return node.attrs?.find((entry) => entry.name.toLowerCase() === name)?.value.trim() ?? null;
|
|
@@ -246,7 +257,8 @@ function buildStaticAppTask(input) {
|
|
|
246
257
|
version: "1.0.0",
|
|
247
258
|
releaseNotes: "Initial static game upload",
|
|
248
259
|
versionVisibility: "PRIVATE",
|
|
249
|
-
sourceArchiveExcludeRelativeFiles: STATIC_SOURCE_EXCLUDES,
|
|
260
|
+
sourceArchiveExcludeRelativeFiles: input.gameSourceGit ? STATIC_GAME_SOURCE_GIT_EXCLUDES : STATIC_SOURCE_EXCLUDES,
|
|
261
|
+
sourceArchiveGameSourceGit: input.gameSourceGit === true,
|
|
250
262
|
bundleArchiveExcludeRelativeFiles: STATIC_BUNDLE_EXCLUDES,
|
|
251
263
|
license: "CLOSED",
|
|
252
264
|
tags: [],
|
|
@@ -302,8 +314,9 @@ async function prepareStaticHtmlProject(input) {
|
|
|
302
314
|
name,
|
|
303
315
|
metadata,
|
|
304
316
|
primarySurface: input.primarySurface,
|
|
317
|
+
gameSourceGit: input.gameSourceGit,
|
|
305
318
|
});
|
|
306
|
-
const sourceArtifacts = await (0, build_1.buildApp)(sourceTask);
|
|
319
|
+
const sourceArtifacts = await (0, build_1.buildApp)(sourceTask, { includeSourceArchive: false });
|
|
307
320
|
const runtimeDir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), `playdrop-static-${name}-`));
|
|
308
321
|
try {
|
|
309
322
|
await (0, promises_1.cp)(sourceRoot, runtimeDir, {
|
|
@@ -328,17 +341,13 @@ async function prepareStaticHtmlProject(input) {
|
|
|
328
341
|
},
|
|
329
342
|
primarySurface: input.primarySurface,
|
|
330
343
|
});
|
|
331
|
-
const runtimeArtifacts = await (0, build_1.buildApp)(runtimeTask);
|
|
332
|
-
const artifacts =
|
|
333
|
-
...runtimeArtifacts,
|
|
334
|
-
sourceFile: sourceArtifacts.sourceFile,
|
|
335
|
-
sourceHash: sourceArtifacts.sourceHash,
|
|
336
|
-
};
|
|
344
|
+
const runtimeArtifacts = await (0, build_1.buildApp)(runtimeTask, { includeSourceArchive: false });
|
|
345
|
+
const artifacts = runtimeArtifacts;
|
|
337
346
|
return {
|
|
338
347
|
sourceTask,
|
|
339
348
|
runtimeTask,
|
|
340
349
|
artifacts,
|
|
341
|
-
sourceHash: sourceArtifacts.
|
|
350
|
+
sourceHash: sourceArtifacts.bundleHash,
|
|
342
351
|
runtimeHash: runtimeArtifacts.bundleHash,
|
|
343
352
|
metadata,
|
|
344
353
|
runtimeDir,
|
package/dist/apps/upload.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ApiClient } from "@playdrop/api-client";
|
|
2
|
-
import type { AgentTaskPlaytestProof, UserResponse } from "@playdrop/types";
|
|
2
|
+
import type { AgentTaskPlaytestProof, FinalizeAppUploadRequest, UserResponse } from "@playdrop/types";
|
|
3
3
|
import type { AppTask } from "../catalogue";
|
|
4
4
|
import type { TaskCaptureSession } from "../appUrls";
|
|
5
5
|
import type { AppBuildArtifacts } from "./build";
|
|
@@ -24,14 +24,22 @@ export type AppUploadOptions = {
|
|
|
24
24
|
playtestProof?: AgentTaskPlaytestProof;
|
|
25
25
|
playtestSmokeCheckRequired?: boolean;
|
|
26
26
|
captureSession?: TaskCaptureSession | null;
|
|
27
|
+
prepareGitTransition?: (input: {
|
|
28
|
+
appId: number;
|
|
29
|
+
sessionId: string;
|
|
30
|
+
version: string;
|
|
31
|
+
}) => Promise<NonNullable<FinalizeAppUploadRequest["gitTransition"]>>;
|
|
27
32
|
};
|
|
28
33
|
type PreparedSessionFile = {
|
|
29
|
-
|
|
34
|
+
id: string;
|
|
35
|
+
role: "RUNTIME" | "LISTING" | "SERVER" | "SOURCE" | "OWNED_ASSET";
|
|
36
|
+
relativePath: string;
|
|
30
37
|
file: File;
|
|
31
38
|
filename: string;
|
|
32
39
|
contentType: string;
|
|
33
40
|
sizeBytes: number;
|
|
34
41
|
sha256: string;
|
|
42
|
+
md5Base64: string;
|
|
35
43
|
};
|
|
36
44
|
type PreparedOwnedAssetUpload = {
|
|
37
45
|
uploadKey: string;
|
|
@@ -49,12 +57,14 @@ type PreparedOwnedAssetUpload = {
|
|
|
49
57
|
shopListed?: boolean;
|
|
50
58
|
shopPriceCredits?: number;
|
|
51
59
|
files: Array<{
|
|
60
|
+
objectId: string;
|
|
52
61
|
role: string;
|
|
53
62
|
file: File;
|
|
54
63
|
filename: string;
|
|
55
64
|
contentType: string;
|
|
56
65
|
sizeBytes: number;
|
|
57
66
|
sha256: string;
|
|
67
|
+
md5Base64: string;
|
|
58
68
|
}>;
|
|
59
69
|
};
|
|
60
70
|
type PreparedAppUploadFiles = {
|
package/dist/apps/upload.js
CHANGED
|
@@ -8,6 +8,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
8
8
|
const node_fs_1 = require("node:fs");
|
|
9
9
|
const node_path_1 = require("node:path");
|
|
10
10
|
const http_1 = require("../http");
|
|
11
|
+
const serverBuild_1 = require("./serverBuild");
|
|
11
12
|
const loadCheck_1 = require("./loadCheck");
|
|
12
13
|
const EXTENSION_TO_MIME = {
|
|
13
14
|
".png": "image/png",
|
|
@@ -20,7 +21,18 @@ const EXTENSION_TO_MIME = {
|
|
|
20
21
|
".mp3": "audio/mpeg",
|
|
21
22
|
".wav": "audio/wav",
|
|
22
23
|
".ogg": "audio/ogg",
|
|
24
|
+
".html": "text/html",
|
|
25
|
+
".htm": "text/html",
|
|
26
|
+
".js": "application/javascript",
|
|
27
|
+
".mjs": "application/javascript",
|
|
28
|
+
".css": "text/css",
|
|
29
|
+
".txt": "text/plain",
|
|
30
|
+
".svg": "image/svg+xml",
|
|
31
|
+
".wasm": "application/wasm",
|
|
32
|
+
".woff": "font/woff",
|
|
33
|
+
".woff2": "font/woff2",
|
|
23
34
|
".json": "application/json",
|
|
35
|
+
".zip": "application/zip",
|
|
24
36
|
".gltf": "model/gltf+json",
|
|
25
37
|
".glb": "model/gltf-binary",
|
|
26
38
|
".vox": "application/octet-stream",
|
|
@@ -75,19 +87,26 @@ async function bufferFromFile(file) {
|
|
|
75
87
|
function computeSha256Hex(buffer) {
|
|
76
88
|
return (0, node_crypto_1.createHash)("sha256").update(buffer).digest("hex");
|
|
77
89
|
}
|
|
90
|
+
function computeMd5Base64(buffer) {
|
|
91
|
+
return (0, node_crypto_1.createHash)("md5").update(buffer).digest("base64");
|
|
92
|
+
}
|
|
78
93
|
function resolveMimeType(filename, fallback = "application/octet-stream") {
|
|
79
94
|
const type = EXTENSION_TO_MIME[(0, node_path_1.extname)(filename).toLowerCase()];
|
|
80
95
|
return type ?? fallback;
|
|
81
96
|
}
|
|
82
|
-
async function buildPreparedSessionFile(
|
|
97
|
+
async function buildPreparedSessionFile(role, relativePath, file) {
|
|
83
98
|
const buffer = await bufferFromFile(file);
|
|
99
|
+
const sha256 = computeSha256Hex(buffer);
|
|
84
100
|
return {
|
|
85
|
-
|
|
101
|
+
id: `o-${computeSha256Hex(Buffer.from(`${role}\0${relativePath}\0${sha256}`)).slice(0, 40)}`,
|
|
102
|
+
role,
|
|
103
|
+
relativePath,
|
|
86
104
|
file,
|
|
87
105
|
filename: file.name,
|
|
88
106
|
contentType: file.type || resolveMimeType(file.name),
|
|
89
107
|
sizeBytes: buffer.length,
|
|
90
|
-
sha256
|
|
108
|
+
sha256,
|
|
109
|
+
md5Base64: computeMd5Base64(buffer),
|
|
91
110
|
};
|
|
92
111
|
}
|
|
93
112
|
function createGenericFileFromPath(filePath) {
|
|
@@ -100,12 +119,14 @@ async function prepareOwnedAssetUpload(task) {
|
|
|
100
119
|
const file = createGenericFileFromPath(filePath);
|
|
101
120
|
const buffer = await bufferFromFile(file);
|
|
102
121
|
return {
|
|
122
|
+
objectId: `o-${computeSha256Hex(Buffer.from(`OWNED_ASSET\0owned-assets/${task.name}/${role}/${file.name}\0${computeSha256Hex(buffer)}`)).slice(0, 40)}`,
|
|
103
123
|
role,
|
|
104
124
|
file,
|
|
105
125
|
filename: file.name,
|
|
106
126
|
contentType: file.type || resolveMimeType(file.name),
|
|
107
127
|
sizeBytes: buffer.length,
|
|
108
128
|
sha256: computeSha256Hex(buffer),
|
|
129
|
+
md5Base64: computeMd5Base64(buffer),
|
|
109
130
|
};
|
|
110
131
|
}));
|
|
111
132
|
return {
|
|
@@ -153,6 +174,41 @@ function pushPreparedArtifact(task, currentTotal, file, maxBytes, code, label) {
|
|
|
153
174
|
const bytes = ensurePreparedArtifactSize(file, maxBytes, code, label);
|
|
154
175
|
return accumulateUploadBytes(task.name, currentTotal, bytes);
|
|
155
176
|
}
|
|
177
|
+
async function uploadSignedObject(client, creatorUsername, appName, sessionId, file) {
|
|
178
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
179
|
+
const signed = await client.signAppUploadObjects(creatorUsername, appName, sessionId, {
|
|
180
|
+
objectIds: [file.id],
|
|
181
|
+
});
|
|
182
|
+
const descriptor = signed.uploads.find((entry) => entry.id === file.id);
|
|
183
|
+
if (!descriptor) {
|
|
184
|
+
throw new Error(`app_upload_signed_object_missing:${file.id}`);
|
|
185
|
+
}
|
|
186
|
+
const response = await fetch(descriptor.url, {
|
|
187
|
+
method: descriptor.method,
|
|
188
|
+
headers: descriptor.headers,
|
|
189
|
+
body: file.file,
|
|
190
|
+
});
|
|
191
|
+
if (response.ok) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if ((response.status === 401 || response.status === 403) && attempt === 0) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const detail = (await response.text()).trim();
|
|
198
|
+
throw new Error(`direct_object_upload_failed:${file.id}:${response.status}${detail ? `:${detail.slice(0, 300)}` : ""}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function uploadSignedObjects(client, creatorUsername, appName, sessionId, files) {
|
|
202
|
+
let cursor = 0;
|
|
203
|
+
const workers = Array.from({ length: Math.min(8, files.length) }, async () => {
|
|
204
|
+
while (cursor < files.length) {
|
|
205
|
+
const index = cursor;
|
|
206
|
+
cursor += 1;
|
|
207
|
+
await uploadSignedObject(client, creatorUsername, appName, sessionId, files[index]);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
await Promise.all(workers);
|
|
211
|
+
}
|
|
156
212
|
async function prepareAppUploadFiles(task, artifacts) {
|
|
157
213
|
let totalUploadBytes = 0;
|
|
158
214
|
const listing = task.listing;
|
|
@@ -166,55 +222,72 @@ async function prepareAppUploadFiles(task, artifacts) {
|
|
|
166
222
|
for (const definition of task.achievements ?? []) {
|
|
167
223
|
const prepared = createFileFromPath(definition.iconPath, "image/png", config_1.MAX_VERSION_ICON_BYTES, "achievement_icon_too_large", "invalid_achievement_icon_content_type", `Achievement icon "${definition.key}"`, isPngSignature);
|
|
168
224
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
169
|
-
sessionFiles.push(await buildPreparedSessionFile(`
|
|
225
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", `listing/achievements/${definition.key}.png`, prepared.file));
|
|
170
226
|
}
|
|
171
227
|
if (task.hostingMode === "EXTERNAL") {
|
|
172
228
|
// no hosted files
|
|
173
229
|
}
|
|
174
230
|
else if (artifacts) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
231
|
+
const runtimeBytes = artifacts.runtimeFiles.reduce((total, entry) => total + entry.sizeBytes, 0);
|
|
232
|
+
if (runtimeBytes > config_1.MAX_VERSION_BUNDLE_BYTES) {
|
|
233
|
+
throw createUploadValidationError("bundle_too_large", `Runtime files for "${task.name}" exceed ${formatLimitBytes(config_1.MAX_VERSION_BUNDLE_BYTES)}. Received ${runtimeBytes} bytes.`);
|
|
234
|
+
}
|
|
235
|
+
for (const runtime of artifacts.runtimeFiles) {
|
|
236
|
+
totalUploadBytes = accumulateUploadBytes(task.name, totalUploadBytes, runtime.sizeBytes);
|
|
237
|
+
sessionFiles.push(await buildPreparedSessionFile("RUNTIME", runtime.relativePath, createGenericFileFromPath(runtime.absolutePath)));
|
|
238
|
+
}
|
|
239
|
+
if (artifacts.sourceFile) {
|
|
240
|
+
totalUploadBytes = pushPreparedArtifact(task, totalUploadBytes, artifacts.sourceFile, config_1.MAX_APP_SOURCE_BYTES, "source_too_large", "Source archive");
|
|
241
|
+
sessionFiles.push(await buildPreparedSessionFile("SOURCE", "source.zip", artifacts.sourceFile));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const gameServer = await (0, serverBuild_1.buildGameServer)(task);
|
|
245
|
+
if (gameServer) {
|
|
246
|
+
const bundle = createFileFromPath(gameServer.bundlePath, "application/javascript", serverBuild_1.GAME_SERVER_BUNDLE_MAX_BYTES, "server_bundle_too_large", "invalid_server_bundle", "Game server bundle");
|
|
247
|
+
const manifest = createFileFromPath(gameServer.manifestPath, "application/json", 16 * 1024, "server_manifest_too_large", "invalid_server_manifest", "Game server manifest");
|
|
248
|
+
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, bundle);
|
|
249
|
+
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, manifest);
|
|
250
|
+
sessionFiles.push(await buildPreparedSessionFile("SERVER", "server/bundle.mjs", bundle.file));
|
|
251
|
+
sessionFiles.push(await buildPreparedSessionFile("SERVER", "server/manifest.json", manifest.file));
|
|
179
252
|
}
|
|
180
253
|
if (listing?.iconPath) {
|
|
181
254
|
const prepared = createFileFromPath(listing.iconPath, "image/png", config_1.MAX_VERSION_ICON_BYTES, "icon_too_large", "invalid_icon_content_type", "Icon", isPngSignature);
|
|
182
255
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
183
|
-
sessionFiles.push(await buildPreparedSessionFile("icon", prepared.file));
|
|
256
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", "listing/icon.png", prepared.file));
|
|
184
257
|
}
|
|
185
258
|
if (listing?.heroPortraitPath) {
|
|
186
259
|
const prepared = createFileFromPath(listing.heroPortraitPath, "image/png", config_1.MAX_VERSION_HERO_BYTES, "hero_portrait_too_large", "invalid_hero_portrait_content_type", "Hero portrait", isPngSignature);
|
|
187
260
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
188
|
-
sessionFiles.push(await buildPreparedSessionFile("
|
|
261
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", "listing/hero-portrait.png", prepared.file));
|
|
189
262
|
}
|
|
190
263
|
if (listing?.heroLandscapePath) {
|
|
191
264
|
const prepared = createFileFromPath(listing.heroLandscapePath, "image/png", config_1.MAX_VERSION_HERO_BYTES, "hero_landscape_too_large", "invalid_hero_landscape_content_type", "Hero landscape", isPngSignature);
|
|
192
265
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
193
|
-
sessionFiles.push(await buildPreparedSessionFile("
|
|
266
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", "listing/hero-landscape.png", prepared.file));
|
|
194
267
|
}
|
|
195
268
|
for (let index = 0; index < (listing?.screenshotPortraitPaths ?? []).length; index += 1) {
|
|
196
269
|
const filePath = listing.screenshotPortraitPaths[index];
|
|
197
270
|
const prepared = createFileFromPath(filePath, "image/png", config_1.MAX_VERSION_SCREENSHOT_BYTES, "screenshot_portrait_too_large", "invalid_screenshot_portrait_content_type", `Portrait screenshot ${index + 1}`, isPngSignature);
|
|
198
271
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
199
|
-
sessionFiles.push(await buildPreparedSessionFile(`
|
|
272
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", `listing/screenshots/portrait/${index}.png`, prepared.file));
|
|
200
273
|
}
|
|
201
274
|
for (let index = 0; index < (listing?.screenshotLandscapePaths ?? []).length; index += 1) {
|
|
202
275
|
const filePath = listing.screenshotLandscapePaths[index];
|
|
203
276
|
const prepared = createFileFromPath(filePath, "image/png", config_1.MAX_VERSION_SCREENSHOT_BYTES, "screenshot_landscape_too_large", "invalid_screenshot_landscape_content_type", `Landscape screenshot ${index + 1}`, isPngSignature);
|
|
204
277
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
205
|
-
sessionFiles.push(await buildPreparedSessionFile(`
|
|
278
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", `listing/screenshots/landscape/${index}.png`, prepared.file));
|
|
206
279
|
}
|
|
207
280
|
for (let index = 0; index < (listing?.videoPortraitPaths ?? []).length; index += 1) {
|
|
208
281
|
const filePath = listing.videoPortraitPaths[index];
|
|
209
282
|
const prepared = createFileFromPath(filePath, "video/mp4", config_1.MAX_VERSION_VIDEO_BYTES, "video_portrait_too_large", "invalid_video_portrait_content_type", `Portrait video ${index + 1}`, isMp4Signature);
|
|
210
283
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
211
|
-
sessionFiles.push(await buildPreparedSessionFile(`
|
|
284
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", `listing/videos/portrait/${index}.mp4`, prepared.file));
|
|
212
285
|
}
|
|
213
286
|
for (let index = 0; index < (listing?.videoLandscapePaths ?? []).length; index += 1) {
|
|
214
287
|
const filePath = listing.videoLandscapePaths[index];
|
|
215
288
|
const prepared = createFileFromPath(filePath, "video/mp4", config_1.MAX_VERSION_VIDEO_BYTES, "video_landscape_too_large", "invalid_video_landscape_content_type", `Landscape video ${index + 1}`, isMp4Signature);
|
|
216
289
|
totalUploadBytes = pushPreparedFile(task.name, totalUploadBytes, prepared);
|
|
217
|
-
sessionFiles.push(await buildPreparedSessionFile(`
|
|
290
|
+
sessionFiles.push(await buildPreparedSessionFile("LISTING", `listing/videos/landscape/${index}.mp4`, prepared.file));
|
|
218
291
|
}
|
|
219
292
|
return { sessionFiles, ownedAssets };
|
|
220
293
|
}
|
|
@@ -238,6 +311,18 @@ async function uploadAppVersion(client, task, artifacts, options) {
|
|
|
238
311
|
const leaderboards = task.leaderboards ?? [];
|
|
239
312
|
const listing = task.listing;
|
|
240
313
|
const { sessionFiles: preparedSessionFiles, ownedAssets: preparedOwnedAssets } = await prepareAppUploadFiles(task, artifacts);
|
|
314
|
+
const preparedOwnedAssetFiles = preparedOwnedAssets.flatMap((ownedAsset) => ownedAsset.files.map((file) => ({
|
|
315
|
+
id: file.objectId,
|
|
316
|
+
role: "OWNED_ASSET",
|
|
317
|
+
relativePath: `owned-assets/${ownedAsset.uploadKey}/${file.role}/${file.filename}`,
|
|
318
|
+
file: file.file,
|
|
319
|
+
filename: file.filename,
|
|
320
|
+
contentType: file.contentType,
|
|
321
|
+
sizeBytes: file.sizeBytes,
|
|
322
|
+
sha256: file.sha256,
|
|
323
|
+
md5Base64: file.md5Base64,
|
|
324
|
+
})));
|
|
325
|
+
const preparedObjects = [...preparedSessionFiles, ...preparedOwnedAssetFiles];
|
|
241
326
|
const initializeRequest = {
|
|
242
327
|
version: task.version,
|
|
243
328
|
agentTaskId: options?.agentTaskId,
|
|
@@ -254,6 +339,11 @@ async function uploadAppVersion(client, task, artifacts, options) {
|
|
|
254
339
|
usesPacks: task.uses.packs,
|
|
255
340
|
tags: task.tags,
|
|
256
341
|
design: task.design,
|
|
342
|
+
players: task.players,
|
|
343
|
+
makingOf: task.makingOf,
|
|
344
|
+
controls: task.controls,
|
|
345
|
+
creation: task.creation,
|
|
346
|
+
sourceRepository: task.sourceRepository,
|
|
257
347
|
tweaks: task.tweaks,
|
|
258
348
|
clearTags: options?.clearTags,
|
|
259
349
|
surfaceTargets: task.surfaceTargets,
|
|
@@ -297,12 +387,20 @@ async function uploadAppVersion(client, task, artifacts, options) {
|
|
|
297
387
|
})),
|
|
298
388
|
externalUrl: task.hostingMode === "EXTERNAL" ? task.externalUrl : undefined,
|
|
299
389
|
listingMedia: listing?.mediaMetadata,
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
390
|
+
server: task.server
|
|
391
|
+
? {
|
|
392
|
+
entry: task.server.entry,
|
|
393
|
+
rooms: task.server.rooms,
|
|
394
|
+
}
|
|
395
|
+
: undefined,
|
|
396
|
+
objects: preparedObjects.map((file) => ({
|
|
397
|
+
id: file.id,
|
|
398
|
+
role: file.role,
|
|
399
|
+
relativePath: file.relativePath,
|
|
303
400
|
contentType: file.contentType,
|
|
304
401
|
sizeBytes: file.sizeBytes,
|
|
305
402
|
sha256: file.sha256,
|
|
403
|
+
md5Base64: file.md5Base64,
|
|
306
404
|
})),
|
|
307
405
|
ownedAssets: preparedOwnedAssets.map((ownedAsset) => ({
|
|
308
406
|
uploadKey: ownedAsset.uploadKey,
|
|
@@ -320,11 +418,8 @@ async function uploadAppVersion(client, task, artifacts, options) {
|
|
|
320
418
|
shopListed: ownedAsset.shopListed,
|
|
321
419
|
shopPriceCredits: ownedAsset.shopPriceCredits,
|
|
322
420
|
files: ownedAsset.files.map((file) => ({
|
|
421
|
+
objectId: file.objectId,
|
|
323
422
|
role: file.role,
|
|
324
|
-
filename: file.filename,
|
|
325
|
-
contentType: file.contentType,
|
|
326
|
-
sizeBytes: file.sizeBytes,
|
|
327
|
-
sha256: file.sha256,
|
|
328
423
|
})),
|
|
329
424
|
})),
|
|
330
425
|
};
|
|
@@ -333,29 +428,8 @@ async function uploadAppVersion(client, task, artifacts, options) {
|
|
|
333
428
|
const initialized = await client.initializeAppUpload(creatorUsername, task.name, initializeRequest);
|
|
334
429
|
sessionId = initialized.session.id;
|
|
335
430
|
if (initialized.status !== "finalized") {
|
|
336
|
-
const
|
|
337
|
-
|
|
338
|
-
for (const file of preparedSessionFiles) {
|
|
339
|
-
if (uploadedFileKeys.has(file.fileKey)) {
|
|
340
|
-
continue;
|
|
341
|
-
}
|
|
342
|
-
await client.uploadAppSessionFile(creatorUsername, task.name, sessionId, file.fileKey, {
|
|
343
|
-
file: file.file,
|
|
344
|
-
filename: file.filename,
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
for (const ownedAsset of preparedOwnedAssets) {
|
|
348
|
-
if (uploadedOwnedAssetKeys.has(ownedAsset.uploadKey)) {
|
|
349
|
-
continue;
|
|
350
|
-
}
|
|
351
|
-
await client.uploadAppSessionOwnedAsset(creatorUsername, task.name, sessionId, ownedAsset.uploadKey, {
|
|
352
|
-
files: ownedAsset.files.map((file) => ({
|
|
353
|
-
fieldName: file.role,
|
|
354
|
-
file: file.file,
|
|
355
|
-
filename: file.filename,
|
|
356
|
-
})),
|
|
357
|
-
});
|
|
358
|
-
}
|
|
431
|
+
const missingIds = new Set(initialized.missingObjectIds);
|
|
432
|
+
await uploadSignedObjects(client, creatorUsername, task.name, sessionId, preparedObjects.filter((file) => missingIds.has(file.id)));
|
|
359
433
|
if (task.hostingMode !== "EXTERNAL" && !task.externalUrl && options?.playtestSmokeCheckRequired) {
|
|
360
434
|
await (0, loadCheck_1.runUploadedHostedPlaytestSmokeCheck)({
|
|
361
435
|
client,
|
|
@@ -401,9 +475,16 @@ async function uploadAppVersion(client, task, artifacts, options) {
|
|
|
401
475
|
}
|
|
402
476
|
}
|
|
403
477
|
}
|
|
478
|
+
const gitTransition = !options?.prepareGitTransition
|
|
479
|
+
? undefined
|
|
480
|
+
: await options.prepareGitTransition({
|
|
481
|
+
appId: initialized.session.appId,
|
|
482
|
+
sessionId,
|
|
483
|
+
version: task.version,
|
|
484
|
+
});
|
|
404
485
|
const finalized = initialized.status === "finalized"
|
|
405
486
|
? initialized.finalized
|
|
406
|
-
: await client.finalizeAppUpload(creatorUsername, task.name, sessionId);
|
|
487
|
+
: await client.finalizeAppUpload(creatorUsername, task.name, sessionId, gitTransition ? { gitTransition } : undefined);
|
|
407
488
|
if (!finalized) {
|
|
408
489
|
throw new Error(`Upload failed for ${task.name}: missing finalized app upload payload`);
|
|
409
490
|
}
|
package/dist/catalogue.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AppAchievementCatalogueDefinition, type AppAuthMode, type AppControllerMode, type AppHostingMode, type AppLeaderboardCatalogueDefinition, type AppListingMediaMetadata, type AppMetadataAssetSpecSupport, type AppPlaytestTapes, type AppSurface, type AppType, type AppTweaksDeclaration, type AppVersionDesign, type AppVersionVisibility, type AssetSpecContract, type AssetSpecStatus, type AssetSpecValidationKind, type CatalogueTagGroupDefinition, type ContentLicense, type PlayerMetaDefinitionStatus } from "@playdrop/types";
|
|
1
|
+
import { type AppAchievementCatalogueDefinition, type AppAuthMode, type AppControllerMode, type AppCreationMetadata, type AppHostingMode, type AppLeaderboardCatalogueDefinition, type AppListingMediaMetadata, type AppMetadataAssetSpecSupport, type AppPlaytestTapes, type AppPlayersConfig, type AppSurface, type AppType, type AppTweaksDeclaration, type AppVersionDesign, type AppVersionVisibility, type AssetSpecContract, type AssetSpecStatus, type AssetSpecValidationKind, type CatalogueTagGroupDefinition, type ContentLicense, type PlayerMetaDefinitionStatus } from "@playdrop/types";
|
|
2
2
|
import { type AssetSpecSupportDeclaration } from "./assetSpecs";
|
|
3
3
|
export type CatalogueJson = {
|
|
4
4
|
apps?: Array<Record<string, unknown>>;
|
|
@@ -58,6 +58,11 @@ export type AppCatalogueEntry = {
|
|
|
58
58
|
primarySurface?: string | null;
|
|
59
59
|
playtestTapes?: unknown;
|
|
60
60
|
design?: unknown;
|
|
61
|
+
players?: unknown;
|
|
62
|
+
makingOf?: string;
|
|
63
|
+
controls?: string;
|
|
64
|
+
creation?: unknown;
|
|
65
|
+
sourceRepository?: string;
|
|
61
66
|
tweaks?: unknown;
|
|
62
67
|
version?: string;
|
|
63
68
|
releaseNotes?: string;
|
|
@@ -68,6 +73,10 @@ export type AppCatalogueEntry = {
|
|
|
68
73
|
controllerMode?: string;
|
|
69
74
|
previewable?: boolean;
|
|
70
75
|
editorSupported?: boolean;
|
|
76
|
+
server?: {
|
|
77
|
+
entry?: string;
|
|
78
|
+
rooms?: unknown;
|
|
79
|
+
};
|
|
71
80
|
externalUrl?: string;
|
|
72
81
|
listing?: AppListingConfig;
|
|
73
82
|
username?: string;
|
|
@@ -179,6 +188,11 @@ export type AppDependencyAssetRef = {
|
|
|
179
188
|
ref: string;
|
|
180
189
|
runtimeKey?: string;
|
|
181
190
|
};
|
|
191
|
+
export type AppServerTask = {
|
|
192
|
+
entry: string;
|
|
193
|
+
entryPath: string;
|
|
194
|
+
rooms: string[];
|
|
195
|
+
};
|
|
182
196
|
export type AppTask = {
|
|
183
197
|
kind: "app";
|
|
184
198
|
name: string;
|
|
@@ -202,12 +216,18 @@ export type AppTask = {
|
|
|
202
216
|
primarySurface?: AppSurface;
|
|
203
217
|
playtestTapes?: AppPlaytestTapes;
|
|
204
218
|
design?: AppVersionDesign;
|
|
219
|
+
players?: AppPlayersConfig;
|
|
220
|
+
makingOf?: string;
|
|
221
|
+
controls?: string;
|
|
222
|
+
creation?: AppCreationMetadata;
|
|
223
|
+
sourceRepository?: string;
|
|
205
224
|
tweaks?: AppTweaksDeclaration;
|
|
206
225
|
missingMetadata: string[];
|
|
207
226
|
version?: string;
|
|
208
227
|
releaseNotes?: string;
|
|
209
228
|
versionVisibility?: AppVersionVisibility;
|
|
210
229
|
sourceArchiveExcludeRelativeFiles?: string[];
|
|
230
|
+
sourceArchiveGameSourceGit?: boolean;
|
|
211
231
|
bundleArchiveExcludeRelativeFiles?: string[];
|
|
212
232
|
license: ContentLicense;
|
|
213
233
|
tags: string[];
|
|
@@ -216,6 +236,7 @@ export type AppTask = {
|
|
|
216
236
|
controllerMode?: AppControllerMode;
|
|
217
237
|
previewable?: boolean;
|
|
218
238
|
editorSupported?: boolean;
|
|
239
|
+
server?: AppServerTask | null;
|
|
219
240
|
externalUrl?: string;
|
|
220
241
|
listing?: ResolvedListingAssets;
|
|
221
242
|
username?: string;
|
|
@@ -335,6 +356,7 @@ export type AssetPackTask = {
|
|
|
335
356
|
visibility?: string;
|
|
336
357
|
license: ContentLicense;
|
|
337
358
|
releaseNotes?: string;
|
|
359
|
+
sourcePath?: string;
|
|
338
360
|
listing?: ResolvedListingAssets;
|
|
339
361
|
relations?: Array<{
|
|
340
362
|
type: string;
|