@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,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-line JSON for a copy-paste example, derived from the pretty-printed
|
|
3
|
+
* literal so the two can never disagree.
|
|
4
|
+
*/
|
|
5
|
+
export declare function compact(example: string): string;
|
|
6
|
+
/** Indent every line of a multi-line block by two spaces (help-text layout). */
|
|
7
|
+
export declare function indent(block: string): string;
|
|
8
|
+
export declare const packageExample: string;
|
|
9
|
+
export declare const capabilityExample: string;
|
|
10
|
+
export declare const settingsExample: string;
|
|
11
|
+
export declare const settingsUpdateExample: string;
|
|
12
|
+
export declare const engineExample: string;
|
|
13
|
+
export declare const userInterfaceExample: string;
|
|
14
|
+
export declare const setupExample: string;
|
|
15
|
+
export declare const setupUpdateExample: string;
|
|
16
|
+
export declare const scenarioEditorExample: string;
|
|
17
|
+
export declare const scenarioEditorUpdateExample: string;
|
|
18
|
+
export declare const packageUpdateExample: string;
|
|
19
|
+
export declare const capabilityUpdateExample: string;
|
|
20
|
+
export declare const engineUpdateExample: string;
|
|
21
|
+
export declare const userInterfaceUpdateExample: string;
|
|
22
|
+
export declare const tickControllerExample: string;
|
|
23
|
+
export declare const tickControllerUpdateExample: string;
|
|
24
|
+
export declare const hookExample: string;
|
|
25
|
+
export declare const hookUpdateExample: string;
|
|
26
|
+
export declare const validatorExample: string;
|
|
27
|
+
export declare const validatorUpdateExample: string;
|
|
28
|
+
export declare const endpointExample: string;
|
|
29
|
+
export declare const endpointUpdateExample: string;
|
|
30
|
+
export declare const sessionUserInterfaceExample: string;
|
|
31
|
+
export declare const sessionUserInterfaceUpdateExample: string;
|
|
32
|
+
export declare const waitingRoomUserInterfaceExample: string;
|
|
33
|
+
export declare const waitingRoomUserInterfaceUpdateExample: string;
|
|
34
|
+
export declare const presentationExample: string;
|
|
35
|
+
export declare const presentationUpdateExample: string;
|
|
36
|
+
export declare const scenarioExample: string;
|
|
37
|
+
export declare const scenarioUpdateExample: string;
|
|
38
|
+
export declare const facilitatorGuideExample: string;
|
|
39
|
+
export declare const facilitatorGuideUpdateExample: string;
|
|
40
|
+
/**
|
|
41
|
+
* The one example per resource type and command, looked up by type.
|
|
42
|
+
*
|
|
43
|
+
* Three families of example used to be written separately: the `--help` text
|
|
44
|
+
* (wired to these literals by #448), the `Expected format` block a `new` or
|
|
45
|
+
* `update` prints when it cannot parse its input, and the expected shape a
|
|
46
|
+
* schema-validation failure prints. Only the first was ever checked, so the
|
|
47
|
+
* other two rotted where an author is already stuck — thirteen of them still
|
|
48
|
+
* showed the dotted identifiers the CLI has rejected since #433. All three now
|
|
49
|
+
* render from here (#473).
|
|
50
|
+
*/
|
|
51
|
+
export declare const RESOURCE_EXAMPLES: {
|
|
52
|
+
readonly package: {
|
|
53
|
+
readonly new: string;
|
|
54
|
+
readonly update: string;
|
|
55
|
+
};
|
|
56
|
+
readonly capability: {
|
|
57
|
+
readonly new: string;
|
|
58
|
+
readonly update: string;
|
|
59
|
+
};
|
|
60
|
+
readonly settings: {
|
|
61
|
+
readonly new: string;
|
|
62
|
+
readonly update: string;
|
|
63
|
+
};
|
|
64
|
+
readonly engine: {
|
|
65
|
+
readonly new: string;
|
|
66
|
+
readonly update: string;
|
|
67
|
+
};
|
|
68
|
+
readonly ui: {
|
|
69
|
+
readonly new: string;
|
|
70
|
+
readonly update: string;
|
|
71
|
+
};
|
|
72
|
+
readonly setup: {
|
|
73
|
+
readonly new: string;
|
|
74
|
+
readonly update: string;
|
|
75
|
+
};
|
|
76
|
+
readonly scenario_editor: {
|
|
77
|
+
readonly new: string;
|
|
78
|
+
readonly update: string;
|
|
79
|
+
};
|
|
80
|
+
readonly tick_controller: {
|
|
81
|
+
readonly new: string;
|
|
82
|
+
readonly update: string;
|
|
83
|
+
};
|
|
84
|
+
readonly session: {
|
|
85
|
+
readonly new: string;
|
|
86
|
+
readonly update: string;
|
|
87
|
+
};
|
|
88
|
+
readonly waiting_room: {
|
|
89
|
+
readonly new: string;
|
|
90
|
+
readonly update: string;
|
|
91
|
+
};
|
|
92
|
+
readonly presentation: {
|
|
93
|
+
readonly new: string;
|
|
94
|
+
readonly update: string;
|
|
95
|
+
};
|
|
96
|
+
readonly scenario: {
|
|
97
|
+
readonly new: string;
|
|
98
|
+
readonly update: string;
|
|
99
|
+
};
|
|
100
|
+
readonly guide: {
|
|
101
|
+
readonly new: string;
|
|
102
|
+
readonly update: string;
|
|
103
|
+
};
|
|
104
|
+
readonly hook: {
|
|
105
|
+
readonly new: string;
|
|
106
|
+
readonly update: string;
|
|
107
|
+
};
|
|
108
|
+
readonly validator: {
|
|
109
|
+
readonly new: string;
|
|
110
|
+
readonly update: string;
|
|
111
|
+
};
|
|
112
|
+
readonly endpoint: {
|
|
113
|
+
readonly new: string;
|
|
114
|
+
readonly update: string;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
/** A resource type with a documented example. */
|
|
118
|
+
export type ExampledResourceType = keyof typeof RESOURCE_EXAMPLES;
|
|
119
|
+
/**
|
|
120
|
+
* The example for a type and command.
|
|
121
|
+
*
|
|
122
|
+
* Every caller reaches an example this way, so a type registered without one is
|
|
123
|
+
* a compile error rather than a message that quietly says nothing.
|
|
124
|
+
*/
|
|
125
|
+
export declare function resourceExample(type: ExampledResourceType, command: 'new' | 'update'): string;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The side effects a host channel delegates to its embedder.
|
|
3
|
+
*
|
|
4
|
+
* The channel owns the §12 protocol: the handshake, the initial batch,
|
|
5
|
+
* correlation, framing, and teardown. It owns none of the work those messages
|
|
6
|
+
* ask for, because that work is where the SDK dev server and a production
|
|
7
|
+
* platform genuinely differ — one calls into an in-process executor, the other
|
|
8
|
+
* into an HTTP API. Everything an embedder must supply is here, and it is the
|
|
9
|
+
* only place the two implementations diverge.
|
|
10
|
+
*
|
|
11
|
+
* Every method may throw. The channel catches, frames the failure as the
|
|
12
|
+
* protocol's `ok: false` response for that request, and keeps the port open: a
|
|
13
|
+
* failing endpoint must not take the surface down with it.
|
|
14
|
+
*/
|
|
15
|
+
import type { PastStateEntry, PastStateQuery, Participant } from '@seriousgaming/sdk';
|
|
16
|
+
/** Who is asking. Supplied to every adapter call so it can authorise. */
|
|
17
|
+
export interface RequestOrigin {
|
|
18
|
+
/** Identifier of the UI bundle mounted in this frame. */
|
|
19
|
+
uiIdentifier: string;
|
|
20
|
+
/** The team whose surface this is, where the surface belongs to one. */
|
|
21
|
+
teamId?: string;
|
|
22
|
+
/** The participant this render is identified as, absent for an observer. */
|
|
23
|
+
participantId?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface HostAdapter {
|
|
26
|
+
/**
|
|
27
|
+
* Invoke a server-side endpoint (§6.12).
|
|
28
|
+
*
|
|
29
|
+
* The adapter is responsible for the `endpoints` allowlist, request and
|
|
30
|
+
* response schema validation, and execution. The channel only correlates.
|
|
31
|
+
* Resolve with the response; on failure throw an `EndpointError` carrying
|
|
32
|
+
* the call's `EndpointFailure`, which the channel sends as it stands. Any
|
|
33
|
+
* other throw reaches the surface as `{ kind: 'error' }` with nothing
|
|
34
|
+
* applied.
|
|
35
|
+
*/
|
|
36
|
+
callEndpoint?(request: {
|
|
37
|
+
endpointIdentifier: string;
|
|
38
|
+
request: unknown;
|
|
39
|
+
}, origin: RequestOrigin): Promise<unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* Store an uploaded file and return its `blob:<id>` reference (§16.2).
|
|
42
|
+
*
|
|
43
|
+
* The lifecycle bucket is the host's to assign from the surface kind; the
|
|
44
|
+
* guest has no say in it.
|
|
45
|
+
*/
|
|
46
|
+
uploadBlob?(file: {
|
|
47
|
+
data: ArrayBuffer;
|
|
48
|
+
name: string;
|
|
49
|
+
mimeType: string;
|
|
50
|
+
}, origin: RequestOrigin): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* Answer a read-only history query (§12.5).
|
|
53
|
+
*
|
|
54
|
+
* The adapter resolves `query.teams` and bounds `capabilityIds` server-side.
|
|
55
|
+
* An unreachable tick or team is an absent row, not a fault, so the normal
|
|
56
|
+
* answer to a query that reaches nothing is an empty array.
|
|
57
|
+
*/
|
|
58
|
+
getPastState?(query: PastStateQuery, origin: RequestOrigin): Promise<PastStateEntry[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Every team's current roster, flattened (§12.5).
|
|
61
|
+
*
|
|
62
|
+
* Gated by the bundle's `crossTeamParticipants` declaration, which the
|
|
63
|
+
* adapter checks: an undeclared surface is answered with an empty array
|
|
64
|
+
* rather than an error.
|
|
65
|
+
*/
|
|
66
|
+
getAllTeamsParticipants?(origin: RequestOrigin): Promise<Participant[]>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host half of the §12 host ↔ iframe protocol, with no framework in it.
|
|
3
|
+
*
|
|
4
|
+
* The guest half of this channel is `useHostChannel` and the wrapper components
|
|
5
|
+
* in `@seriousgaming/sdk/ui`. The two halves hold their own
|
|
6
|
+
* definitions of the wire protocol, and `protocol.parity.test.ts` refuses to
|
|
7
|
+
* compile when they disagree, so neither end can change alone.
|
|
8
|
+
*
|
|
9
|
+
* It owns the lifecycle and nothing else:
|
|
10
|
+
*
|
|
11
|
+
* - the window-level `ready` / `init` handshake, origin-pinned per §12.2
|
|
12
|
+
* - a bounded handshake, so a frame that has navigated itself away is detected
|
|
13
|
+
* rather than left spinning (§16.6)
|
|
14
|
+
* - the required initial batch per surface kind (§12.6)
|
|
15
|
+
* - reconnection: close the old port, fresh channel, re-send the batch (§12.7)
|
|
16
|
+
* - correlation and framing for every request in both directions
|
|
17
|
+
* - diffing, so an unchanged slice is not re-pushed
|
|
18
|
+
*
|
|
19
|
+
* Everything those messages actually *do* is the embedder's, through
|
|
20
|
+
* {@link HostAdapter}. That split is what lets one implementation serve both
|
|
21
|
+
* the SDK dev server and a production runtime.
|
|
22
|
+
*
|
|
23
|
+
* Platform-facing: exported from `@seriousgaming/sdk-tools/host` so the dev
|
|
24
|
+
* server and the Serious Gaming platform can share one implementation; the
|
|
25
|
+
* shape may change in a minor release.
|
|
26
|
+
*/
|
|
27
|
+
import type { HostAdapter, RequestOrigin } from './adapter.js';
|
|
28
|
+
import { type SurfaceKind } from './surfaces.js';
|
|
29
|
+
/** Any host → guest port message. Narrowed by the surface's own union. */
|
|
30
|
+
export interface HostMessage {
|
|
31
|
+
type: string;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
/** Any guest → host port message. */
|
|
35
|
+
export interface GuestMessage {
|
|
36
|
+
type: string;
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The bits of `window` the channel touches.
|
|
41
|
+
*
|
|
42
|
+
* Injected rather than reached for, so the whole handshake is exercisable in a
|
|
43
|
+
* unit test with two fake windows and a real `MessageChannel`, which is what
|
|
44
|
+
* moves this off Playwright.
|
|
45
|
+
*/
|
|
46
|
+
export interface WindowLike {
|
|
47
|
+
addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
48
|
+
removeEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
49
|
+
}
|
|
50
|
+
/** The bit of an iframe element the channel touches. */
|
|
51
|
+
export interface FrameLike {
|
|
52
|
+
readonly contentWindow: {
|
|
53
|
+
postMessage(message: unknown, targetOrigin: string, transfer?: Transferable[]): void;
|
|
54
|
+
} | null;
|
|
55
|
+
/**
|
|
56
|
+
* The element's `load` event, fired for every document the frame loads.
|
|
57
|
+
* A frame without it is bounded on its first load only.
|
|
58
|
+
*/
|
|
59
|
+
addEventListener?(type: 'load', listener: () => void): void;
|
|
60
|
+
removeEventListener?(type: 'load', listener: () => void): void;
|
|
61
|
+
}
|
|
62
|
+
/** Why a channel tore itself down. */
|
|
63
|
+
export type TeardownReason =
|
|
64
|
+
/** No `ready` arrived within the handshake bound (§16.6). */
|
|
65
|
+
'handshake-timeout'
|
|
66
|
+
/** `dispose()` was called. */
|
|
67
|
+
| 'disposed';
|
|
68
|
+
export interface HostChannelOptions {
|
|
69
|
+
/** The frame this channel is bound to. */
|
|
70
|
+
iframe: FrameLike;
|
|
71
|
+
/** Which surface the frame is rendering (§12.6). */
|
|
72
|
+
surface: SurfaceKind;
|
|
73
|
+
/** Identifier of the UI bundle mounted in the frame, for adapter calls. */
|
|
74
|
+
uiIdentifier: string;
|
|
75
|
+
/**
|
|
76
|
+
* Origin the frame is served from. Used as `targetOrigin` on `init`, and
|
|
77
|
+
* matched against the incoming `ready` (§12.2).
|
|
78
|
+
*/
|
|
79
|
+
iframeOrigin: string;
|
|
80
|
+
/**
|
|
81
|
+
* The run's storage key, sent on every `init` (§12.2): opaque, the same for
|
|
82
|
+
* every surface of one run and for its whole life, different for every
|
|
83
|
+
* other run, the walkthrough beside it included, and never anything the
|
|
84
|
+
* host would accept as naming the session.
|
|
85
|
+
*/
|
|
86
|
+
sessionKey: string;
|
|
87
|
+
/** Window to listen for the `ready` handshake on. Defaults to `window`. */
|
|
88
|
+
window?: WindowLike;
|
|
89
|
+
/** Side effects. A channel with no adapter answers every request as failed. */
|
|
90
|
+
adapter?: HostAdapter;
|
|
91
|
+
/** Identity carried into adapter calls. */
|
|
92
|
+
origin?: Omit<RequestOrigin, 'uiIdentifier'>;
|
|
93
|
+
/** An observer render receives no `setParticipant` (§13.3). */
|
|
94
|
+
observer?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* How long to wait for `ready` before treating the frame as gone. A frame
|
|
97
|
+
* that has navigated itself to a third-party page never handshakes, and
|
|
98
|
+
* neither the sandbox attribute nor CSP prevents that, so this bound is the
|
|
99
|
+
* only way to detect it (§16.6). Defaults to 10 seconds.
|
|
100
|
+
*/
|
|
101
|
+
handshakeTimeoutMs?: number;
|
|
102
|
+
/** Guest messages the channel does not answer itself. */
|
|
103
|
+
onMessage?(message: GuestMessage): void;
|
|
104
|
+
/** Called each time the handshake completes, reconnections included. */
|
|
105
|
+
onConnect?(): void;
|
|
106
|
+
/** Called when the channel gives up on the frame. */
|
|
107
|
+
onTeardown?(reason: TeardownReason): void;
|
|
108
|
+
/** Where diagnostics go. Defaults to `console`. */
|
|
109
|
+
logger?: Pick<Console, 'warn' | 'error'>;
|
|
110
|
+
}
|
|
111
|
+
export declare class HostChannel {
|
|
112
|
+
private readonly options;
|
|
113
|
+
private readonly host;
|
|
114
|
+
private readonly logger;
|
|
115
|
+
private port;
|
|
116
|
+
private readyListener;
|
|
117
|
+
private loadListener;
|
|
118
|
+
private handshakeTimer;
|
|
119
|
+
private disposed;
|
|
120
|
+
/**
|
|
121
|
+
* Last payload sent per message type, serialised.
|
|
122
|
+
*
|
|
123
|
+
* `setState` compares against this so an unchanged slice is not re-pushed.
|
|
124
|
+
* At a large cohort the session payload is the thing that grows, and
|
|
125
|
+
* re-sending a whole snapshot because one team's tick moved is the cost
|
|
126
|
+
* §12.4.2 warns about.
|
|
127
|
+
*/
|
|
128
|
+
private lastSent;
|
|
129
|
+
/**
|
|
130
|
+
* The last value of each state message, in the order the types were first
|
|
131
|
+
* sent, replayed whole on every reconnect (§12.7 step 3).
|
|
132
|
+
*
|
|
133
|
+
* A reloading frame has seen nothing, and the embedder has no reason to
|
|
134
|
+
* push again: its state has not changed, only the frame under it. Without
|
|
135
|
+
* this the guest re-handshakes into silence and blocks its first paint for
|
|
136
|
+
* good, which is what a surface fixed after a crash used to do (#564).
|
|
137
|
+
*
|
|
138
|
+
* Only the state slices are kept. A one-shot the host sent once, such as a
|
|
139
|
+
* validator's refusal or an asset-auth request, belongs to the moment it
|
|
140
|
+
* happened, and replaying it would show the new frame a rejection of a
|
|
141
|
+
* submission it never made.
|
|
142
|
+
*/
|
|
143
|
+
private sticky;
|
|
144
|
+
/** One-shot messages queued until the handshake completes, flushed in order. */
|
|
145
|
+
private outbound;
|
|
146
|
+
/** In-flight host → guest requests, keyed by `requestId`. */
|
|
147
|
+
private pending;
|
|
148
|
+
private requestCounter;
|
|
149
|
+
constructor(options: HostChannelOptions);
|
|
150
|
+
/** True once the guest has handshaked and the port is open. */
|
|
151
|
+
get connected(): boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Push one message, queueing it until the handshake completes.
|
|
154
|
+
*
|
|
155
|
+
* Queueing rather than dropping is what lets an embedder build the initial
|
|
156
|
+
* batch as soon as it mounts the frame, without racing the guest's `ready`.
|
|
157
|
+
*/
|
|
158
|
+
send(message: HostMessage): void;
|
|
159
|
+
/**
|
|
160
|
+
* Push a state slice: delivered now if the guest is listening, and kept so
|
|
161
|
+
* a frame that reloads is told the same thing again.
|
|
162
|
+
*/
|
|
163
|
+
private sendState;
|
|
164
|
+
/**
|
|
165
|
+
* Push a message only when its payload differs from the last one sent of
|
|
166
|
+
* that type. Returns true when it went out.
|
|
167
|
+
*/
|
|
168
|
+
sendIfChanged(message: HostMessage): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Send the initial batch (§12.6), verifying it carries every message the
|
|
171
|
+
* surface blocks its first paint on.
|
|
172
|
+
*
|
|
173
|
+
* The guest enforces the same list for itself by simply not painting. That
|
|
174
|
+
* failure mode is a frame stuck on its loading state with nothing to say
|
|
175
|
+
* why, which is a bad afternoon; failing here names the missing message.
|
|
176
|
+
*/
|
|
177
|
+
sendInitialBatch(messages: readonly HostMessage[]): void;
|
|
178
|
+
/**
|
|
179
|
+
* Send a request the guest answers, resolving when it does.
|
|
180
|
+
*
|
|
181
|
+
* Only `refreshAssetAuth` uses this today (§16.4): the host hands the frame
|
|
182
|
+
* a token and the frame reports back whether redeeming it worked.
|
|
183
|
+
*/
|
|
184
|
+
request(message: {
|
|
185
|
+
type: string;
|
|
186
|
+
} & Record<string, unknown>, timeoutMs?: number): Promise<void>;
|
|
187
|
+
dispose(): void;
|
|
188
|
+
private listenForReady;
|
|
189
|
+
/**
|
|
190
|
+
* Bound every document the frame loads, not only the first.
|
|
191
|
+
*
|
|
192
|
+
* A frame that connected and then replaced its own document leaves the
|
|
193
|
+
* host holding a port nobody answers, so `connected` alone proves nothing.
|
|
194
|
+
* A document's `ready` may land either side of its `load`, so a live port
|
|
195
|
+
* is pinged as well: a `pong` shows the document that handshaked is still
|
|
196
|
+
* the one in the frame, and a fresh `ready` shows a reload.
|
|
197
|
+
*/
|
|
198
|
+
private listenForLoads;
|
|
199
|
+
private armHandshakeTimer;
|
|
200
|
+
/**
|
|
201
|
+
* Open a fresh port and hand the guest its end.
|
|
202
|
+
*
|
|
203
|
+
* Runs on every `ready`, not only the first: a reload or HMR re-announces,
|
|
204
|
+
* and §12.7 requires the old port closed, a new channel created, and the
|
|
205
|
+
* whole initial batch re-sent rather than the live port re-identified.
|
|
206
|
+
*/
|
|
207
|
+
private connect;
|
|
208
|
+
private closePort;
|
|
209
|
+
private clearHandshakeTimer;
|
|
210
|
+
private rejectPending;
|
|
211
|
+
private receive;
|
|
212
|
+
/**
|
|
213
|
+
* Run one guest request against the adapter and frame the answer.
|
|
214
|
+
*
|
|
215
|
+
* A throwing adapter becomes an `ok: false` response on the same
|
|
216
|
+
* `requestId`, never an unhandled rejection and never a dropped request:
|
|
217
|
+
* the guest's promise has to settle either way or the surface waits forever.
|
|
218
|
+
*/
|
|
219
|
+
private answer;
|
|
220
|
+
/** Route one request to its adapter method and shape the success payload. */
|
|
221
|
+
private dispatch;
|
|
222
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host half of the host ↔ iframe protocol (§12).
|
|
3
|
+
*
|
|
4
|
+
* Reachable as `@seriousgaming/sdk-tools/host`.
|
|
5
|
+
*
|
|
6
|
+
* Platform-facing. Game authors never write a host and never import from
|
|
7
|
+
* here; this exists so the dev server and the Serious Gaming platform share one
|
|
8
|
+
* implementation of §12 instead of transcribing the same 900 lines of prose
|
|
9
|
+
* twice. It carries the channel, the surface table, the adapter an embedder
|
|
10
|
+
* supplies, and the host's definition of the wire messages. The guest half is
|
|
11
|
+
* the UI wrappers in `@seriousgaming/sdk/ui`. The shapes
|
|
12
|
+
* may change in a minor release.
|
|
13
|
+
*/
|
|
14
|
+
export { HostChannel } from './host-channel.js';
|
|
15
|
+
export type { FrameLike, GuestMessage, HostChannelOptions, HostMessage, TeardownReason, WindowLike, } from './host-channel.js';
|
|
16
|
+
export type { HostAdapter, RequestOrigin } from './adapter.js';
|
|
17
|
+
export { isPlayerSurface, requiredMessagesFor, SURFACES, type SurfaceDescriptor, type SurfaceKind, } from './surfaces.js';
|
|
18
|
+
export { UI_PROTOCOL_VERSION } from './protocol.js';
|
|
19
|
+
export type { AssetUrls, HostSettingsEditorPortMessage, HostPortMessage, HostPresentationPortMessage, HostSessionPortMessage, HostWindowMessage, IFrameSettingsEditorPortMessage, IFrameMessage, IFramePortMessage, IFramePresentationPortMessage, IFrameSessionPortMessage, } from './protocol.js';
|
|
20
|
+
export { contrastTextFor, THEME_COLOR_ROLES, withContrastText, type ModeColoursInput, type ThemeInput, } from './theme.js';
|