@metamask/client-mcp-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/LICENSE +6 -0
- package/LICENSE.APACHE2 +201 -0
- package/LICENSE.MIT +21 -0
- package/README.md +1459 -0
- package/dist/capabilities/context.cjs +34 -0
- package/dist/capabilities/context.cjs.map +1 -0
- package/dist/capabilities/context.d.cts +101 -0
- package/dist/capabilities/context.d.cts.map +1 -0
- package/dist/capabilities/context.d.mts +101 -0
- package/dist/capabilities/context.d.mts.map +1 -0
- package/dist/capabilities/context.mjs +29 -0
- package/dist/capabilities/context.mjs.map +1 -0
- package/dist/capabilities/index.cjs +18 -0
- package/dist/capabilities/index.cjs.map +1 -0
- package/dist/capabilities/index.d.cts +3 -0
- package/dist/capabilities/index.d.cts.map +1 -0
- package/dist/capabilities/index.d.mts +3 -0
- package/dist/capabilities/index.d.mts.map +1 -0
- package/dist/capabilities/index.mjs +2 -0
- package/dist/capabilities/index.mjs.map +1 -0
- package/dist/capabilities/types.cjs +3 -0
- package/dist/capabilities/types.cjs.map +1 -0
- package/dist/capabilities/types.d.cts +152 -0
- package/dist/capabilities/types.d.cts.map +1 -0
- package/dist/capabilities/types.d.mts +152 -0
- package/dist/capabilities/types.d.mts.map +1 -0
- package/dist/capabilities/types.mjs +2 -0
- package/dist/capabilities/types.mjs.map +1 -0
- package/dist/index.cjs +59 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +33 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +33 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +43 -0
- package/dist/index.mjs.map +1 -0
- package/dist/launcher/console-error-buffer.cjs +72 -0
- package/dist/launcher/console-error-buffer.cjs.map +1 -0
- package/dist/launcher/console-error-buffer.d.cts +43 -0
- package/dist/launcher/console-error-buffer.d.cts.map +1 -0
- package/dist/launcher/console-error-buffer.d.mts +43 -0
- package/dist/launcher/console-error-buffer.d.mts.map +1 -0
- package/dist/launcher/console-error-buffer.mjs +68 -0
- package/dist/launcher/console-error-buffer.mjs.map +1 -0
- package/dist/launcher/extension-id-resolver.cjs +177 -0
- package/dist/launcher/extension-id-resolver.cjs.map +1 -0
- package/dist/launcher/extension-id-resolver.d.cts +32 -0
- package/dist/launcher/extension-id-resolver.d.cts.map +1 -0
- package/dist/launcher/extension-id-resolver.d.mts +32 -0
- package/dist/launcher/extension-id-resolver.d.mts.map +1 -0
- package/dist/launcher/extension-id-resolver.mjs +173 -0
- package/dist/launcher/extension-id-resolver.mjs.map +1 -0
- package/dist/launcher/extension-readiness.cjs +50 -0
- package/dist/launcher/extension-readiness.cjs.map +1 -0
- package/dist/launcher/extension-readiness.d.cts +37 -0
- package/dist/launcher/extension-readiness.d.cts.map +1 -0
- package/dist/launcher/extension-readiness.d.mts +37 -0
- package/dist/launcher/extension-readiness.d.mts.map +1 -0
- package/dist/launcher/extension-readiness.mjs +43 -0
- package/dist/launcher/extension-readiness.mjs.map +1 -0
- package/dist/launcher/index.cjs +21 -0
- package/dist/launcher/index.cjs.map +1 -0
- package/dist/launcher/index.d.cts +5 -0
- package/dist/launcher/index.d.cts.map +1 -0
- package/dist/launcher/index.d.mts +5 -0
- package/dist/launcher/index.d.mts.map +1 -0
- package/dist/launcher/index.mjs +5 -0
- package/dist/launcher/index.mjs.map +1 -0
- package/dist/launcher/retry.cjs +35 -0
- package/dist/launcher/retry.cjs.map +1 -0
- package/dist/launcher/retry.d.cts +20 -0
- package/dist/launcher/retry.d.cts.map +1 -0
- package/dist/launcher/retry.d.mts +20 -0
- package/dist/launcher/retry.d.mts.map +1 -0
- package/dist/launcher/retry.mjs +31 -0
- package/dist/launcher/retry.mjs.map +1 -0
- package/dist/mcp-server/constants.cjs +22 -0
- package/dist/mcp-server/constants.cjs.map +1 -0
- package/dist/mcp-server/constants.d.cts +13 -0
- package/dist/mcp-server/constants.d.cts.map +1 -0
- package/dist/mcp-server/constants.d.mts +13 -0
- package/dist/mcp-server/constants.d.mts.map +1 -0
- package/dist/mcp-server/constants.mjs +19 -0
- package/dist/mcp-server/constants.mjs.map +1 -0
- package/dist/mcp-server/discovery.cjs +299 -0
- package/dist/mcp-server/discovery.cjs.map +1 -0
- package/dist/mcp-server/discovery.d.cts +56 -0
- package/dist/mcp-server/discovery.d.cts.map +1 -0
- package/dist/mcp-server/discovery.d.mts +56 -0
- package/dist/mcp-server/discovery.d.mts.map +1 -0
- package/dist/mcp-server/discovery.mjs +292 -0
- package/dist/mcp-server/discovery.mjs.map +1 -0
- package/dist/mcp-server/knowledge-store.cjs +1196 -0
- package/dist/mcp-server/knowledge-store.cjs.map +1 -0
- package/dist/mcp-server/knowledge-store.d.cts +249 -0
- package/dist/mcp-server/knowledge-store.d.cts.map +1 -0
- package/dist/mcp-server/knowledge-store.d.mts +249 -0
- package/dist/mcp-server/knowledge-store.d.mts.map +1 -0
- package/dist/mcp-server/knowledge-store.mjs +1154 -0
- package/dist/mcp-server/knowledge-store.mjs.map +1 -0
- package/dist/mcp-server/schemas.cjs +433 -0
- package/dist/mcp-server/schemas.cjs.map +1 -0
- package/dist/mcp-server/schemas.d.cts +557 -0
- package/dist/mcp-server/schemas.d.cts.map +1 -0
- package/dist/mcp-server/schemas.d.mts +557 -0
- package/dist/mcp-server/schemas.d.mts.map +1 -0
- package/dist/mcp-server/schemas.mjs +430 -0
- package/dist/mcp-server/schemas.mjs.map +1 -0
- package/dist/mcp-server/server.cjs +161 -0
- package/dist/mcp-server/server.cjs.map +1 -0
- package/dist/mcp-server/server.d.cts +24 -0
- package/dist/mcp-server/server.d.cts.map +1 -0
- package/dist/mcp-server/server.d.mts +24 -0
- package/dist/mcp-server/server.d.mts.map +1 -0
- package/dist/mcp-server/server.mjs +158 -0
- package/dist/mcp-server/server.mjs.map +1 -0
- package/dist/mcp-server/session-manager.cjs +53 -0
- package/dist/mcp-server/session-manager.cjs.map +1 -0
- package/dist/mcp-server/session-manager.d.cts +240 -0
- package/dist/mcp-server/session-manager.d.cts.map +1 -0
- package/dist/mcp-server/session-manager.d.mts +240 -0
- package/dist/mcp-server/session-manager.d.mts.map +1 -0
- package/dist/mcp-server/session-manager.mjs +48 -0
- package/dist/mcp-server/session-manager.mjs.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.cjs +10 -0
- package/dist/mcp-server/test-utils/flush-promises.cjs.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.d.cts +2 -0
- package/dist/mcp-server/test-utils/flush-promises.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.d.mts +2 -0
- package/dist/mcp-server/test-utils/flush-promises.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/flush-promises.mjs +7 -0
- package/dist/mcp-server/test-utils/flush-promises.mjs.map +1 -0
- package/dist/mcp-server/test-utils/index.cjs +13 -0
- package/dist/mcp-server/test-utils/index.cjs.map +1 -0
- package/dist/mcp-server/test-utils/index.d.cts +4 -0
- package/dist/mcp-server/test-utils/index.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/index.d.mts +4 -0
- package/dist/mcp-server/test-utils/index.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/index.mjs +4 -0
- package/dist/mcp-server/test-utils/index.mjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.cjs +129 -0
- package/dist/mcp-server/test-utils/mock-factories.cjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.d.cts +89 -0
- package/dist/mcp-server/test-utils/mock-factories.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.d.mts +89 -0
- package/dist/mcp-server/test-utils/mock-factories.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/mock-factories.mjs +125 -0
- package/dist/mcp-server/test-utils/mock-factories.mjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.cjs +205 -0
- package/dist/mcp-server/test-utils/mock-playwright.cjs.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.cts +69 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.cts.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.mts +69 -0
- package/dist/mcp-server/test-utils/mock-playwright.d.mts.map +1 -0
- package/dist/mcp-server/test-utils/mock-playwright.mjs +200 -0
- package/dist/mcp-server/test-utils/mock-playwright.mjs.map +1 -0
- package/dist/mcp-server/tokenization.cjs +117 -0
- package/dist/mcp-server/tokenization.cjs.map +1 -0
- package/dist/mcp-server/tokenization.d.cts +22 -0
- package/dist/mcp-server/tokenization.d.cts.map +1 -0
- package/dist/mcp-server/tokenization.d.mts +22 -0
- package/dist/mcp-server/tokenization.d.mts.map +1 -0
- package/dist/mcp-server/tokenization.mjs +112 -0
- package/dist/mcp-server/tokenization.mjs.map +1 -0
- package/dist/mcp-server/tools/batch.cjs +199 -0
- package/dist/mcp-server/tools/batch.cjs.map +1 -0
- package/dist/mcp-server/tools/batch.d.cts +81 -0
- package/dist/mcp-server/tools/batch.d.cts.map +1 -0
- package/dist/mcp-server/tools/batch.d.mts +81 -0
- package/dist/mcp-server/tools/batch.d.mts.map +1 -0
- package/dist/mcp-server/tools/batch.mjs +191 -0
- package/dist/mcp-server/tools/batch.mjs.map +1 -0
- package/dist/mcp-server/tools/build.cjs +47 -0
- package/dist/mcp-server/tools/build.cjs.map +1 -0
- package/dist/mcp-server/tools/build.d.cts +22 -0
- package/dist/mcp-server/tools/build.d.cts.map +1 -0
- package/dist/mcp-server/tools/build.d.mts +22 -0
- package/dist/mcp-server/tools/build.d.mts.map +1 -0
- package/dist/mcp-server/tools/build.mjs +44 -0
- package/dist/mcp-server/tools/build.mjs.map +1 -0
- package/dist/mcp-server/tools/cleanup.cjs +20 -0
- package/dist/mcp-server/tools/cleanup.cjs.map +1 -0
- package/dist/mcp-server/tools/cleanup.d.cts +10 -0
- package/dist/mcp-server/tools/cleanup.d.cts.map +1 -0
- package/dist/mcp-server/tools/cleanup.d.mts +10 -0
- package/dist/mcp-server/tools/cleanup.d.mts.map +1 -0
- package/dist/mcp-server/tools/cleanup.mjs +17 -0
- package/dist/mcp-server/tools/cleanup.mjs.map +1 -0
- package/dist/mcp-server/tools/clipboard.cjs +100 -0
- package/dist/mcp-server/tools/clipboard.cjs.map +1 -0
- package/dist/mcp-server/tools/clipboard.d.cts +16 -0
- package/dist/mcp-server/tools/clipboard.d.cts.map +1 -0
- package/dist/mcp-server/tools/clipboard.d.mts +16 -0
- package/dist/mcp-server/tools/clipboard.d.mts.map +1 -0
- package/dist/mcp-server/tools/clipboard.mjs +97 -0
- package/dist/mcp-server/tools/clipboard.mjs.map +1 -0
- package/dist/mcp-server/tools/context.cjs +66 -0
- package/dist/mcp-server/tools/context.cjs.map +1 -0
- package/dist/mcp-server/tools/context.d.cts +35 -0
- package/dist/mcp-server/tools/context.d.cts.map +1 -0
- package/dist/mcp-server/tools/context.d.mts +35 -0
- package/dist/mcp-server/tools/context.d.mts.map +1 -0
- package/dist/mcp-server/tools/context.mjs +62 -0
- package/dist/mcp-server/tools/context.mjs.map +1 -0
- package/dist/mcp-server/tools/definitions.cjs +463 -0
- package/dist/mcp-server/tools/definitions.cjs.map +1 -0
- package/dist/mcp-server/tools/definitions.d.cts +97 -0
- package/dist/mcp-server/tools/definitions.d.cts.map +1 -0
- package/dist/mcp-server/tools/definitions.d.mts +97 -0
- package/dist/mcp-server/tools/definitions.d.mts.map +1 -0
- package/dist/mcp-server/tools/definitions.mjs +451 -0
- package/dist/mcp-server/tools/definitions.mjs.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.cjs +162 -0
- package/dist/mcp-server/tools/discovery-tools.cjs.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.d.cts +26 -0
- package/dist/mcp-server/tools/discovery-tools.d.cts.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.d.mts +26 -0
- package/dist/mcp-server/tools/discovery-tools.d.mts.map +1 -0
- package/dist/mcp-server/tools/discovery-tools.mjs +157 -0
- package/dist/mcp-server/tools/discovery-tools.mjs.map +1 -0
- package/dist/mcp-server/tools/error-classification.cjs +296 -0
- package/dist/mcp-server/tools/error-classification.cjs.map +1 -0
- package/dist/mcp-server/tools/error-classification.d.cts +135 -0
- package/dist/mcp-server/tools/error-classification.d.cts.map +1 -0
- package/dist/mcp-server/tools/error-classification.d.mts +135 -0
- package/dist/mcp-server/tools/error-classification.d.mts.map +1 -0
- package/dist/mcp-server/tools/error-classification.mjs +281 -0
- package/dist/mcp-server/tools/error-classification.mjs.map +1 -0
- package/dist/mcp-server/tools/helpers.cjs +149 -0
- package/dist/mcp-server/tools/helpers.cjs.map +1 -0
- package/dist/mcp-server/tools/helpers.d.cts +149 -0
- package/dist/mcp-server/tools/helpers.d.cts.map +1 -0
- package/dist/mcp-server/tools/helpers.d.mts +149 -0
- package/dist/mcp-server/tools/helpers.d.mts.map +1 -0
- package/dist/mcp-server/tools/helpers.mjs +141 -0
- package/dist/mcp-server/tools/helpers.mjs.map +1 -0
- package/dist/mcp-server/tools/index.cjs +27 -0
- package/dist/mcp-server/tools/index.cjs.map +1 -0
- package/dist/mcp-server/tools/index.d.cts +11 -0
- package/dist/mcp-server/tools/index.d.cts.map +1 -0
- package/dist/mcp-server/tools/index.d.mts +11 -0
- package/dist/mcp-server/tools/index.d.mts.map +1 -0
- package/dist/mcp-server/tools/index.mjs +11 -0
- package/dist/mcp-server/tools/index.mjs.map +1 -0
- package/dist/mcp-server/tools/interaction.cjs +190 -0
- package/dist/mcp-server/tools/interaction.cjs.map +1 -0
- package/dist/mcp-server/tools/interaction.d.cts +26 -0
- package/dist/mcp-server/tools/interaction.d.cts.map +1 -0
- package/dist/mcp-server/tools/interaction.d.mts +26 -0
- package/dist/mcp-server/tools/interaction.d.mts.map +1 -0
- package/dist/mcp-server/tools/interaction.mjs +185 -0
- package/dist/mcp-server/tools/interaction.mjs.map +1 -0
- package/dist/mcp-server/tools/knowledge.cjs +120 -0
- package/dist/mcp-server/tools/knowledge.cjs.map +1 -0
- package/dist/mcp-server/tools/knowledge.d.cts +34 -0
- package/dist/mcp-server/tools/knowledge.d.cts.map +1 -0
- package/dist/mcp-server/tools/knowledge.d.mts +34 -0
- package/dist/mcp-server/tools/knowledge.d.mts.map +1 -0
- package/dist/mcp-server/tools/knowledge.mjs +114 -0
- package/dist/mcp-server/tools/knowledge.mjs.map +1 -0
- package/dist/mcp-server/tools/launch.cjs +51 -0
- package/dist/mcp-server/tools/launch.cjs.map +1 -0
- package/dist/mcp-server/tools/launch.d.cts +10 -0
- package/dist/mcp-server/tools/launch.d.cts.map +1 -0
- package/dist/mcp-server/tools/launch.d.mts +10 -0
- package/dist/mcp-server/tools/launch.d.mts.map +1 -0
- package/dist/mcp-server/tools/launch.mjs +48 -0
- package/dist/mcp-server/tools/launch.mjs.map +1 -0
- package/dist/mcp-server/tools/navigation.cjs +242 -0
- package/dist/mcp-server/tools/navigation.cjs.map +1 -0
- package/dist/mcp-server/tools/navigation.d.cts +34 -0
- package/dist/mcp-server/tools/navigation.d.cts.map +1 -0
- package/dist/mcp-server/tools/navigation.d.mts +34 -0
- package/dist/mcp-server/tools/navigation.d.mts.map +1 -0
- package/dist/mcp-server/tools/navigation.mjs +236 -0
- package/dist/mcp-server/tools/navigation.mjs.map +1 -0
- package/dist/mcp-server/tools/registry.cjs +10 -0
- package/dist/mcp-server/tools/registry.cjs.map +1 -0
- package/dist/mcp-server/tools/registry.d.cts +4 -0
- package/dist/mcp-server/tools/registry.d.cts.map +1 -0
- package/dist/mcp-server/tools/registry.d.mts +4 -0
- package/dist/mcp-server/tools/registry.d.mts.map +1 -0
- package/dist/mcp-server/tools/registry.mjs +4 -0
- package/dist/mcp-server/tools/registry.mjs.map +1 -0
- package/dist/mcp-server/tools/run-tool.cjs +140 -0
- package/dist/mcp-server/tools/run-tool.cjs.map +1 -0
- package/dist/mcp-server/tools/run-tool.d.cts +39 -0
- package/dist/mcp-server/tools/run-tool.d.cts.map +1 -0
- package/dist/mcp-server/tools/run-tool.d.mts +39 -0
- package/dist/mcp-server/tools/run-tool.d.mts.map +1 -0
- package/dist/mcp-server/tools/run-tool.mjs +137 -0
- package/dist/mcp-server/tools/run-tool.mjs.map +1 -0
- package/dist/mcp-server/tools/screenshot.cjs +55 -0
- package/dist/mcp-server/tools/screenshot.cjs.map +1 -0
- package/dist/mcp-server/tools/screenshot.d.cts +10 -0
- package/dist/mcp-server/tools/screenshot.d.cts.map +1 -0
- package/dist/mcp-server/tools/screenshot.d.mts +10 -0
- package/dist/mcp-server/tools/screenshot.d.mts.map +1 -0
- package/dist/mcp-server/tools/screenshot.mjs +52 -0
- package/dist/mcp-server/tools/screenshot.mjs.map +1 -0
- package/dist/mcp-server/tools/seeding.cjs +214 -0
- package/dist/mcp-server/tools/seeding.cjs.map +1 -0
- package/dist/mcp-server/tools/seeding.d.cts +38 -0
- package/dist/mcp-server/tools/seeding.d.cts.map +1 -0
- package/dist/mcp-server/tools/seeding.d.mts +38 -0
- package/dist/mcp-server/tools/seeding.d.mts.map +1 -0
- package/dist/mcp-server/tools/seeding.mjs +208 -0
- package/dist/mcp-server/tools/seeding.mjs.map +1 -0
- package/dist/mcp-server/tools/state.cjs +69 -0
- package/dist/mcp-server/tools/state.cjs.map +1 -0
- package/dist/mcp-server/tools/state.d.cts +19 -0
- package/dist/mcp-server/tools/state.d.cts.map +1 -0
- package/dist/mcp-server/tools/state.d.mts +19 -0
- package/dist/mcp-server/tools/state.d.mts.map +1 -0
- package/dist/mcp-server/tools/state.mjs +66 -0
- package/dist/mcp-server/tools/state.mjs.map +1 -0
- package/dist/mcp-server/types/discovery.cjs +24 -0
- package/dist/mcp-server/types/discovery.cjs.map +1 -0
- package/dist/mcp-server/types/discovery.d.cts +30 -0
- package/dist/mcp-server/types/discovery.d.cts.map +1 -0
- package/dist/mcp-server/types/discovery.d.mts +30 -0
- package/dist/mcp-server/types/discovery.d.mts.map +1 -0
- package/dist/mcp-server/types/discovery.mjs +21 -0
- package/dist/mcp-server/types/discovery.mjs.map +1 -0
- package/dist/mcp-server/types/errors.cjs +33 -0
- package/dist/mcp-server/types/errors.cjs.map +1 -0
- package/dist/mcp-server/types/errors.d.cts +31 -0
- package/dist/mcp-server/types/errors.d.cts.map +1 -0
- package/dist/mcp-server/types/errors.d.mts +31 -0
- package/dist/mcp-server/types/errors.d.mts.map +1 -0
- package/dist/mcp-server/types/errors.mjs +30 -0
- package/dist/mcp-server/types/errors.mjs.map +1 -0
- package/dist/mcp-server/types/index.cjs +21 -0
- package/dist/mcp-server/types/index.cjs.map +1 -0
- package/dist/mcp-server/types/index.d.cts +10 -0
- package/dist/mcp-server/types/index.d.cts.map +1 -0
- package/dist/mcp-server/types/index.d.mts +10 -0
- package/dist/mcp-server/types/index.d.mts.map +1 -0
- package/dist/mcp-server/types/index.mjs +5 -0
- package/dist/mcp-server/types/index.mjs.map +1 -0
- package/dist/mcp-server/types/knowledge.cjs +3 -0
- package/dist/mcp-server/types/knowledge.cjs.map +1 -0
- package/dist/mcp-server/types/knowledge.d.cts +116 -0
- package/dist/mcp-server/types/knowledge.d.cts.map +1 -0
- package/dist/mcp-server/types/knowledge.d.mts +116 -0
- package/dist/mcp-server/types/knowledge.d.mts.map +1 -0
- package/dist/mcp-server/types/knowledge.mjs +2 -0
- package/dist/mcp-server/types/knowledge.mjs.map +1 -0
- package/dist/mcp-server/types/responses.cjs +3 -0
- package/dist/mcp-server/types/responses.cjs.map +1 -0
- package/dist/mcp-server/types/responses.d.cts +22 -0
- package/dist/mcp-server/types/responses.d.cts.map +1 -0
- package/dist/mcp-server/types/responses.d.mts +22 -0
- package/dist/mcp-server/types/responses.d.mts.map +1 -0
- package/dist/mcp-server/types/responses.mjs +2 -0
- package/dist/mcp-server/types/responses.mjs.map +1 -0
- package/dist/mcp-server/types/seeding.cjs +34 -0
- package/dist/mcp-server/types/seeding.cjs.map +1 -0
- package/dist/mcp-server/types/seeding.d.cts +40 -0
- package/dist/mcp-server/types/seeding.d.cts.map +1 -0
- package/dist/mcp-server/types/seeding.d.mts +40 -0
- package/dist/mcp-server/types/seeding.d.mts.map +1 -0
- package/dist/mcp-server/types/seeding.mjs +31 -0
- package/dist/mcp-server/types/seeding.mjs.map +1 -0
- package/dist/mcp-server/types/session.cjs +3 -0
- package/dist/mcp-server/types/session.cjs.map +1 -0
- package/dist/mcp-server/types/session.d.cts +11 -0
- package/dist/mcp-server/types/session.d.cts.map +1 -0
- package/dist/mcp-server/types/session.d.mts +11 -0
- package/dist/mcp-server/types/session.d.mts.map +1 -0
- package/dist/mcp-server/types/session.mjs +2 -0
- package/dist/mcp-server/types/session.mjs.map +1 -0
- package/dist/mcp-server/types/step-record.cjs +20 -0
- package/dist/mcp-server/types/step-record.cjs.map +1 -0
- package/dist/mcp-server/types/step-record.d.cts +86 -0
- package/dist/mcp-server/types/step-record.d.cts.map +1 -0
- package/dist/mcp-server/types/step-record.d.mts +86 -0
- package/dist/mcp-server/types/step-record.d.mts.map +1 -0
- package/dist/mcp-server/types/step-record.mjs +17 -0
- package/dist/mcp-server/types/step-record.mjs.map +1 -0
- package/dist/mcp-server/types/tool-inputs.cjs +3 -0
- package/dist/mcp-server/types/tool-inputs.cjs.map +1 -0
- package/dist/mcp-server/types/tool-inputs.d.cts +118 -0
- package/dist/mcp-server/types/tool-inputs.d.cts.map +1 -0
- package/dist/mcp-server/types/tool-inputs.d.mts +118 -0
- package/dist/mcp-server/types/tool-inputs.d.mts.map +1 -0
- package/dist/mcp-server/types/tool-inputs.mjs +2 -0
- package/dist/mcp-server/types/tool-inputs.mjs.map +1 -0
- package/dist/mcp-server/types/tool-outputs.cjs +3 -0
- package/dist/mcp-server/types/tool-outputs.cjs.map +1 -0
- package/dist/mcp-server/types/tool-outputs.d.cts +121 -0
- package/dist/mcp-server/types/tool-outputs.d.cts.map +1 -0
- package/dist/mcp-server/types/tool-outputs.d.mts +121 -0
- package/dist/mcp-server/types/tool-outputs.d.mts.map +1 -0
- package/dist/mcp-server/types/tool-outputs.mjs +2 -0
- package/dist/mcp-server/types/tool-outputs.mjs.map +1 -0
- package/dist/mcp-server/utils/errors.cjs +14 -0
- package/dist/mcp-server/utils/errors.cjs.map +1 -0
- package/dist/mcp-server/utils/errors.d.cts +9 -0
- package/dist/mcp-server/utils/errors.d.cts.map +1 -0
- package/dist/mcp-server/utils/errors.d.mts +9 -0
- package/dist/mcp-server/utils/errors.d.mts.map +1 -0
- package/dist/mcp-server/utils/errors.mjs +11 -0
- package/dist/mcp-server/utils/errors.mjs.map +1 -0
- package/dist/mcp-server/utils/index.cjs +22 -0
- package/dist/mcp-server/utils/index.cjs.map +1 -0
- package/dist/mcp-server/utils/index.d.cts +8 -0
- package/dist/mcp-server/utils/index.d.cts.map +1 -0
- package/dist/mcp-server/utils/index.d.mts +8 -0
- package/dist/mcp-server/utils/index.d.mts.map +1 -0
- package/dist/mcp-server/utils/index.mjs +8 -0
- package/dist/mcp-server/utils/index.mjs.map +1 -0
- package/dist/mcp-server/utils/logger.cjs +25 -0
- package/dist/mcp-server/utils/logger.cjs.map +1 -0
- package/dist/mcp-server/utils/logger.d.cts +9 -0
- package/dist/mcp-server/utils/logger.d.cts.map +1 -0
- package/dist/mcp-server/utils/logger.d.mts +9 -0
- package/dist/mcp-server/utils/logger.d.mts.map +1 -0
- package/dist/mcp-server/utils/logger.mjs +22 -0
- package/dist/mcp-server/utils/logger.mjs.map +1 -0
- package/dist/mcp-server/utils/redaction.cjs +24 -0
- package/dist/mcp-server/utils/redaction.cjs.map +1 -0
- package/dist/mcp-server/utils/redaction.d.cts +9 -0
- package/dist/mcp-server/utils/redaction.d.cts.map +1 -0
- package/dist/mcp-server/utils/redaction.d.mts +9 -0
- package/dist/mcp-server/utils/redaction.d.mts.map +1 -0
- package/dist/mcp-server/utils/redaction.mjs +20 -0
- package/dist/mcp-server/utils/redaction.mjs.map +1 -0
- package/dist/mcp-server/utils/response.cjs +49 -0
- package/dist/mcp-server/utils/response.cjs.map +1 -0
- package/dist/mcp-server/utils/response.d.cts +22 -0
- package/dist/mcp-server/utils/response.d.cts.map +1 -0
- package/dist/mcp-server/utils/response.d.mts +22 -0
- package/dist/mcp-server/utils/response.d.mts.map +1 -0
- package/dist/mcp-server/utils/response.mjs +45 -0
- package/dist/mcp-server/utils/response.mjs.map +1 -0
- package/dist/mcp-server/utils/targets.cjs +32 -0
- package/dist/mcp-server/utils/targets.cjs.map +1 -0
- package/dist/mcp-server/utils/targets.d.cts +25 -0
- package/dist/mcp-server/utils/targets.d.cts.map +1 -0
- package/dist/mcp-server/utils/targets.d.mts +25 -0
- package/dist/mcp-server/utils/targets.d.mts.map +1 -0
- package/dist/mcp-server/utils/targets.mjs +29 -0
- package/dist/mcp-server/utils/targets.mjs.map +1 -0
- package/dist/mcp-server/utils/time.cjs +39 -0
- package/dist/mcp-server/utils/time.cjs.map +1 -0
- package/dist/mcp-server/utils/time.d.cts +15 -0
- package/dist/mcp-server/utils/time.d.cts.map +1 -0
- package/dist/mcp-server/utils/time.d.mts +15 -0
- package/dist/mcp-server/utils/time.d.mts.map +1 -0
- package/dist/mcp-server/utils/time.mjs +35 -0
- package/dist/mcp-server/utils/time.mjs.map +1 -0
- package/dist/mcp-server/utils/type-guards.cjs +42 -0
- package/dist/mcp-server/utils/type-guards.cjs.map +1 -0
- package/dist/mcp-server/utils/type-guards.d.cts +30 -0
- package/dist/mcp-server/utils/type-guards.d.cts.map +1 -0
- package/dist/mcp-server/utils/type-guards.d.mts +30 -0
- package/dist/mcp-server/utils/type-guards.d.mts.map +1 -0
- package/dist/mcp-server/utils/type-guards.mjs +38 -0
- package/dist/mcp-server/utils/type-guards.mjs.map +1 -0
- package/dist/utils/fetch.cjs +36 -0
- package/dist/utils/fetch.cjs.map +1 -0
- package/dist/utils/fetch.d.cts +20 -0
- package/dist/utils/fetch.d.cts.map +1 -0
- package/dist/utils/fetch.d.mts +20 -0
- package/dist/utils/fetch.d.mts.map +1 -0
- package/dist/utils/fetch.mjs +33 -0
- package/dist/utils/fetch.mjs.map +1 -0
- package/dist/utils/index.cjs +11 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +6 -0
- package/dist/utils/index.d.cts.map +1 -0
- package/dist/utils/index.d.mts +6 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +6 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/service-readiness.cjs +75 -0
- package/dist/utils/service-readiness.cjs.map +1 -0
- package/dist/utils/service-readiness.d.cts +61 -0
- package/dist/utils/service-readiness.d.cts.map +1 -0
- package/dist/utils/service-readiness.d.mts +61 -0
- package/dist/utils/service-readiness.d.mts.map +1 -0
- package/dist/utils/service-readiness.mjs +72 -0
- package/dist/utils/service-readiness.mjs.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Session Manager Interface for Browser Extension MCP Servers.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the interface that concrete session managers must implement.
|
|
5
|
+
* The interface abstracts browser session management, page tracking, and extension state.
|
|
6
|
+
*
|
|
7
|
+
* Extension-specific implementations (e.g., MetaMaskSessionManager) should implement
|
|
8
|
+
* this interface and be injected into the core tool handlers.
|
|
9
|
+
*/
|
|
10
|
+
import type { Page, BrowserContext } from "@playwright/test";
|
|
11
|
+
import type { TabRole, SessionState, SessionMetadata } from "./types/index.mjs";
|
|
12
|
+
import type { EnvironmentMode } from "../capabilities/context.mjs";
|
|
13
|
+
import type { ExtensionState, BuildCapability, FixtureCapability, ChainCapability, ContractSeedingCapability, StateSnapshotCapability, ScreenshotResult } from "../capabilities/types.mjs";
|
|
14
|
+
/**
|
|
15
|
+
* Represents a tracked browser page with its role and URL.
|
|
16
|
+
*/
|
|
17
|
+
export type TrackedPage = {
|
|
18
|
+
role: TabRole;
|
|
19
|
+
url: string;
|
|
20
|
+
page: Page;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Configuration for launching a new browser session.
|
|
24
|
+
*/
|
|
25
|
+
export type SessionLaunchInput = {
|
|
26
|
+
/** State initialization mode */
|
|
27
|
+
stateMode?: 'default' | 'onboarding' | 'custom';
|
|
28
|
+
/** Name of a preset fixture to use when stateMode is 'custom' */
|
|
29
|
+
fixturePreset?: string;
|
|
30
|
+
/** Custom fixture data when stateMode is 'custom' */
|
|
31
|
+
fixture?: Record<string, unknown>;
|
|
32
|
+
/** Goal description for this session (used in knowledge store) */
|
|
33
|
+
goal?: string;
|
|
34
|
+
/** Flow tags for categorizing this session */
|
|
35
|
+
flowTags?: string[];
|
|
36
|
+
/** Free-form tags for ad-hoc filtering */
|
|
37
|
+
tags?: string[];
|
|
38
|
+
/** Path to extension directory */
|
|
39
|
+
extensionPath?: string;
|
|
40
|
+
/** Whether to auto-build extension if not found */
|
|
41
|
+
autoBuild?: boolean;
|
|
42
|
+
/** Slow down actions for debugging (ms) */
|
|
43
|
+
slowMo?: number;
|
|
44
|
+
/** Port configuration */
|
|
45
|
+
ports?: {
|
|
46
|
+
anvil?: number;
|
|
47
|
+
fixtureServer?: number;
|
|
48
|
+
};
|
|
49
|
+
/** Smart contracts to deploy on launch */
|
|
50
|
+
seedContracts?: string[];
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Result of launching a new session.
|
|
54
|
+
*/
|
|
55
|
+
export type SessionLaunchResult = {
|
|
56
|
+
sessionId: string;
|
|
57
|
+
extensionId: string;
|
|
58
|
+
state: ExtensionState;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Screenshot options.
|
|
62
|
+
*/
|
|
63
|
+
export type SessionScreenshotOptions = {
|
|
64
|
+
name: string;
|
|
65
|
+
fullPage?: boolean;
|
|
66
|
+
selector?: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Interface for session manager implementations.
|
|
70
|
+
*
|
|
71
|
+
* This interface defines the contract that extension-specific session managers
|
|
72
|
+
* must fulfill. Tool handlers depend on this interface, allowing them to work
|
|
73
|
+
* with any compliant session manager implementation.
|
|
74
|
+
*/
|
|
75
|
+
export type ISessionManager = {
|
|
76
|
+
/**
|
|
77
|
+
* Check if there is an active session.
|
|
78
|
+
*/
|
|
79
|
+
hasActiveSession(): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Get the current session ID, or undefined if no session.
|
|
82
|
+
*/
|
|
83
|
+
getSessionId(): string | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Get the current session state.
|
|
86
|
+
*/
|
|
87
|
+
getSessionState(): SessionState | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Get the current session metadata.
|
|
90
|
+
*/
|
|
91
|
+
getSessionMetadata(): SessionMetadata | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* Launch a new browser session.
|
|
94
|
+
*
|
|
95
|
+
* @throws If a session is already active
|
|
96
|
+
*/
|
|
97
|
+
launch(input: SessionLaunchInput): Promise<SessionLaunchResult>;
|
|
98
|
+
/**
|
|
99
|
+
* Clean up the current session (browser, services, etc.).
|
|
100
|
+
*
|
|
101
|
+
* @returns true if cleanup was performed, false if no session was active
|
|
102
|
+
*/
|
|
103
|
+
cleanup(): Promise<boolean>;
|
|
104
|
+
/**
|
|
105
|
+
* Get the current active page.
|
|
106
|
+
*
|
|
107
|
+
* @throws If no active session
|
|
108
|
+
*/
|
|
109
|
+
getPage(): Page;
|
|
110
|
+
/**
|
|
111
|
+
* Set the active page for subsequent interactions.
|
|
112
|
+
*/
|
|
113
|
+
setActivePage(page: Page): void;
|
|
114
|
+
/**
|
|
115
|
+
* Get all tracked pages in the current session.
|
|
116
|
+
*/
|
|
117
|
+
getTrackedPages(): TrackedPage[];
|
|
118
|
+
/**
|
|
119
|
+
* Classify a page's role based on its URL.
|
|
120
|
+
*/
|
|
121
|
+
classifyPageRole(page: Page, extensionId?: string): TabRole;
|
|
122
|
+
/**
|
|
123
|
+
* Get the browser context.
|
|
124
|
+
*
|
|
125
|
+
* @throws If no active session
|
|
126
|
+
*/
|
|
127
|
+
getContext(): BrowserContext;
|
|
128
|
+
/**
|
|
129
|
+
* Get the current extension state.
|
|
130
|
+
*
|
|
131
|
+
* @throws If no active session
|
|
132
|
+
*/
|
|
133
|
+
getExtensionState(): Promise<ExtensionState>;
|
|
134
|
+
/**
|
|
135
|
+
* Set the accessibility reference map (e1 -> selector).
|
|
136
|
+
*/
|
|
137
|
+
setRefMap(map: Map<string, string>): void;
|
|
138
|
+
/**
|
|
139
|
+
* Get the current accessibility reference map.
|
|
140
|
+
*/
|
|
141
|
+
getRefMap(): Map<string, string>;
|
|
142
|
+
/**
|
|
143
|
+
* Clear the accessibility reference map.
|
|
144
|
+
*/
|
|
145
|
+
clearRefMap(): void;
|
|
146
|
+
/**
|
|
147
|
+
* Resolve an a11y ref (e.g., "e5") to a selector.
|
|
148
|
+
*/
|
|
149
|
+
resolveA11yRef(ref: string): string | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* Navigate to the extension home page.
|
|
152
|
+
*/
|
|
153
|
+
navigateToHome(): Promise<void>;
|
|
154
|
+
/**
|
|
155
|
+
* Navigate to the extension settings page.
|
|
156
|
+
*/
|
|
157
|
+
navigateToSettings(): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Navigate to an external URL (opens new tab).
|
|
160
|
+
*/
|
|
161
|
+
navigateToUrl(url: string): Promise<Page>;
|
|
162
|
+
/**
|
|
163
|
+
* Navigate to the notification page.
|
|
164
|
+
*/
|
|
165
|
+
navigateToNotification(): Promise<Page>;
|
|
166
|
+
/**
|
|
167
|
+
* Wait for a notification page to appear.
|
|
168
|
+
*/
|
|
169
|
+
waitForNotificationPage(timeoutMs: number): Promise<Page>;
|
|
170
|
+
/**
|
|
171
|
+
* Take a screenshot of the current page.
|
|
172
|
+
*/
|
|
173
|
+
screenshot(options: SessionScreenshotOptions): Promise<ScreenshotResult>;
|
|
174
|
+
/**
|
|
175
|
+
* Get the build capability (if available).
|
|
176
|
+
*/
|
|
177
|
+
getBuildCapability(): BuildCapability | undefined;
|
|
178
|
+
/**
|
|
179
|
+
* Get the fixture capability (if available).
|
|
180
|
+
*/
|
|
181
|
+
getFixtureCapability(): FixtureCapability | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* Get the chain capability (if available).
|
|
184
|
+
*/
|
|
185
|
+
getChainCapability(): ChainCapability | undefined;
|
|
186
|
+
/**
|
|
187
|
+
* Get the contract seeding capability (if available).
|
|
188
|
+
*/
|
|
189
|
+
getContractSeedingCapability(): ContractSeedingCapability | undefined;
|
|
190
|
+
/**
|
|
191
|
+
* Get the state snapshot capability (if available).
|
|
192
|
+
*/
|
|
193
|
+
getStateSnapshotCapability(): StateSnapshotCapability | undefined;
|
|
194
|
+
/**
|
|
195
|
+
* Get the current environment mode.
|
|
196
|
+
*
|
|
197
|
+
* @returns 'e2e' for testing environment, 'prod' for production-like environment
|
|
198
|
+
*/
|
|
199
|
+
getEnvironmentMode(): EnvironmentMode;
|
|
200
|
+
/**
|
|
201
|
+
* Set the current context (e2e or prod).
|
|
202
|
+
*
|
|
203
|
+
* @throws Error with code MM_CONTEXT_SWITCH_BLOCKED if session is active
|
|
204
|
+
*/
|
|
205
|
+
setContext(context: 'e2e' | 'prod'): void;
|
|
206
|
+
/**
|
|
207
|
+
* Get current context information.
|
|
208
|
+
*/
|
|
209
|
+
getContextInfo(): {
|
|
210
|
+
currentContext: 'e2e' | 'prod';
|
|
211
|
+
hasActiveSession: boolean;
|
|
212
|
+
sessionId: string | null;
|
|
213
|
+
capabilities: {
|
|
214
|
+
available: string[];
|
|
215
|
+
};
|
|
216
|
+
canSwitchContext: boolean;
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Set the session manager instance.
|
|
221
|
+
*
|
|
222
|
+
* This should be called by extension-specific code during server initialization.
|
|
223
|
+
*
|
|
224
|
+
* @param manager The session manager implementation to inject
|
|
225
|
+
*/
|
|
226
|
+
export declare function setSessionManager(manager: ISessionManager): void;
|
|
227
|
+
/**
|
|
228
|
+
* Get the session manager instance.
|
|
229
|
+
*
|
|
230
|
+
* @throws Error if no session manager has been set
|
|
231
|
+
* @returns The session manager instance
|
|
232
|
+
*/
|
|
233
|
+
export declare function getSessionManager(): ISessionManager;
|
|
234
|
+
/**
|
|
235
|
+
* Check if a session manager has been set.
|
|
236
|
+
*
|
|
237
|
+
* @returns True if a session manager is set, false otherwise
|
|
238
|
+
*/
|
|
239
|
+
export declare function hasSessionManager(): boolean;
|
|
240
|
+
//# sourceMappingURL=session-manager.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.mts","sourceRoot":"","sources":["../../src/mcp-server/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,yBAAyB;AAE7D,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,0BAAgB;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,oCAAmC;AAClE,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,uBAAuB,EACvB,gBAAgB,EACjB,kCAAiC;AAElC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gCAAgC;IAChC,SAAS,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;IAChD,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAK5B;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS,CAAC;IAEnC;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,SAAS,CAAC;IAE5C;;OAEG;IACH,kBAAkB,IAAI,eAAe,GAAG,SAAS,CAAC;IAElD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEhE;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAM5B;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE,CAAC;IAEjC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAE5D;;;;OAIG;IACH,UAAU,IAAI,cAAc,CAAC;IAM7B;;;;OAIG;IACH,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAM7C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAE1C;;OAEG;IACH,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,WAAW,IAAI,IAAI,CAAC;IAEpB;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAMhD;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAM1D;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAMzE;;OAEG;IACH,kBAAkB,IAAI,eAAe,GAAG,SAAS,CAAC;IAElD;;OAEG;IACH,oBAAoB,IAAI,iBAAiB,GAAG,SAAS,CAAC;IAEtD;;OAEG;IACH,kBAAkB,IAAI,eAAe,GAAG,SAAS,CAAC;IAElD;;OAEG;IACH,4BAA4B,IAAI,yBAAyB,GAAG,SAAS,CAAC;IAEtE;;OAEG;IACH,0BAA0B,IAAI,uBAAuB,GAAG,SAAS,CAAC;IAMlE;;;;OAIG;IACH,kBAAkB,IAAI,eAAe,CAAC;IAEtC;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAE1C;;OAEG;IACH,cAAc,IAAI;QAChB,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC;QAC/B,gBAAgB,EAAE,OAAO,CAAC;QAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,YAAY,EAAE;YACZ,SAAS,EAAE,MAAM,EAAE,CAAC;SACrB,CAAC;QACF,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH,CAAC;AAWF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,CAOnD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Session Manager Interface for Browser Extension MCP Servers.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the interface that concrete session managers must implement.
|
|
5
|
+
* The interface abstracts browser session management, page tracking, and extension state.
|
|
6
|
+
*
|
|
7
|
+
* Extension-specific implementations (e.g., MetaMaskSessionManager) should implement
|
|
8
|
+
* this interface and be injected into the core tool handlers.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Session manager instance holder.
|
|
12
|
+
*
|
|
13
|
+
* In the core package, this is undefined by default.
|
|
14
|
+
* Extension implementations should call setSessionManager() to inject
|
|
15
|
+
* their concrete implementation.
|
|
16
|
+
*/
|
|
17
|
+
let _sessionManager;
|
|
18
|
+
/**
|
|
19
|
+
* Set the session manager instance.
|
|
20
|
+
*
|
|
21
|
+
* This should be called by extension-specific code during server initialization.
|
|
22
|
+
*
|
|
23
|
+
* @param manager The session manager implementation to inject
|
|
24
|
+
*/
|
|
25
|
+
export function setSessionManager(manager) {
|
|
26
|
+
_sessionManager = manager;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the session manager instance.
|
|
30
|
+
*
|
|
31
|
+
* @throws Error if no session manager has been set
|
|
32
|
+
* @returns The session manager instance
|
|
33
|
+
*/
|
|
34
|
+
export function getSessionManager() {
|
|
35
|
+
if (!_sessionManager) {
|
|
36
|
+
throw new Error('Session manager not initialized. Call setSessionManager() first.');
|
|
37
|
+
}
|
|
38
|
+
return _sessionManager;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if a session manager has been set.
|
|
42
|
+
*
|
|
43
|
+
* @returns True if a session manager is set, false otherwise
|
|
44
|
+
*/
|
|
45
|
+
export function hasSessionManager() {
|
|
46
|
+
return _sessionManager !== undefined;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=session-manager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.mjs","sourceRoot":"","sources":["../../src/mcp-server/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+RH;;;;;;GAMG;AACH,IAAI,eAA4C,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,eAAe,GAAG,OAAO,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,KAAK,SAAS,CAAC;AACvC,CAAC","sourcesContent":["/**\n * Generic Session Manager Interface for Browser Extension MCP Servers.\n *\n * This module defines the interface that concrete session managers must implement.\n * The interface abstracts browser session management, page tracking, and extension state.\n *\n * Extension-specific implementations (e.g., MetaMaskSessionManager) should implement\n * this interface and be injected into the core tool handlers.\n */\n\nimport type { Page, BrowserContext } from '@playwright/test';\n\nimport type { TabRole, SessionState, SessionMetadata } from './types';\nimport type { EnvironmentMode } from '../capabilities/context.js';\nimport type {\n ExtensionState,\n BuildCapability,\n FixtureCapability,\n ChainCapability,\n ContractSeedingCapability,\n StateSnapshotCapability,\n ScreenshotResult,\n} from '../capabilities/types.js';\n\n/**\n * Represents a tracked browser page with its role and URL.\n */\nexport type TrackedPage = {\n role: TabRole;\n url: string;\n page: Page;\n};\n\n/**\n * Configuration for launching a new browser session.\n */\nexport type SessionLaunchInput = {\n /** State initialization mode */\n stateMode?: 'default' | 'onboarding' | 'custom';\n /** Name of a preset fixture to use when stateMode is 'custom' */\n fixturePreset?: string;\n /** Custom fixture data when stateMode is 'custom' */\n fixture?: Record<string, unknown>;\n /** Goal description for this session (used in knowledge store) */\n goal?: string;\n /** Flow tags for categorizing this session */\n flowTags?: string[];\n /** Free-form tags for ad-hoc filtering */\n tags?: string[];\n /** Path to extension directory */\n extensionPath?: string;\n /** Whether to auto-build extension if not found */\n autoBuild?: boolean;\n /** Slow down actions for debugging (ms) */\n slowMo?: number;\n /** Port configuration */\n ports?: {\n anvil?: number;\n fixtureServer?: number;\n };\n /** Smart contracts to deploy on launch */\n seedContracts?: string[];\n};\n\n/**\n * Result of launching a new session.\n */\nexport type SessionLaunchResult = {\n sessionId: string;\n extensionId: string;\n state: ExtensionState;\n};\n\n/**\n * Screenshot options.\n */\nexport type SessionScreenshotOptions = {\n name: string;\n fullPage?: boolean;\n selector?: string;\n};\n\n/**\n * Interface for session manager implementations.\n *\n * This interface defines the contract that extension-specific session managers\n * must fulfill. Tool handlers depend on this interface, allowing them to work\n * with any compliant session manager implementation.\n */\nexport type ISessionManager = {\n // -----------------------------------------------------------------------------\n // Session Lifecycle\n // -----------------------------------------------------------------------------\n\n /**\n * Check if there is an active session.\n */\n hasActiveSession(): boolean;\n\n /**\n * Get the current session ID, or undefined if no session.\n */\n getSessionId(): string | undefined;\n\n /**\n * Get the current session state.\n */\n getSessionState(): SessionState | undefined;\n\n /**\n * Get the current session metadata.\n */\n getSessionMetadata(): SessionMetadata | undefined;\n\n /**\n * Launch a new browser session.\n *\n * @throws If a session is already active\n */\n launch(input: SessionLaunchInput): Promise<SessionLaunchResult>;\n\n /**\n * Clean up the current session (browser, services, etc.).\n *\n * @returns true if cleanup was performed, false if no session was active\n */\n cleanup(): Promise<boolean>;\n\n // -----------------------------------------------------------------------------\n // Page Management\n // -----------------------------------------------------------------------------\n\n /**\n * Get the current active page.\n *\n * @throws If no active session\n */\n getPage(): Page;\n\n /**\n * Set the active page for subsequent interactions.\n */\n setActivePage(page: Page): void;\n\n /**\n * Get all tracked pages in the current session.\n */\n getTrackedPages(): TrackedPage[];\n\n /**\n * Classify a page's role based on its URL.\n */\n classifyPageRole(page: Page, extensionId?: string): TabRole;\n\n /**\n * Get the browser context.\n *\n * @throws If no active session\n */\n getContext(): BrowserContext;\n\n // -----------------------------------------------------------------------------\n // Extension State\n // -----------------------------------------------------------------------------\n\n /**\n * Get the current extension state.\n *\n * @throws If no active session\n */\n getExtensionState(): Promise<ExtensionState>;\n\n // -----------------------------------------------------------------------------\n // A11y Reference Map\n // -----------------------------------------------------------------------------\n\n /**\n * Set the accessibility reference map (e1 -> selector).\n */\n setRefMap(map: Map<string, string>): void;\n\n /**\n * Get the current accessibility reference map.\n */\n getRefMap(): Map<string, string>;\n\n /**\n * Clear the accessibility reference map.\n */\n clearRefMap(): void;\n\n /**\n * Resolve an a11y ref (e.g., \"e5\") to a selector.\n */\n resolveA11yRef(ref: string): string | undefined;\n\n // -----------------------------------------------------------------------------\n // Navigation\n // -----------------------------------------------------------------------------\n\n /**\n * Navigate to the extension home page.\n */\n navigateToHome(): Promise<void>;\n\n /**\n * Navigate to the extension settings page.\n */\n navigateToSettings(): Promise<void>;\n\n /**\n * Navigate to an external URL (opens new tab).\n */\n navigateToUrl(url: string): Promise<Page>;\n\n /**\n * Navigate to the notification page.\n */\n navigateToNotification(): Promise<Page>;\n\n /**\n * Wait for a notification page to appear.\n */\n waitForNotificationPage(timeoutMs: number): Promise<Page>;\n\n // -----------------------------------------------------------------------------\n // Screenshots\n // -----------------------------------------------------------------------------\n\n /**\n * Take a screenshot of the current page.\n */\n screenshot(options: SessionScreenshotOptions): Promise<ScreenshotResult>;\n\n // -----------------------------------------------------------------------------\n // Capabilities (Optional - Extension-Specific)\n // -----------------------------------------------------------------------------\n\n /**\n * Get the build capability (if available).\n */\n getBuildCapability(): BuildCapability | undefined;\n\n /**\n * Get the fixture capability (if available).\n */\n getFixtureCapability(): FixtureCapability | undefined;\n\n /**\n * Get the chain capability (if available).\n */\n getChainCapability(): ChainCapability | undefined;\n\n /**\n * Get the contract seeding capability (if available).\n */\n getContractSeedingCapability(): ContractSeedingCapability | undefined;\n\n /**\n * Get the state snapshot capability (if available).\n */\n getStateSnapshotCapability(): StateSnapshotCapability | undefined;\n\n // -----------------------------------------------------------------------------\n // Environment Configuration\n // -----------------------------------------------------------------------------\n\n /**\n * Get the current environment mode.\n *\n * @returns 'e2e' for testing environment, 'prod' for production-like environment\n */\n getEnvironmentMode(): EnvironmentMode;\n\n /**\n * Set the current context (e2e or prod).\n *\n * @throws Error with code MM_CONTEXT_SWITCH_BLOCKED if session is active\n */\n setContext(context: 'e2e' | 'prod'): void;\n\n /**\n * Get current context information.\n */\n getContextInfo(): {\n currentContext: 'e2e' | 'prod';\n hasActiveSession: boolean;\n sessionId: string | null;\n capabilities: {\n available: string[];\n };\n canSwitchContext: boolean;\n };\n};\n\n/**\n * Session manager instance holder.\n *\n * In the core package, this is undefined by default.\n * Extension implementations should call setSessionManager() to inject\n * their concrete implementation.\n */\nlet _sessionManager: ISessionManager | undefined;\n\n/**\n * Set the session manager instance.\n *\n * This should be called by extension-specific code during server initialization.\n *\n * @param manager The session manager implementation to inject\n */\nexport function setSessionManager(manager: ISessionManager): void {\n _sessionManager = manager;\n}\n\n/**\n * Get the session manager instance.\n *\n * @throws Error if no session manager has been set\n * @returns The session manager instance\n */\nexport function getSessionManager(): ISessionManager {\n if (!_sessionManager) {\n throw new Error(\n 'Session manager not initialized. Call setSessionManager() first.',\n );\n }\n return _sessionManager;\n}\n\n/**\n * Check if a session manager has been set.\n *\n * @returns True if a session manager is set, false otherwise\n */\nexport function hasSessionManager(): boolean {\n return _sessionManager !== undefined;\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flushPromises = flushPromises;
|
|
4
|
+
const scheduler = typeof setImmediate === 'function' ? setImmediate : setTimeout;
|
|
5
|
+
async function flushPromises() {
|
|
6
|
+
return new Promise((resolve) => {
|
|
7
|
+
scheduler(resolve, 0);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=flush-promises.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush-promises.cjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":";;AAGA,sCAIC;AAPD,MAAM,SAAS,GACb,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;AAE1D,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["const scheduler =\n typeof setImmediate === 'function' ? setImmediate : setTimeout;\n\nexport async function flushPromises() {\n return new Promise((resolve) => {\n scheduler(resolve, 0);\n });\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush-promises.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,qBAIlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush-promises.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,qBAIlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush-promises.mjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/flush-promises.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GACb,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["const scheduler =\n typeof setImmediate === 'function' ? setImmediate : setTimeout;\n\nexport async function flushPromises() {\n return new Promise((resolve) => {\n scheduler(resolve, 0);\n });\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flushPromises = exports.createMockBrowserContext = exports.createMockLocator = exports.createMockPage = exports.createMockKnowledgeStore = exports.createMockSessionManager = void 0;
|
|
4
|
+
var mock_factories_js_1 = require("./mock-factories.cjs");
|
|
5
|
+
Object.defineProperty(exports, "createMockSessionManager", { enumerable: true, get: function () { return mock_factories_js_1.createMockSessionManager; } });
|
|
6
|
+
Object.defineProperty(exports, "createMockKnowledgeStore", { enumerable: true, get: function () { return mock_factories_js_1.createMockKnowledgeStore; } });
|
|
7
|
+
var mock_playwright_js_1 = require("./mock-playwright.cjs");
|
|
8
|
+
Object.defineProperty(exports, "createMockPage", { enumerable: true, get: function () { return mock_playwright_js_1.createMockPage; } });
|
|
9
|
+
Object.defineProperty(exports, "createMockLocator", { enumerable: true, get: function () { return mock_playwright_js_1.createMockLocator; } });
|
|
10
|
+
Object.defineProperty(exports, "createMockBrowserContext", { enumerable: true, get: function () { return mock_playwright_js_1.createMockBrowserContext; } });
|
|
11
|
+
var flush_promises_js_1 = require("./flush-promises.cjs");
|
|
12
|
+
Object.defineProperty(exports, "flushPromises", { enumerable: true, get: function () { return flush_promises_js_1.flushPromises; } });
|
|
13
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":";;;AAAA,0DAK6B;AAJ3B,6HAAA,wBAAwB,OAAA;AACxB,6HAAA,wBAAwB,OAAA;AAK1B,4DAO8B;AAN5B,oHAAA,cAAc,OAAA;AACd,uHAAA,iBAAiB,OAAA;AACjB,8HAAA,wBAAwB,OAAA;AAM1B,0DAAoD;AAA3C,kHAAA,aAAa,OAAA","sourcesContent":["export {\n createMockSessionManager,\n createMockKnowledgeStore,\n type MockSessionManagerOptions,\n type MockKnowledgeStoreOptions,\n} from './mock-factories.js';\n\nexport {\n createMockPage,\n createMockLocator,\n createMockBrowserContext,\n type MockPageOptions,\n type MockLocatorOptions,\n type MockBrowserContextOptions,\n} from './mock-playwright.js';\n\nexport { flushPromises } from './flush-promises.js';\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createMockSessionManager, createMockKnowledgeStore, type MockSessionManagerOptions, type MockKnowledgeStoreOptions, } from "./mock-factories.cjs";
|
|
2
|
+
export { createMockPage, createMockLocator, createMockBrowserContext, type MockPageOptions, type MockLocatorOptions, type MockBrowserContextOptions, } from "./mock-playwright.cjs";
|
|
3
|
+
export { flushPromises } from "./flush-promises.cjs";
|
|
4
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,6BAA4B;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,8BAA6B;AAE9B,OAAO,EAAE,aAAa,EAAE,6BAA4B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createMockSessionManager, createMockKnowledgeStore, type MockSessionManagerOptions, type MockKnowledgeStoreOptions, } from "./mock-factories.mjs";
|
|
2
|
+
export { createMockPage, createMockLocator, createMockBrowserContext, type MockPageOptions, type MockLocatorOptions, type MockBrowserContextOptions, } from "./mock-playwright.mjs";
|
|
3
|
+
export { flushPromises } from "./flush-promises.mjs";
|
|
4
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,6BAA4B;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,8BAA6B;AAE9B,OAAO,EAAE,aAAa,EAAE,6BAA4B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createMockSessionManager, createMockKnowledgeStore } from "./mock-factories.mjs";
|
|
2
|
+
export { createMockPage, createMockLocator, createMockBrowserContext } from "./mock-playwright.mjs";
|
|
3
|
+
export { flushPromises } from "./flush-promises.mjs";
|
|
4
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EAGzB,6BAA4B;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EAIzB,8BAA6B;AAE9B,OAAO,EAAE,aAAa,EAAE,6BAA4B","sourcesContent":["export {\n createMockSessionManager,\n createMockKnowledgeStore,\n type MockSessionManagerOptions,\n type MockKnowledgeStoreOptions,\n} from './mock-factories.js';\n\nexport {\n createMockPage,\n createMockLocator,\n createMockBrowserContext,\n type MockPageOptions,\n type MockLocatorOptions,\n type MockBrowserContextOptions,\n} from './mock-playwright.js';\n\nexport { flushPromises } from './flush-promises.js';\n"]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared mock factory utilities for unit testing.
|
|
4
|
+
*
|
|
5
|
+
* Provides factory functions that return fresh mock instances following MetaMask testing guidelines:
|
|
6
|
+
* - Each factory call returns NEW object instances (test isolation)
|
|
7
|
+
* - Each factory creates fresh vi.fn() mocks (never reused)
|
|
8
|
+
* - Factories accept options for customization
|
|
9
|
+
* - Sensible defaults so most tests need no options
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createMockSessionManager = createMockSessionManager;
|
|
13
|
+
exports.createMockKnowledgeStore = createMockKnowledgeStore;
|
|
14
|
+
const vitest_1 = require("vitest");
|
|
15
|
+
/**
|
|
16
|
+
* Create a fresh mock ISessionManager instance.
|
|
17
|
+
*
|
|
18
|
+
* Each call returns a NEW object with fresh vi.fn() mocks.
|
|
19
|
+
* Follows the pattern from session-manager.test.ts:15-48.
|
|
20
|
+
*
|
|
21
|
+
* @param options - Customize mock behavior
|
|
22
|
+
* @returns Fresh ISessionManager mock
|
|
23
|
+
*/
|
|
24
|
+
function createMockSessionManager(options = {}) {
|
|
25
|
+
return {
|
|
26
|
+
// Session Lifecycle
|
|
27
|
+
hasActiveSession: vitest_1.vi.fn().mockReturnValue(options.hasActive ?? false),
|
|
28
|
+
getSessionId: vitest_1.vi.fn().mockReturnValue(options.sessionId ?? undefined),
|
|
29
|
+
getSessionState: vitest_1.vi.fn().mockReturnValue(options.sessionState ?? undefined),
|
|
30
|
+
getSessionMetadata: vitest_1.vi
|
|
31
|
+
.fn()
|
|
32
|
+
.mockReturnValue(options.sessionMetadata ?? undefined),
|
|
33
|
+
launch: vitest_1.vi.fn().mockResolvedValue(options.launchResult ?? {
|
|
34
|
+
sessionId: 'test-session-123',
|
|
35
|
+
extensionId: 'ext-123',
|
|
36
|
+
state: {
|
|
37
|
+
isLoaded: true,
|
|
38
|
+
currentUrl: 'chrome-extension://ext-123/home.html',
|
|
39
|
+
extensionId: 'ext-123',
|
|
40
|
+
isUnlocked: false,
|
|
41
|
+
currentScreen: 'home',
|
|
42
|
+
accountAddress: null,
|
|
43
|
+
networkName: null,
|
|
44
|
+
chainId: null,
|
|
45
|
+
balance: null,
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
cleanup: vitest_1.vi.fn().mockResolvedValue(true),
|
|
49
|
+
// Page Management
|
|
50
|
+
getPage: vitest_1.vi.fn(),
|
|
51
|
+
setActivePage: vitest_1.vi.fn(),
|
|
52
|
+
getTrackedPages: vitest_1.vi.fn().mockReturnValue(options.trackedPages ?? []),
|
|
53
|
+
classifyPageRole: vitest_1.vi.fn().mockReturnValue('extension'),
|
|
54
|
+
getContext: vitest_1.vi.fn(),
|
|
55
|
+
// Extension State
|
|
56
|
+
getExtensionState: vitest_1.vi.fn().mockResolvedValue(options.extensionState ?? {
|
|
57
|
+
isLoaded: true,
|
|
58
|
+
currentUrl: 'chrome-extension://ext-123/home.html',
|
|
59
|
+
extensionId: 'ext-123',
|
|
60
|
+
isUnlocked: false,
|
|
61
|
+
currentScreen: 'home',
|
|
62
|
+
accountAddress: null,
|
|
63
|
+
networkName: null,
|
|
64
|
+
chainId: null,
|
|
65
|
+
balance: null,
|
|
66
|
+
}),
|
|
67
|
+
// A11y Reference Map
|
|
68
|
+
setRefMap: vitest_1.vi.fn(),
|
|
69
|
+
getRefMap: vitest_1.vi.fn().mockReturnValue(options.refMap ?? new Map()),
|
|
70
|
+
clearRefMap: vitest_1.vi.fn(),
|
|
71
|
+
resolveA11yRef: vitest_1.vi.fn(),
|
|
72
|
+
// Navigation
|
|
73
|
+
navigateToHome: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
74
|
+
navigateToSettings: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
75
|
+
navigateToUrl: vitest_1.vi.fn(),
|
|
76
|
+
navigateToNotification: vitest_1.vi.fn(),
|
|
77
|
+
waitForNotificationPage: vitest_1.vi.fn(),
|
|
78
|
+
// Screenshots
|
|
79
|
+
screenshot: vitest_1.vi.fn().mockResolvedValue({
|
|
80
|
+
path: '/path/to/screenshot.png',
|
|
81
|
+
width: 1280,
|
|
82
|
+
height: 720,
|
|
83
|
+
}),
|
|
84
|
+
// Capabilities
|
|
85
|
+
getBuildCapability: vitest_1.vi.fn().mockReturnValue(undefined),
|
|
86
|
+
getFixtureCapability: vitest_1.vi.fn().mockReturnValue(undefined),
|
|
87
|
+
getChainCapability: vitest_1.vi.fn().mockReturnValue(undefined),
|
|
88
|
+
getContractSeedingCapability: vitest_1.vi.fn().mockReturnValue(undefined),
|
|
89
|
+
getStateSnapshotCapability: vitest_1.vi.fn().mockReturnValue(undefined),
|
|
90
|
+
// Environment
|
|
91
|
+
getEnvironmentMode: vitest_1.vi
|
|
92
|
+
.fn()
|
|
93
|
+
.mockReturnValue(options.environmentMode ?? 'e2e'),
|
|
94
|
+
// Context
|
|
95
|
+
setContext: vitest_1.vi.fn().mockReturnValue(undefined),
|
|
96
|
+
getContextInfo: vitest_1.vi.fn().mockReturnValue({
|
|
97
|
+
currentContext: options.environmentMode ?? 'e2e',
|
|
98
|
+
hasActiveSession: options.hasActive ?? false,
|
|
99
|
+
sessionId: options.sessionId ?? null,
|
|
100
|
+
capabilities: { available: [] },
|
|
101
|
+
canSwitchContext: !(options.hasActive ?? false),
|
|
102
|
+
}),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create a fresh mock KnowledgeStore instance.
|
|
107
|
+
*
|
|
108
|
+
* Returns an in-memory mock with sensible defaults.
|
|
109
|
+
* Each call creates fresh vi.fn() mocks.
|
|
110
|
+
*
|
|
111
|
+
* @param options - Customize mock behavior
|
|
112
|
+
* @returns Fresh KnowledgeStore mock
|
|
113
|
+
*/
|
|
114
|
+
function createMockKnowledgeStore(options = {}) {
|
|
115
|
+
return {
|
|
116
|
+
recordStep: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
117
|
+
getLastSteps: vitest_1.vi.fn().mockResolvedValue(options.lastSteps ?? []),
|
|
118
|
+
searchSteps: vitest_1.vi.fn().mockResolvedValue(options.searchResults ?? []),
|
|
119
|
+
summarizeSession: vitest_1.vi.fn().mockResolvedValue(options.sessionSummary ?? {
|
|
120
|
+
sessionId: 'test-session-123',
|
|
121
|
+
stepCount: 0,
|
|
122
|
+
recipe: [],
|
|
123
|
+
}),
|
|
124
|
+
listSessions: vitest_1.vi.fn().mockResolvedValue(options.sessions ?? []),
|
|
125
|
+
generatePriorKnowledge: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
126
|
+
writeSessionMetadata: vitest_1.vi.fn().mockResolvedValue('test-session-123'),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=mock-factories.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-factories.cjs","sourceRoot":"","sources":["../../../src/mcp-server/test-utils/mock-factories.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AA4CH,4DA8FC;AAWD,4DAkBC;AArKD,mCAA4B;AAiC5B;;;;;;;;GAQG;AACH,SAAgB,wBAAwB,CACtC,UAAqC,EAAE;IAEvC,OAAO;QACL,oBAAoB;QACpB,gBAAgB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QACrE,YAAY,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;QACrE,eAAe,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;QAC3E,kBAAkB,EAAE,WAAE;aACnB,EAAE,EAAE;aACJ,eAAe,CAAC,OAAO,CAAC,eAAe,IAAI,SAAS,CAAC;QACxD,MAAM,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAC/B,OAAO,CAAC,YAAY,IAAI;YACtB,SAAS,EAAE,kBAAkB;YAC7B,WAAW,EAAE,SAAS;YACtB,KAAK,EAAE;gBACL,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,sCAAsC;gBAClD,WAAW,EAAE,SAAS;gBACtB,UAAU,EAAE,KAAK;gBACjB,aAAa,EAAE,MAAM;gBACrB,cAAc,EAAE,IAAI;gBACpB,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;aACd;SACF,CACF;QACD,OAAO,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAExC,kBAAkB;QAClB,OAAO,EAAE,WAAE,CAAC,EAAE,EAAE;QAChB,aAAa,EAAE,WAAE,CAAC,EAAE,EAAE;QACtB,eAAe,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QACpE,gBAAgB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC;QACtD,UAAU,EAAE,WAAE,CAAC,EAAE,EAAE;QAEnB,kBAAkB;QAClB,iBAAiB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAC1C,OAAO,CAAC,cAAc,IAAI;YACxB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,sCAAsC;YAClD,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,MAAM;YACrB,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CACF;QAED,qBAAqB;QACrB,SAAS,EAAE,WAAE,CAAC,EAAE,EAAE;QAClB,SAAS,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QAC/D,WAAW,EAAE,WAAE,CAAC,EAAE,EAAE;QACpB,cAAc,EAAE,WAAE,CAAC,EAAE,EAAE;QAEvB,aAAa;QACb,cAAc,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACpD,kBAAkB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACxD,aAAa,EAAE,WAAE,CAAC,EAAE,EAAE;QACtB,sBAAsB,EAAE,WAAE,CAAC,EAAE,EAAE;QAC/B,uBAAuB,EAAE,WAAE,CAAC,EAAE,EAAE;QAEhC,cAAc;QACd,UAAU,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YACpC,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;SACZ,CAAC;QAEF,eAAe;QACf,kBAAkB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QACtD,oBAAoB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QACxD,kBAAkB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QACtD,4BAA4B,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QAChE,0BAA0B,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QAE9D,cAAc;QACd,kBAAkB,EAAE,WAAE;aACnB,EAAE,EAAE;aACJ,eAAe,CAAC,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC;QAEpD,UAAU;QACV,UAAU,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QAC9C,cAAc,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;YACtC,cAAc,EAAE,OAAO,CAAC,eAAe,IAAI,KAAK;YAChD,gBAAgB,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YAC5C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACpC,YAAY,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YAC/B,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;SAChD,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,wBAAwB,CACtC,UAAqC,EAAE;IAEvC,OAAO;QACL,UAAU,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAChD,YAAY,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAChE,WAAW,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QACnE,gBAAgB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CACzC,OAAO,CAAC,cAAc,IAAI;YACxB,SAAS,EAAE,kBAAkB;YAC7B,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,EAAE;SACX,CACF;QACD,YAAY,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC/D,sBAAsB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAC5D,oBAAoB,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;KACpE,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Shared mock factory utilities for unit testing.\n *\n * Provides factory functions that return fresh mock instances following MetaMask testing guidelines:\n * - Each factory call returns NEW object instances (test isolation)\n * - Each factory creates fresh vi.fn() mocks (never reused)\n * - Factories accept options for customization\n * - Sensible defaults so most tests need no options\n */\n\nimport { vi } from 'vitest';\n\nimport type { ExtensionState } from '../../capabilities/types.js';\nimport type { KnowledgeStore } from '../knowledge-store.js';\nimport type { TrackedPage, SessionLaunchResult } from '../session-manager.js';\nimport type { SessionState } from '../types/session.js';\nimport type { SessionMetadata } from '../types/step-record.js';\n\n/**\n * Options for customizing mock session manager behavior\n */\nexport type MockSessionManagerOptions = {\n hasActive?: boolean;\n sessionId?: string;\n sessionState?: SessionState;\n sessionMetadata?: SessionMetadata;\n launchResult?: SessionLaunchResult;\n trackedPages?: TrackedPage[];\n extensionState?: ExtensionState;\n refMap?: Map<string, string>;\n environmentMode?: 'e2e' | 'prod';\n};\n\n/**\n * Options for customizing mock knowledge store behavior\n */\nexport type MockKnowledgeStoreOptions = {\n lastSteps?: Record<string, unknown>[];\n searchResults?: Record<string, unknown>[];\n sessionSummary?: Record<string, unknown>;\n sessions?: Record<string, unknown>[];\n};\n\n/**\n * Create a fresh mock ISessionManager instance.\n *\n * Each call returns a NEW object with fresh vi.fn() mocks.\n * Follows the pattern from session-manager.test.ts:15-48.\n *\n * @param options - Customize mock behavior\n * @returns Fresh ISessionManager mock\n */\nexport function createMockSessionManager(\n options: MockSessionManagerOptions = {},\n) {\n return {\n // Session Lifecycle\n hasActiveSession: vi.fn().mockReturnValue(options.hasActive ?? false),\n getSessionId: vi.fn().mockReturnValue(options.sessionId ?? undefined),\n getSessionState: vi.fn().mockReturnValue(options.sessionState ?? undefined),\n getSessionMetadata: vi\n .fn()\n .mockReturnValue(options.sessionMetadata ?? undefined),\n launch: vi.fn().mockResolvedValue(\n options.launchResult ?? {\n sessionId: 'test-session-123',\n extensionId: 'ext-123',\n state: {\n isLoaded: true,\n currentUrl: 'chrome-extension://ext-123/home.html',\n extensionId: 'ext-123',\n isUnlocked: false,\n currentScreen: 'home',\n accountAddress: null,\n networkName: null,\n chainId: null,\n balance: null,\n },\n },\n ),\n cleanup: vi.fn().mockResolvedValue(true),\n\n // Page Management\n getPage: vi.fn(),\n setActivePage: vi.fn(),\n getTrackedPages: vi.fn().mockReturnValue(options.trackedPages ?? []),\n classifyPageRole: vi.fn().mockReturnValue('extension'),\n getContext: vi.fn(),\n\n // Extension State\n getExtensionState: vi.fn().mockResolvedValue(\n options.extensionState ?? {\n isLoaded: true,\n currentUrl: 'chrome-extension://ext-123/home.html',\n extensionId: 'ext-123',\n isUnlocked: false,\n currentScreen: 'home',\n accountAddress: null,\n networkName: null,\n chainId: null,\n balance: null,\n },\n ),\n\n // A11y Reference Map\n setRefMap: vi.fn(),\n getRefMap: vi.fn().mockReturnValue(options.refMap ?? new Map()),\n clearRefMap: vi.fn(),\n resolveA11yRef: vi.fn(),\n\n // Navigation\n navigateToHome: vi.fn().mockResolvedValue(undefined),\n navigateToSettings: vi.fn().mockResolvedValue(undefined),\n navigateToUrl: vi.fn(),\n navigateToNotification: vi.fn(),\n waitForNotificationPage: vi.fn(),\n\n // Screenshots\n screenshot: vi.fn().mockResolvedValue({\n path: '/path/to/screenshot.png',\n width: 1280,\n height: 720,\n }),\n\n // Capabilities\n getBuildCapability: vi.fn().mockReturnValue(undefined),\n getFixtureCapability: vi.fn().mockReturnValue(undefined),\n getChainCapability: vi.fn().mockReturnValue(undefined),\n getContractSeedingCapability: vi.fn().mockReturnValue(undefined),\n getStateSnapshotCapability: vi.fn().mockReturnValue(undefined),\n\n // Environment\n getEnvironmentMode: vi\n .fn()\n .mockReturnValue(options.environmentMode ?? 'e2e'),\n\n // Context\n setContext: vi.fn().mockReturnValue(undefined),\n getContextInfo: vi.fn().mockReturnValue({\n currentContext: options.environmentMode ?? 'e2e',\n hasActiveSession: options.hasActive ?? false,\n sessionId: options.sessionId ?? null,\n capabilities: { available: [] },\n canSwitchContext: !(options.hasActive ?? false),\n }),\n };\n}\n\n/**\n * Create a fresh mock KnowledgeStore instance.\n *\n * Returns an in-memory mock with sensible defaults.\n * Each call creates fresh vi.fn() mocks.\n *\n * @param options - Customize mock behavior\n * @returns Fresh KnowledgeStore mock\n */\nexport function createMockKnowledgeStore(\n options: MockKnowledgeStoreOptions = {},\n): Partial<KnowledgeStore> {\n return {\n recordStep: vi.fn().mockResolvedValue(undefined),\n getLastSteps: vi.fn().mockResolvedValue(options.lastSteps ?? []),\n searchSteps: vi.fn().mockResolvedValue(options.searchResults ?? []),\n summarizeSession: vi.fn().mockResolvedValue(\n options.sessionSummary ?? {\n sessionId: 'test-session-123',\n stepCount: 0,\n recipe: [],\n },\n ),\n listSessions: vi.fn().mockResolvedValue(options.sessions ?? []),\n generatePriorKnowledge: vi.fn().mockResolvedValue(undefined),\n writeSessionMetadata: vi.fn().mockResolvedValue('test-session-123'),\n };\n}\n"]}
|