@seriousgaming/sdk-tools 0.0.0-stage → 1.0.0-alpha.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/LICENSE +93 -0
- package/README.md +36 -2
- package/dist/bundling/logic-exports.d.ts +34 -0
- package/dist/bundling/node-builtins.d.ts +21 -0
- package/dist/bundling/transpiler.d.ts +7 -0
- package/dist/cli.js +27368 -0
- package/dist/client/dev-server.d.ts +59 -0
- package/dist/client/index.d.ts +28 -0
- package/dist/client/stub-services.d.ts +32 -0
- package/dist/client/test-session.d.ts +195 -0
- package/dist/client.js +16884 -0
- package/dist/core/asset-reference-translator.d.ts +46 -0
- package/dist/core/clock.d.ts +57 -0
- package/dist/core/faults.d.ts +65 -0
- package/dist/core/game-settings.d.ts +65 -0
- package/dist/core/history.d.ts +89 -0
- package/dist/core/listen-with-fallback.d.ts +30 -0
- package/dist/core/mutation-queue.d.ts +61 -0
- package/dist/core/package-scenario.d.ts +89 -0
- package/dist/core/participant-registry.d.ts +109 -0
- package/dist/core/pending-changes.d.ts +14 -0
- package/dist/core/protocol.d.ts +83 -0
- package/dist/core/scenario-drafts.d.ts +32 -0
- package/dist/core/session-endpoints.d.ts +108 -0
- package/dist/core/session-gates.d.ts +75 -0
- package/dist/core/session-host.d.ts +94 -0
- package/dist/core/session-refusals.d.ts +56 -0
- package/dist/core/session-rewind.d.ts +32 -0
- package/dist/core/session-roster.d.ts +128 -0
- package/dist/core/session-surfaces.d.ts +32 -0
- package/dist/core/session-ticks.d.ts +18 -0
- package/dist/core/session-timers.d.ts +84 -0
- package/dist/core/session-writes.d.ts +40 -0
- package/dist/core/session.d.ts +385 -0
- package/dist/core/settings-locks.d.ts +22 -0
- package/dist/core/team-names.d.ts +52 -0
- package/dist/core/team-state-store.d.ts +209 -0
- package/dist/core/tick-timer.d.ts +75 -0
- package/dist/dev/blob-links.d.ts +10 -0
- package/dist/dev/console/assets/index-DgFglsnA.js +204 -0
- package/dist/dev/console/index.html +12 -0
- package/dist/dev/console-path.d.ts +19 -0
- package/dist/dev/lockfile.d.ts +124 -0
- package/dist/dev/package-watcher.d.ts +21 -0
- package/dist/dev/routes.d.ts +67 -0
- package/dist/dev/shell.d.ts +260 -0
- package/dist/dev/surfaces.d.ts +41 -0
- package/dist/dev/tools-identity.d.ts +23 -0
- package/dist/dev/view/batch.d.ts +172 -0
- package/dist/dev/view/commands.d.ts +75 -0
- package/dist/dev/view/route.d.ts +58 -0
- package/dist/dev/view/view.d.ts +78 -0
- package/dist/dev/view/viewer.d.ts +32 -0
- package/dist/discovery/config.d.ts +9 -0
- package/dist/discovery/manifest-paths.d.ts +21 -0
- package/dist/discovery/removed-fields.d.ts +90 -0
- package/dist/docs/api/deck.md +386 -0
- package/dist/docs/api/index.md +67 -0
- package/dist/docs/api/sdk-commands.md +286 -0
- package/dist/docs/api/sdk-e2e.md +433 -0
- package/dist/docs/api/sdk-projection.md +207 -0
- package/dist/docs/api/sdk-testing.md +214 -0
- package/dist/docs/api/sdk-tools-client.md +560 -0
- package/dist/docs/api/sdk-ui-testing.md +231 -0
- package/dist/docs/api/sdk-ui.md +1269 -0
- package/dist/docs/api/sdk.md +2140 -0
- package/dist/docs/changelog-0.x.md +1156 -0
- package/dist/docs/changelog.md +236 -0
- package/dist/docs/cli-and-dev-server.md +217 -0
- package/dist/docs/cli-error-codes.md +154 -0
- package/dist/docs/cli-reference.md +2488 -0
- package/dist/docs/cli-simulation-testing.md +222 -0
- package/dist/docs/concepts/index.md +46 -0
- package/dist/docs/concepts/terminology.md +322 -0
- package/dist/docs/environment-variables.md +102 -0
- package/dist/docs/getting-started.md +145 -0
- package/dist/docs/guides/ai-facilitation.md +220 -0
- package/dist/docs/guides/capabilities.md +460 -0
- package/dist/docs/guides/endpoints.md +335 -0
- package/dist/docs/guides/engine-testing.md +477 -0
- package/dist/docs/guides/engine.md +527 -0
- package/dist/docs/guides/file-handling.md +405 -0
- package/dist/docs/guides/games.md +176 -0
- package/dist/docs/guides/global-settings.md +94 -0
- package/dist/docs/guides/guide.md +123 -0
- package/dist/docs/guides/hooks.md +183 -0
- package/dist/docs/guides/index.md +51 -0
- package/dist/docs/guides/internationalization.md +288 -0
- package/dist/docs/guides/llm-integration.md +635 -0
- package/dist/docs/guides/multi-team-games.md +586 -0
- package/dist/docs/guides/patterns.md +391 -0
- package/dist/docs/guides/presentation.md +196 -0
- package/dist/docs/guides/production-constraints.md +130 -0
- package/dist/docs/guides/scenario-editor.md +143 -0
- package/dist/docs/guides/scenarios.md +515 -0
- package/dist/docs/guides/session.md +972 -0
- package/dist/docs/guides/settings.md +458 -0
- package/dist/docs/guides/setup.md +193 -0
- package/dist/docs/guides/speech-generation.md +233 -0
- package/dist/docs/guides/starter-game.md +164 -0
- package/dist/docs/guides/testing.md +575 -0
- package/dist/docs/guides/tick-controller.md +569 -0
- package/dist/docs/guides/type-safety.md +516 -0
- package/dist/docs/guides/ui.md +1389 -0
- package/dist/docs/guides/upgrading.md +636 -0
- package/dist/docs/guides/validators.md +217 -0
- package/dist/docs/guides/waiting-room.md +244 -0
- package/dist/docs/index.md +41 -0
- package/dist/docs/recipes/act-on-the-session-from-an-endpoint.md +95 -0
- package/dist/docs/recipes/adapt-a-game-for-walkthroughs.md +133 -0
- package/dist/docs/recipes/adapt-ui-for-observers.md +74 -0
- package/dist/docs/recipes/call-endpoint-from-ui.md +109 -0
- package/dist/docs/recipes/check-a-package-from-a-script.md +117 -0
- package/dist/docs/recipes/create-capability.md +66 -0
- package/dist/docs/recipes/create-endpoint.md +127 -0
- package/dist/docs/recipes/create-engine.md +111 -0
- package/dist/docs/recipes/create-game.md +70 -0
- package/dist/docs/recipes/create-guide.md +75 -0
- package/dist/docs/recipes/create-hook.md +80 -0
- package/dist/docs/recipes/create-presentation.md +142 -0
- package/dist/docs/recipes/create-scenario-editor.md +102 -0
- package/dist/docs/recipes/create-scenario.md +98 -0
- package/dist/docs/recipes/create-session-ui.md +116 -0
- package/dist/docs/recipes/create-settings.md +88 -0
- package/dist/docs/recipes/create-setup.md +115 -0
- package/dist/docs/recipes/create-tick-controller.md +65 -0
- package/dist/docs/recipes/create-user-interface.md +96 -0
- package/dist/docs/recipes/create-validator.md +67 -0
- package/dist/docs/recipes/create-waiting-room-ui.md +109 -0
- package/dist/docs/recipes/declare-api-uses.md +67 -0
- package/dist/docs/recipes/design-state-for-concurrent-writes.md +96 -0
- package/dist/docs/recipes/distribute-package.md +80 -0
- package/dist/docs/recipes/e2e-testing.md +116 -0
- package/dist/docs/recipes/end-game-on-condition.md +154 -0
- package/dist/docs/recipes/fix-duplicate-packages.md +101 -0
- package/dist/docs/recipes/index.md +86 -0
- package/dist/docs/recipes/make-an-endpoint-external.md +101 -0
- package/dist/docs/recipes/negotiate-across-teams.md +164 -0
- package/dist/docs/recipes/observe-other-teams-state.md +119 -0
- package/dist/docs/recipes/publish-a-package.md +139 -0
- package/dist/docs/recipes/remember-a-viewers-choice.md +55 -0
- package/dist/docs/recipes/review-a-past-day.md +73 -0
- package/dist/docs/recipes/share-assets-across-scenarios.md +120 -0
- package/dist/docs/recipes/share-logic-between-engine-and-ui.md +130 -0
- package/dist/docs/recipes/show-all-teams-participants.md +109 -0
- package/dist/docs/recipes/start-from-an-empty-package.md +169 -0
- package/dist/docs/recipes/take-a-file-in-an-endpoint.md +82 -0
- package/dist/docs/recipes/test-a-multi-role-game.md +51 -0
- package/dist/docs/recipes/test-user-interface.md +95 -0
- package/dist/docs/recipes/test-with-engine.md +115 -0
- package/dist/docs/recipes/upload-and-display-files.md +148 -0
- package/dist/docs/recipes/use-request-play.md +65 -0
- package/dist/docs/recipes/use-request-tick.md +75 -0
- package/dist/docs/troubleshooting.md +816 -0
- package/dist/execution/blob-inputs.d.ts +57 -0
- package/dist/execution/bundle-reload.d.ts +42 -0
- package/dist/execution/config-resolver.d.ts +127 -0
- package/dist/execution/configuration-builder.d.ts +66 -0
- package/dist/execution/context-composition.d.ts +161 -0
- package/dist/execution/endpoint-actions.d.ts +9 -0
- package/dist/execution/endpoint-payloads.d.ts +32 -0
- package/dist/execution/endpoint-runner.d.ts +129 -0
- package/dist/execution/engine-state.d.ts +40 -0
- package/dist/execution/executor-callbacks.d.ts +56 -0
- package/dist/execution/executor.d.ts +436 -0
- package/dist/execution/gates.d.ts +45 -0
- package/dist/execution/hook-chain.d.ts +25 -0
- package/dist/execution/logic-calls.d.ts +190 -0
- package/dist/execution/logic-failure.d.ts +84 -0
- package/dist/execution/logic-loader.d.ts +54 -0
- package/dist/execution/logic-result.d.ts +76 -0
- package/dist/execution/tick-controller-call.d.ts +32 -0
- package/dist/execution/types.d.ts +48 -0
- package/dist/generation/ts-type.d.ts +39 -0
- package/dist/guide/locale.d.ts +12 -0
- package/dist/guide/video-registry.d.ts +42 -0
- package/dist/help-examples.d.ts +125 -0
- package/dist/host/adapter.d.ts +67 -0
- package/dist/host/host-channel.d.ts +222 -0
- package/dist/host/index.d.ts +20 -0
- package/dist/host/protocol.d.ts +783 -0
- package/dist/host/surfaces.d.ts +42 -0
- package/dist/host/theme.d.ts +55 -0
- package/dist/host.js +583 -0
- package/dist/prompts/index.d.ts +7 -0
- package/dist/prompts/schema-builder.d.ts +29 -0
- package/dist/prompts/types.d.ts +108 -0
- package/dist/prompts/validators.d.ts +32 -0
- package/dist/runtime/capability-scope.d.ts +6 -0
- package/dist/runtime/context-merge.d.ts +29 -0
- package/dist/runtime/context-projection.d.ts +41 -0
- package/dist/runtime/guarded-callbacks.d.ts +15 -0
- package/dist/runtime/index.d.ts +27 -0
- package/dist/runtime/manifest-version.d.ts +55 -0
- package/dist/runtime/tick-validation.d.ts +25 -0
- package/dist/runtime.js +346 -0
- package/dist/schema.json +1546 -0
- package/dist/server/vite-plugin.d.ts +46 -0
- package/dist/services/tts/client.d.ts +51 -0
- package/dist/services/tts/elevenlabs.d.ts +24 -0
- package/dist/services/tts/types.d.ts +44 -0
- package/dist/storage/asset-resolver.d.ts +49 -0
- package/dist/storage/blob-store.d.ts +41 -0
- package/dist/templates/endpoint/logic.test.ts.liquid +61 -0
- package/dist/templates/endpoint/logic.ts.liquid +25 -0
- package/dist/templates/engine/init.json.liquid +7 -0
- package/dist/templates/engine/logic-aggregate.test.ts.liquid +90 -0
- package/dist/templates/engine/logic-aggregate.ts.liquid +46 -0
- package/dist/templates/engine/logic.test.ts.liquid +61 -0
- package/dist/templates/engine/logic.ts.liquid +32 -0
- package/dist/templates/engine/run.json.liquid +7 -0
- package/dist/templates/guide/01-at-a-glance.md.liquid +19 -0
- package/dist/templates/guide/02-preparation.md.liquid +18 -0
- package/dist/templates/guide/03-running-the-session.md.liquid +37 -0
- package/dist/templates/hook/logic.test.ts.liquid +46 -0
- package/dist/templates/hook/logic.ts.liquid +12 -0
- package/dist/templates/package/CLAUDE.md.template +338 -0
- package/dist/templates/package/DESIGN.md.liquid +144 -0
- package/dist/templates/package/README.md.liquid +143 -0
- package/dist/templates/package/claude/rules/workflow-create-capability.md +26 -0
- package/dist/templates/package/claude/rules/workflow-create-endpoint.md +35 -0
- package/dist/templates/package/claude/rules/workflow-create-engine.md +35 -0
- package/dist/templates/package/claude/rules/workflow-create-guide.md +40 -0
- package/dist/templates/package/claude/rules/workflow-create-presentation.md +37 -0
- package/dist/templates/package/claude/rules/workflow-create-user-interface.md +31 -0
- package/dist/templates/package/claude/rules/workflow-publish-package.md +54 -0
- package/dist/templates/package/claude/rules/workflow-test-engine-or-ui.md +30 -0
- package/dist/templates/package/claude/rules/workflow-update-sdk-version.md +43 -0
- package/dist/templates/package/claude/settings.json.template +16 -0
- package/dist/templates/package/gitignore.template +15 -0
- package/dist/templates/package/global-setup.ts.template +21 -0
- package/dist/templates/package/globals.d.ts.template +2 -0
- package/dist/templates/package/oxfmtrc.json.template +14 -0
- package/dist/templates/package/oxlintrc.json.template +238 -0
- package/dist/templates/package/package.json.liquid +65 -0
- package/dist/templates/package/playwright.config.ts.liquid +19 -0
- package/dist/templates/package/pnpm-workspace.yaml.template +27 -0
- package/dist/templates/package/test-setup.ts.liquid +7 -0
- package/dist/templates/package/tsconfig.json.liquid +15 -0
- package/dist/templates/package/vite.config.ts.liquid +19 -0
- package/dist/templates/package/vitest.config.ts.liquid +25 -0
- package/dist/templates/package/vitest.engine.config.ts.liquid +12 -0
- package/dist/templates/presentation/index.html.liquid +20 -0
- package/dist/templates/presentation/src/App.tsx.liquid +49 -0
- package/dist/templates/presentation/src/Slides.tsx.liquid +81 -0
- package/dist/templates/presentation/src/i18n.ts.liquid +54 -0
- package/dist/templates/presentation/src/main.tsx.liquid +14 -0
- package/dist/templates/scenario_editor/src/App.test.tsx.liquid +30 -0
- package/dist/templates/scenario_editor/src/App.tsx.liquid +95 -0
- package/dist/templates/scenario_editor/src/i18n.ts.liquid +44 -0
- package/dist/templates/session/src/App.test.tsx.liquid +60 -0
- package/dist/templates/session/src/App.tsx.liquid +128 -0
- package/dist/templates/session/src/i18n.ts.liquid +53 -0
- package/dist/templates/session/src/main.tsx.liquid +48 -0
- package/dist/templates/session/src/theme.ts.liquid +46 -0
- package/dist/templates/settings-editor/index.html.liquid +12 -0
- package/dist/templates/settings-editor/src/main.tsx.liquid +48 -0
- package/dist/templates/settings-editor/src/theme.ts.liquid +24 -0
- package/dist/templates/setup/src/App.test.tsx.liquid +39 -0
- package/dist/templates/setup/src/App.tsx.liquid +102 -0
- package/dist/templates/setup/src/i18n.ts.liquid +47 -0
- package/dist/templates/starter-game/capabilities/briefing/capability.sdk.json +18 -0
- package/dist/templates/starter-game/capabilities/plan/capability.sdk.json +17 -0
- package/dist/templates/starter-game/capabilities/results/capability.sdk.json +61 -0
- package/dist/templates/starter-game/capabilities/roles/capability.sdk.json +17 -0
- package/dist/templates/starter-game/capabilities/weather/capability.sdk.json +23 -0
- package/dist/templates/starter-game/engine/defaults.ts +81 -0
- package/dist/templates/starter-game/engine/engine.sdk.json +12 -0
- package/dist/templates/starter-game/engine/logic.test.ts +221 -0
- package/dist/templates/starter-game/engine/logic.ts +149 -0
- package/dist/templates/starter-game/engine/test-helpers.ts +74 -0
- package/dist/templates/starter-game/engine/types.ts +139 -0
- package/dist/templates/starter-game/guide/content/en/01-at-a-glance.md +51 -0
- package/dist/templates/starter-game/guide/content/en/02-preparation.md +35 -0
- package/dist/templates/starter-game/guide/content/en/03-running-the-day.md +58 -0
- package/dist/templates/starter-game/guide/guide.sdk.json +10 -0
- package/dist/templates/starter-game/guide/guide.test.ts +108 -0
- package/dist/templates/starter-game/hooks/assignproducts/defaults.ts +37 -0
- package/dist/templates/starter-game/hooks/assignproducts/hook.sdk.json +13 -0
- package/dist/templates/starter-game/hooks/assignproducts/logic/logic.test.ts +77 -0
- package/dist/templates/starter-game/hooks/assignproducts/logic/logic.ts +47 -0
- package/dist/templates/starter-game/hooks/assignproducts/types.ts +55 -0
- package/dist/templates/starter-game/package.json +68 -0
- package/dist/templates/starter-game/playwright.config.ts +19 -0
- package/dist/templates/starter-game/scenarios/heatwave/scenario.sdk.json +20 -0
- package/dist/templates/starter-game/scenarios/ordinary_week/scenario.sdk.json +12 -0
- package/dist/templates/starter-game/seriousgaming.sdk.json +23 -0
- package/dist/templates/starter-game/session/defaults.ts +80 -0
- package/dist/templates/starter-game/session/index.html +12 -0
- package/dist/templates/starter-game/session/session.sdk.json +11 -0
- package/dist/templates/starter-game/session/src/App.test.tsx +307 -0
- package/dist/templates/starter-game/session/src/App.tsx +309 -0
- package/dist/templates/starter-game/session/src/Section.tsx +37 -0
- package/dist/templates/starter-game/session/src/TeamDoor.tsx +96 -0
- package/dist/templates/starter-game/session/src/format.ts +8 -0
- package/dist/templates/starter-game/session/src/i18n.ts +51 -0
- package/dist/templates/starter-game/session/src/main.tsx +48 -0
- package/dist/templates/starter-game/session/src/theme.ts +45 -0
- package/dist/templates/starter-game/session/types.ts +135 -0
- package/dist/templates/starter-game/settings/engine/settings.sdk.json +50 -0
- package/dist/templates/starter-game/settings/menu/settings.sdk.json +78 -0
- package/dist/templates/starter-game/settings/session/settings.sdk.json +23 -0
- package/dist/templates/starter-game/settings/ui/settings.sdk.json +25 -0
- package/dist/templates/starter-game/test-setup.ts +7 -0
- package/dist/templates/starter-game/testing/e2e/game.spec.ts +139 -0
- package/dist/templates/starter-game/testing/e2e/global-setup.ts +21 -0
- package/dist/templates/starter-game/testing/engine/game.engine.test.ts +171 -0
- package/dist/templates/starter-game/tsconfig.json +19 -0
- package/dist/templates/starter-game/ui/defaults.ts +60 -0
- package/dist/templates/starter-game/ui/index.html +12 -0
- package/dist/templates/starter-game/ui/src/App.test.tsx +138 -0
- package/dist/templates/starter-game/ui/src/App.tsx +175 -0
- package/dist/templates/starter-game/ui/src/DayBar.test.tsx +78 -0
- package/dist/templates/starter-game/ui/src/DayBar.tsx +72 -0
- package/dist/templates/starter-game/ui/src/HistoryPanel.test.tsx +74 -0
- package/dist/templates/starter-game/ui/src/HistoryPanel.tsx +120 -0
- package/dist/templates/starter-game/ui/src/MakeRow.tsx +129 -0
- package/dist/templates/starter-game/ui/src/Section.tsx +37 -0
- package/dist/templates/starter-game/ui/src/ThemeToggle.tsx +49 -0
- package/dist/templates/starter-game/ui/src/TodayPanel.test.tsx +179 -0
- package/dist/templates/starter-game/ui/src/TodayPanel.tsx +92 -0
- package/dist/templates/starter-game/ui/src/YesterdayPanel.tsx +142 -0
- package/dist/templates/starter-game/ui/src/format.ts +12 -0
- package/dist/templates/starter-game/ui/src/i18n.ts +95 -0
- package/dist/templates/starter-game/ui/src/main.tsx +48 -0
- package/dist/templates/starter-game/ui/src/menu.ts +18 -0
- package/dist/templates/starter-game/ui/src/test-helpers.ts +58 -0
- package/dist/templates/starter-game/ui/src/theme.ts +45 -0
- package/dist/templates/starter-game/ui/src/writes.ts +43 -0
- package/dist/templates/starter-game/ui/types.ts +137 -0
- package/dist/templates/starter-game/ui/ui.sdk.json +11 -0
- package/dist/templates/starter-game/validators/capacity/defaults.ts +37 -0
- package/dist/templates/starter-game/validators/capacity/logic/logic.test.ts +96 -0
- package/dist/templates/starter-game/validators/capacity/logic/logic.ts +45 -0
- package/dist/templates/starter-game/validators/capacity/types.ts +55 -0
- package/dist/templates/starter-game/validators/capacity/validator.sdk.json +11 -0
- package/dist/templates/starter-game/vite.config.ts +19 -0
- package/dist/templates/starter-game/vitest.config.ts +15 -0
- package/dist/templates/starter-game/vitest.engine.config.ts +19 -0
- package/dist/templates/starter-game/waiting_room/defaults.ts +40 -0
- package/dist/templates/starter-game/waiting_room/index.html +12 -0
- package/dist/templates/starter-game/waiting_room/src/App.test.tsx +102 -0
- package/dist/templates/starter-game/waiting_room/src/App.tsx +194 -0
- package/dist/templates/starter-game/waiting_room/src/i18n.ts +33 -0
- package/dist/templates/starter-game/waiting_room/src/main.tsx +48 -0
- package/dist/templates/starter-game/waiting_room/src/theme.ts +45 -0
- package/dist/templates/starter-game/waiting_room/types.ts +59 -0
- package/dist/templates/starter-game/waiting_room/waiting_room.sdk.json +10 -0
- package/dist/templates/tick-controller/logic.ts.liquid +8 -0
- package/dist/templates/ui/index.html.liquid +12 -0
- package/dist/templates/ui/src/App.test.tsx.liquid +41 -0
- package/dist/templates/ui/src/App.tsx.liquid +103 -0
- package/dist/templates/ui/src/i18n.ts.liquid +47 -0
- package/dist/templates/ui/src/main.tsx.liquid +48 -0
- package/dist/templates/ui/src/theme.ts.liquid +46 -0
- package/dist/templates/validator/logic.test.ts.liquid +42 -0
- package/dist/templates/validator/logic.ts.liquid +21 -0
- package/dist/templates/waiting-room/index.html.liquid +12 -0
- package/dist/templates/waiting-room/src/App.test.tsx.liquid +57 -0
- package/dist/templates/waiting-room/src/App.tsx.liquid +118 -0
- package/dist/templates/waiting-room/src/i18n.ts.liquid +44 -0
- package/dist/templates/waiting-room/src/main.tsx.liquid +48 -0
- package/dist/templates/waiting-room/src/theme.ts.liquid +46 -0
- package/dist/templating/resource-metadata.d.ts +131 -0
- package/dist/types.d.ts +14 -0
- package/dist/utils/atomic-write.d.ts +40 -0
- package/dist/utils/cli-error.d.ts +64 -0
- package/dist/utils/document-parser-client.d.ts +20 -0
- package/dist/utils/env-loader.d.ts +40 -0
- package/dist/utils/error-codes.d.ts +335 -0
- package/dist/utils/errors.d.ts +19 -0
- package/dist/utils/global-settings.d.ts +65 -0
- package/dist/utils/llm-client.d.ts +34 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/output.d.ts +109 -0
- package/dist/utils/platform.d.ts +14 -0
- package/dist/utils/prompt.d.ts +36 -0
- package/dist/utils/real-path.d.ts +6 -0
- package/dist/utils/schema-properties.d.ts +35 -0
- package/dist/validation/ajv.d.ts +17 -0
- package/dist/validation/facilitator-guide-validator.d.ts +27 -0
- package/dist/validation/findings.d.ts +40 -0
- package/dist/validation/game-constraints.d.ts +10 -0
- package/dist/validation/game-validator.d.ts +34 -0
- package/dist/validation/package-validation.d.ts +41 -0
- package/dist/validation/package-validator.d.ts +19 -0
- package/dist/validation/resource-validator.d.ts +79 -0
- package/dist/validation/schema-defaults-validator.d.ts +29 -0
- package/dist/validation/schema-validation.d.ts +115 -0
- package/dist/validation/semver.d.ts +9 -0
- package/package.json +122 -3
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
<!-- Generated by `pnpm docs:generate` from the exports of `@seriousgaming/sdk/commands`. Edit those, not this file. -->
|
|
2
|
+
|
|
3
|
+
# `@seriousgaming/sdk/commands`
|
|
4
|
+
|
|
5
|
+
What a client may ask a session to do.
|
|
6
|
+
|
|
7
|
+
One closed command set, shared by every client of the dev server: the
|
|
8
|
+
browser console, the CLI, a Playwright suite through `runCommand`, and an
|
|
9
|
+
agent posting to `/api/command`. Published from the SDK rather than declared
|
|
10
|
+
inside the runtime so a test is type-checked against the commands the
|
|
11
|
+
runtime actually accepts, and a misspelled field fails to compile rather
|
|
12
|
+
than coming back as a 400.
|
|
13
|
+
|
|
14
|
+
The runtime that validates these at its boundary lives in the tools
|
|
15
|
+
package. This module is types only.
|
|
16
|
+
|
|
17
|
+
Every export of `@seriousgaming/sdk/commands`, with the declaration it is published with. Anything tagged `@internal` is left out: it ships in the declarations, but is not part of the supported API and may change without a major release. For how the pieces fit together, see the [API reference](./index.md) and the guides it links to.
|
|
18
|
+
|
|
19
|
+
## Interfaces
|
|
20
|
+
|
|
21
|
+
### Actor
|
|
22
|
+
|
|
23
|
+
Who is asking, where the operation is one a participant can perform.
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
interface Actor {
|
|
27
|
+
participantId?: string;
|
|
28
|
+
teamId?: string;
|
|
29
|
+
viewerRole?: ViewerRole;
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### EndpointListing
|
|
34
|
+
|
|
35
|
+
One endpoint, as `listEndpoints` describes it.
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
interface EndpointListing {
|
|
39
|
+
identifier: string;
|
|
40
|
+
displayName?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
scope: 'session' | 'team';
|
|
43
|
+
visibility: 'internal' | 'external';
|
|
44
|
+
requestSchema: Record<string, unknown>;
|
|
45
|
+
responseSchema: Record<string, unknown>;
|
|
46
|
+
writes: string[];
|
|
47
|
+
actions: string[];
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### TeamScope
|
|
52
|
+
|
|
53
|
+
Addresses one team by its stable index, or the session when absent.
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
interface TeamScope {
|
|
57
|
+
teamIndex?: number;
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Types
|
|
62
|
+
|
|
63
|
+
### Command
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
type Command = MutationCommand | QueryCommand;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### MutationCommand
|
|
70
|
+
|
|
71
|
+
Every state-changing operation. Each one goes through the session's single queue, in submission order.
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
type MutationCommand =
|
|
75
|
+
| ({
|
|
76
|
+
type: 'tick';
|
|
77
|
+
} & TeamScope &
|
|
78
|
+
Actor)
|
|
79
|
+
| ({
|
|
80
|
+
type: 'undo';
|
|
81
|
+
} & TeamScope)
|
|
82
|
+
| ({
|
|
83
|
+
type: 'reset';
|
|
84
|
+
} & TeamScope)
|
|
85
|
+
| {
|
|
86
|
+
type: 'play';
|
|
87
|
+
}
|
|
88
|
+
| {
|
|
89
|
+
type: 'reconfigure';
|
|
90
|
+
}
|
|
91
|
+
| {
|
|
92
|
+
type: 'reinitialise';
|
|
93
|
+
teams?: number;
|
|
94
|
+
scenarioId?: string | null;
|
|
95
|
+
locale?: string;
|
|
96
|
+
participants?: number | number[];
|
|
97
|
+
}
|
|
98
|
+
| ({
|
|
99
|
+
type: 'updateContext';
|
|
100
|
+
payload: Record<string, unknown>;
|
|
101
|
+
deletes?: (string | string[])[];
|
|
102
|
+
uiIdentifier?: string;
|
|
103
|
+
sessionUiIdentifier?: string;
|
|
104
|
+
} & TeamScope &
|
|
105
|
+
Actor)
|
|
106
|
+
| {
|
|
107
|
+
type: 'updateSharedContext';
|
|
108
|
+
uiIdentifier?: string;
|
|
109
|
+
endpointIdentifier?: string;
|
|
110
|
+
payload: Record<string, unknown>;
|
|
111
|
+
deletes?: (string | string[])[];
|
|
112
|
+
}
|
|
113
|
+
| {
|
|
114
|
+
type: 'updateSettings';
|
|
115
|
+
uiIdentifier?: string;
|
|
116
|
+
payload: Record<string, unknown>;
|
|
117
|
+
}
|
|
118
|
+
| {
|
|
119
|
+
type: 'editScenario';
|
|
120
|
+
scenarioId: string | null;
|
|
121
|
+
}
|
|
122
|
+
| {
|
|
123
|
+
type: 'updateScenarioDraft';
|
|
124
|
+
uiIdentifier?: string;
|
|
125
|
+
scenarioId: string | null;
|
|
126
|
+
payload: Record<string, unknown>;
|
|
127
|
+
}
|
|
128
|
+
| {
|
|
129
|
+
type: 'addTeam';
|
|
130
|
+
name?: string;
|
|
131
|
+
participants?: number;
|
|
132
|
+
}
|
|
133
|
+
| {
|
|
134
|
+
type: 'removeTeam';
|
|
135
|
+
teamIndex: number;
|
|
136
|
+
}
|
|
137
|
+
| {
|
|
138
|
+
type: 'renameTeam';
|
|
139
|
+
teamId: string;
|
|
140
|
+
name: string;
|
|
141
|
+
}
|
|
142
|
+
| ({
|
|
143
|
+
type: 'renameOwnTeam';
|
|
144
|
+
name: string;
|
|
145
|
+
} & Actor)
|
|
146
|
+
| {
|
|
147
|
+
type: 'addParticipant';
|
|
148
|
+
teamId: string;
|
|
149
|
+
name?: string;
|
|
150
|
+
}
|
|
151
|
+
| {
|
|
152
|
+
type: 'renameParticipant';
|
|
153
|
+
participantId: string;
|
|
154
|
+
name: string;
|
|
155
|
+
}
|
|
156
|
+
| {
|
|
157
|
+
type: 'moveParticipant';
|
|
158
|
+
participantId: string;
|
|
159
|
+
teamId: string;
|
|
160
|
+
}
|
|
161
|
+
| {
|
|
162
|
+
type: 'setWaitingRoom';
|
|
163
|
+
open: boolean;
|
|
164
|
+
}
|
|
165
|
+
| {
|
|
166
|
+
type: 'resetWalkthrough';
|
|
167
|
+
}
|
|
168
|
+
| {
|
|
169
|
+
type: 'selectScenario';
|
|
170
|
+
scenarioId: string | null;
|
|
171
|
+
}
|
|
172
|
+
| {
|
|
173
|
+
type: 'setLocale';
|
|
174
|
+
locale: string;
|
|
175
|
+
}
|
|
176
|
+
| ({
|
|
177
|
+
type: 'pauseTimer';
|
|
178
|
+
} & TeamScope)
|
|
179
|
+
| ({
|
|
180
|
+
type: 'resumeTimer';
|
|
181
|
+
} & TeamScope)
|
|
182
|
+
| ({
|
|
183
|
+
type: 'extendTick';
|
|
184
|
+
byMs: number;
|
|
185
|
+
} & TeamScope)
|
|
186
|
+
| {
|
|
187
|
+
type: 'advanceClock';
|
|
188
|
+
byMs: number;
|
|
189
|
+
}
|
|
190
|
+
| {
|
|
191
|
+
type: 'armFault';
|
|
192
|
+
fault: FaultKind;
|
|
193
|
+
times?: number;
|
|
194
|
+
reason?: string;
|
|
195
|
+
}
|
|
196
|
+
| {
|
|
197
|
+
type: 'disarmFault';
|
|
198
|
+
fault: FaultKind;
|
|
199
|
+
};
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### QueryCommand
|
|
203
|
+
|
|
204
|
+
Every read. None of these enters the queue: a read is never blocked behind a mutation, so a tick in flight must not delay one.
|
|
205
|
+
|
|
206
|
+
```ts
|
|
207
|
+
type QueryCommand =
|
|
208
|
+
| {
|
|
209
|
+
type: 'getState';
|
|
210
|
+
}
|
|
211
|
+
| ({
|
|
212
|
+
type: 'callEndpoint';
|
|
213
|
+
endpointIdentifier: string;
|
|
214
|
+
request: unknown;
|
|
215
|
+
uiIdentifier?: string;
|
|
216
|
+
external?: boolean;
|
|
217
|
+
principal?: {
|
|
218
|
+
kind: string;
|
|
219
|
+
id: string;
|
|
220
|
+
name?: string;
|
|
221
|
+
};
|
|
222
|
+
scenarioId?: string | null;
|
|
223
|
+
} & TeamScope &
|
|
224
|
+
Actor)
|
|
225
|
+
| ({
|
|
226
|
+
type: 'getPastState';
|
|
227
|
+
query: PastStateQuery;
|
|
228
|
+
uiIdentifier?: string;
|
|
229
|
+
} & Actor)
|
|
230
|
+
| ({
|
|
231
|
+
type: 'getAllTeamsParticipants';
|
|
232
|
+
uiIdentifier?: string;
|
|
233
|
+
} & Actor)
|
|
234
|
+
| {
|
|
235
|
+
type: 'getEndpointAudit';
|
|
236
|
+
}
|
|
237
|
+
| {
|
|
238
|
+
type: 'listEndpoints';
|
|
239
|
+
external?: boolean;
|
|
240
|
+
};
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### QueryResult
|
|
244
|
+
|
|
245
|
+
What a query answered with.
|
|
246
|
+
|
|
247
|
+
```ts
|
|
248
|
+
type QueryResult =
|
|
249
|
+
| {
|
|
250
|
+
type: 'state';
|
|
251
|
+
state: StateProjection;
|
|
252
|
+
}
|
|
253
|
+
| {
|
|
254
|
+
type: 'endpoint';
|
|
255
|
+
response: unknown;
|
|
256
|
+
blobs?: Record<string, string>;
|
|
257
|
+
}
|
|
258
|
+
| {
|
|
259
|
+
type: 'endpointFailure';
|
|
260
|
+
failure: EndpointFailure;
|
|
261
|
+
}
|
|
262
|
+
| {
|
|
263
|
+
type: 'pastState';
|
|
264
|
+
entries: PastStateEntry[];
|
|
265
|
+
}
|
|
266
|
+
| {
|
|
267
|
+
type: 'participants';
|
|
268
|
+
participants: unknown[];
|
|
269
|
+
}
|
|
270
|
+
| {
|
|
271
|
+
type: 'endpointAudit';
|
|
272
|
+
entries: EndpointAuditEntry[];
|
|
273
|
+
}
|
|
274
|
+
| {
|
|
275
|
+
type: 'endpoints';
|
|
276
|
+
endpoints: EndpointListing[];
|
|
277
|
+
};
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### ViewerRole
|
|
281
|
+
|
|
282
|
+
Which viewer a player surface is being rendered for.
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
type ViewerRole = 'participant' | 'observer';
|
|
286
|
+
```
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
<!-- Generated by `pnpm docs:generate` from the exports of `@seriousgaming/sdk/e2e`. Edit those, not this file. -->
|
|
2
|
+
|
|
3
|
+
# `@seriousgaming/sdk/e2e`
|
|
4
|
+
|
|
5
|
+
End-to-end testing helpers for Serious Gaming SDK consumers.
|
|
6
|
+
|
|
7
|
+
Selectors and API helpers for writing Playwright tests against a game running
|
|
8
|
+
on the dev server. No dependency on Playwright itself — pass the selectors to
|
|
9
|
+
your own `page.locator()` / `page.frameLocator()` calls.
|
|
10
|
+
|
|
11
|
+
What you drive is your own game's surface inside the iframe; the console
|
|
12
|
+
around it is a handful of URLs and one drawer, which is why this module is
|
|
13
|
+
mostly URLs. Three things are worth knowing before writing a test:
|
|
14
|
+
|
|
15
|
+
- Every surface is directly addressable. `/team/2/player/1` is the first
|
|
16
|
+
participant of the second team, with no lookup and no redirect.
|
|
17
|
+
- `?bare` removes the dev chrome entirely, so a change to the console cannot
|
|
18
|
+
fail a test about your game. {@link DEV_SERVER.bare} adds it to any URL.
|
|
19
|
+
- The helpers address the server `SERIOUSGAMING_DEV_URL` names, which is
|
|
20
|
+
what a Playwright `globalSetup` running `startDevServer` sets, so a test
|
|
21
|
+
on free ports passes no options. `{ url }` or `{ port }` picks another.
|
|
22
|
+
|
|
23
|
+
@example
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { DEV_SERVER, runCommand, getState } from '@seriousgaming/sdk/e2e';
|
|
27
|
+
|
|
28
|
+
test('the dashboard shows the tick', async ({ page }) => {
|
|
29
|
+
await runCommand({ type: 'reset' });
|
|
30
|
+
await page.goto(DEV_SERVER.bare(DEV_SERVER.playerUrl(1)));
|
|
31
|
+
|
|
32
|
+
const frame = page.frameLocator(DEV_SERVER.iframeSelector('ui'));
|
|
33
|
+
await expect(frame.locator('#tick')).toHaveText('0');
|
|
34
|
+
|
|
35
|
+
await runCommand({ type: 'tick' });
|
|
36
|
+
await expect(frame.locator('#tick')).toHaveText('1');
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Every export of `@seriousgaming/sdk/e2e`, with the declaration it is published with. Anything tagged `@internal` is left out: it ships in the declarations, but is not part of the supported API and may change without a major release. For how the pieces fit together, see the [API reference](./index.md) and the guides it links to.
|
|
41
|
+
|
|
42
|
+
## Functions
|
|
43
|
+
|
|
44
|
+
### advanceClock
|
|
45
|
+
|
|
46
|
+
Move the clock of a dev server started with `--fake-clock` forward, running every automatic tick that falls due on the way. Resolves once they have run.
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
function advanceClock(ms: number, options?: DevServerOptions): Promise<void>;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### getState
|
|
53
|
+
|
|
54
|
+
The whole session, as one projection: teams, contexts, participants, the resolved configuration, the timer, and anything the runtime has gone wrong about. Assert on state without going through a surface.
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
function getState(options?: DevServerOptions): Promise<StateProjection>;
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### reinitialiseSession
|
|
61
|
+
|
|
62
|
+
Start the session again from the package, as a test's known starting point.
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
function reinitialiseSession(options?: ReinitialiseOptions): Promise<void>;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### resetSession
|
|
69
|
+
|
|
70
|
+
Return the session to tick 0, so one test does not inherit another's state. Call it in `test.beforeEach`.
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
function resetSession(options?: DevServerOptions): Promise<void>;
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### runCommand
|
|
77
|
+
|
|
78
|
+
Run one command against the running session.
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
function runCommand(command: MutationCommand, options?: DevServerOptions): Promise<MutationResult>;
|
|
82
|
+
function runCommand(command: QueryCommand, options?: DevServerOptions): Promise<QueryResult>;
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### waitForState
|
|
86
|
+
|
|
87
|
+
Wait until the session satisfies `predicate`, and return the state that did.
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
function waitForState(
|
|
91
|
+
predicate: (state: StateProjection) => boolean,
|
|
92
|
+
options?: WaitOptions
|
|
93
|
+
): Promise<StateProjection>;
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Constants
|
|
97
|
+
|
|
98
|
+
### DEV_SERVER
|
|
99
|
+
|
|
100
|
+
Selectors and URLs for the dev console.
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
const DEV_SERVER: {
|
|
104
|
+
readonly DEFAULT_PORT: 3000;
|
|
105
|
+
readonly selectors: {
|
|
106
|
+
readonly devDrawerHandle: '[data-testid="dev-drawer-handle"]';
|
|
107
|
+
readonly devDrawer: '[data-testid="dev-drawer"]';
|
|
108
|
+
readonly localeSelect: '[data-testid="locale"]';
|
|
109
|
+
readonly play: '[data-testid="play"]';
|
|
110
|
+
readonly guideContent: '[data-testid="guide-content"]';
|
|
111
|
+
readonly printSheets: '[data-testid="print-sheets"]';
|
|
112
|
+
};
|
|
113
|
+
readonly consoleUrl: () => string;
|
|
114
|
+
readonly playerUrl: (team: number, participant?: number) => string;
|
|
115
|
+
readonly observeUrl: (team: number) => string;
|
|
116
|
+
readonly waitingRoomUrl: (team: number) => string;
|
|
117
|
+
readonly joinUrl: (team: number) => string;
|
|
118
|
+
readonly setupUrl: () => string;
|
|
119
|
+
readonly scenarioEditorUrl: (scenario: string) => string;
|
|
120
|
+
readonly guideUrl: () => string;
|
|
121
|
+
readonly printUrl: () => string;
|
|
122
|
+
readonly bare: (url: string) => string;
|
|
123
|
+
readonly iframeSelector: (identifier: string) => string;
|
|
124
|
+
readonly apiUrl: (path: string, port?: number) => string;
|
|
125
|
+
};
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Interfaces
|
|
129
|
+
|
|
130
|
+
### DevServerOptions
|
|
131
|
+
|
|
132
|
+
Which dev server a helper talks to. With neither field set, the server `SERIOUSGAMING_DEV_URL` names (as `startDevServer` in a Playwright `globalSetup` sets it), or else `localhost` on `DEV_SERVER_DEFAULT_PORT`.
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
interface DevServerOptions {
|
|
136
|
+
url?: string;
|
|
137
|
+
port?: number;
|
|
138
|
+
run?: RunKind;
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### ReinitialiseOptions
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
interface ReinitialiseOptions extends DevServerOptions {
|
|
146
|
+
teams?: number;
|
|
147
|
+
participants?: number | number[];
|
|
148
|
+
scenarioId?: string | null;
|
|
149
|
+
locale?: string;
|
|
150
|
+
play?: boolean;
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### StateProjection
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
interface StateProjection {
|
|
158
|
+
projectionVersion: number;
|
|
159
|
+
game: {
|
|
160
|
+
identifier: string;
|
|
161
|
+
name: string;
|
|
162
|
+
scenarioId: string | null;
|
|
163
|
+
};
|
|
164
|
+
session: {
|
|
165
|
+
completedTicks: number;
|
|
166
|
+
mode: SessionMode;
|
|
167
|
+
waitingRoomOpen: boolean;
|
|
168
|
+
complete: boolean;
|
|
169
|
+
seed: string;
|
|
170
|
+
sessionKey: string;
|
|
171
|
+
locale: string;
|
|
172
|
+
runKind: RunKind;
|
|
173
|
+
maxTicks: number | null;
|
|
174
|
+
teamBounds: {
|
|
175
|
+
min?: number;
|
|
176
|
+
max: number;
|
|
177
|
+
};
|
|
178
|
+
inSetup: boolean;
|
|
179
|
+
pending?: PendingChanges;
|
|
180
|
+
};
|
|
181
|
+
teams: ProjectedTeam[];
|
|
182
|
+
shared: Record<string, Record<string, unknown>>;
|
|
183
|
+
sharedState?: unknown;
|
|
184
|
+
timer: TimerState | null;
|
|
185
|
+
settings: ResolvedSettings;
|
|
186
|
+
settingsWithoutSession: ResolvedSettings;
|
|
187
|
+
scenarioDrafts?: ScenarioDraft[];
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### WaitOptions
|
|
192
|
+
|
|
193
|
+
```ts
|
|
194
|
+
interface WaitOptions extends DevServerOptions {
|
|
195
|
+
timeout?: number;
|
|
196
|
+
interval?: number;
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Types
|
|
201
|
+
|
|
202
|
+
### Command
|
|
203
|
+
|
|
204
|
+
```ts
|
|
205
|
+
type Command = MutationCommand | QueryCommand;
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### MutationCommand
|
|
209
|
+
|
|
210
|
+
Every state-changing operation. Each one goes through the session's single queue, in submission order.
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
type MutationCommand =
|
|
214
|
+
| ({
|
|
215
|
+
type: 'tick';
|
|
216
|
+
} & TeamScope &
|
|
217
|
+
Actor)
|
|
218
|
+
| ({
|
|
219
|
+
type: 'undo';
|
|
220
|
+
} & TeamScope)
|
|
221
|
+
| ({
|
|
222
|
+
type: 'reset';
|
|
223
|
+
} & TeamScope)
|
|
224
|
+
| {
|
|
225
|
+
type: 'play';
|
|
226
|
+
}
|
|
227
|
+
| {
|
|
228
|
+
type: 'reconfigure';
|
|
229
|
+
}
|
|
230
|
+
| {
|
|
231
|
+
type: 'reinitialise';
|
|
232
|
+
teams?: number;
|
|
233
|
+
scenarioId?: string | null;
|
|
234
|
+
locale?: string;
|
|
235
|
+
participants?: number | number[];
|
|
236
|
+
}
|
|
237
|
+
| ({
|
|
238
|
+
type: 'updateContext';
|
|
239
|
+
payload: Record<string, unknown>;
|
|
240
|
+
deletes?: (string | string[])[];
|
|
241
|
+
uiIdentifier?: string;
|
|
242
|
+
sessionUiIdentifier?: string;
|
|
243
|
+
} & TeamScope &
|
|
244
|
+
Actor)
|
|
245
|
+
| {
|
|
246
|
+
type: 'updateSharedContext';
|
|
247
|
+
uiIdentifier?: string;
|
|
248
|
+
endpointIdentifier?: string;
|
|
249
|
+
payload: Record<string, unknown>;
|
|
250
|
+
deletes?: (string | string[])[];
|
|
251
|
+
}
|
|
252
|
+
| {
|
|
253
|
+
type: 'updateSettings';
|
|
254
|
+
uiIdentifier?: string;
|
|
255
|
+
payload: Record<string, unknown>;
|
|
256
|
+
}
|
|
257
|
+
| {
|
|
258
|
+
type: 'editScenario';
|
|
259
|
+
scenarioId: string | null;
|
|
260
|
+
}
|
|
261
|
+
| {
|
|
262
|
+
type: 'updateScenarioDraft';
|
|
263
|
+
uiIdentifier?: string;
|
|
264
|
+
scenarioId: string | null;
|
|
265
|
+
payload: Record<string, unknown>;
|
|
266
|
+
}
|
|
267
|
+
| {
|
|
268
|
+
type: 'addTeam';
|
|
269
|
+
name?: string;
|
|
270
|
+
participants?: number;
|
|
271
|
+
}
|
|
272
|
+
| {
|
|
273
|
+
type: 'removeTeam';
|
|
274
|
+
teamIndex: number;
|
|
275
|
+
}
|
|
276
|
+
| {
|
|
277
|
+
type: 'renameTeam';
|
|
278
|
+
teamId: string;
|
|
279
|
+
name: string;
|
|
280
|
+
}
|
|
281
|
+
| ({
|
|
282
|
+
type: 'renameOwnTeam';
|
|
283
|
+
name: string;
|
|
284
|
+
} & Actor)
|
|
285
|
+
| {
|
|
286
|
+
type: 'addParticipant';
|
|
287
|
+
teamId: string;
|
|
288
|
+
name?: string;
|
|
289
|
+
}
|
|
290
|
+
| {
|
|
291
|
+
type: 'renameParticipant';
|
|
292
|
+
participantId: string;
|
|
293
|
+
name: string;
|
|
294
|
+
}
|
|
295
|
+
| {
|
|
296
|
+
type: 'moveParticipant';
|
|
297
|
+
participantId: string;
|
|
298
|
+
teamId: string;
|
|
299
|
+
}
|
|
300
|
+
| {
|
|
301
|
+
type: 'setWaitingRoom';
|
|
302
|
+
open: boolean;
|
|
303
|
+
}
|
|
304
|
+
| {
|
|
305
|
+
type: 'resetWalkthrough';
|
|
306
|
+
}
|
|
307
|
+
| {
|
|
308
|
+
type: 'selectScenario';
|
|
309
|
+
scenarioId: string | null;
|
|
310
|
+
}
|
|
311
|
+
| {
|
|
312
|
+
type: 'setLocale';
|
|
313
|
+
locale: string;
|
|
314
|
+
}
|
|
315
|
+
| ({
|
|
316
|
+
type: 'pauseTimer';
|
|
317
|
+
} & TeamScope)
|
|
318
|
+
| ({
|
|
319
|
+
type: 'resumeTimer';
|
|
320
|
+
} & TeamScope)
|
|
321
|
+
| ({
|
|
322
|
+
type: 'extendTick';
|
|
323
|
+
byMs: number;
|
|
324
|
+
} & TeamScope)
|
|
325
|
+
| {
|
|
326
|
+
type: 'advanceClock';
|
|
327
|
+
byMs: number;
|
|
328
|
+
}
|
|
329
|
+
| {
|
|
330
|
+
type: 'armFault';
|
|
331
|
+
fault: FaultKind;
|
|
332
|
+
times?: number;
|
|
333
|
+
reason?: string;
|
|
334
|
+
}
|
|
335
|
+
| {
|
|
336
|
+
type: 'disarmFault';
|
|
337
|
+
fault: FaultKind;
|
|
338
|
+
};
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### MutationResult
|
|
342
|
+
|
|
343
|
+
What a mutation settled as.
|
|
344
|
+
|
|
345
|
+
```ts
|
|
346
|
+
type MutationResult =
|
|
347
|
+
| {
|
|
348
|
+
ok: true;
|
|
349
|
+
committedAtTick?: number;
|
|
350
|
+
}
|
|
351
|
+
| {
|
|
352
|
+
ok: false;
|
|
353
|
+
outcome: MutationOutcome;
|
|
354
|
+
};
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### QueryCommand
|
|
358
|
+
|
|
359
|
+
Every read. None of these enters the queue: a read is never blocked behind a mutation, so a tick in flight must not delay one.
|
|
360
|
+
|
|
361
|
+
```ts
|
|
362
|
+
type QueryCommand =
|
|
363
|
+
| {
|
|
364
|
+
type: 'getState';
|
|
365
|
+
}
|
|
366
|
+
| ({
|
|
367
|
+
type: 'callEndpoint';
|
|
368
|
+
endpointIdentifier: string;
|
|
369
|
+
request: unknown;
|
|
370
|
+
uiIdentifier?: string;
|
|
371
|
+
external?: boolean;
|
|
372
|
+
principal?: {
|
|
373
|
+
kind: string;
|
|
374
|
+
id: string;
|
|
375
|
+
name?: string;
|
|
376
|
+
};
|
|
377
|
+
scenarioId?: string | null;
|
|
378
|
+
} & TeamScope &
|
|
379
|
+
Actor)
|
|
380
|
+
| ({
|
|
381
|
+
type: 'getPastState';
|
|
382
|
+
query: PastStateQuery;
|
|
383
|
+
uiIdentifier?: string;
|
|
384
|
+
} & Actor)
|
|
385
|
+
| ({
|
|
386
|
+
type: 'getAllTeamsParticipants';
|
|
387
|
+
uiIdentifier?: string;
|
|
388
|
+
} & Actor)
|
|
389
|
+
| {
|
|
390
|
+
type: 'getEndpointAudit';
|
|
391
|
+
}
|
|
392
|
+
| {
|
|
393
|
+
type: 'listEndpoints';
|
|
394
|
+
external?: boolean;
|
|
395
|
+
};
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### QueryResult
|
|
399
|
+
|
|
400
|
+
What a query answered with.
|
|
401
|
+
|
|
402
|
+
```ts
|
|
403
|
+
type QueryResult =
|
|
404
|
+
| {
|
|
405
|
+
type: 'state';
|
|
406
|
+
state: StateProjection;
|
|
407
|
+
}
|
|
408
|
+
| {
|
|
409
|
+
type: 'endpoint';
|
|
410
|
+
response: unknown;
|
|
411
|
+
blobs?: Record<string, string>;
|
|
412
|
+
}
|
|
413
|
+
| {
|
|
414
|
+
type: 'endpointFailure';
|
|
415
|
+
failure: EndpointFailure;
|
|
416
|
+
}
|
|
417
|
+
| {
|
|
418
|
+
type: 'pastState';
|
|
419
|
+
entries: PastStateEntry[];
|
|
420
|
+
}
|
|
421
|
+
| {
|
|
422
|
+
type: 'participants';
|
|
423
|
+
participants: unknown[];
|
|
424
|
+
}
|
|
425
|
+
| {
|
|
426
|
+
type: 'endpointAudit';
|
|
427
|
+
entries: EndpointAuditEntry[];
|
|
428
|
+
}
|
|
429
|
+
| {
|
|
430
|
+
type: 'endpoints';
|
|
431
|
+
endpoints: EndpointListing[];
|
|
432
|
+
};
|
|
433
|
+
```
|