@miragon/pulse-widget-shell 0.24.1 → 0.25.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/README.md +134 -127
- package/dist/caller.d.ts +3 -0
- package/dist/caller.d.ts.map +1 -0
- package/dist/caller.js +18 -0
- package/dist/caller.js.map +1 -0
- package/dist/composed-server.d.ts +34 -66
- package/dist/composed-server.d.ts.map +1 -1
- package/dist/composed-server.js +130 -137
- package/dist/composed-server.js.map +1 -1
- package/dist/composition.d.ts +61 -111
- package/dist/composition.d.ts.map +1 -1
- package/dist/composition.js +120 -54
- package/dist/composition.js.map +1 -1
- package/dist/font-assets.d.ts +7 -28
- package/dist/font-assets.d.ts.map +1 -1
- package/dist/font-assets.js +11 -43
- package/dist/font-assets.js.map +1 -1
- package/dist/health.d.ts +9 -45
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +6 -24
- package/dist/health.js.map +1 -1
- package/dist/host-boot.d.ts +8 -38
- package/dist/host-boot.d.ts.map +1 -1
- package/dist/host-boot.js +10 -32
- package/dist/host-boot.js.map +1 -1
- package/dist/http-edge.d.ts +20 -76
- package/dist/http-edge.d.ts.map +1 -1
- package/dist/http-edge.js +17 -60
- package/dist/http-edge.js.map +1 -1
- package/dist/metrics.d.ts +6 -21
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +8 -36
- package/dist/metrics.js.map +1 -1
- package/dist/node-listener.d.ts +7 -39
- package/dist/node-listener.d.ts.map +1 -1
- package/dist/node-listener.js +6 -18
- package/dist/node-listener.js.map +1 -1
- package/dist/oauth-env.d.ts +15 -35
- package/dist/oauth-env.d.ts.map +1 -1
- package/dist/oauth-env.js +122 -62
- package/dist/oauth-env.js.map +1 -1
- package/dist/protocol/bpmn-names.d.ts +19 -0
- package/dist/protocol/bpmn-names.d.ts.map +1 -0
- package/dist/{bpmn-names.js → protocol/bpmn-names.js} +9 -38
- package/dist/protocol/bpmn-names.js.map +1 -0
- package/dist/protocol/served-fonts.d.ts +17 -0
- package/dist/protocol/served-fonts.d.ts.map +1 -0
- package/dist/protocol/served-fonts.js +30 -0
- package/dist/protocol/served-fonts.js.map +1 -0
- package/dist/protocol/tool-result.d.ts +24 -0
- package/dist/protocol/tool-result.d.ts.map +1 -0
- package/dist/protocol/tool-result.js +37 -0
- package/dist/protocol/tool-result.js.map +1 -0
- package/dist/protocol/translator.d.ts +14 -0
- package/dist/protocol/translator.d.ts.map +1 -0
- package/dist/protocol/translator.js +18 -0
- package/dist/protocol/translator.js.map +1 -0
- package/dist/protocol/view-name.d.ts +11 -0
- package/dist/protocol/view-name.d.ts.map +1 -0
- package/dist/protocol/view-name.js +23 -0
- package/dist/protocol/view-name.js.map +1 -0
- package/dist/request-context.d.ts +4 -33
- package/dist/request-context.d.ts.map +1 -1
- package/dist/request-context.js +11 -43
- package/dist/request-context.js.map +1 -1
- package/dist/server.d.ts +19 -39
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +28 -32
- package/dist/server.js.map +1 -1
- package/dist/testing/glossary.d.ts +4 -32
- package/dist/testing/glossary.d.ts.map +1 -1
- package/dist/testing/glossary.js +6 -30
- package/dist/testing/glossary.js.map +1 -1
- package/dist/testing/index.d.ts +1 -38
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -38
- package/dist/testing/index.js.map +1 -1
- package/dist/tool-errors.d.ts +16 -0
- package/dist/tool-errors.d.ts.map +1 -0
- package/dist/tool-errors.js +23 -0
- package/dist/tool-errors.js.map +1 -0
- package/dist/tool-registrar.d.ts +29 -0
- package/dist/tool-registrar.d.ts.map +1 -0
- package/dist/tool-registrar.js +47 -0
- package/dist/tool-registrar.js.map +1 -0
- package/dist/tool-registration.d.ts +35 -0
- package/dist/tool-registration.d.ts.map +1 -0
- package/dist/tool-registration.js +80 -0
- package/dist/tool-registration.js.map +1 -0
- package/dist/tool-schema-trim.d.ts +1 -15
- package/dist/tool-schema-trim.d.ts.map +1 -1
- package/dist/tool-schema-trim.js +1 -16
- package/dist/tool-schema-trim.js.map +1 -1
- package/dist/toolsets.d.ts +10 -56
- package/dist/toolsets.d.ts.map +1 -1
- package/dist/toolsets.js +2 -10
- package/dist/toolsets.js.map +1 -1
- package/dist/ui/action-feedback.d.ts +4 -26
- package/dist/ui/action-feedback.d.ts.map +1 -1
- package/dist/ui/action-feedback.js +5 -19
- package/dist/ui/action-feedback.js.map +1 -1
- package/dist/ui/ask-ai-button.d.ts +6 -43
- package/dist/ui/ask-ai-button.d.ts.map +1 -1
- package/dist/ui/ask-ai-button.js +6 -18
- package/dist/ui/ask-ai-button.js.map +1 -1
- package/dist/ui/ask-ai-prompt.d.ts +6 -82
- package/dist/ui/ask-ai-prompt.d.ts.map +1 -1
- package/dist/ui/ask-ai-prompt.js +10 -77
- package/dist/ui/ask-ai-prompt.js.map +1 -1
- package/dist/ui/bpmn-tokens.d.ts +3 -48
- package/dist/ui/bpmn-tokens.d.ts.map +1 -1
- package/dist/ui/bpmn-tokens.js +3 -46
- package/dist/ui/bpmn-tokens.js.map +1 -1
- package/dist/ui/bpmn-zoom-controls.d.ts +4 -17
- package/dist/ui/bpmn-zoom-controls.d.ts.map +1 -1
- package/dist/ui/bpmn-zoom-controls.js +2 -16
- package/dist/ui/bpmn-zoom-controls.js.map +1 -1
- package/dist/ui/call-observer.d.ts +35 -0
- package/dist/ui/call-observer.d.ts.map +1 -0
- package/dist/ui/call-observer.js +86 -0
- package/dist/ui/call-observer.js.map +1 -0
- package/dist/ui/confirm-dialog.d.ts +4 -31
- package/dist/ui/confirm-dialog.d.ts.map +1 -1
- package/dist/ui/confirm-dialog.js +4 -27
- package/dist/ui/confirm-dialog.js.map +1 -1
- package/dist/ui/count-tone.d.ts +3 -17
- package/dist/ui/count-tone.d.ts.map +1 -1
- package/dist/ui/count-tone.js +2 -16
- package/dist/ui/count-tone.js.map +1 -1
- package/dist/ui/declare-served-fonts.d.ts +4 -10
- package/dist/ui/declare-served-fonts.d.ts.map +1 -1
- package/dist/ui/declare-served-fonts.js +6 -13
- package/dist/ui/declare-served-fonts.js.map +1 -1
- package/dist/ui/describe-error.d.ts +5 -47
- package/dist/ui/describe-error.d.ts.map +1 -1
- package/dist/ui/describe-error.js +8 -45
- package/dist/ui/describe-error.js.map +1 -1
- package/dist/ui/display-mode-toggle.d.ts +3 -16
- package/dist/ui/display-mode-toggle.d.ts.map +1 -1
- package/dist/ui/display-mode-toggle.js +6 -15
- package/dist/ui/display-mode-toggle.js.map +1 -1
- package/dist/ui/error-labels.d.ts +3 -19
- package/dist/ui/error-labels.d.ts.map +1 -1
- package/dist/ui/error-labels.js +0 -1
- package/dist/ui/error-labels.js.map +1 -1
- package/dist/ui/hand-off-button.d.ts +3 -18
- package/dist/ui/hand-off-button.d.ts.map +1 -1
- package/dist/ui/hand-off-button.js +3 -18
- package/dist/ui/hand-off-button.js.map +1 -1
- package/dist/ui/host-context.d.ts +13 -50
- package/dist/ui/host-context.d.ts.map +1 -1
- package/dist/ui/host-context.js +20 -51
- package/dist/ui/host-context.js.map +1 -1
- package/dist/ui/host-contexts.d.ts +19 -0
- package/dist/ui/host-contexts.d.ts.map +1 -0
- package/dist/ui/host-contexts.js +31 -0
- package/dist/ui/host-contexts.js.map +1 -0
- package/dist/ui/host-document.d.ts +3 -18
- package/dist/ui/host-document.d.ts.map +1 -1
- package/dist/ui/host-document.js +7 -25
- package/dist/ui/host-document.js.map +1 -1
- package/dist/ui/host-widgets.d.ts +21 -4
- package/dist/ui/host-widgets.d.ts.map +1 -1
- package/dist/ui/host-widgets.js +19 -11
- package/dist/ui/host-widgets.js.map +1 -1
- package/dist/ui/id-text.d.ts +1 -17
- package/dist/ui/id-text.d.ts.map +1 -1
- package/dist/ui/id-text.js +5 -26
- package/dist/ui/id-text.js.map +1 -1
- package/dist/ui/index.d.ts +24 -43
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +36 -51
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/inline-budget.d.ts +2 -16
- package/dist/ui/inline-budget.d.ts.map +1 -1
- package/dist/ui/inline-budget.js +1 -8
- package/dist/ui/inline-budget.js.map +1 -1
- package/dist/ui/inline-fit-registry.d.ts +4 -31
- package/dist/ui/inline-fit-registry.d.ts.map +1 -1
- package/dist/ui/inline-fit-registry.js +9 -27
- package/dist/ui/inline-fit-registry.js.map +1 -1
- package/dist/ui/inline-fit-solve.d.ts +5 -27
- package/dist/ui/inline-fit-solve.d.ts.map +1 -1
- package/dist/ui/inline-fit-solve.js +4 -23
- package/dist/ui/inline-fit-solve.js.map +1 -1
- package/dist/ui/inline-fit.d.ts +4 -53
- package/dist/ui/inline-fit.d.ts.map +1 -1
- package/dist/ui/inline-fit.js +16 -62
- package/dist/ui/inline-fit.js.map +1 -1
- package/dist/ui/kit-labels.d.ts +12 -51
- package/dist/ui/kit-labels.d.ts.map +1 -1
- package/dist/ui/kit-labels.js +18 -28
- package/dist/ui/kit-labels.js.map +1 -1
- package/dist/ui/list-table.d.ts +15 -69
- package/dist/ui/list-table.d.ts.map +1 -1
- package/dist/ui/list-table.js +11 -69
- package/dist/ui/list-table.js.map +1 -1
- package/dist/ui/locale-gate.d.ts +11 -0
- package/dist/ui/locale-gate.d.ts.map +1 -0
- package/dist/ui/locale-gate.js +53 -0
- package/dist/ui/locale-gate.js.map +1 -0
- package/dist/ui/mcp-use-host.d.ts +20 -0
- package/dist/ui/mcp-use-host.d.ts.map +1 -0
- package/dist/ui/mcp-use-host.js +162 -0
- package/dist/ui/mcp-use-host.js.map +1 -0
- package/dist/ui/open-in-cockpit-link.d.ts +2 -21
- package/dist/ui/open-in-cockpit-link.d.ts.map +1 -1
- package/dist/ui/open-in-cockpit-link.js +5 -20
- package/dist/ui/open-in-cockpit-link.js.map +1 -1
- package/dist/ui/paged-rows.d.ts +3 -14
- package/dist/ui/paged-rows.d.ts.map +1 -1
- package/dist/ui/paged-rows.js +4 -14
- package/dist/ui/paged-rows.js.map +1 -1
- package/dist/ui/query-fallback.d.ts +2 -16
- package/dist/ui/query-fallback.d.ts.map +1 -1
- package/dist/ui/query-fallback.js +2 -14
- package/dist/ui/query-fallback.js.map +1 -1
- package/dist/ui/shell-host.d.ts +13 -23
- package/dist/ui/shell-host.d.ts.map +1 -1
- package/dist/ui/shell-host.js +1 -46
- package/dist/ui/shell-host.js.map +1 -1
- package/dist/ui/test-view-host.d.ts +51 -0
- package/dist/ui/test-view-host.d.ts.map +1 -0
- package/dist/ui/test-view-host.js +72 -0
- package/dist/ui/test-view-host.js.map +1 -0
- package/dist/ui/tool-query.d.ts +41 -0
- package/dist/ui/tool-query.d.ts.map +1 -0
- package/dist/ui/tool-query.js +128 -0
- package/dist/ui/tool-query.js.map +1 -0
- package/dist/ui/use-apply-theme.d.ts +1 -8
- package/dist/ui/use-apply-theme.d.ts.map +1 -1
- package/dist/ui/use-apply-theme.js +1 -8
- package/dist/ui/use-apply-theme.js.map +1 -1
- package/dist/ui/use-bpmn-viewer.d.ts +39 -73
- package/dist/ui/use-bpmn-viewer.d.ts.map +1 -1
- package/dist/ui/use-bpmn-viewer.js +18 -66
- package/dist/ui/use-bpmn-viewer.js.map +1 -1
- package/dist/ui/use-detail-view.d.ts +4 -26
- package/dist/ui/use-detail-view.d.ts.map +1 -1
- package/dist/ui/use-detail-view.js +7 -28
- package/dist/ui/use-detail-view.js.map +1 -1
- package/dist/ui/use-paged-list-view.d.ts +5 -25
- package/dist/ui/use-paged-list-view.d.ts.map +1 -1
- package/dist/ui/use-paged-list-view.js +5 -14
- package/dist/ui/use-paged-list-view.js.map +1 -1
- package/dist/ui/use-paged-view-data.d.ts +11 -66
- package/dist/ui/use-paged-view-data.d.ts.map +1 -1
- package/dist/ui/use-paged-view-data.js +20 -53
- package/dist/ui/use-paged-view-data.js.map +1 -1
- package/dist/ui/view-call.d.ts +66 -0
- package/dist/ui/view-call.d.ts.map +1 -0
- package/dist/ui/view-call.js +63 -0
- package/dist/ui/view-call.js.map +1 -0
- package/dist/ui/view-data-state.d.ts +1 -31
- package/dist/ui/view-data-state.d.ts.map +1 -1
- package/dist/ui/view-data-state.js +3 -32
- package/dist/ui/view-data-state.js.map +1 -1
- package/dist/ui/view-error-boundary.d.ts +24 -0
- package/dist/ui/view-error-boundary.d.ts.map +1 -0
- package/dist/ui/view-error-boundary.js +33 -0
- package/dist/ui/view-error-boundary.js.map +1 -0
- package/dist/ui/view-frame.d.ts +15 -0
- package/dist/ui/view-frame.d.ts.map +1 -0
- package/dist/ui/view-frame.js +72 -0
- package/dist/ui/view-frame.js.map +1 -0
- package/dist/ui/view-host.d.ts +35 -0
- package/dist/ui/view-host.d.ts.map +1 -0
- package/dist/ui/view-host.js +18 -0
- package/dist/ui/view-host.js.map +1 -0
- package/dist/ui/view-meta.d.ts +6 -29
- package/dist/ui/view-meta.d.ts.map +1 -1
- package/dist/ui/view-meta.js +2 -13
- package/dist/ui/view-meta.js.map +1 -1
- package/dist/ui/view-refresh-state.d.ts +4 -18
- package/dist/ui/view-refresh-state.d.ts.map +1 -1
- package/dist/ui/view-refresh-state.js +1 -7
- package/dist/ui/view-refresh-state.js.map +1 -1
- package/dist/ui/view-root.d.ts +26 -0
- package/dist/ui/view-root.d.ts.map +1 -0
- package/dist/ui/view-root.js +48 -0
- package/dist/ui/view-root.js.map +1 -0
- package/dist/ui/views.d.ts +17 -0
- package/dist/ui/views.d.ts.map +1 -0
- package/dist/ui/views.js +11 -0
- package/dist/ui/views.js.map +1 -0
- package/dist/ui/widget-shell.d.ts +1 -13
- package/dist/ui/widget-shell.d.ts.map +1 -1
- package/dist/ui/widget-shell.js +5 -30
- package/dist/ui/widget-shell.js.map +1 -1
- package/dist/view-bundle.d.ts +15 -0
- package/dist/view-bundle.d.ts.map +1 -0
- package/dist/view-bundle.js +23 -0
- package/dist/view-bundle.js.map +1 -0
- package/dist/view-results.d.ts +12 -23
- package/dist/view-results.d.ts.map +1 -1
- package/dist/view-results.js +14 -11
- package/dist/view-results.js.map +1 -1
- package/dist/widget-tool-bindings.d.ts +19 -48
- package/dist/widget-tool-bindings.d.ts.map +1 -1
- package/dist/widget-tool-bindings.js +21 -49
- package/dist/widget-tool-bindings.js.map +1 -1
- package/package.json +24 -36
- package/dist/adapt-data-widget.d.ts +0 -7
- package/dist/adapt-data-widget.d.ts.map +0 -1
- package/dist/adapt-data-widget.js +0 -7
- package/dist/adapt-data-widget.js.map +0 -1
- package/dist/bpmn-names.d.ts +0 -42
- package/dist/bpmn-names.d.ts.map +0 -1
- package/dist/bpmn-names.js.map +0 -1
- package/dist/bpmn-names.test.d.ts +0 -2
- package/dist/bpmn-names.test.d.ts.map +0 -1
- package/dist/bpmn-names.test.js +0 -143
- package/dist/bpmn-names.test.js.map +0 -1
- package/dist/build-data-feed-result.test.d.ts +0 -2
- package/dist/build-data-feed-result.test.d.ts.map +0 -1
- package/dist/build-data-feed-result.test.js +0 -28
- package/dist/build-data-feed-result.test.js.map +0 -1
- package/dist/build-single-widget-view.test.d.ts +0 -2
- package/dist/build-single-widget-view.test.d.ts.map +0 -1
- package/dist/build-single-widget-view.test.js +0 -136
- package/dist/build-single-widget-view.test.js.map +0 -1
- package/dist/builder-texts.d.ts +0 -27
- package/dist/builder-texts.d.ts.map +0 -1
- package/dist/builder-texts.js +0 -32
- package/dist/builder-texts.js.map +0 -1
- package/dist/builder-texts.test.d.ts +0 -2
- package/dist/builder-texts.test.d.ts.map +0 -1
- package/dist/builder-texts.test.js +0 -54
- package/dist/builder-texts.test.js.map +0 -1
- package/dist/catalogue-sync.d.ts +0 -18
- package/dist/catalogue-sync.d.ts.map +0 -1
- package/dist/catalogue-sync.js +0 -31
- package/dist/catalogue-sync.js.map +0 -1
- package/dist/catalogue-sync.test.d.ts +0 -2
- package/dist/catalogue-sync.test.d.ts.map +0 -1
- package/dist/catalogue-sync.test.js +0 -22
- package/dist/catalogue-sync.test.js.map +0 -1
- package/dist/composed-server.edge.test.d.ts +0 -2
- package/dist/composed-server.edge.test.d.ts.map +0 -1
- package/dist/composed-server.edge.test.js +0 -184
- package/dist/composed-server.edge.test.js.map +0 -1
- package/dist/composed-server.fonts.test.d.ts +0 -2
- package/dist/composed-server.fonts.test.d.ts.map +0 -1
- package/dist/composed-server.fonts.test.js +0 -186
- package/dist/composed-server.fonts.test.js.map +0 -1
- package/dist/composed-server.test.d.ts +0 -2
- package/dist/composed-server.test.d.ts.map +0 -1
- package/dist/composed-server.test.js +0 -332
- package/dist/composed-server.test.js.map +0 -1
- package/dist/composition.test.d.ts +0 -2
- package/dist/composition.test.d.ts.map +0 -1
- package/dist/composition.test.js +0 -275
- package/dist/composition.test.js.map +0 -1
- package/dist/dashboard-store-postgres.d.ts +0 -43
- package/dist/dashboard-store-postgres.d.ts.map +0 -1
- package/dist/dashboard-store-postgres.js +0 -225
- package/dist/dashboard-store-postgres.js.map +0 -1
- package/dist/dashboard-store-postgres.test.d.ts +0 -2
- package/dist/dashboard-store-postgres.test.d.ts.map +0 -1
- package/dist/dashboard-store-postgres.test.js +0 -272
- package/dist/dashboard-store-postgres.test.js.map +0 -1
- package/dist/font-assets.test.d.ts +0 -2
- package/dist/font-assets.test.d.ts.map +0 -1
- package/dist/font-assets.test.js +0 -123
- package/dist/font-assets.test.js.map +0 -1
- package/dist/health.test.d.ts +0 -2
- package/dist/health.test.d.ts.map +0 -1
- package/dist/health.test.js +0 -140
- package/dist/health.test.js.map +0 -1
- package/dist/host-boot.test.d.ts +0 -2
- package/dist/host-boot.test.d.ts.map +0 -1
- package/dist/host-boot.test.js +0 -59
- package/dist/host-boot.test.js.map +0 -1
- package/dist/http-edge.test.d.ts +0 -2
- package/dist/http-edge.test.d.ts.map +0 -1
- package/dist/http-edge.test.js +0 -255
- package/dist/http-edge.test.js.map +0 -1
- package/dist/metrics.test.d.ts +0 -2
- package/dist/metrics.test.d.ts.map +0 -1
- package/dist/metrics.test.js +0 -154
- package/dist/metrics.test.js.map +0 -1
- package/dist/node-listener.test.d.ts +0 -2
- package/dist/node-listener.test.d.ts.map +0 -1
- package/dist/node-listener.test.js +0 -331
- package/dist/node-listener.test.js.map +0 -1
- package/dist/oauth-env.test.d.ts +0 -2
- package/dist/oauth-env.test.d.ts.map +0 -1
- package/dist/oauth-env.test.js +0 -76
- package/dist/oauth-env.test.js.map +0 -1
- package/dist/postgres.d.ts +0 -59
- package/dist/postgres.d.ts.map +0 -1
- package/dist/postgres.js +0 -80
- package/dist/postgres.js.map +0 -1
- package/dist/profile-advisory.d.ts +0 -19
- package/dist/profile-advisory.d.ts.map +0 -1
- package/dist/profile-advisory.js +0 -48
- package/dist/profile-advisory.js.map +0 -1
- package/dist/profile-advisory.test.d.ts +0 -2
- package/dist/profile-advisory.test.d.ts.map +0 -1
- package/dist/profile-advisory.test.js +0 -53
- package/dist/profile-advisory.test.js.map +0 -1
- package/dist/profile-constants.d.ts +0 -37
- package/dist/profile-constants.d.ts.map +0 -1
- package/dist/profile-constants.js +0 -37
- package/dist/profile-constants.js.map +0 -1
- package/dist/profile-migrations.d.ts +0 -71
- package/dist/profile-migrations.d.ts.map +0 -1
- package/dist/profile-migrations.js +0 -88
- package/dist/profile-migrations.js.map +0 -1
- package/dist/profile-migrations.test.d.ts +0 -2
- package/dist/profile-migrations.test.d.ts.map +0 -1
- package/dist/profile-migrations.test.js +0 -200
- package/dist/profile-migrations.test.js.map +0 -1
- package/dist/profile-record.d.ts +0 -60
- package/dist/profile-record.d.ts.map +0 -1
- package/dist/profile-record.js +0 -78
- package/dist/profile-record.js.map +0 -1
- package/dist/profile-slice.d.ts +0 -53
- package/dist/profile-slice.d.ts.map +0 -1
- package/dist/profile-slice.js +0 -73
- package/dist/profile-slice.js.map +0 -1
- package/dist/profile-slice.test.d.ts +0 -2
- package/dist/profile-slice.test.d.ts.map +0 -1
- package/dist/profile-slice.test.js +0 -73
- package/dist/profile-slice.test.js.map +0 -1
- package/dist/profile-store-env.d.ts +0 -34
- package/dist/profile-store-env.d.ts.map +0 -1
- package/dist/profile-store-env.js +0 -44
- package/dist/profile-store-env.js.map +0 -1
- package/dist/profile-store-env.test.d.ts +0 -2
- package/dist/profile-store-env.test.d.ts.map +0 -1
- package/dist/profile-store-env.test.js +0 -69
- package/dist/profile-store-env.test.js.map +0 -1
- package/dist/profile-store-postgres.d.ts +0 -33
- package/dist/profile-store-postgres.d.ts.map +0 -1
- package/dist/profile-store-postgres.js +0 -87
- package/dist/profile-store-postgres.js.map +0 -1
- package/dist/profile-store-raw.test.d.ts +0 -2
- package/dist/profile-store-raw.test.d.ts.map +0 -1
- package/dist/profile-store-raw.test.js +0 -185
- package/dist/profile-store-raw.test.js.map +0 -1
- package/dist/profile-store.d.ts +0 -85
- package/dist/profile-store.d.ts.map +0 -1
- package/dist/profile-store.js +0 -182
- package/dist/profile-store.js.map +0 -1
- package/dist/profile-store.test.d.ts +0 -2
- package/dist/profile-store.test.d.ts.map +0 -1
- package/dist/profile-store.test.js +0 -353
- package/dist/profile-store.test.js.map +0 -1
- package/dist/profile.d.ts +0 -75
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -85
- package/dist/profile.js.map +0 -1
- package/dist/profile.test.d.ts +0 -2
- package/dist/profile.test.d.ts.map +0 -1
- package/dist/profile.test.js +0 -71
- package/dist/profile.test.js.map +0 -1
- package/dist/request-context.test.d.ts +0 -2
- package/dist/request-context.test.d.ts.map +0 -1
- package/dist/request-context.test.js +0 -107
- package/dist/request-context.test.js.map +0 -1
- package/dist/served-fonts.d.ts +0 -38
- package/dist/served-fonts.d.ts.map +0 -1
- package/dist/served-fonts.js +0 -51
- package/dist/served-fonts.js.map +0 -1
- package/dist/served-fonts.test.d.ts +0 -2
- package/dist/served-fonts.test.d.ts.map +0 -1
- package/dist/served-fonts.test.js +0 -30
- package/dist/served-fonts.test.js.map +0 -1
- package/dist/server-locale.d.ts +0 -58
- package/dist/server-locale.d.ts.map +0 -1
- package/dist/server-locale.js +0 -64
- package/dist/server-locale.js.map +0 -1
- package/dist/server-locale.test.d.ts +0 -2
- package/dist/server-locale.test.d.ts.map +0 -1
- package/dist/server-locale.test.js +0 -90
- package/dist/server-locale.test.js.map +0 -1
- package/dist/shell-catalogue.d.ts +0 -12
- package/dist/shell-catalogue.d.ts.map +0 -1
- package/dist/shell-catalogue.js +0 -142
- package/dist/shell-catalogue.js.map +0 -1
- package/dist/shell-settings-contract.d.ts +0 -34
- package/dist/shell-settings-contract.d.ts.map +0 -1
- package/dist/shell-settings-contract.js +0 -21
- package/dist/shell-settings-contract.js.map +0 -1
- package/dist/shell-settings.d.ts +0 -24
- package/dist/shell-settings.d.ts.map +0 -1
- package/dist/shell-settings.js +0 -148
- package/dist/shell-settings.js.map +0 -1
- package/dist/shell-settings.test.d.ts +0 -2
- package/dist/shell-settings.test.d.ts.map +0 -1
- package/dist/shell-settings.test.js +0 -115
- package/dist/shell-settings.test.js.map +0 -1
- package/dist/testing/catalog-text.d.ts +0 -53
- package/dist/testing/catalog-text.d.ts.map +0 -1
- package/dist/testing/catalog-text.js +0 -146
- package/dist/testing/catalog-text.js.map +0 -1
- package/dist/testing/catalog-text.test.d.ts +0 -2
- package/dist/testing/catalog-text.test.d.ts.map +0 -1
- package/dist/testing/catalog-text.test.js +0 -137
- package/dist/testing/catalog-text.test.js.map +0 -1
- package/dist/testing/colors.d.ts +0 -34
- package/dist/testing/colors.d.ts.map +0 -1
- package/dist/testing/colors.js +0 -124
- package/dist/testing/colors.js.map +0 -1
- package/dist/testing/colors.test.d.ts +0 -2
- package/dist/testing/colors.test.d.ts.map +0 -1
- package/dist/testing/colors.test.js +0 -166
- package/dist/testing/colors.test.js.map +0 -1
- package/dist/testing/contrast.d.ts +0 -77
- package/dist/testing/contrast.d.ts.map +0 -1
- package/dist/testing/contrast.js +0 -382
- package/dist/testing/contrast.js.map +0 -1
- package/dist/testing/contrast.test.d.ts +0 -2
- package/dist/testing/contrast.test.d.ts.map +0 -1
- package/dist/testing/contrast.test.js +0 -230
- package/dist/testing/contrast.test.js.map +0 -1
- package/dist/testing/display-texts.d.ts +0 -23
- package/dist/testing/display-texts.d.ts.map +0 -1
- package/dist/testing/display-texts.js +0 -88
- package/dist/testing/display-texts.js.map +0 -1
- package/dist/testing/display-texts.test.d.ts +0 -2
- package/dist/testing/display-texts.test.d.ts.map +0 -1
- package/dist/testing/display-texts.test.js +0 -169
- package/dist/testing/display-texts.test.js.map +0 -1
- package/dist/testing/glossary.test.d.ts +0 -2
- package/dist/testing/glossary.test.d.ts.map +0 -1
- package/dist/testing/glossary.test.js +0 -78
- package/dist/testing/glossary.test.js.map +0 -1
- package/dist/testing/glyphs.d.ts +0 -27
- package/dist/testing/glyphs.d.ts.map +0 -1
- package/dist/testing/glyphs.js +0 -130
- package/dist/testing/glyphs.js.map +0 -1
- package/dist/testing/glyphs.test.d.ts +0 -2
- package/dist/testing/glyphs.test.d.ts.map +0 -1
- package/dist/testing/glyphs.test.js +0 -146
- package/dist/testing/glyphs.test.js.map +0 -1
- package/dist/testing/icon-sizes.d.ts +0 -22
- package/dist/testing/icon-sizes.d.ts.map +0 -1
- package/dist/testing/icon-sizes.js +0 -39
- package/dist/testing/icon-sizes.js.map +0 -1
- package/dist/testing/icon-sizes.test.d.ts +0 -2
- package/dist/testing/icon-sizes.test.d.ts.map +0 -1
- package/dist/testing/icon-sizes.test.js +0 -36
- package/dist/testing/icon-sizes.test.js.map +0 -1
- package/dist/testing/source-scan.d.ts +0 -16
- package/dist/testing/source-scan.d.ts.map +0 -1
- package/dist/testing/source-scan.js +0 -57
- package/dist/testing/source-scan.js.map +0 -1
- package/dist/testing/tone-pairs.d.ts +0 -20
- package/dist/testing/tone-pairs.d.ts.map +0 -1
- package/dist/testing/tone-pairs.js +0 -154
- package/dist/testing/tone-pairs.js.map +0 -1
- package/dist/testing/type-scale.d.ts +0 -40
- package/dist/testing/type-scale.d.ts.map +0 -1
- package/dist/testing/type-scale.js +0 -55
- package/dist/testing/type-scale.js.map +0 -1
- package/dist/testing/type-scale.test.d.ts +0 -2
- package/dist/testing/type-scale.test.d.ts.map +0 -1
- package/dist/testing/type-scale.test.js +0 -61
- package/dist/testing/type-scale.test.js.map +0 -1
- package/dist/tool-schema-trim.test.d.ts +0 -2
- package/dist/tool-schema-trim.test.d.ts.map +0 -1
- package/dist/tool-schema-trim.test.js +0 -53
- package/dist/tool-schema-trim.test.js.map +0 -1
- package/dist/toolsets.test.d.ts +0 -2
- package/dist/toolsets.test.d.ts.map +0 -1
- package/dist/toolsets.test.js +0 -86
- package/dist/toolsets.test.js.map +0 -1
- package/dist/ui/action-feedback.test.d.ts +0 -2
- package/dist/ui/action-feedback.test.d.ts.map +0 -1
- package/dist/ui/action-feedback.test.js +0 -77
- package/dist/ui/action-feedback.test.js.map +0 -1
- package/dist/ui/app-shell-providers.d.ts +0 -18
- package/dist/ui/app-shell-providers.d.ts.map +0 -1
- package/dist/ui/app-shell-providers.js +0 -19
- package/dist/ui/app-shell-providers.js.map +0 -1
- package/dist/ui/app-shell-providers.test.d.ts +0 -2
- package/dist/ui/app-shell-providers.test.d.ts.map +0 -1
- package/dist/ui/app-shell-providers.test.js +0 -249
- package/dist/ui/app-shell-providers.test.js.map +0 -1
- package/dist/ui/ask-ai-button.test.d.ts +0 -2
- package/dist/ui/ask-ai-button.test.d.ts.map +0 -1
- package/dist/ui/ask-ai-button.test.js +0 -103
- package/dist/ui/ask-ai-button.test.js.map +0 -1
- package/dist/ui/ask-ai-prompt.test.d.ts +0 -2
- package/dist/ui/ask-ai-prompt.test.d.ts.map +0 -1
- package/dist/ui/ask-ai-prompt.test.js +0 -240
- package/dist/ui/ask-ai-prompt.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts +0 -2
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js +0 -174
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts +0 -119
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.js +0 -231
- package/dist/ui/bpmn-heatmap/heat-utils.js.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts +0 -2
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.test.js +0 -59
- package/dist/ui/bpmn-heatmap/heat-utils.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap-labels.d.ts +0 -46
- package/dist/ui/bpmn-heatmap-labels.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap-labels.js +0 -16
- package/dist/ui/bpmn-heatmap-labels.js.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.d.ts +0 -38
- package/dist/ui/bpmn-heatmap-widget.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.js +0 -65
- package/dist/ui/bpmn-heatmap-widget.js.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.test.d.ts +0 -2
- package/dist/ui/bpmn-heatmap-widget.test.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.test.js +0 -173
- package/dist/ui/bpmn-heatmap-widget.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap.d.ts +0 -61
- package/dist/ui/bpmn-heatmap.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap.js +0 -119
- package/dist/ui/bpmn-heatmap.js.map +0 -1
- package/dist/ui/bpmn-tokens.test.d.ts +0 -2
- package/dist/ui/bpmn-tokens.test.d.ts.map +0 -1
- package/dist/ui/bpmn-tokens.test.js +0 -98
- package/dist/ui/bpmn-tokens.test.js.map +0 -1
- package/dist/ui/brand-gates.test.d.ts +0 -2
- package/dist/ui/brand-gates.test.d.ts.map +0 -1
- package/dist/ui/brand-gates.test.js +0 -131
- package/dist/ui/brand-gates.test.js.map +0 -1
- package/dist/ui/brand-mark.d.ts +0 -37
- package/dist/ui/brand-mark.d.ts.map +0 -1
- package/dist/ui/brand-mark.js +0 -33
- package/dist/ui/brand-mark.js.map +0 -1
- package/dist/ui/brand-mark.test.d.ts +0 -2
- package/dist/ui/brand-mark.test.d.ts.map +0 -1
- package/dist/ui/brand-mark.test.js +0 -111
- package/dist/ui/brand-mark.test.js.map +0 -1
- package/dist/ui/confirm-dialog.test.d.ts +0 -2
- package/dist/ui/confirm-dialog.test.d.ts.map +0 -1
- package/dist/ui/confirm-dialog.test.js +0 -115
- package/dist/ui/confirm-dialog.test.js.map +0 -1
- package/dist/ui/count-tone.test.d.ts +0 -2
- package/dist/ui/count-tone.test.d.ts.map +0 -1
- package/dist/ui/count-tone.test.js +0 -27
- package/dist/ui/count-tone.test.js.map +0 -1
- package/dist/ui/create-use-t.d.ts +0 -15
- package/dist/ui/create-use-t.d.ts.map +0 -1
- package/dist/ui/create-use-t.js +0 -17
- package/dist/ui/create-use-t.js.map +0 -1
- package/dist/ui/declare-served-fonts.test.d.ts +0 -2
- package/dist/ui/declare-served-fonts.test.d.ts.map +0 -1
- package/dist/ui/declare-served-fonts.test.js +0 -44
- package/dist/ui/declare-served-fonts.test.js.map +0 -1
- package/dist/ui/describe-error.test.d.ts +0 -2
- package/dist/ui/describe-error.test.d.ts.map +0 -1
- package/dist/ui/describe-error.test.js +0 -274
- package/dist/ui/describe-error.test.js.map +0 -1
- package/dist/ui/format.d.ts +0 -81
- package/dist/ui/format.d.ts.map +0 -1
- package/dist/ui/format.js +0 -189
- package/dist/ui/format.js.map +0 -1
- package/dist/ui/format.test.d.ts +0 -2
- package/dist/ui/format.test.d.ts.map +0 -1
- package/dist/ui/format.test.js +0 -181
- package/dist/ui/format.test.js.map +0 -1
- package/dist/ui/generic-widgets.d.ts +0 -15
- package/dist/ui/generic-widgets.d.ts.map +0 -1
- package/dist/ui/generic-widgets.js +0 -122
- package/dist/ui/generic-widgets.js.map +0 -1
- package/dist/ui/generic-widgets.test.d.ts +0 -2
- package/dist/ui/generic-widgets.test.d.ts.map +0 -1
- package/dist/ui/generic-widgets.test.js +0 -139
- package/dist/ui/generic-widgets.test.js.map +0 -1
- package/dist/ui/hand-off-button.test.d.ts +0 -2
- package/dist/ui/hand-off-button.test.d.ts.map +0 -1
- package/dist/ui/hand-off-button.test.js +0 -78
- package/dist/ui/hand-off-button.test.js.map +0 -1
- package/dist/ui/host-context.test.d.ts +0 -2
- package/dist/ui/host-context.test.d.ts.map +0 -1
- package/dist/ui/host-context.test.js +0 -160
- package/dist/ui/host-context.test.js.map +0 -1
- package/dist/ui/host-document.test.d.ts +0 -2
- package/dist/ui/host-document.test.d.ts.map +0 -1
- package/dist/ui/host-document.test.js +0 -112
- package/dist/ui/host-document.test.js.map +0 -1
- package/dist/ui/humanize-key.d.ts +0 -11
- package/dist/ui/humanize-key.d.ts.map +0 -1
- package/dist/ui/humanize-key.js +0 -26
- package/dist/ui/humanize-key.js.map +0 -1
- package/dist/ui/humanize-key.test.d.ts +0 -2
- package/dist/ui/humanize-key.test.d.ts.map +0 -1
- package/dist/ui/humanize-key.test.js +0 -42
- package/dist/ui/humanize-key.test.js.map +0 -1
- package/dist/ui/icon.d.ts +0 -37
- package/dist/ui/icon.d.ts.map +0 -1
- package/dist/ui/icon.js +0 -32
- package/dist/ui/icon.js.map +0 -1
- package/dist/ui/id-breaks.d.ts +0 -17
- package/dist/ui/id-breaks.d.ts.map +0 -1
- package/dist/ui/id-breaks.js +0 -36
- package/dist/ui/id-breaks.js.map +0 -1
- package/dist/ui/id-breaks.test.d.ts +0 -2
- package/dist/ui/id-breaks.test.d.ts.map +0 -1
- package/dist/ui/id-breaks.test.js +0 -37
- package/dist/ui/id-breaks.test.js.map +0 -1
- package/dist/ui/id-text.test.d.ts +0 -2
- package/dist/ui/id-text.test.d.ts.map +0 -1
- package/dist/ui/id-text.test.js +0 -122
- package/dist/ui/id-text.test.js.map +0 -1
- package/dist/ui/index.test.d.ts +0 -2
- package/dist/ui/index.test.d.ts.map +0 -1
- package/dist/ui/index.test.js +0 -34
- package/dist/ui/index.test.js.map +0 -1
- package/dist/ui/inline-fit-solve.test.d.ts +0 -2
- package/dist/ui/inline-fit-solve.test.d.ts.map +0 -1
- package/dist/ui/inline-fit-solve.test.js +0 -108
- package/dist/ui/inline-fit-solve.test.js.map +0 -1
- package/dist/ui/inline-fit-time.test.d.ts +0 -2
- package/dist/ui/inline-fit-time.test.d.ts.map +0 -1
- package/dist/ui/inline-fit-time.test.js +0 -110
- package/dist/ui/inline-fit-time.test.js.map +0 -1
- package/dist/ui/inline-fit.test-support.d.ts +0 -26
- package/dist/ui/inline-fit.test-support.d.ts.map +0 -1
- package/dist/ui/inline-fit.test-support.js +0 -34
- package/dist/ui/inline-fit.test-support.js.map +0 -1
- package/dist/ui/inline-fit.test.d.ts +0 -2
- package/dist/ui/inline-fit.test.d.ts.map +0 -1
- package/dist/ui/inline-fit.test.js +0 -159
- package/dist/ui/inline-fit.test.js.map +0 -1
- package/dist/ui/kit-labels.test.d.ts +0 -2
- package/dist/ui/kit-labels.test.d.ts.map +0 -1
- package/dist/ui/kit-labels.test.js +0 -98
- package/dist/ui/kit-labels.test.js.map +0 -1
- package/dist/ui/kit-type-roles.test.d.ts +0 -2
- package/dist/ui/kit-type-roles.test.d.ts.map +0 -1
- package/dist/ui/kit-type-roles.test.js +0 -122
- package/dist/ui/kit-type-roles.test.js.map +0 -1
- package/dist/ui/komet-svg.d.ts +0 -15
- package/dist/ui/komet-svg.d.ts.map +0 -1
- package/dist/ui/komet-svg.js +0 -21
- package/dist/ui/komet-svg.js.map +0 -1
- package/dist/ui/list-table.test.d.ts +0 -2
- package/dist/ui/list-table.test.d.ts.map +0 -1
- package/dist/ui/list-table.test.js +0 -169
- package/dist/ui/list-table.test.js.map +0 -1
- package/dist/ui/localized-app-view.d.ts +0 -40
- package/dist/ui/localized-app-view.d.ts.map +0 -1
- package/dist/ui/localized-app-view.js +0 -71
- package/dist/ui/localized-app-view.js.map +0 -1
- package/dist/ui/log-text.d.ts +0 -24
- package/dist/ui/log-text.d.ts.map +0 -1
- package/dist/ui/log-text.js +0 -31
- package/dist/ui/log-text.js.map +0 -1
- package/dist/ui/menu-item.d.ts +0 -12
- package/dist/ui/menu-item.d.ts.map +0 -1
- package/dist/ui/menu-item.js +0 -13
- package/dist/ui/menu-item.js.map +0 -1
- package/dist/ui/named-id.d.ts +0 -23
- package/dist/ui/named-id.d.ts.map +0 -1
- package/dist/ui/named-id.js +0 -21
- package/dist/ui/named-id.js.map +0 -1
- package/dist/ui/named-id.test.d.ts +0 -2
- package/dist/ui/named-id.test.d.ts.map +0 -1
- package/dist/ui/named-id.test.js +0 -57
- package/dist/ui/named-id.test.js.map +0 -1
- package/dist/ui/native-select.d.ts +0 -17
- package/dist/ui/native-select.d.ts.map +0 -1
- package/dist/ui/native-select.js +0 -20
- package/dist/ui/native-select.js.map +0 -1
- package/dist/ui/navigation-focus.d.ts +0 -20
- package/dist/ui/navigation-focus.d.ts.map +0 -1
- package/dist/ui/navigation-focus.js +0 -25
- package/dist/ui/navigation-focus.js.map +0 -1
- package/dist/ui/navigation-focus.test.d.ts +0 -2
- package/dist/ui/navigation-focus.test.d.ts.map +0 -1
- package/dist/ui/navigation-focus.test.js +0 -28
- package/dist/ui/navigation-focus.test.js.map +0 -1
- package/dist/ui/paged-list-footer.test.d.ts +0 -2
- package/dist/ui/paged-list-footer.test.d.ts.map +0 -1
- package/dist/ui/paged-list-footer.test.js +0 -128
- package/dist/ui/paged-list-footer.test.js.map +0 -1
- package/dist/ui/parse-tool-result.test.d.ts +0 -2
- package/dist/ui/parse-tool-result.test.d.ts.map +0 -1
- package/dist/ui/parse-tool-result.test.js +0 -88
- package/dist/ui/parse-tool-result.test.js.map +0 -1
- package/dist/ui/profile-gate.d.ts +0 -37
- package/dist/ui/profile-gate.d.ts.map +0 -1
- package/dist/ui/profile-gate.js +0 -126
- package/dist/ui/profile-gate.js.map +0 -1
- package/dist/ui/profile-gate.test.d.ts +0 -2
- package/dist/ui/profile-gate.test.d.ts.map +0 -1
- package/dist/ui/profile-gate.test.js +0 -246
- package/dist/ui/profile-gate.test.js.map +0 -1
- package/dist/ui/query-fallback.test.d.ts +0 -2
- package/dist/ui/query-fallback.test.d.ts.map +0 -1
- package/dist/ui/query-fallback.test.js +0 -49
- package/dist/ui/query-fallback.test.js.map +0 -1
- package/dist/ui/row-card.d.ts +0 -13
- package/dist/ui/row-card.d.ts.map +0 -1
- package/dist/ui/row-card.js +0 -11
- package/dist/ui/row-card.js.map +0 -1
- package/dist/ui/section.d.ts +0 -18
- package/dist/ui/section.d.ts.map +0 -1
- package/dist/ui/section.js +0 -14
- package/dist/ui/section.js.map +0 -1
- package/dist/ui/segmented-control.d.ts +0 -25
- package/dist/ui/segmented-control.d.ts.map +0 -1
- package/dist/ui/segmented-control.js +0 -22
- package/dist/ui/segmented-control.js.map +0 -1
- package/dist/ui/settings-labels.d.ts +0 -33
- package/dist/ui/settings-labels.d.ts.map +0 -1
- package/dist/ui/settings-labels.js +0 -50
- package/dist/ui/settings-labels.js.map +0 -1
- package/dist/ui/settings-layout.d.ts +0 -29
- package/dist/ui/settings-layout.d.ts.map +0 -1
- package/dist/ui/settings-layout.js +0 -49
- package/dist/ui/settings-layout.js.map +0 -1
- package/dist/ui/settings-layout.test.d.ts +0 -2
- package/dist/ui/settings-layout.test.d.ts.map +0 -1
- package/dist/ui/settings-layout.test.js +0 -73
- package/dist/ui/settings-layout.test.js.map +0 -1
- package/dist/ui/settings.d.ts +0 -47
- package/dist/ui/settings.d.ts.map +0 -1
- package/dist/ui/settings.js +0 -48
- package/dist/ui/settings.js.map +0 -1
- package/dist/ui/settings.test.d.ts +0 -2
- package/dist/ui/settings.test.d.ts.map +0 -1
- package/dist/ui/settings.test.js +0 -38
- package/dist/ui/settings.test.js.map +0 -1
- package/dist/ui/shell-settings.d.ts +0 -31
- package/dist/ui/shell-settings.d.ts.map +0 -1
- package/dist/ui/shell-settings.js +0 -97
- package/dist/ui/shell-settings.js.map +0 -1
- package/dist/ui/shell-settings.test.d.ts +0 -2
- package/dist/ui/shell-settings.test.d.ts.map +0 -1
- package/dist/ui/shell-settings.test.js +0 -108
- package/dist/ui/shell-settings.test.js.map +0 -1
- package/dist/ui/shell-widgets.d.ts +0 -14
- package/dist/ui/shell-widgets.d.ts.map +0 -1
- package/dist/ui/shell-widgets.js +0 -18
- package/dist/ui/shell-widgets.js.map +0 -1
- package/dist/ui/table.d.ts +0 -61
- package/dist/ui/table.d.ts.map +0 -1
- package/dist/ui/table.js +0 -43
- package/dist/ui/table.js.map +0 -1
- package/dist/ui/tone-components.test.d.ts +0 -2
- package/dist/ui/tone-components.test.d.ts.map +0 -1
- package/dist/ui/tone-components.test.js +0 -145
- package/dist/ui/tone-components.test.js.map +0 -1
- package/dist/ui/tone-contrast.test.d.ts +0 -2
- package/dist/ui/tone-contrast.test.d.ts.map +0 -1
- package/dist/ui/tone-contrast.test.js +0 -66
- package/dist/ui/tone-contrast.test.js.map +0 -1
- package/dist/ui/toolkit-overlap.test.d.ts +0 -2
- package/dist/ui/toolkit-overlap.test.d.ts.map +0 -1
- package/dist/ui/toolkit-overlap.test.js +0 -86
- package/dist/ui/toolkit-overlap.test.js.map +0 -1
- package/dist/ui/use-apply-theme.test.d.ts +0 -2
- package/dist/ui/use-apply-theme.test.d.ts.map +0 -1
- package/dist/ui/use-apply-theme.test.js +0 -102
- package/dist/ui/use-apply-theme.test.js.map +0 -1
- package/dist/ui/use-bpmn-viewer.test.d.ts +0 -2
- package/dist/ui/use-bpmn-viewer.test.d.ts.map +0 -1
- package/dist/ui/use-bpmn-viewer.test.js +0 -239
- package/dist/ui/use-bpmn-viewer.test.js.map +0 -1
- package/dist/ui/use-detail-view.test.d.ts +0 -2
- package/dist/ui/use-detail-view.test.d.ts.map +0 -1
- package/dist/ui/use-detail-view.test.js +0 -178
- package/dist/ui/use-detail-view.test.js.map +0 -1
- package/dist/ui/use-paged-list-view.test.d.ts +0 -2
- package/dist/ui/use-paged-list-view.test.d.ts.map +0 -1
- package/dist/ui/use-paged-list-view.test.js +0 -136
- package/dist/ui/use-paged-list-view.test.js.map +0 -1
- package/dist/ui/use-paged-view-data.seeded.test.d.ts +0 -2
- package/dist/ui/use-paged-view-data.seeded.test.d.ts.map +0 -1
- package/dist/ui/use-paged-view-data.seeded.test.js +0 -144
- package/dist/ui/use-paged-view-data.seeded.test.js.map +0 -1
- package/dist/ui/use-paged-view-data.test.d.ts +0 -2
- package/dist/ui/use-paged-view-data.test.d.ts.map +0 -1
- package/dist/ui/use-paged-view-data.test.js +0 -330
- package/dist/ui/use-paged-view-data.test.js.map +0 -1
- package/dist/ui/use-reset-on-change.d.ts +0 -22
- package/dist/ui/use-reset-on-change.d.ts.map +0 -1
- package/dist/ui/use-reset-on-change.js +0 -29
- package/dist/ui/use-reset-on-change.js.map +0 -1
- package/dist/ui/use-reset-on-change.test.d.ts +0 -2
- package/dist/ui/use-reset-on-change.test.d.ts.map +0 -1
- package/dist/ui/use-reset-on-change.test.js +0 -61
- package/dist/ui/use-reset-on-change.test.js.map +0 -1
- package/dist/ui/use-view-data.seeded.test.d.ts +0 -2
- package/dist/ui/use-view-data.seeded.test.d.ts.map +0 -1
- package/dist/ui/use-view-data.seeded.test.js +0 -168
- package/dist/ui/use-view-data.seeded.test.js.map +0 -1
- package/dist/ui/view-data-state.test.d.ts +0 -2
- package/dist/ui/view-data-state.test.d.ts.map +0 -1
- package/dist/ui/view-data-state.test.js +0 -62
- package/dist/ui/view-data-state.test.js.map +0 -1
- package/dist/ui/view-meta.test.d.ts +0 -2
- package/dist/ui/view-meta.test.d.ts.map +0 -1
- package/dist/ui/view-meta.test.js +0 -92
- package/dist/ui/view-meta.test.js.map +0 -1
- package/dist/ui/widget-shell.test.d.ts +0 -2
- package/dist/ui/widget-shell.test.d.ts.map +0 -1
- package/dist/ui/widget-shell.test.js +0 -41
- package/dist/ui/widget-shell.test.js.map +0 -1
- package/dist/widget-meta-defaults.d.ts +0 -48
- package/dist/widget-meta-defaults.d.ts.map +0 -1
- package/dist/widget-meta-defaults.js +0 -80
- package/dist/widget-meta-defaults.js.map +0 -1
- package/dist/widget-meta-defaults.test.d.ts +0 -2
- package/dist/widget-meta-defaults.test.d.ts.map +0 -1
- package/dist/widget-meta-defaults.test.js +0 -196
- package/dist/widget-meta-defaults.test.js.map +0 -1
- package/dist/widget-tool-bindings.test.d.ts +0 -2
- package/dist/widget-tool-bindings.test.d.ts.map +0 -1
- package/dist/widget-tool-bindings.test.js +0 -83
- package/dist/widget-tool-bindings.test.js.map +0 -1
- package/dist/with-tool-errors.test.d.ts +0 -2
- package/dist/with-tool-errors.test.d.ts.map +0 -1
- package/dist/with-tool-errors.test.js +0 -38
- package/dist/with-tool-errors.test.js.map +0 -1
package/dist/font-assets.test.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { FONT_CACHE_CONTROL, fontAssetsCsp, fontResponse, installFontAssets, loadServedFonts, servedFontPaths, } from "./font-assets.js";
|
|
3
|
-
import { SERVED_FONT_FILES } from "./served-fonts.js";
|
|
4
|
-
/** A woff2 file starts with the signature `wOF2`. */
|
|
5
|
-
const WOFF2_SIGNATURE = [0x77, 0x4f, 0x46, 0x32];
|
|
6
|
-
/** Records `server.get(path, handler)` like the health suite's fake host. */
|
|
7
|
-
function fakeHost() {
|
|
8
|
-
const routes = new Map();
|
|
9
|
-
const host = {
|
|
10
|
-
get: (path, handler) => {
|
|
11
|
-
routes.set(path, handler);
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
return { host, routes };
|
|
15
|
-
}
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
vi.restoreAllMocks();
|
|
18
|
-
});
|
|
19
|
-
describe("loadServedFonts", () => {
|
|
20
|
-
it("reads Geist and Geist Mono (latin, variable) from the fontsource packages", () => {
|
|
21
|
-
const fonts = loadServedFonts();
|
|
22
|
-
expect(fonts.map((font) => font.file)).toEqual([
|
|
23
|
-
"geist-latin-wght-normal.woff2",
|
|
24
|
-
"geist-mono-latin-wght-normal.woff2",
|
|
25
|
-
]);
|
|
26
|
-
for (const { file, body } of fonts) {
|
|
27
|
-
expect([...body.subarray(0, 4)], file).toEqual(WOFF2_SIGNATURE);
|
|
28
|
-
// Latin subsets, not the full families: tens of KB, not hundreds.
|
|
29
|
-
expect(body.byteLength, file).toBeGreaterThan(10_000);
|
|
30
|
-
expect(body.byteLength, file).toBeLessThan(60_000);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
it("finds each served file in its fontsource package under the name the views load", () => {
|
|
34
|
-
const paths = servedFontPaths();
|
|
35
|
-
expect(Object.keys(paths)).toEqual(Object.values(SERVED_FONT_FILES));
|
|
36
|
-
expect(paths[SERVED_FONT_FILES.sans]).toMatch(/@fontsource-variable\/geist\/files\/geist-latin-wght-normal\.woff2$/);
|
|
37
|
-
expect(paths[SERVED_FONT_FILES.mono]).toMatch(/@fontsource-variable\/geist-mono\/files\/geist-mono-latin-wght-normal\.woff2$/);
|
|
38
|
-
});
|
|
39
|
-
it("reads the files it is pointed at and fails loudly on a missing one", () => {
|
|
40
|
-
expect(() => loadServedFonts(() => ({ "x.woff2": "/nonexistent/x.woff2" }))).toThrow(/ENOENT/);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe("fontResponse", () => {
|
|
44
|
-
it("answers woff2, cached immutable for a year, readable from any origin", async () => {
|
|
45
|
-
const body = new Uint8Array([0x77, 0x4f, 0x46, 0x32, 1, 2]);
|
|
46
|
-
const res = fontResponse(body);
|
|
47
|
-
expect(res.status).toBe(200);
|
|
48
|
-
expect(Object.fromEntries(res.headers)).toEqual({
|
|
49
|
-
"content-type": "font/woff2",
|
|
50
|
-
"content-length": "6",
|
|
51
|
-
"cache-control": "public, max-age=31536000, immutable",
|
|
52
|
-
"access-control-allow-origin": "*",
|
|
53
|
-
"cross-origin-resource-policy": "cross-origin",
|
|
54
|
-
"x-content-type-options": "nosniff",
|
|
55
|
-
});
|
|
56
|
-
expect(FONT_CACHE_CONTROL).toBe("public, max-age=31536000, immutable");
|
|
57
|
-
expect(new Uint8Array(await res.arrayBuffer())).toEqual(body);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
describe("installFontAssets", () => {
|
|
61
|
-
it("registers one GET route per file under the versioned font path", async () => {
|
|
62
|
-
const { host, routes } = fakeHost();
|
|
63
|
-
const installed = installFontAssets(host);
|
|
64
|
-
expect(installed).toEqual([
|
|
65
|
-
"/fonts/geist-5.3.0/geist-latin-wght-normal.woff2",
|
|
66
|
-
"/fonts/geist-5.3.0/geist-mono-latin-wght-normal.woff2",
|
|
67
|
-
]);
|
|
68
|
-
expect([...routes.keys()]).toEqual(installed);
|
|
69
|
-
// A fresh Response per request: a body can be read only once.
|
|
70
|
-
const handler = routes.get(installed[0]);
|
|
71
|
-
const first = await handler({});
|
|
72
|
-
const second = await handler({});
|
|
73
|
-
expect(first).not.toBe(second);
|
|
74
|
-
expect((await first.arrayBuffer()).byteLength).toBe((await second.arrayBuffer()).byteLength);
|
|
75
|
-
});
|
|
76
|
-
it("serves what the loader returns under the path it is given", async () => {
|
|
77
|
-
const { host, routes } = fakeHost();
|
|
78
|
-
const fonts = [{ file: "x.woff2", body: new Uint8Array([1, 2, 3]) }];
|
|
79
|
-
expect(installFontAssets(host, { path: "/assets", load: () => fonts })).toEqual([
|
|
80
|
-
"/assets/x.woff2",
|
|
81
|
-
]);
|
|
82
|
-
const res = await routes.get("/assets/x.woff2")({});
|
|
83
|
-
expect(new Uint8Array(await res.arrayBuffer())).toEqual(new Uint8Array([1, 2, 3]));
|
|
84
|
-
});
|
|
85
|
-
it("boots on without the route when the files cannot be read — the views use the host's font", () => {
|
|
86
|
-
const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
87
|
-
const { host, routes } = fakeHost();
|
|
88
|
-
const failure = new Error("ENOENT");
|
|
89
|
-
const installed = installFontAssets(host, {
|
|
90
|
-
label: "edge",
|
|
91
|
-
load: () => {
|
|
92
|
-
throw failure;
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
expect(installed).toEqual([]);
|
|
96
|
-
expect(routes.size).toBe(0);
|
|
97
|
-
expect(warn).toHaveBeenCalledWith("[edge] Geist is not served (views use the host's font):", failure);
|
|
98
|
-
});
|
|
99
|
-
it("labels its warning `fonts` by default", () => {
|
|
100
|
-
const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
101
|
-
installFontAssets(fakeHost().host, {
|
|
102
|
-
load: () => {
|
|
103
|
-
throw new Error("x");
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
expect(warn).toHaveBeenCalledWith(expect.stringMatching(/^\[fonts\] /), expect.any(Error));
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe("fontAssetsCsp", () => {
|
|
110
|
-
it("admits MCP_URL's origin in resourceDomains — the origin the views load fonts from", () => {
|
|
111
|
-
expect(fontAssetsCsp({ MCP_URL: "https://mcp.example.com/mcp" })).toEqual({
|
|
112
|
-
resourceDomains: ["https://mcp.example.com"],
|
|
113
|
-
});
|
|
114
|
-
expect(fontAssetsCsp({ MCP_URL: " http://10.0.0.7:8400/ " })).toEqual({
|
|
115
|
-
resourceDomains: ["http://10.0.0.7:8400"],
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
it("declares nothing without MCP_URL: mcp-use appends the request-resolved origin itself", () => {
|
|
119
|
-
expect(fontAssetsCsp({})).toBeUndefined();
|
|
120
|
-
expect(fontAssetsCsp({ MCP_URL: " " })).toBeUndefined();
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
//# sourceMappingURL=font-assets.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"font-assets.test.js","sourceRoot":"","sources":["../src/font-assets.test.ts"],"names":[],"mappings":"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"}
|
package/dist/health.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.test.d.ts","sourceRoot":"","sources":["../src/health.test.ts"],"names":[],"mappings":""}
|
package/dist/health.test.js
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { installHealthEndpoints } from "./health.js";
|
|
3
|
-
function install(options) {
|
|
4
|
-
const routes = new Map();
|
|
5
|
-
const server = {
|
|
6
|
-
get: (path, handler) => routes.set(path, handler),
|
|
7
|
-
};
|
|
8
|
-
installHealthEndpoints(server, options);
|
|
9
|
-
const call = async (path) => {
|
|
10
|
-
const handler = routes.get(path);
|
|
11
|
-
if (!handler)
|
|
12
|
-
throw new Error(`no route registered for ${path}`);
|
|
13
|
-
const res = await handler({});
|
|
14
|
-
return { status: res.status, body: (await res.json()), headers: res.headers };
|
|
15
|
-
};
|
|
16
|
-
return { routes, call };
|
|
17
|
-
}
|
|
18
|
-
describe("installHealthEndpoints", () => {
|
|
19
|
-
afterEach(() => {
|
|
20
|
-
vi.restoreAllMocks();
|
|
21
|
-
});
|
|
22
|
-
it("registers live, ready and the bare prefix", () => {
|
|
23
|
-
const { routes } = install();
|
|
24
|
-
expect([...routes.keys()].sort()).toEqual(["/health", "/health/live", "/health/ready"]);
|
|
25
|
-
});
|
|
26
|
-
it("honors a custom prefix", () => {
|
|
27
|
-
const { routes } = install({ path: "/healthz" });
|
|
28
|
-
expect([...routes.keys()].sort()).toEqual(["/healthz", "/healthz/live", "/healthz/ready"]);
|
|
29
|
-
});
|
|
30
|
-
it("live answers up without running any readiness check", async () => {
|
|
31
|
-
const check = vi.fn();
|
|
32
|
-
const { call } = install({ readiness: { db: check } });
|
|
33
|
-
const res = await call("/health/live");
|
|
34
|
-
expect(res.status).toBe(200);
|
|
35
|
-
expect(res.body).toEqual({ status: "up" });
|
|
36
|
-
expect(check).not.toHaveBeenCalled();
|
|
37
|
-
});
|
|
38
|
-
it("marks probe responses uncacheable JSON", async () => {
|
|
39
|
-
const { call } = install();
|
|
40
|
-
const res = await call("/health/live");
|
|
41
|
-
expect(res.headers.get("cache-control")).toBe("no-store");
|
|
42
|
-
expect(res.headers.get("content-type")).toBe("application/json; charset=utf-8");
|
|
43
|
-
});
|
|
44
|
-
it("ready is up with no checks configured", async () => {
|
|
45
|
-
const { call } = install();
|
|
46
|
-
const res = await call("/health/ready");
|
|
47
|
-
expect(res.status).toBe(200);
|
|
48
|
-
expect(res.body).toEqual({ status: "up", checks: {} });
|
|
49
|
-
});
|
|
50
|
-
it("ready is up when every check passes (sync and async)", async () => {
|
|
51
|
-
const { call } = install({ readiness: { db: async () => { }, disk: () => { } } });
|
|
52
|
-
const res = await call("/health/ready");
|
|
53
|
-
expect(res.status).toBe(200);
|
|
54
|
-
expect(res.body).toEqual({ status: "up", checks: { db: "up", disk: "up" } });
|
|
55
|
-
});
|
|
56
|
-
it("ready is 503 naming the failing check, and logs the reason instead of exposing it", async () => {
|
|
57
|
-
const warn = vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
58
|
-
const { call } = install({
|
|
59
|
-
label: "test-app",
|
|
60
|
-
readiness: {
|
|
61
|
-
db: async () => {
|
|
62
|
-
throw new Error("connect ECONNREFUSED");
|
|
63
|
-
},
|
|
64
|
-
disk: () => { },
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
const res = await call("/health/ready");
|
|
68
|
-
expect(res.status).toBe(503);
|
|
69
|
-
expect(res.body).toEqual({ status: "down", checks: { db: "down", disk: "up" } });
|
|
70
|
-
expect(JSON.stringify(res.body)).not.toContain("ECONNREFUSED");
|
|
71
|
-
expect(warn).toHaveBeenCalledOnce();
|
|
72
|
-
expect(warn.mock.calls[0][0]).toBe('[test-app] readiness check "db" failed:');
|
|
73
|
-
expect(String(warn.mock.calls[0][1])).toContain("ECONNREFUSED");
|
|
74
|
-
});
|
|
75
|
-
it("treats a synchronous throw like a rejection", async () => {
|
|
76
|
-
vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
77
|
-
const { call } = install({
|
|
78
|
-
readiness: {
|
|
79
|
-
boom: () => {
|
|
80
|
-
throw new Error("sync");
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
const res = await call("/health/ready");
|
|
85
|
-
expect(res.status).toBe(503);
|
|
86
|
-
expect(res.body).toEqual({ status: "down", checks: { boom: "down" } });
|
|
87
|
-
});
|
|
88
|
-
it("fails a check that exceeds the timeout instead of hanging the probe", async () => {
|
|
89
|
-
const warn = vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
90
|
-
const { call } = install({
|
|
91
|
-
timeoutMs: 10,
|
|
92
|
-
readiness: { hung: () => new Promise(() => { }) },
|
|
93
|
-
});
|
|
94
|
-
const res = await call("/health/ready");
|
|
95
|
-
expect(res.status).toBe(503);
|
|
96
|
-
expect(res.body).toEqual({ status: "down", checks: { hung: "down" } });
|
|
97
|
-
expect(String(warn.mock.calls[0][1])).toContain("timed out after 10ms");
|
|
98
|
-
});
|
|
99
|
-
it("answers 503 draining once the host drains — without running the checks — while live stays up", async () => {
|
|
100
|
-
const check = vi.fn();
|
|
101
|
-
let draining = false;
|
|
102
|
-
const { call } = install({ readiness: { db: check }, draining: () => draining });
|
|
103
|
-
expect((await call("/health/ready")).status).toBe(200);
|
|
104
|
-
draining = true;
|
|
105
|
-
const ready = await call("/health/ready");
|
|
106
|
-
expect(ready.status).toBe(503);
|
|
107
|
-
expect(ready.body).toEqual({ status: "draining", checks: {} });
|
|
108
|
-
expect((await call("/health")).status).toBe(503);
|
|
109
|
-
expect(check).toHaveBeenCalledTimes(1);
|
|
110
|
-
expect((await call("/health/live")).status).toBe(200);
|
|
111
|
-
});
|
|
112
|
-
it("reports draining for a probe that was in flight when the drain began", async () => {
|
|
113
|
-
let draining = false;
|
|
114
|
-
const { call } = install({
|
|
115
|
-
readiness: {
|
|
116
|
-
db: () => {
|
|
117
|
-
draining = true;
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
draining: () => draining,
|
|
121
|
-
});
|
|
122
|
-
const res = await call("/health/ready");
|
|
123
|
-
expect(res.status).toBe(503);
|
|
124
|
-
expect(res.body).toEqual({ status: "draining", checks: { db: "up" } });
|
|
125
|
-
});
|
|
126
|
-
it("the bare prefix aliases readiness", async () => {
|
|
127
|
-
vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
128
|
-
const { call } = install({
|
|
129
|
-
readiness: {
|
|
130
|
-
db: async () => {
|
|
131
|
-
throw new Error("down");
|
|
132
|
-
},
|
|
133
|
-
},
|
|
134
|
-
});
|
|
135
|
-
const res = await call("/health");
|
|
136
|
-
expect(res.status).toBe(503);
|
|
137
|
-
expect(res.body).toEqual({ status: "down", checks: { db: "down" } });
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
//# sourceMappingURL=health.test.js.map
|
package/dist/health.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.test.js","sourceRoot":"","sources":["../src/health.test.ts"],"names":[],"mappings":"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"}
|
package/dist/host-boot.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-boot.test.d.ts","sourceRoot":"","sources":["../src/host-boot.test.ts"],"names":[],"mappings":""}
|
package/dist/host-boot.test.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { requestLogLevelWarning, resolvePort, swallowDevCliViewsPrime, toolCallOutcome, toolNameOf, } from "./host-boot.js";
|
|
3
|
-
describe("resolvePort", () => {
|
|
4
|
-
it("falls back to the default when PORT is unset", () => {
|
|
5
|
-
expect(resolvePort({ env: {} })).toBe(8400);
|
|
6
|
-
});
|
|
7
|
-
it("falls back on an empty or whitespace-only assignment (env_file `PORT=`)", () => {
|
|
8
|
-
expect(resolvePort({ env: { PORT: "" } })).toBe(8400);
|
|
9
|
-
expect(resolvePort({ env: { PORT: " " } })).toBe(8400);
|
|
10
|
-
});
|
|
11
|
-
it("parses an explicit port and honors a custom fallback", () => {
|
|
12
|
-
expect(resolvePort({ env: { PORT: "9000" } })).toBe(9000);
|
|
13
|
-
expect(resolvePort({ env: {}, fallback: 1234 })).toBe(1234);
|
|
14
|
-
});
|
|
15
|
-
it.each(["abc", "0", "65536", "-1", "80.5"])("rejects %j", (value) => {
|
|
16
|
-
expect(() => resolvePort({ env: { PORT: value } })).toThrow(`invalid PORT "${value}" — expected an integer 1-65535`);
|
|
17
|
-
});
|
|
18
|
-
it("prefixes the host label onto the error", () => {
|
|
19
|
-
expect(() => resolvePort({ env: { PORT: "abc" }, label: "test-app" })).toThrow(`[test-app] invalid PORT "abc" — expected an integer 1-65535`);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
describe("swallowDevCliViewsPrime", () => {
|
|
23
|
-
it("does nothing outside the dev CLI", () => {
|
|
24
|
-
const server = {};
|
|
25
|
-
swallowDevCliViewsPrime(server, {});
|
|
26
|
-
expect("__primeViews" in server).toBe(false);
|
|
27
|
-
});
|
|
28
|
-
it("replaces __primeViews with a no-op under the dev CLI", () => {
|
|
29
|
-
const server = {
|
|
30
|
-
__primeViews: () => {
|
|
31
|
-
throw new Error("double prime");
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
swallowDevCliViewsPrime(server, { MCP_USE_DEV_CLI: "1" });
|
|
35
|
-
expect(() => server.__primeViews?.()).not.toThrow();
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe("requestLogLevelWarning", () => {
|
|
39
|
-
it("stays silent at mcp-use's default level or when unset", () => {
|
|
40
|
-
expect(requestLogLevelWarning({})).toBeUndefined();
|
|
41
|
-
expect(requestLogLevelWarning({ MCP_USE_LOG_LEVEL: "info" })).toBeUndefined();
|
|
42
|
-
});
|
|
43
|
-
it("warns that debug logs tool inputs and outputs", () => {
|
|
44
|
-
expect(requestLogLevelWarning({ MCP_USE_LOG_LEVEL: " DEBUG " })).toMatch(/^MCP_USE_LOG_LEVEL=debug — mcp-use logs tool inputs and outputs/);
|
|
45
|
-
});
|
|
46
|
-
it("warns that trace logs full requests, bearer tokens included", () => {
|
|
47
|
-
expect(requestLogLevelWarning({ MCP_USE_LOG_LEVEL: "trace" })).toContain("bearer tokens");
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
describe("toolCallOutcome / toolNameOf", () => {
|
|
51
|
-
it("reads an isError result as error and a missing tool name as unknown", () => {
|
|
52
|
-
expect(toolCallOutcome({ isError: true })).toBe("error");
|
|
53
|
-
expect(toolCallOutcome({ content: [] })).toBe("ok");
|
|
54
|
-
expect(toolCallOutcome(undefined)).toBe("ok");
|
|
55
|
-
expect(toolNameOf({ params: { name: "notes_list_notes" } })).toBe("notes_list_notes");
|
|
56
|
-
expect(toolNameOf({})).toBe("unknown");
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=host-boot.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-boot.test.js","sourceRoot":"","sources":["../src/host-boot.test.ts"],"names":[],"mappings":"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"}
|
package/dist/http-edge.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-edge.test.d.ts","sourceRoot":"","sources":["../src/http-edge.test.ts"],"names":[],"mappings":""}
|
package/dist/http-edge.test.js
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { DEFAULT_MAX_BODY_BYTES, describeHttpEdgePolicy, edgeRejection, hostRejection, IN_FLIGHT_BODY_MULTIPLE, installHttpEdgeGuard, jsonRpcErrorBody, originRejection, resolveHttpEdgePolicy, } from "./http-edge.js";
|
|
3
|
-
const LOCAL = ["localhost", "127.0.0.1", "[::1]"];
|
|
4
|
-
describe("resolveHttpEdgePolicy", () => {
|
|
5
|
-
it("defaults to localhost-class only, a 4 MiB cap, a 16 MiB in-flight budget and an open /metrics", () => {
|
|
6
|
-
expect(resolveHttpEdgePolicy({})).toEqual({
|
|
7
|
-
allowedHosts: LOCAL,
|
|
8
|
-
allowedOrigins: LOCAL,
|
|
9
|
-
maxBodyBytes: 4 * 1024 * 1024,
|
|
10
|
-
maxInFlightBodyBytes: 16 * 1024 * 1024,
|
|
11
|
-
});
|
|
12
|
-
expect(DEFAULT_MAX_BODY_BYTES).toBe(4194304);
|
|
13
|
-
expect(IN_FLIGHT_BODY_MULTIPLE).toBe(4);
|
|
14
|
-
});
|
|
15
|
-
it("scales the in-flight budget with MCP_MAX_BODY_BYTES", () => {
|
|
16
|
-
expect(resolveHttpEdgePolicy({ MCP_MAX_BODY_BYTES: "1000" }).maxInFlightBodyBytes).toBe(4000);
|
|
17
|
-
});
|
|
18
|
-
it("derives the host and the origin from MCP_URL", () => {
|
|
19
|
-
const policy = resolveHttpEdgePolicy({ MCP_URL: "https://MCP.example.com:8443/base" });
|
|
20
|
-
expect(policy.allowedHosts).toEqual([...LOCAL, "mcp.example.com"]);
|
|
21
|
-
expect(policy.allowedOrigins).toEqual([...LOCAL, "https://mcp.example.com:8443"]);
|
|
22
|
-
});
|
|
23
|
-
it("adds the comma lists, normalized and de-duplicated", () => {
|
|
24
|
-
const policy = resolveHttpEdgePolicy({
|
|
25
|
-
MCP_URL: "https://mcp.example.com",
|
|
26
|
-
MCP_ALLOWED_HOSTS: " Internal.svc:8400 , mcp.example.com,,https://gw.example.com/x ",
|
|
27
|
-
MCP_ALLOWED_ORIGINS: "https://App.example.com/, app2.example.com",
|
|
28
|
-
});
|
|
29
|
-
expect(policy.allowedHosts).toEqual([
|
|
30
|
-
...LOCAL,
|
|
31
|
-
"mcp.example.com",
|
|
32
|
-
"internal.svc",
|
|
33
|
-
"gw.example.com",
|
|
34
|
-
]);
|
|
35
|
-
expect(policy.allowedOrigins).toEqual([
|
|
36
|
-
...LOCAL,
|
|
37
|
-
"https://mcp.example.com",
|
|
38
|
-
"https://app.example.com",
|
|
39
|
-
"app2.example.com",
|
|
40
|
-
]);
|
|
41
|
-
});
|
|
42
|
-
it("treats * as an explicit opt-out of that check", () => {
|
|
43
|
-
const policy = resolveHttpEdgePolicy({ MCP_ALLOWED_HOSTS: "*", MCP_ALLOWED_ORIGINS: "a.com,*" });
|
|
44
|
-
expect(policy.allowedHosts).toBe("*");
|
|
45
|
-
expect(policy.allowedOrigins).toBe("*");
|
|
46
|
-
});
|
|
47
|
-
it("reads the body cap and the metrics token", () => {
|
|
48
|
-
const policy = resolveHttpEdgePolicy({
|
|
49
|
-
MCP_MAX_BODY_BYTES: " 1024 ",
|
|
50
|
-
MCP_METRICS_TOKEN: " s3cret ",
|
|
51
|
-
});
|
|
52
|
-
expect(policy.maxBodyBytes).toBe(1024);
|
|
53
|
-
expect(policy.metricsToken).toBe("s3cret");
|
|
54
|
-
expect(resolveHttpEdgePolicy({ MCP_METRICS_TOKEN: " " })).not.toHaveProperty("metricsToken");
|
|
55
|
-
});
|
|
56
|
-
it.each([
|
|
57
|
-
[{ MCP_URL: "not a url" }, /MCP_URL "not a url" is not an absolute URL/],
|
|
58
|
-
[{ MCP_URL: "ftp://mcp.example.com" }, /must be an http\(s\) URL/],
|
|
59
|
-
[{ MCP_MAX_BODY_BYTES: "4MB" }, /MCP_MAX_BODY_BYTES "4MB" must be a positive integer/],
|
|
60
|
-
[{ MCP_MAX_BODY_BYTES: "0" }, /must be a positive integer/],
|
|
61
|
-
[{ MCP_MAX_BODY_BYTES: "1.5" }, /must be a positive integer/],
|
|
62
|
-
[{ MCP_ALLOWED_HOSTS: "bad host" }, /MCP_ALLOWED_HOSTS: "bad host" is not a hostname/],
|
|
63
|
-
[{ MCP_ALLOWED_ORIGINS: "https://" }, /MCP_ALLOWED_ORIGINS: "https:\/\/" is not an origin/],
|
|
64
|
-
[{ MCP_ALLOWED_ORIGINS: "data://x" }, /is not an origin/],
|
|
65
|
-
])("fails the boot on %j", (env, message) => {
|
|
66
|
-
expect(() => resolveHttpEdgePolicy(env)).toThrow(message);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe("describeHttpEdgePolicy", () => {
|
|
70
|
-
it("states hosts, origins, the cap and the metrics protection in one line", () => {
|
|
71
|
-
expect(describeHttpEdgePolicy(resolveHttpEdgePolicy({ MCP_URL: "https://mcp.example.com", MCP_METRICS_TOKEN: "t" }))).toBe("HTTP edge — hosts: localhost, 127.0.0.1, [::1], mcp.example.com; " +
|
|
72
|
-
"origins: localhost, 127.0.0.1, [::1], https://mcp.example.com; " +
|
|
73
|
-
"max body 4 MiB (16 MiB in flight); /metrics token-protected");
|
|
74
|
-
expect(describeHttpEdgePolicy(resolveHttpEdgePolicy({
|
|
75
|
-
MCP_ALLOWED_HOSTS: "*",
|
|
76
|
-
MCP_ALLOWED_ORIGINS: "*",
|
|
77
|
-
MCP_MAX_BODY_BYTES: "1572864",
|
|
78
|
-
}))).toBe("HTTP edge — hosts: any (validation off); origins: any (validation off); " +
|
|
79
|
-
"max body 1.5 MiB (6 MiB in flight); /metrics open");
|
|
80
|
-
});
|
|
81
|
-
it.each([
|
|
82
|
-
["1048576", "max body 1 MiB (4 MiB in flight);"],
|
|
83
|
-
["1024", "max body 1 KiB (4 KiB in flight);"],
|
|
84
|
-
["2560", "max body 2.5 KiB (10 KiB in flight);"],
|
|
85
|
-
["1023", "max body 1023 bytes (4 KiB in flight);"],
|
|
86
|
-
["640", "max body 640 bytes (2.5 KiB in flight);"],
|
|
87
|
-
["255", "max body 255 bytes (1020 bytes in flight);"],
|
|
88
|
-
])("formats a %s-byte cap readably", (bytes, expected) => {
|
|
89
|
-
expect(describeHttpEdgePolicy(resolveHttpEdgePolicy({ MCP_MAX_BODY_BYTES: bytes }))).toContain(expected);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
const policy = resolveHttpEdgePolicy({
|
|
93
|
-
MCP_URL: "https://mcp.example.com",
|
|
94
|
-
MCP_ALLOWED_ORIGINS: "https://app.example.com,tools.example.com",
|
|
95
|
-
});
|
|
96
|
-
describe("hostRejection", () => {
|
|
97
|
-
it.each([
|
|
98
|
-
"localhost",
|
|
99
|
-
"localhost:8400",
|
|
100
|
-
"127.0.0.1:1",
|
|
101
|
-
"[::1]:8400",
|
|
102
|
-
"mcp.example.com",
|
|
103
|
-
"MCP.EXAMPLE.COM:443",
|
|
104
|
-
])("admits %s", (host) => {
|
|
105
|
-
expect(hostRejection(host, policy)).toBeUndefined();
|
|
106
|
-
});
|
|
107
|
-
it("rejects a foreign host (port-agnostic) and points at the remedy", () => {
|
|
108
|
-
const reason = hostRejection("attacker.example:8400", policy);
|
|
109
|
-
expect(reason).toContain('Host "attacker.example" is not allowed');
|
|
110
|
-
expect(reason).toContain("MCP_URL");
|
|
111
|
-
expect(reason).toContain("MCP_ALLOWED_HOSTS");
|
|
112
|
-
// An IP that happens to reach the server is still not "ours".
|
|
113
|
-
expect(hostRejection("10.0.0.7:8400", policy)).toBeDefined();
|
|
114
|
-
});
|
|
115
|
-
it("rejects a missing or unparsable Host", () => {
|
|
116
|
-
expect(hostRejection(undefined, policy)).toBe("missing Host header");
|
|
117
|
-
expect(hostRejection("", policy)).toBe("missing Host header");
|
|
118
|
-
expect(hostRejection("a b", policy)).toBe('invalid Host header "a b"');
|
|
119
|
-
});
|
|
120
|
-
it("admits anything when Host validation is off", () => {
|
|
121
|
-
expect(hostRejection("attacker.example", { ...policy, allowedHosts: "*" })).toBeUndefined();
|
|
122
|
-
expect(hostRejection(undefined, { ...policy, allowedHosts: "*" })).toBeUndefined();
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
describe("originRejection", () => {
|
|
126
|
-
it("admits requests without an Origin (non-browser MCP clients)", () => {
|
|
127
|
-
expect(originRejection(undefined, "POST", policy)).toBeUndefined();
|
|
128
|
-
expect(originRejection("", "POST", policy)).toBeUndefined();
|
|
129
|
-
});
|
|
130
|
-
it("skips the safe methods, whatever the origin", () => {
|
|
131
|
-
expect(originRejection("https://attacker.example", "GET", policy)).toBeUndefined();
|
|
132
|
-
expect(originRejection("null", "HEAD", policy)).toBeUndefined();
|
|
133
|
-
});
|
|
134
|
-
it.each([
|
|
135
|
-
"http://localhost:6274",
|
|
136
|
-
"https://127.0.0.1",
|
|
137
|
-
"http://[::1]:3000",
|
|
138
|
-
"https://mcp.example.com",
|
|
139
|
-
"https://app.example.com",
|
|
140
|
-
"http://tools.example.com:9000",
|
|
141
|
-
])("admits %s", (origin) => {
|
|
142
|
-
expect(originRejection(origin, "POST", policy)).toBeUndefined();
|
|
143
|
-
});
|
|
144
|
-
it.each([
|
|
145
|
-
"https://attacker.example",
|
|
146
|
-
"http://app.example.com", // exact origin: scheme counts
|
|
147
|
-
"https://app.example.com:8443", // and so does the port
|
|
148
|
-
"https://mcp.example.com.attacker.example",
|
|
149
|
-
"null",
|
|
150
|
-
"not a url",
|
|
151
|
-
])("rejects %s on a POST", (origin) => {
|
|
152
|
-
const reason = originRejection(origin, "POST", policy);
|
|
153
|
-
expect(reason).toContain(`Origin "${origin}" is not allowed`);
|
|
154
|
-
expect(reason).toContain("MCP_ALLOWED_ORIGINS");
|
|
155
|
-
});
|
|
156
|
-
it("admits anything when Origin validation is off", () => {
|
|
157
|
-
expect(originRejection("https://attacker.example", "POST", { ...policy, allowedOrigins: "*" })).toBeUndefined();
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
describe("edgeRejection", () => {
|
|
161
|
-
const request = (overrides = {}) => ({
|
|
162
|
-
method: "POST",
|
|
163
|
-
path: "/mcp",
|
|
164
|
-
host: "mcp.example.com",
|
|
165
|
-
origin: undefined,
|
|
166
|
-
...overrides,
|
|
167
|
-
});
|
|
168
|
-
it("passes a request whose Host and Origin are allowed", () => {
|
|
169
|
-
expect(edgeRejection(request({ origin: "https://app.example.com" }), policy)).toBeUndefined();
|
|
170
|
-
});
|
|
171
|
-
it("reports the Host before the Origin", () => {
|
|
172
|
-
const reason = edgeRejection(request({ host: "attacker.example", origin: "https://attacker.example" }), policy);
|
|
173
|
-
expect(reason).toMatch(/^Host "attacker\.example" is not allowed/);
|
|
174
|
-
});
|
|
175
|
-
it("reports a foreign Origin when the Host passes", () => {
|
|
176
|
-
const reason = edgeRejection(request({ origin: "https://attacker.example" }), policy);
|
|
177
|
-
expect(reason).toMatch(/^Origin "https:\/\/attacker\.example" is not allowed/);
|
|
178
|
-
});
|
|
179
|
-
it("passes the exempt path prefixes whatever their headers", () => {
|
|
180
|
-
const foreign = { host: "10.0.0.7", origin: "https://attacker.example" };
|
|
181
|
-
expect(edgeRejection(request({ path: "/metrics", ...foreign }), policy, ["/metrics"])).toBe(undefined);
|
|
182
|
-
expect(edgeRejection(request({ path: "/metrics2", ...foreign }), policy, ["/metrics"])).toBeDefined();
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
describe("jsonRpcErrorBody", () => {
|
|
186
|
-
it("is a JSON-RPC error with a null id", () => {
|
|
187
|
-
expect(JSON.parse(jsonRpcErrorBody("nope"))).toEqual({
|
|
188
|
-
jsonrpc: "2.0",
|
|
189
|
-
error: { code: -32000, message: "nope" },
|
|
190
|
-
id: null,
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
describe("installHttpEdgeGuard", () => {
|
|
195
|
-
function install(edge, exemptPaths) {
|
|
196
|
-
let middleware;
|
|
197
|
-
const host = {
|
|
198
|
-
use: (path, handler) => {
|
|
199
|
-
expect(path).toBe("*");
|
|
200
|
-
middleware = handler;
|
|
201
|
-
},
|
|
202
|
-
};
|
|
203
|
-
installHttpEdgeGuard(host, edge, exemptPaths ? { exemptPaths } : undefined);
|
|
204
|
-
return async (method, path, headers) => {
|
|
205
|
-
const ctx = {
|
|
206
|
-
req: { method, path, header: (name) => headers[name] },
|
|
207
|
-
};
|
|
208
|
-
let passed = false;
|
|
209
|
-
const response = await middleware(ctx, () => {
|
|
210
|
-
passed = true;
|
|
211
|
-
return Promise.resolve();
|
|
212
|
-
});
|
|
213
|
-
return { passed, response: response ?? undefined };
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
it("passes allowed requests through", async () => {
|
|
217
|
-
const run = install(policy);
|
|
218
|
-
const result = await run("POST", "/mcp", {
|
|
219
|
-
host: "mcp.example.com",
|
|
220
|
-
origin: "https://app.example.com",
|
|
221
|
-
});
|
|
222
|
-
expect(result).toEqual({ passed: true, response: undefined });
|
|
223
|
-
});
|
|
224
|
-
it("answers 403 with a JSON-RPC body for a foreign Host, before the route runs", async () => {
|
|
225
|
-
const run = install(policy);
|
|
226
|
-
const { passed, response } = await run("POST", "/mcp", { host: "attacker.example" });
|
|
227
|
-
expect(passed).toBe(false);
|
|
228
|
-
expect(response?.status).toBe(403);
|
|
229
|
-
expect(response?.headers.get("content-type")).toBe("application/json");
|
|
230
|
-
const body = (await response.json());
|
|
231
|
-
expect(body.error.message).toMatch(/^Forbidden: Host "attacker\.example" is not allowed/);
|
|
232
|
-
});
|
|
233
|
-
it("answers 403 for a foreign Origin even when the Host is fine", async () => {
|
|
234
|
-
const run = install(policy);
|
|
235
|
-
const { passed, response } = await run("POST", "/mcp", {
|
|
236
|
-
host: "localhost:8400",
|
|
237
|
-
origin: "https://attacker.example",
|
|
238
|
-
});
|
|
239
|
-
expect(passed).toBe(false);
|
|
240
|
-
expect(response?.status).toBe(403);
|
|
241
|
-
});
|
|
242
|
-
it("exempts the listed path prefixes (probes reach the container by IP)", async () => {
|
|
243
|
-
const run = install(policy, ["/health"]);
|
|
244
|
-
for (const path of ["/health", "/health/ready"]) {
|
|
245
|
-
expect((await run("GET", path, { host: "10.0.0.7:8400" })).passed, path).toBe(true);
|
|
246
|
-
}
|
|
247
|
-
expect((await run("GET", "/healthz", { host: "10.0.0.7:8400" })).passed).toBe(false);
|
|
248
|
-
expect((await run("GET", "/mcp", { host: "10.0.0.7:8400" })).passed).toBe(false);
|
|
249
|
-
});
|
|
250
|
-
it("guards every path when nothing is exempt", async () => {
|
|
251
|
-
const run = install(policy);
|
|
252
|
-
expect((await run("GET", "/health", { host: "10.0.0.7" })).passed).toBe(false);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
//# sourceMappingURL=http-edge.test.js.map
|