@miragon/pulse-widget-shell 0.0.0-bootstrap.0 → 0.21.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/LICENSE +21 -0
- package/README.md +163 -3
- package/dist/adapt-data-widget.d.ts +7 -0
- package/dist/adapt-data-widget.d.ts.map +1 -0
- package/dist/adapt-data-widget.js +7 -0
- package/dist/adapt-data-widget.js.map +1 -0
- package/dist/bpmn-names.d.ts +42 -0
- package/dist/bpmn-names.d.ts.map +1 -0
- package/dist/bpmn-names.js +151 -0
- package/dist/bpmn-names.js.map +1 -0
- package/dist/bpmn-names.test.d.ts +2 -0
- package/dist/bpmn-names.test.d.ts.map +1 -0
- package/dist/bpmn-names.test.js +143 -0
- package/dist/bpmn-names.test.js.map +1 -0
- package/dist/build-data-feed-result.test.d.ts +2 -0
- package/dist/build-data-feed-result.test.d.ts.map +1 -0
- package/dist/build-data-feed-result.test.js +28 -0
- package/dist/build-data-feed-result.test.js.map +1 -0
- package/dist/build-single-widget-view.test.d.ts +2 -0
- package/dist/build-single-widget-view.test.d.ts.map +1 -0
- package/dist/build-single-widget-view.test.js +136 -0
- package/dist/build-single-widget-view.test.js.map +1 -0
- package/dist/builder-texts.d.ts +27 -0
- package/dist/builder-texts.d.ts.map +1 -0
- package/dist/builder-texts.js +32 -0
- package/dist/builder-texts.js.map +1 -0
- package/dist/builder-texts.test.d.ts +2 -0
- package/dist/builder-texts.test.d.ts.map +1 -0
- package/dist/builder-texts.test.js +54 -0
- package/dist/builder-texts.test.js.map +1 -0
- package/dist/catalogue-sync.d.ts +18 -0
- package/dist/catalogue-sync.d.ts.map +1 -0
- package/dist/catalogue-sync.js +31 -0
- package/dist/catalogue-sync.js.map +1 -0
- package/dist/catalogue-sync.test.d.ts +2 -0
- package/dist/catalogue-sync.test.d.ts.map +1 -0
- package/dist/catalogue-sync.test.js +22 -0
- package/dist/catalogue-sync.test.js.map +1 -0
- package/dist/composed-server.d.ts +110 -0
- package/dist/composed-server.d.ts.map +1 -0
- package/dist/composed-server.edge.test.d.ts +2 -0
- package/dist/composed-server.edge.test.d.ts.map +1 -0
- package/dist/composed-server.edge.test.js +184 -0
- package/dist/composed-server.edge.test.js.map +1 -0
- package/dist/composed-server.fonts.test.d.ts +2 -0
- package/dist/composed-server.fonts.test.d.ts.map +1 -0
- package/dist/composed-server.fonts.test.js +186 -0
- package/dist/composed-server.fonts.test.js.map +1 -0
- package/dist/composed-server.js +260 -0
- package/dist/composed-server.js.map +1 -0
- package/dist/composed-server.test.d.ts +2 -0
- package/dist/composed-server.test.d.ts.map +1 -0
- package/dist/composed-server.test.js +332 -0
- package/dist/composed-server.test.js.map +1 -0
- package/dist/composition.d.ts +155 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +163 -0
- package/dist/composition.js.map +1 -0
- package/dist/composition.test.d.ts +2 -0
- package/dist/composition.test.d.ts.map +1 -0
- package/dist/composition.test.js +275 -0
- package/dist/composition.test.js.map +1 -0
- package/dist/dashboard-store-postgres.d.ts +43 -0
- package/dist/dashboard-store-postgres.d.ts.map +1 -0
- package/dist/dashboard-store-postgres.js +225 -0
- package/dist/dashboard-store-postgres.js.map +1 -0
- package/dist/dashboard-store-postgres.test.d.ts +2 -0
- package/dist/dashboard-store-postgres.test.d.ts.map +1 -0
- package/dist/dashboard-store-postgres.test.js +272 -0
- package/dist/dashboard-store-postgres.test.js.map +1 -0
- package/dist/font-assets.d.ts +47 -0
- package/dist/font-assets.d.ts.map +1 -0
- package/dist/font-assets.js +93 -0
- package/dist/font-assets.js.map +1 -0
- package/dist/font-assets.test.d.ts +2 -0
- package/dist/font-assets.test.d.ts.map +1 -0
- package/dist/font-assets.test.js +123 -0
- package/dist/font-assets.test.js.map +1 -0
- package/dist/health.d.ts +59 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +74 -0
- package/dist/health.js.map +1 -0
- package/dist/health.test.d.ts +2 -0
- package/dist/health.test.d.ts.map +1 -0
- package/dist/health.test.js +140 -0
- package/dist/health.test.js.map +1 -0
- package/dist/host-boot.d.ts +56 -0
- package/dist/host-boot.d.ts.map +1 -0
- package/dist/host-boot.js +64 -0
- package/dist/host-boot.js.map +1 -0
- package/dist/host-boot.test.d.ts +2 -0
- package/dist/host-boot.test.d.ts.map +1 -0
- package/dist/host-boot.test.js +59 -0
- package/dist/host-boot.test.js.map +1 -0
- package/dist/http-edge.d.ts +117 -0
- package/dist/http-edge.d.ts.map +1 -0
- package/dist/http-edge.js +219 -0
- package/dist/http-edge.js.map +1 -0
- package/dist/http-edge.test.d.ts +2 -0
- package/dist/http-edge.test.d.ts.map +1 -0
- package/dist/http-edge.test.js +255 -0
- package/dist/http-edge.test.js.map +1 -0
- package/dist/metrics.d.ts +48 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +124 -0
- package/dist/metrics.js.map +1 -0
- package/dist/metrics.test.d.ts +2 -0
- package/dist/metrics.test.d.ts.map +1 -0
- package/dist/metrics.test.js +154 -0
- package/dist/metrics.test.js.map +1 -0
- package/dist/node-listener.d.ts +61 -0
- package/dist/node-listener.d.ts.map +1 -0
- package/dist/node-listener.js +165 -0
- package/dist/node-listener.js.map +1 -0
- package/dist/node-listener.test.d.ts +2 -0
- package/dist/node-listener.test.d.ts.map +1 -0
- package/dist/node-listener.test.js +331 -0
- package/dist/node-listener.test.js.map +1 -0
- package/dist/oauth-env.d.ts +42 -0
- package/dist/oauth-env.d.ts.map +1 -0
- package/dist/oauth-env.js +78 -0
- package/dist/oauth-env.js.map +1 -0
- package/dist/oauth-env.test.d.ts +2 -0
- package/dist/oauth-env.test.d.ts.map +1 -0
- package/dist/oauth-env.test.js +76 -0
- package/dist/oauth-env.test.js.map +1 -0
- package/dist/postgres.d.ts +59 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +80 -0
- package/dist/postgres.js.map +1 -0
- package/dist/profile-advisory.d.ts +19 -0
- package/dist/profile-advisory.d.ts.map +1 -0
- package/dist/profile-advisory.js +48 -0
- package/dist/profile-advisory.js.map +1 -0
- package/dist/profile-advisory.test.d.ts +2 -0
- package/dist/profile-advisory.test.d.ts.map +1 -0
- package/dist/profile-advisory.test.js +53 -0
- package/dist/profile-advisory.test.js.map +1 -0
- package/dist/profile-constants.d.ts +37 -0
- package/dist/profile-constants.d.ts.map +1 -0
- package/dist/profile-constants.js +37 -0
- package/dist/profile-constants.js.map +1 -0
- package/dist/profile-migrations.d.ts +71 -0
- package/dist/profile-migrations.d.ts.map +1 -0
- package/dist/profile-migrations.js +88 -0
- package/dist/profile-migrations.js.map +1 -0
- package/dist/profile-migrations.test.d.ts +2 -0
- package/dist/profile-migrations.test.d.ts.map +1 -0
- package/dist/profile-migrations.test.js +200 -0
- package/dist/profile-migrations.test.js.map +1 -0
- package/dist/profile-record.d.ts +60 -0
- package/dist/profile-record.d.ts.map +1 -0
- package/dist/profile-record.js +78 -0
- package/dist/profile-record.js.map +1 -0
- package/dist/profile-slice.d.ts +53 -0
- package/dist/profile-slice.d.ts.map +1 -0
- package/dist/profile-slice.js +73 -0
- package/dist/profile-slice.js.map +1 -0
- package/dist/profile-slice.test.d.ts +2 -0
- package/dist/profile-slice.test.d.ts.map +1 -0
- package/dist/profile-slice.test.js +73 -0
- package/dist/profile-slice.test.js.map +1 -0
- package/dist/profile-store-env.d.ts +34 -0
- package/dist/profile-store-env.d.ts.map +1 -0
- package/dist/profile-store-env.js +44 -0
- package/dist/profile-store-env.js.map +1 -0
- package/dist/profile-store-env.test.d.ts +2 -0
- package/dist/profile-store-env.test.d.ts.map +1 -0
- package/dist/profile-store-env.test.js +69 -0
- package/dist/profile-store-env.test.js.map +1 -0
- package/dist/profile-store-postgres.d.ts +33 -0
- package/dist/profile-store-postgres.d.ts.map +1 -0
- package/dist/profile-store-postgres.js +87 -0
- package/dist/profile-store-postgres.js.map +1 -0
- package/dist/profile-store-raw.test.d.ts +2 -0
- package/dist/profile-store-raw.test.d.ts.map +1 -0
- package/dist/profile-store-raw.test.js +185 -0
- package/dist/profile-store-raw.test.js.map +1 -0
- package/dist/profile-store.d.ts +85 -0
- package/dist/profile-store.d.ts.map +1 -0
- package/dist/profile-store.js +182 -0
- package/dist/profile-store.js.map +1 -0
- package/dist/profile-store.test.d.ts +2 -0
- package/dist/profile-store.test.d.ts.map +1 -0
- package/dist/profile-store.test.js +353 -0
- package/dist/profile-store.test.js.map +1 -0
- package/dist/profile.d.ts +75 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +85 -0
- package/dist/profile.js.map +1 -0
- package/dist/profile.test.d.ts +2 -0
- package/dist/profile.test.d.ts.map +1 -0
- package/dist/profile.test.js +71 -0
- package/dist/profile.test.js.map +1 -0
- package/dist/request-context.d.ts +47 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +85 -0
- package/dist/request-context.js.map +1 -0
- package/dist/request-context.test.d.ts +2 -0
- package/dist/request-context.test.d.ts.map +1 -0
- package/dist/request-context.test.js +107 -0
- package/dist/request-context.test.js.map +1 -0
- package/dist/served-fonts.d.ts +38 -0
- package/dist/served-fonts.d.ts.map +1 -0
- package/dist/served-fonts.js +51 -0
- package/dist/served-fonts.js.map +1 -0
- package/dist/served-fonts.test.d.ts +2 -0
- package/dist/served-fonts.test.d.ts.map +1 -0
- package/dist/served-fonts.test.js +30 -0
- package/dist/served-fonts.test.js.map +1 -0
- package/dist/server-locale.d.ts +58 -0
- package/dist/server-locale.d.ts.map +1 -0
- package/dist/server-locale.js +64 -0
- package/dist/server-locale.js.map +1 -0
- package/dist/server-locale.test.d.ts +2 -0
- package/dist/server-locale.test.d.ts.map +1 -0
- package/dist/server-locale.test.js +90 -0
- package/dist/server-locale.test.js.map +1 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +34 -0
- package/dist/server.js.map +1 -0
- package/dist/shell-catalogue.d.ts +12 -0
- package/dist/shell-catalogue.d.ts.map +1 -0
- package/dist/shell-catalogue.js +142 -0
- package/dist/shell-catalogue.js.map +1 -0
- package/dist/shell-settings-contract.d.ts +34 -0
- package/dist/shell-settings-contract.d.ts.map +1 -0
- package/dist/shell-settings-contract.js +21 -0
- package/dist/shell-settings-contract.js.map +1 -0
- package/dist/shell-settings.d.ts +24 -0
- package/dist/shell-settings.d.ts.map +1 -0
- package/dist/shell-settings.js +148 -0
- package/dist/shell-settings.js.map +1 -0
- package/dist/shell-settings.test.d.ts +2 -0
- package/dist/shell-settings.test.d.ts.map +1 -0
- package/dist/shell-settings.test.js +115 -0
- package/dist/shell-settings.test.js.map +1 -0
- package/dist/testing/catalog-text.d.ts +53 -0
- package/dist/testing/catalog-text.d.ts.map +1 -0
- package/dist/testing/catalog-text.js +146 -0
- package/dist/testing/catalog-text.js.map +1 -0
- package/dist/testing/catalog-text.test.d.ts +2 -0
- package/dist/testing/catalog-text.test.d.ts.map +1 -0
- package/dist/testing/catalog-text.test.js +137 -0
- package/dist/testing/catalog-text.test.js.map +1 -0
- package/dist/testing/colors.d.ts +34 -0
- package/dist/testing/colors.d.ts.map +1 -0
- package/dist/testing/colors.js +124 -0
- package/dist/testing/colors.js.map +1 -0
- package/dist/testing/colors.test.d.ts +2 -0
- package/dist/testing/colors.test.d.ts.map +1 -0
- package/dist/testing/colors.test.js +166 -0
- package/dist/testing/colors.test.js.map +1 -0
- package/dist/testing/contrast.d.ts +77 -0
- package/dist/testing/contrast.d.ts.map +1 -0
- package/dist/testing/contrast.js +382 -0
- package/dist/testing/contrast.js.map +1 -0
- package/dist/testing/contrast.test.d.ts +2 -0
- package/dist/testing/contrast.test.d.ts.map +1 -0
- package/dist/testing/contrast.test.js +230 -0
- package/dist/testing/contrast.test.js.map +1 -0
- package/dist/testing/display-texts.d.ts +23 -0
- package/dist/testing/display-texts.d.ts.map +1 -0
- package/dist/testing/display-texts.js +88 -0
- package/dist/testing/display-texts.js.map +1 -0
- package/dist/testing/display-texts.test.d.ts +2 -0
- package/dist/testing/display-texts.test.d.ts.map +1 -0
- package/dist/testing/display-texts.test.js +169 -0
- package/dist/testing/display-texts.test.js.map +1 -0
- package/dist/testing/glossary.d.ts +52 -0
- package/dist/testing/glossary.d.ts.map +1 -0
- package/dist/testing/glossary.js +135 -0
- package/dist/testing/glossary.js.map +1 -0
- package/dist/testing/glossary.test.d.ts +2 -0
- package/dist/testing/glossary.test.d.ts.map +1 -0
- package/dist/testing/glossary.test.js +78 -0
- package/dist/testing/glossary.test.js.map +1 -0
- package/dist/testing/glyphs.d.ts +27 -0
- package/dist/testing/glyphs.d.ts.map +1 -0
- package/dist/testing/glyphs.js +130 -0
- package/dist/testing/glyphs.js.map +1 -0
- package/dist/testing/glyphs.test.d.ts +2 -0
- package/dist/testing/glyphs.test.d.ts.map +1 -0
- package/dist/testing/glyphs.test.js +146 -0
- package/dist/testing/glyphs.test.js.map +1 -0
- package/dist/testing/icon-sizes.d.ts +22 -0
- package/dist/testing/icon-sizes.d.ts.map +1 -0
- package/dist/testing/icon-sizes.js +39 -0
- package/dist/testing/icon-sizes.js.map +1 -0
- package/dist/testing/icon-sizes.test.d.ts +2 -0
- package/dist/testing/icon-sizes.test.d.ts.map +1 -0
- package/dist/testing/icon-sizes.test.js +36 -0
- package/dist/testing/icon-sizes.test.js.map +1 -0
- package/dist/testing/index.d.ts +40 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +40 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/source-scan.d.ts +16 -0
- package/dist/testing/source-scan.d.ts.map +1 -0
- package/dist/testing/source-scan.js +57 -0
- package/dist/testing/source-scan.js.map +1 -0
- package/dist/testing/tone-pairs.d.ts +20 -0
- package/dist/testing/tone-pairs.d.ts.map +1 -0
- package/dist/testing/tone-pairs.js +154 -0
- package/dist/testing/tone-pairs.js.map +1 -0
- package/dist/testing/type-scale.d.ts +40 -0
- package/dist/testing/type-scale.d.ts.map +1 -0
- package/dist/testing/type-scale.js +55 -0
- package/dist/testing/type-scale.js.map +1 -0
- package/dist/testing/type-scale.test.d.ts +2 -0
- package/dist/testing/type-scale.test.d.ts.map +1 -0
- package/dist/testing/type-scale.test.js +61 -0
- package/dist/testing/type-scale.test.js.map +1 -0
- package/dist/tool-schema-trim.d.ts +24 -0
- package/dist/tool-schema-trim.d.ts.map +1 -0
- package/dist/tool-schema-trim.js +49 -0
- package/dist/tool-schema-trim.js.map +1 -0
- package/dist/tool-schema-trim.test.d.ts +2 -0
- package/dist/tool-schema-trim.test.d.ts.map +1 -0
- package/dist/tool-schema-trim.test.js +53 -0
- package/dist/tool-schema-trim.test.js.map +1 -0
- package/dist/toolsets.d.ts +76 -0
- package/dist/toolsets.d.ts.map +1 -0
- package/dist/toolsets.js +41 -0
- package/dist/toolsets.js.map +1 -0
- package/dist/toolsets.test.d.ts +2 -0
- package/dist/toolsets.test.d.ts.map +1 -0
- package/dist/toolsets.test.js +86 -0
- package/dist/toolsets.test.js.map +1 -0
- package/dist/ui/action-feedback.d.ts +33 -0
- package/dist/ui/action-feedback.d.ts.map +1 -0
- package/dist/ui/action-feedback.js +51 -0
- package/dist/ui/action-feedback.js.map +1 -0
- package/dist/ui/action-feedback.test.d.ts +2 -0
- package/dist/ui/action-feedback.test.d.ts.map +1 -0
- package/dist/ui/action-feedback.test.js +77 -0
- package/dist/ui/action-feedback.test.js.map +1 -0
- package/dist/ui/app-shell-providers.d.ts +18 -0
- package/dist/ui/app-shell-providers.d.ts.map +1 -0
- package/dist/ui/app-shell-providers.js +19 -0
- package/dist/ui/app-shell-providers.js.map +1 -0
- package/dist/ui/app-shell-providers.test.d.ts +2 -0
- package/dist/ui/app-shell-providers.test.d.ts.map +1 -0
- package/dist/ui/app-shell-providers.test.js +249 -0
- package/dist/ui/app-shell-providers.test.js.map +1 -0
- package/dist/ui/ask-ai-button.d.ts +56 -0
- package/dist/ui/ask-ai-button.d.ts.map +1 -0
- package/dist/ui/ask-ai-button.js +36 -0
- package/dist/ui/ask-ai-button.js.map +1 -0
- package/dist/ui/ask-ai-button.test.d.ts +2 -0
- package/dist/ui/ask-ai-button.test.d.ts.map +1 -0
- package/dist/ui/ask-ai-button.test.js +103 -0
- package/dist/ui/ask-ai-button.test.js.map +1 -0
- package/dist/ui/ask-ai-prompt.d.ts +115 -0
- package/dist/ui/ask-ai-prompt.d.ts.map +1 -0
- package/dist/ui/ask-ai-prompt.js +174 -0
- package/dist/ui/ask-ai-prompt.js.map +1 -0
- package/dist/ui/ask-ai-prompt.test.d.ts +2 -0
- package/dist/ui/ask-ai-prompt.test.d.ts.map +1 -0
- package/dist/ui/ask-ai-prompt.test.js +240 -0
- package/dist/ui/ask-ai-prompt.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js +174 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts +119 -0
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.js +231 -0
- package/dist/ui/bpmn-heatmap/heat-utils.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.js +59 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap-labels.d.ts +46 -0
- package/dist/ui/bpmn-heatmap-labels.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-labels.js +16 -0
- package/dist/ui/bpmn-heatmap-labels.js.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.d.ts +38 -0
- package/dist/ui/bpmn-heatmap-widget.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.js +65 -0
- package/dist/ui/bpmn-heatmap-widget.js.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap-widget.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.test.js +173 -0
- package/dist/ui/bpmn-heatmap-widget.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap.d.ts +61 -0
- package/dist/ui/bpmn-heatmap.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap.js +119 -0
- package/dist/ui/bpmn-heatmap.js.map +1 -0
- package/dist/ui/bpmn-tokens.d.ts +81 -0
- package/dist/ui/bpmn-tokens.d.ts.map +1 -0
- package/dist/ui/bpmn-tokens.js +114 -0
- package/dist/ui/bpmn-tokens.js.map +1 -0
- package/dist/ui/bpmn-tokens.test.d.ts +2 -0
- package/dist/ui/bpmn-tokens.test.d.ts.map +1 -0
- package/dist/ui/bpmn-tokens.test.js +98 -0
- package/dist/ui/bpmn-tokens.test.js.map +1 -0
- package/dist/ui/bpmn-zoom-controls.d.ts +30 -0
- package/dist/ui/bpmn-zoom-controls.d.ts.map +1 -0
- package/dist/ui/bpmn-zoom-controls.js +29 -0
- package/dist/ui/bpmn-zoom-controls.js.map +1 -0
- package/dist/ui/brand-gates.test.d.ts +2 -0
- package/dist/ui/brand-gates.test.d.ts.map +1 -0
- package/dist/ui/brand-gates.test.js +131 -0
- package/dist/ui/brand-gates.test.js.map +1 -0
- package/dist/ui/brand-mark.d.ts +37 -0
- package/dist/ui/brand-mark.d.ts.map +1 -0
- package/dist/ui/brand-mark.js +33 -0
- package/dist/ui/brand-mark.js.map +1 -0
- package/dist/ui/brand-mark.test.d.ts +2 -0
- package/dist/ui/brand-mark.test.d.ts.map +1 -0
- package/dist/ui/brand-mark.test.js +111 -0
- package/dist/ui/brand-mark.test.js.map +1 -0
- package/dist/ui/confirm-dialog.d.ts +55 -0
- package/dist/ui/confirm-dialog.d.ts.map +1 -0
- package/dist/ui/confirm-dialog.js +59 -0
- package/dist/ui/confirm-dialog.js.map +1 -0
- package/dist/ui/confirm-dialog.test.d.ts +2 -0
- package/dist/ui/confirm-dialog.test.d.ts.map +1 -0
- package/dist/ui/confirm-dialog.test.js +115 -0
- package/dist/ui/confirm-dialog.test.js.map +1 -0
- package/dist/ui/count-tone.d.ts +20 -0
- package/dist/ui/count-tone.d.ts.map +1 -0
- package/dist/ui/count-tone.js +27 -0
- package/dist/ui/count-tone.js.map +1 -0
- package/dist/ui/count-tone.test.d.ts +2 -0
- package/dist/ui/count-tone.test.d.ts.map +1 -0
- package/dist/ui/count-tone.test.js +27 -0
- package/dist/ui/count-tone.test.js.map +1 -0
- package/dist/ui/create-use-t.d.ts +15 -0
- package/dist/ui/create-use-t.d.ts.map +1 -0
- package/dist/ui/create-use-t.js +17 -0
- package/dist/ui/create-use-t.js.map +1 -0
- package/dist/ui/declare-served-fonts.d.ts +14 -0
- package/dist/ui/declare-served-fonts.d.ts.map +1 -0
- package/dist/ui/declare-served-fonts.js +38 -0
- package/dist/ui/declare-served-fonts.js.map +1 -0
- package/dist/ui/declare-served-fonts.test.d.ts +2 -0
- package/dist/ui/declare-served-fonts.test.d.ts.map +1 -0
- package/dist/ui/declare-served-fonts.test.js +44 -0
- package/dist/ui/declare-served-fonts.test.js.map +1 -0
- package/dist/ui/describe-error.d.ts +71 -0
- package/dist/ui/describe-error.d.ts.map +1 -0
- package/dist/ui/describe-error.js +175 -0
- package/dist/ui/describe-error.js.map +1 -0
- package/dist/ui/describe-error.test.d.ts +2 -0
- package/dist/ui/describe-error.test.d.ts.map +1 -0
- package/dist/ui/describe-error.test.js +274 -0
- package/dist/ui/describe-error.test.js.map +1 -0
- package/dist/ui/display-mode-toggle.d.ts +32 -0
- package/dist/ui/display-mode-toggle.d.ts.map +1 -0
- package/dist/ui/display-mode-toggle.js +39 -0
- package/dist/ui/display-mode-toggle.js.map +1 -0
- package/dist/ui/error-labels.d.ts +65 -0
- package/dist/ui/error-labels.d.ts.map +1 -0
- package/dist/ui/error-labels.js +111 -0
- package/dist/ui/error-labels.js.map +1 -0
- package/dist/ui/format.d.ts +81 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +189 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/format.test.d.ts +2 -0
- package/dist/ui/format.test.d.ts.map +1 -0
- package/dist/ui/format.test.js +181 -0
- package/dist/ui/format.test.js.map +1 -0
- package/dist/ui/generic-widgets.d.ts +15 -0
- package/dist/ui/generic-widgets.d.ts.map +1 -0
- package/dist/ui/generic-widgets.js +122 -0
- package/dist/ui/generic-widgets.js.map +1 -0
- package/dist/ui/generic-widgets.test.d.ts +2 -0
- package/dist/ui/generic-widgets.test.d.ts.map +1 -0
- package/dist/ui/generic-widgets.test.js +139 -0
- package/dist/ui/generic-widgets.test.js.map +1 -0
- package/dist/ui/hand-off-button.d.ts +44 -0
- package/dist/ui/hand-off-button.d.ts.map +1 -0
- package/dist/ui/hand-off-button.js +44 -0
- package/dist/ui/hand-off-button.js.map +1 -0
- package/dist/ui/hand-off-button.test.d.ts +2 -0
- package/dist/ui/hand-off-button.test.d.ts.map +1 -0
- package/dist/ui/hand-off-button.test.js +78 -0
- package/dist/ui/hand-off-button.test.js.map +1 -0
- package/dist/ui/host-context.d.ts +66 -0
- package/dist/ui/host-context.d.ts.map +1 -0
- package/dist/ui/host-context.js +122 -0
- package/dist/ui/host-context.js.map +1 -0
- package/dist/ui/host-context.test.d.ts +2 -0
- package/dist/ui/host-context.test.d.ts.map +1 -0
- package/dist/ui/host-context.test.js +160 -0
- package/dist/ui/host-context.test.js.map +1 -0
- package/dist/ui/host-document.d.ts +25 -0
- package/dist/ui/host-document.d.ts.map +1 -0
- package/dist/ui/host-document.js +93 -0
- package/dist/ui/host-document.js.map +1 -0
- package/dist/ui/host-document.test.d.ts +2 -0
- package/dist/ui/host-document.test.d.ts.map +1 -0
- package/dist/ui/host-document.test.js +112 -0
- package/dist/ui/host-document.test.js.map +1 -0
- package/dist/ui/host-widgets.d.ts +8 -0
- package/dist/ui/host-widgets.d.ts.map +1 -0
- package/dist/ui/host-widgets.js +18 -0
- package/dist/ui/host-widgets.js.map +1 -0
- package/dist/ui/humanize-key.d.ts +11 -0
- package/dist/ui/humanize-key.d.ts.map +1 -0
- package/dist/ui/humanize-key.js +26 -0
- package/dist/ui/humanize-key.js.map +1 -0
- package/dist/ui/humanize-key.test.d.ts +2 -0
- package/dist/ui/humanize-key.test.d.ts.map +1 -0
- package/dist/ui/humanize-key.test.js +42 -0
- package/dist/ui/humanize-key.test.js.map +1 -0
- package/dist/ui/icon.d.ts +37 -0
- package/dist/ui/icon.d.ts.map +1 -0
- package/dist/ui/icon.js +32 -0
- package/dist/ui/icon.js.map +1 -0
- package/dist/ui/id-breaks.d.ts +17 -0
- package/dist/ui/id-breaks.d.ts.map +1 -0
- package/dist/ui/id-breaks.js +36 -0
- package/dist/ui/id-breaks.js.map +1 -0
- package/dist/ui/id-breaks.test.d.ts +2 -0
- package/dist/ui/id-breaks.test.d.ts.map +1 -0
- package/dist/ui/id-breaks.test.js +37 -0
- package/dist/ui/id-breaks.test.js.map +1 -0
- package/dist/ui/id-text.d.ts +29 -0
- package/dist/ui/id-text.d.ts.map +1 -0
- package/dist/ui/id-text.js +103 -0
- package/dist/ui/id-text.js.map +1 -0
- package/dist/ui/id-text.test.d.ts +2 -0
- package/dist/ui/id-text.test.d.ts.map +1 -0
- package/dist/ui/id-text.test.js +122 -0
- package/dist/ui/id-text.test.js.map +1 -0
- package/dist/ui/index.d.ts +57 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +65 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.test.d.ts +2 -0
- package/dist/ui/index.test.d.ts.map +1 -0
- package/dist/ui/index.test.js +34 -0
- package/dist/ui/index.test.js.map +1 -0
- package/dist/ui/inline-budget.d.ts +35 -0
- package/dist/ui/inline-budget.d.ts.map +1 -0
- package/dist/ui/inline-budget.js +27 -0
- package/dist/ui/inline-budget.js.map +1 -0
- package/dist/ui/inline-fit-registry.d.ts +56 -0
- package/dist/ui/inline-fit-registry.d.ts.map +1 -0
- package/dist/ui/inline-fit-registry.js +114 -0
- package/dist/ui/inline-fit-registry.js.map +1 -0
- package/dist/ui/inline-fit-solve.d.ts +50 -0
- package/dist/ui/inline-fit-solve.d.ts.map +1 -0
- package/dist/ui/inline-fit-solve.js +83 -0
- package/dist/ui/inline-fit-solve.js.map +1 -0
- package/dist/ui/inline-fit-solve.test.d.ts +2 -0
- package/dist/ui/inline-fit-solve.test.d.ts.map +1 -0
- package/dist/ui/inline-fit-solve.test.js +108 -0
- package/dist/ui/inline-fit-solve.test.js.map +1 -0
- package/dist/ui/inline-fit-time.test.d.ts +2 -0
- package/dist/ui/inline-fit-time.test.d.ts.map +1 -0
- package/dist/ui/inline-fit-time.test.js +110 -0
- package/dist/ui/inline-fit-time.test.js.map +1 -0
- package/dist/ui/inline-fit.d.ts +77 -0
- package/dist/ui/inline-fit.d.ts.map +1 -0
- package/dist/ui/inline-fit.js +242 -0
- package/dist/ui/inline-fit.js.map +1 -0
- package/dist/ui/inline-fit.test-support.d.ts +26 -0
- package/dist/ui/inline-fit.test-support.d.ts.map +1 -0
- package/dist/ui/inline-fit.test-support.js +34 -0
- package/dist/ui/inline-fit.test-support.js.map +1 -0
- package/dist/ui/inline-fit.test.d.ts +2 -0
- package/dist/ui/inline-fit.test.d.ts.map +1 -0
- package/dist/ui/inline-fit.test.js +159 -0
- package/dist/ui/inline-fit.test.js.map +1 -0
- package/dist/ui/kit-labels.d.ts +80 -0
- package/dist/ui/kit-labels.d.ts.map +1 -0
- package/dist/ui/kit-labels.js +110 -0
- package/dist/ui/kit-labels.js.map +1 -0
- package/dist/ui/kit-labels.test.d.ts +2 -0
- package/dist/ui/kit-labels.test.d.ts.map +1 -0
- package/dist/ui/kit-labels.test.js +98 -0
- package/dist/ui/kit-labels.test.js.map +1 -0
- package/dist/ui/kit-type-roles.test.d.ts +2 -0
- package/dist/ui/kit-type-roles.test.d.ts.map +1 -0
- package/dist/ui/kit-type-roles.test.js +122 -0
- package/dist/ui/kit-type-roles.test.js.map +1 -0
- package/dist/ui/komet-svg.d.ts +15 -0
- package/dist/ui/komet-svg.d.ts.map +1 -0
- package/dist/ui/komet-svg.js +21 -0
- package/dist/ui/komet-svg.js.map +1 -0
- package/dist/ui/list-table.d.ts +108 -0
- package/dist/ui/list-table.d.ts.map +1 -0
- package/dist/ui/list-table.js +161 -0
- package/dist/ui/list-table.js.map +1 -0
- package/dist/ui/list-table.test.d.ts +2 -0
- package/dist/ui/list-table.test.d.ts.map +1 -0
- package/dist/ui/list-table.test.js +169 -0
- package/dist/ui/list-table.test.js.map +1 -0
- package/dist/ui/localized-app-view.d.ts +40 -0
- package/dist/ui/localized-app-view.d.ts.map +1 -0
- package/dist/ui/localized-app-view.js +71 -0
- package/dist/ui/localized-app-view.js.map +1 -0
- package/dist/ui/log-text.d.ts +24 -0
- package/dist/ui/log-text.d.ts.map +1 -0
- package/dist/ui/log-text.js +31 -0
- package/dist/ui/log-text.js.map +1 -0
- package/dist/ui/menu-item.d.ts +12 -0
- package/dist/ui/menu-item.d.ts.map +1 -0
- package/dist/ui/menu-item.js +13 -0
- package/dist/ui/menu-item.js.map +1 -0
- package/dist/ui/named-id.d.ts +23 -0
- package/dist/ui/named-id.d.ts.map +1 -0
- package/dist/ui/named-id.js +21 -0
- package/dist/ui/named-id.js.map +1 -0
- package/dist/ui/named-id.test.d.ts +2 -0
- package/dist/ui/named-id.test.d.ts.map +1 -0
- package/dist/ui/named-id.test.js +57 -0
- package/dist/ui/named-id.test.js.map +1 -0
- package/dist/ui/native-select.d.ts +17 -0
- package/dist/ui/native-select.d.ts.map +1 -0
- package/dist/ui/native-select.js +20 -0
- package/dist/ui/native-select.js.map +1 -0
- package/dist/ui/navigation-focus.d.ts +20 -0
- package/dist/ui/navigation-focus.d.ts.map +1 -0
- package/dist/ui/navigation-focus.js +25 -0
- package/dist/ui/navigation-focus.js.map +1 -0
- package/dist/ui/navigation-focus.test.d.ts +2 -0
- package/dist/ui/navigation-focus.test.d.ts.map +1 -0
- package/dist/ui/navigation-focus.test.js +28 -0
- package/dist/ui/navigation-focus.test.js.map +1 -0
- package/dist/ui/open-in-cockpit-link.d.ts +28 -0
- package/dist/ui/open-in-cockpit-link.d.ts.map +1 -0
- package/dist/ui/open-in-cockpit-link.js +41 -0
- package/dist/ui/open-in-cockpit-link.js.map +1 -0
- package/dist/ui/paged-list-footer.test.d.ts +2 -0
- package/dist/ui/paged-list-footer.test.d.ts.map +1 -0
- package/dist/ui/paged-list-footer.test.js +128 -0
- package/dist/ui/paged-list-footer.test.js.map +1 -0
- package/dist/ui/paged-rows.d.ts +24 -0
- package/dist/ui/paged-rows.d.ts.map +1 -0
- package/dist/ui/paged-rows.js +25 -0
- package/dist/ui/paged-rows.js.map +1 -0
- package/dist/ui/parse-tool-result.test.d.ts +2 -0
- package/dist/ui/parse-tool-result.test.d.ts.map +1 -0
- package/dist/ui/parse-tool-result.test.js +88 -0
- package/dist/ui/parse-tool-result.test.js.map +1 -0
- package/dist/ui/profile-gate.d.ts +37 -0
- package/dist/ui/profile-gate.d.ts.map +1 -0
- package/dist/ui/profile-gate.js +126 -0
- package/dist/ui/profile-gate.js.map +1 -0
- package/dist/ui/profile-gate.test.d.ts +2 -0
- package/dist/ui/profile-gate.test.d.ts.map +1 -0
- package/dist/ui/profile-gate.test.js +246 -0
- package/dist/ui/profile-gate.test.js.map +1 -0
- package/dist/ui/query-fallback.d.ts +27 -0
- package/dist/ui/query-fallback.d.ts.map +1 -0
- package/dist/ui/query-fallback.js +30 -0
- package/dist/ui/query-fallback.js.map +1 -0
- package/dist/ui/query-fallback.test.d.ts +2 -0
- package/dist/ui/query-fallback.test.d.ts.map +1 -0
- package/dist/ui/query-fallback.test.js +49 -0
- package/dist/ui/query-fallback.test.js.map +1 -0
- package/dist/ui/row-card.d.ts +13 -0
- package/dist/ui/row-card.d.ts.map +1 -0
- package/dist/ui/row-card.js +11 -0
- package/dist/ui/row-card.js.map +1 -0
- package/dist/ui/section.d.ts +18 -0
- package/dist/ui/section.d.ts.map +1 -0
- package/dist/ui/section.js +14 -0
- package/dist/ui/section.js.map +1 -0
- package/dist/ui/segmented-control.d.ts +25 -0
- package/dist/ui/segmented-control.d.ts.map +1 -0
- package/dist/ui/segmented-control.js +22 -0
- package/dist/ui/segmented-control.js.map +1 -0
- package/dist/ui/settings-labels.d.ts +33 -0
- package/dist/ui/settings-labels.d.ts.map +1 -0
- package/dist/ui/settings-labels.js +50 -0
- package/dist/ui/settings-labels.js.map +1 -0
- package/dist/ui/settings-layout.d.ts +29 -0
- package/dist/ui/settings-layout.d.ts.map +1 -0
- package/dist/ui/settings-layout.js +49 -0
- package/dist/ui/settings-layout.js.map +1 -0
- package/dist/ui/settings-layout.test.d.ts +2 -0
- package/dist/ui/settings-layout.test.d.ts.map +1 -0
- package/dist/ui/settings-layout.test.js +73 -0
- package/dist/ui/settings-layout.test.js.map +1 -0
- package/dist/ui/settings.d.ts +47 -0
- package/dist/ui/settings.d.ts.map +1 -0
- package/dist/ui/settings.js +48 -0
- package/dist/ui/settings.js.map +1 -0
- package/dist/ui/settings.test.d.ts +2 -0
- package/dist/ui/settings.test.d.ts.map +1 -0
- package/dist/ui/settings.test.js +38 -0
- package/dist/ui/settings.test.js.map +1 -0
- package/dist/ui/shell-host.d.ts +46 -0
- package/dist/ui/shell-host.d.ts.map +1 -0
- package/dist/ui/shell-host.js +56 -0
- package/dist/ui/shell-host.js.map +1 -0
- package/dist/ui/shell-settings.d.ts +31 -0
- package/dist/ui/shell-settings.d.ts.map +1 -0
- package/dist/ui/shell-settings.js +97 -0
- package/dist/ui/shell-settings.js.map +1 -0
- package/dist/ui/shell-settings.test.d.ts +2 -0
- package/dist/ui/shell-settings.test.d.ts.map +1 -0
- package/dist/ui/shell-settings.test.js +108 -0
- package/dist/ui/shell-settings.test.js.map +1 -0
- package/dist/ui/shell-widgets.d.ts +14 -0
- package/dist/ui/shell-widgets.d.ts.map +1 -0
- package/dist/ui/shell-widgets.js +18 -0
- package/dist/ui/shell-widgets.js.map +1 -0
- package/dist/ui/table.d.ts +61 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +43 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/tone-components.test.d.ts +2 -0
- package/dist/ui/tone-components.test.d.ts.map +1 -0
- package/dist/ui/tone-components.test.js +145 -0
- package/dist/ui/tone-components.test.js.map +1 -0
- package/dist/ui/tone-contrast.test.d.ts +2 -0
- package/dist/ui/tone-contrast.test.d.ts.map +1 -0
- package/dist/ui/tone-contrast.test.js +66 -0
- package/dist/ui/tone-contrast.test.js.map +1 -0
- package/dist/ui/toolkit-overlap.test.d.ts +2 -0
- package/dist/ui/toolkit-overlap.test.d.ts.map +1 -0
- package/dist/ui/toolkit-overlap.test.js +86 -0
- package/dist/ui/toolkit-overlap.test.js.map +1 -0
- package/dist/ui/use-apply-theme.d.ts +11 -0
- package/dist/ui/use-apply-theme.d.ts.map +1 -0
- package/dist/ui/use-apply-theme.js +37 -0
- package/dist/ui/use-apply-theme.js.map +1 -0
- package/dist/ui/use-apply-theme.test.d.ts +2 -0
- package/dist/ui/use-apply-theme.test.d.ts.map +1 -0
- package/dist/ui/use-apply-theme.test.js +102 -0
- package/dist/ui/use-apply-theme.test.js.map +1 -0
- package/dist/ui/use-bpmn-viewer.d.ts +135 -0
- package/dist/ui/use-bpmn-viewer.d.ts.map +1 -0
- package/dist/ui/use-bpmn-viewer.js +257 -0
- package/dist/ui/use-bpmn-viewer.js.map +1 -0
- package/dist/ui/use-bpmn-viewer.test.d.ts +2 -0
- package/dist/ui/use-bpmn-viewer.test.d.ts.map +1 -0
- package/dist/ui/use-bpmn-viewer.test.js +239 -0
- package/dist/ui/use-bpmn-viewer.test.js.map +1 -0
- package/dist/ui/use-detail-view.d.ts +49 -0
- package/dist/ui/use-detail-view.d.ts.map +1 -0
- package/dist/ui/use-detail-view.js +52 -0
- package/dist/ui/use-detail-view.js.map +1 -0
- package/dist/ui/use-detail-view.test.d.ts +2 -0
- package/dist/ui/use-detail-view.test.d.ts.map +1 -0
- package/dist/ui/use-detail-view.test.js +178 -0
- package/dist/ui/use-detail-view.test.js.map +1 -0
- package/dist/ui/use-paged-list-view.d.ts +48 -0
- package/dist/ui/use-paged-list-view.d.ts.map +1 -0
- package/dist/ui/use-paged-list-view.js +41 -0
- package/dist/ui/use-paged-list-view.js.map +1 -0
- package/dist/ui/use-paged-list-view.test.d.ts +2 -0
- package/dist/ui/use-paged-list-view.test.d.ts.map +1 -0
- package/dist/ui/use-paged-list-view.test.js +136 -0
- package/dist/ui/use-paged-list-view.test.js.map +1 -0
- package/dist/ui/use-paged-view-data.d.ts +103 -0
- package/dist/ui/use-paged-view-data.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.js +173 -0
- package/dist/ui/use-paged-view-data.js.map +1 -0
- package/dist/ui/use-paged-view-data.seeded.test.d.ts +2 -0
- package/dist/ui/use-paged-view-data.seeded.test.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.seeded.test.js +144 -0
- package/dist/ui/use-paged-view-data.seeded.test.js.map +1 -0
- package/dist/ui/use-paged-view-data.test.d.ts +2 -0
- package/dist/ui/use-paged-view-data.test.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.test.js +330 -0
- package/dist/ui/use-paged-view-data.test.js.map +1 -0
- package/dist/ui/use-reset-on-change.d.ts +22 -0
- package/dist/ui/use-reset-on-change.d.ts.map +1 -0
- package/dist/ui/use-reset-on-change.js +29 -0
- package/dist/ui/use-reset-on-change.js.map +1 -0
- package/dist/ui/use-reset-on-change.test.d.ts +2 -0
- package/dist/ui/use-reset-on-change.test.d.ts.map +1 -0
- package/dist/ui/use-reset-on-change.test.js +61 -0
- package/dist/ui/use-reset-on-change.test.js.map +1 -0
- package/dist/ui/use-view-data.seeded.test.d.ts +2 -0
- package/dist/ui/use-view-data.seeded.test.d.ts.map +1 -0
- package/dist/ui/use-view-data.seeded.test.js +168 -0
- package/dist/ui/use-view-data.seeded.test.js.map +1 -0
- package/dist/ui/view-data-state.d.ts +52 -0
- package/dist/ui/view-data-state.d.ts.map +1 -0
- package/dist/ui/view-data-state.js +54 -0
- package/dist/ui/view-data-state.js.map +1 -0
- package/dist/ui/view-data-state.test.d.ts +2 -0
- package/dist/ui/view-data-state.test.d.ts.map +1 -0
- package/dist/ui/view-data-state.test.js +62 -0
- package/dist/ui/view-data-state.test.js.map +1 -0
- package/dist/ui/view-meta.d.ts +70 -0
- package/dist/ui/view-meta.d.ts.map +1 -0
- package/dist/ui/view-meta.js +84 -0
- package/dist/ui/view-meta.js.map +1 -0
- package/dist/ui/view-meta.test.d.ts +2 -0
- package/dist/ui/view-meta.test.d.ts.map +1 -0
- package/dist/ui/view-meta.test.js +92 -0
- package/dist/ui/view-meta.test.js.map +1 -0
- package/dist/ui/view-refresh-state.d.ts +26 -0
- package/dist/ui/view-refresh-state.d.ts.map +1 -0
- package/dist/ui/view-refresh-state.js +15 -0
- package/dist/ui/view-refresh-state.js.map +1 -0
- package/dist/ui/widget-shell.d.ts +24 -0
- package/dist/ui/widget-shell.d.ts.map +1 -0
- package/dist/ui/widget-shell.js +50 -0
- package/dist/ui/widget-shell.js.map +1 -0
- package/dist/ui/widget-shell.test.d.ts +2 -0
- package/dist/ui/widget-shell.test.d.ts.map +1 -0
- package/dist/ui/widget-shell.test.js +41 -0
- package/dist/ui/widget-shell.test.js.map +1 -0
- package/dist/view-results.d.ts +42 -0
- package/dist/view-results.d.ts.map +1 -0
- package/dist/view-results.js +17 -0
- package/dist/view-results.js.map +1 -0
- package/dist/widget-meta-defaults.d.ts +48 -0
- package/dist/widget-meta-defaults.d.ts.map +1 -0
- package/dist/widget-meta-defaults.js +80 -0
- package/dist/widget-meta-defaults.js.map +1 -0
- package/dist/widget-meta-defaults.test.d.ts +2 -0
- package/dist/widget-meta-defaults.test.d.ts.map +1 -0
- package/dist/widget-meta-defaults.test.js +196 -0
- package/dist/widget-meta-defaults.test.js.map +1 -0
- package/dist/widget-tool-bindings.d.ts +71 -0
- package/dist/widget-tool-bindings.d.ts.map +1 -0
- package/dist/widget-tool-bindings.js +80 -0
- package/dist/widget-tool-bindings.js.map +1 -0
- package/dist/widget-tool-bindings.test.d.ts +2 -0
- package/dist/widget-tool-bindings.test.d.ts.map +1 -0
- package/dist/widget-tool-bindings.test.js +83 -0
- package/dist/widget-tool-bindings.test.js.map +1 -0
- package/dist/with-tool-errors.test.d.ts +2 -0
- package/dist/with-tool-errors.test.d.ts.map +1 -0
- package/dist/with-tool-errors.test.js +38 -0
- package/dist/with-tool-errors.test.js.map +1 -0
- package/package.json +113 -5
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot helpers shared by composed-server hosts (the stock server and the
|
|
3
|
+
* composed-server template). Server path only — extracted so host apps carry
|
|
4
|
+
* composition, not mcp-use workarounds, and a toolkit/mcp-use migration
|
|
5
|
+
* lands here once instead of in every host fork.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* The narrow structural surface needed for tool-call middleware
|
|
9
|
+
* (`server.use("mcp:tools/call", …)`, the metrics counter) — callers pass an
|
|
10
|
+
* `MCPServer` without this module importing mcp-use (same pattern as
|
|
11
|
+
* `McpMiddlewareHost`).
|
|
12
|
+
*/
|
|
13
|
+
export interface ToolCallMiddlewareHost {
|
|
14
|
+
use(pattern: "mcp:tools/call", fn: (ctx: unknown, next: () => Promise<unknown>) => Promise<unknown>): unknown;
|
|
15
|
+
}
|
|
16
|
+
/** The tool name from mcp-use's tools/call middleware ctx (`unknown` when the shape is off). */
|
|
17
|
+
export declare function toolNameOf(ctx: unknown): string;
|
|
18
|
+
/**
|
|
19
|
+
* `error` for an `isError` result (the toolkit's `withToolErrors` shape —
|
|
20
|
+
* handlers report failures as results, not throws), `ok` otherwise — what the
|
|
21
|
+
* metrics counter calls an error.
|
|
22
|
+
*/
|
|
23
|
+
export declare function toolCallOutcome(result: unknown): "ok" | "error";
|
|
24
|
+
/**
|
|
25
|
+
* mcp-use logs every request itself (one line per call: method, tool name,
|
|
26
|
+
* status, duration, an error's text), at `info` without any payload. Its
|
|
27
|
+
* `MCP_USE_LOG_LEVEL` raises that to `debug` (truncated tool inputs and
|
|
28
|
+
* outputs) or `trace` (full request and response dumps, headers included):
|
|
29
|
+
* process variables, business keys and bearer tokens then reach the log. The
|
|
30
|
+
* boot says so; `undefined` at `info` or unset.
|
|
31
|
+
*/
|
|
32
|
+
export declare function requestLogLevelWarning(env: NodeJS.ProcessEnv): string | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* `mcp-use dev` imports the host entry, takes the default export, and owns
|
|
35
|
+
* the socket itself. It also primes its own (empty — hosts bundle views via
|
|
36
|
+
* `app.bundle`) views manifest onto the export, which mcp-use rejects as a
|
|
37
|
+
* double prime. Swallow the CLI's prime; scoped to the dev CLI (the env var
|
|
38
|
+
* it sets before loading the entry) so a genuine double-prime still fails
|
|
39
|
+
* loudly.
|
|
40
|
+
*/
|
|
41
|
+
export declare function swallowDevCliViewsPrime(server: object, env?: NodeJS.ProcessEnv): void;
|
|
42
|
+
export interface ResolvePortOptions {
|
|
43
|
+
/** Defaults to `process.env`. */
|
|
44
|
+
env?: NodeJS.ProcessEnv;
|
|
45
|
+
/** Port to bind when `PORT` is unset or empty (default 8400). */
|
|
46
|
+
fallback?: number;
|
|
47
|
+
/** Host label, prefixed onto the error so it reads like the host's other boot lines. */
|
|
48
|
+
label?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* `PORT` from the environment, validated. `||` (not `??`) on purpose: an
|
|
52
|
+
* empty `PORT=` assignment from an env_file must fall back to the default —
|
|
53
|
+
* `Number("")` is 0, which would bind a random OS-assigned port.
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolvePort({ env, fallback, label, }?: ResolvePortOptions): number;
|
|
56
|
+
//# sourceMappingURL=host-boot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-boot.d.ts","sourceRoot":"","sources":["../src/host-boot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,CACD,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GACnE,OAAO,CAAA;CACX;AAED,gGAAgG;AAChG,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAM/D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAMjF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAGN;AAED,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAC1B,GAAiB,EACjB,QAAe,EACf,KAAK,GACN,GAAE,kBAAuB,GAAG,MAAM,CAOlC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot helpers shared by composed-server hosts (the stock server and the
|
|
3
|
+
* composed-server template). Server path only — extracted so host apps carry
|
|
4
|
+
* composition, not mcp-use workarounds, and a toolkit/mcp-use migration
|
|
5
|
+
* lands here once instead of in every host fork.
|
|
6
|
+
*/
|
|
7
|
+
/** The tool name from mcp-use's tools/call middleware ctx (`unknown` when the shape is off). */
|
|
8
|
+
export function toolNameOf(ctx) {
|
|
9
|
+
return ctx?.params?.name ?? "unknown";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* `error` for an `isError` result (the toolkit's `withToolErrors` shape —
|
|
13
|
+
* handlers report failures as results, not throws), `ok` otherwise — what the
|
|
14
|
+
* metrics counter calls an error.
|
|
15
|
+
*/
|
|
16
|
+
export function toolCallOutcome(result) {
|
|
17
|
+
const isError = typeof result === "object" &&
|
|
18
|
+
result !== null &&
|
|
19
|
+
result.isError === true;
|
|
20
|
+
return isError ? "error" : "ok";
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* mcp-use logs every request itself (one line per call: method, tool name,
|
|
24
|
+
* status, duration, an error's text), at `info` without any payload. Its
|
|
25
|
+
* `MCP_USE_LOG_LEVEL` raises that to `debug` (truncated tool inputs and
|
|
26
|
+
* outputs) or `trace` (full request and response dumps, headers included):
|
|
27
|
+
* process variables, business keys and bearer tokens then reach the log. The
|
|
28
|
+
* boot says so; `undefined` at `info` or unset.
|
|
29
|
+
*/
|
|
30
|
+
export function requestLogLevelWarning(env) {
|
|
31
|
+
const level = env.MCP_USE_LOG_LEVEL?.trim().toLowerCase();
|
|
32
|
+
if (level !== "debug" && level !== "trace")
|
|
33
|
+
return undefined;
|
|
34
|
+
return level === "trace"
|
|
35
|
+
? "MCP_USE_LOG_LEVEL=trace — mcp-use logs every request and response in full, headers (bearer tokens) included. For debugging only."
|
|
36
|
+
: "MCP_USE_LOG_LEVEL=debug — mcp-use logs tool inputs and outputs (process variables, business keys) on every call. For debugging only.";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* `mcp-use dev` imports the host entry, takes the default export, and owns
|
|
40
|
+
* the socket itself. It also primes its own (empty — hosts bundle views via
|
|
41
|
+
* `app.bundle`) views manifest onto the export, which mcp-use rejects as a
|
|
42
|
+
* double prime. Swallow the CLI's prime; scoped to the dev CLI (the env var
|
|
43
|
+
* it sets before loading the entry) so a genuine double-prime still fails
|
|
44
|
+
* loudly.
|
|
45
|
+
*/
|
|
46
|
+
export function swallowDevCliViewsPrime(server, env = process.env) {
|
|
47
|
+
if (!env.MCP_USE_DEV_CLI)
|
|
48
|
+
return;
|
|
49
|
+
server.__primeViews = () => { };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* `PORT` from the environment, validated. `||` (not `??`) on purpose: an
|
|
53
|
+
* empty `PORT=` assignment from an env_file must fall back to the default —
|
|
54
|
+
* `Number("")` is 0, which would bind a random OS-assigned port.
|
|
55
|
+
*/
|
|
56
|
+
export function resolvePort({ env = process.env, fallback = 8400, label, } = {}) {
|
|
57
|
+
const port = Number(env.PORT?.trim() || fallback);
|
|
58
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
59
|
+
const prefix = label ? `[${label}] ` : "";
|
|
60
|
+
throw new Error(`${prefix}invalid PORT "${env.PORT}" — expected an integer 1-65535`);
|
|
61
|
+
}
|
|
62
|
+
return port;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=host-boot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-boot.js","sourceRoot":"","sources":["../src/host-boot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,gGAAgG;AAChG,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,OAAQ,GAAkD,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS,CAAA;AACvF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACd,MAAgC,CAAC,OAAO,KAAK,IAAI,CAAA;IACpD,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAsB;IAC3D,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACzD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,SAAS,CAAA;IAC5D,OAAO,KAAK,KAAK,OAAO;QACtB,CAAC,CAAC,kIAAkI;QACpI,CAAC,CAAC,sIAAsI,CAAA;AAC5I,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,CAAC,GAAG,CAAC,eAAe;QAAE,OACzB;IAAC,MAAuC,CAAC,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AACnE,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,GAAG,GAAG,OAAO,CAAC,GAAG,EACjB,QAAQ,GAAG,IAAI,EACf,KAAK,MACiB,EAAE;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,CAAA;IACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QACzC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,iBAAiB,GAAG,CAAC,IAAI,iCAAiC,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-boot.test.d.ts","sourceRoot":"","sources":["../src/host-boot.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-boot.test.js","sourceRoot":"","sources":["../src/host-boot.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The HTTP edge of a composed server (server path only): WHO may talk to it.
|
|
3
|
+
*
|
|
4
|
+
* DNS-rebinding protection — Origin validation is a MUST of the MCP Streamable
|
|
5
|
+
* HTTP transport — as two allow-lists, resolved once per boot from the env:
|
|
6
|
+
*
|
|
7
|
+
* - `Host` (every request): a rebinding page reaches the server under the
|
|
8
|
+
* ATTACKER's hostname, so only hostnames the deployment owns pass —
|
|
9
|
+
* localhost-class always, plus `MCP_URL`'s host and `MCP_ALLOWED_HOSTS`.
|
|
10
|
+
* - `Origin` (non-GET/HEAD requests carrying one): a browser stamps every
|
|
11
|
+
* cross-origin (and every same-origin POST) request with the page's origin;
|
|
12
|
+
* localhost-class origins, `MCP_URL`'s origin and `MCP_ALLOWED_ORIGINS`
|
|
13
|
+
* pass. Requests WITHOUT an `Origin` always pass — non-browser MCP clients
|
|
14
|
+
* (Claude Code, gateways, `mcp-remote`) never send one.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately app-owned instead of mcp-use's `allowedHosts`/`allowedOrigins`
|
|
17
|
+
* (which guard every path): probes and scrapers address a container by its
|
|
18
|
+
* IP (Kubernetes, Fly), so the operational routes are exempt — see
|
|
19
|
+
* {@link installHttpEdgeGuard}. The size half of the edge (the body cap and the
|
|
20
|
+
* in-flight budget) lives in `node-listener.ts`; both read the one policy
|
|
21
|
+
* resolved here.
|
|
22
|
+
*/
|
|
23
|
+
/** Hostnames that always pass both checks — a loopback caller is the machine itself. */
|
|
24
|
+
export declare const LOCALHOST_HOSTNAMES: readonly string[];
|
|
25
|
+
/**
|
|
26
|
+
* Default request-body cap (4 MiB): far above any MCP JSON-RPC message, room
|
|
27
|
+
* for a multi-resource BPMN deployment. The cap bounds ONE request, not the
|
|
28
|
+
* process — mcp-use parses a JSON body into a heap graph up to ~20× its size
|
|
29
|
+
* before the OAuth gate runs — so the in-flight budget below bounds the total.
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEFAULT_MAX_BODY_BYTES: number;
|
|
32
|
+
/**
|
|
33
|
+
* The in-flight body budget, in cap-sized bodies: the bytes held across all
|
|
34
|
+
* requests whose response is still open (16 MiB by default) — room for
|
|
35
|
+
* thousands of ordinary JSON-RPC calls but only a handful of cap-sized
|
|
36
|
+
* uploads; a request past it gets 503.
|
|
37
|
+
*/
|
|
38
|
+
export declare const IN_FLIGHT_BODY_MULTIPLE = 4;
|
|
39
|
+
/**
|
|
40
|
+
* The env vars the shared edge reads. Composition roots spread them into
|
|
41
|
+
* their known-var list (typo warner, `.env.example` guards) instead of
|
|
42
|
+
* re-listing them.
|
|
43
|
+
*/
|
|
44
|
+
export declare const HTTP_EDGE_ENV_VARS: readonly ["MCP_URL", "MCP_ALLOWED_HOSTS", "MCP_ALLOWED_ORIGINS", "MCP_MAX_BODY_BYTES", "MCP_METRICS_TOKEN"];
|
|
45
|
+
/** `"*"` switches the check off — an explicit opt-out for edges that validate themselves. */
|
|
46
|
+
export type AllowList = readonly string[] | "*";
|
|
47
|
+
export interface HttpEdgePolicy {
|
|
48
|
+
/** Allowed `Host` hostnames (port-agnostic, lower-case), localhost-class first. */
|
|
49
|
+
allowedHosts: AllowList;
|
|
50
|
+
/**
|
|
51
|
+
* Allowed `Origin`s: an entry with a scheme is an exact origin
|
|
52
|
+
* (`https://app.example.com`), a bare entry a hostname on any scheme/port —
|
|
53
|
+
* the localhost-class entries are bare.
|
|
54
|
+
*/
|
|
55
|
+
allowedOrigins: AllowList;
|
|
56
|
+
/** Request-body cap in bytes (`MCP_MAX_BODY_BYTES`). */
|
|
57
|
+
maxBodyBytes: number;
|
|
58
|
+
/** Body bytes held across all in-flight requests ({@link IN_FLIGHT_BODY_MULTIPLE} × the cap). */
|
|
59
|
+
maxInFlightBodyBytes: number;
|
|
60
|
+
/** Bearer token `/metrics` requires (`MCP_METRICS_TOKEN`); unset = open. */
|
|
61
|
+
metricsToken?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the edge policy from the env, ONCE per boot. Invalid values fail the
|
|
65
|
+
* boot instead of silently widening (or narrowing) the edge.
|
|
66
|
+
*/
|
|
67
|
+
export declare function resolveHttpEdgePolicy(env?: NodeJS.ProcessEnv): HttpEdgePolicy;
|
|
68
|
+
/** The one boot line stating the edge, so a 403 in the field is explainable from the log. */
|
|
69
|
+
export declare function describeHttpEdgePolicy(policy: HttpEdgePolicy): string;
|
|
70
|
+
/** Why a `Host` header is refused, or `undefined` when it passes. */
|
|
71
|
+
export declare function hostRejection(host: string | undefined, policy: HttpEdgePolicy): string | undefined;
|
|
72
|
+
/** Why an `Origin` header is refused, or `undefined` when it passes. */
|
|
73
|
+
export declare function originRejection(origin: string | undefined, method: string, policy: HttpEdgePolicy): string | undefined;
|
|
74
|
+
/** What the guard reads from a request — in the hono middleware and the Node listener alike. */
|
|
75
|
+
export interface EdgeRequest {
|
|
76
|
+
method: string;
|
|
77
|
+
/** The URL path, without the query. */
|
|
78
|
+
path: string;
|
|
79
|
+
host: string | undefined;
|
|
80
|
+
origin: string | undefined;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* THE guard decision: why `request` is refused, or `undefined` when it passes
|
|
84
|
+
* (an exempt path always passes). Single-sourced so the Node listener — which
|
|
85
|
+
* discards a refused request's body unread — and the hono guard — which
|
|
86
|
+
* answers it — never disagree.
|
|
87
|
+
*/
|
|
88
|
+
export declare function edgeRejection(request: EdgeRequest, policy: HttpEdgePolicy, exemptPaths?: readonly string[]): string | undefined;
|
|
89
|
+
/** A JSON-RPC-shaped error body, so MCP clients surface the reason verbatim. */
|
|
90
|
+
export declare function jsonRpcErrorBody(message: string): string;
|
|
91
|
+
/** The slice of hono's context the guard reads — structural, like the other host ports. */
|
|
92
|
+
export interface EdgeGuardContext {
|
|
93
|
+
req: {
|
|
94
|
+
method: string;
|
|
95
|
+
path: string;
|
|
96
|
+
header(name: string): string | undefined;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/** `server.use("*", middleware)` with a middleware that may answer itself. */
|
|
100
|
+
export interface EdgeGuardHost {
|
|
101
|
+
use(path: "*", handler: (ctx: EdgeGuardContext, next: () => Promise<void>) => Promise<Response | void>): unknown;
|
|
102
|
+
}
|
|
103
|
+
export interface EdgeGuardOptions {
|
|
104
|
+
/**
|
|
105
|
+
* Path prefixes answered regardless of `Host`/`Origin` — the read-only
|
|
106
|
+
* operational routes, which probes and scrapers reach by container IP.
|
|
107
|
+
*/
|
|
108
|
+
exemptPaths?: readonly string[];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Register the Host/Origin guard on every route registered AFTER it (hono
|
|
112
|
+
* runs handlers in registration order) — the MCP endpoint and the view
|
|
113
|
+
* assets are mounted by mcp-use later, so they are always covered. A refused
|
|
114
|
+
* request gets 403 with the reason and the env var that would admit it.
|
|
115
|
+
*/
|
|
116
|
+
export declare function installHttpEdgeGuard(server: EdgeGuardHost, policy: HttpEdgePolicy, { exemptPaths }?: EdgeGuardOptions): void;
|
|
117
|
+
//# sourceMappingURL=http-edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-edge.d.ts","sourceRoot":"","sources":["../src/http-edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAwC,CAAA;AAEzF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAAkB,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,6GAMrB,CAAA;AAEV,6FAA6F;AAC7F,MAAM,MAAM,SAAS,GAAG,SAAS,MAAM,EAAE,GAAG,GAAG,CAAA;AAE/C,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,YAAY,EAAE,SAAS,CAAA;IACvB;;;;OAIG;IACH,cAAc,EAAE,SAAS,CAAA;IACzB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAA;IACpB,iGAAiG;IACjG,oBAAoB,EAAE,MAAM,CAAA;IAC5B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAiED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,CAe1F;AAQD,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQrE;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,EAAE,cAAc,GACrB,MAAM,GAAG,SAAS,CAcpB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,GACrB,MAAM,GAAG,SAAS,CAsBpB;AAED,gGAAgG;AAChG,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,cAAc,EACtB,WAAW,GAAE,SAAS,MAAM,EAAO,GAClC,MAAM,GAAG,SAAS,CAKpB;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AASD,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAChF;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,GAAG,CACD,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GACtF,OAAO,CAAA;CACX;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,cAAc,EACtB,EAAE,WAAgB,EAAE,GAAE,gBAAqB,GAC1C,IAAI,CAWN"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The HTTP edge of a composed server (server path only): WHO may talk to it.
|
|
3
|
+
*
|
|
4
|
+
* DNS-rebinding protection — Origin validation is a MUST of the MCP Streamable
|
|
5
|
+
* HTTP transport — as two allow-lists, resolved once per boot from the env:
|
|
6
|
+
*
|
|
7
|
+
* - `Host` (every request): a rebinding page reaches the server under the
|
|
8
|
+
* ATTACKER's hostname, so only hostnames the deployment owns pass —
|
|
9
|
+
* localhost-class always, plus `MCP_URL`'s host and `MCP_ALLOWED_HOSTS`.
|
|
10
|
+
* - `Origin` (non-GET/HEAD requests carrying one): a browser stamps every
|
|
11
|
+
* cross-origin (and every same-origin POST) request with the page's origin;
|
|
12
|
+
* localhost-class origins, `MCP_URL`'s origin and `MCP_ALLOWED_ORIGINS`
|
|
13
|
+
* pass. Requests WITHOUT an `Origin` always pass — non-browser MCP clients
|
|
14
|
+
* (Claude Code, gateways, `mcp-remote`) never send one.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately app-owned instead of mcp-use's `allowedHosts`/`allowedOrigins`
|
|
17
|
+
* (which guard every path): probes and scrapers address a container by its
|
|
18
|
+
* IP (Kubernetes, Fly), so the operational routes are exempt — see
|
|
19
|
+
* {@link installHttpEdgeGuard}. The size half of the edge (the body cap and the
|
|
20
|
+
* in-flight budget) lives in `node-listener.ts`; both read the one policy
|
|
21
|
+
* resolved here.
|
|
22
|
+
*/
|
|
23
|
+
/** Hostnames that always pass both checks — a loopback caller is the machine itself. */
|
|
24
|
+
export const LOCALHOST_HOSTNAMES = ["localhost", "127.0.0.1", "[::1]"];
|
|
25
|
+
/**
|
|
26
|
+
* Default request-body cap (4 MiB): far above any MCP JSON-RPC message, room
|
|
27
|
+
* for a multi-resource BPMN deployment. The cap bounds ONE request, not the
|
|
28
|
+
* process — mcp-use parses a JSON body into a heap graph up to ~20× its size
|
|
29
|
+
* before the OAuth gate runs — so the in-flight budget below bounds the total.
|
|
30
|
+
*/
|
|
31
|
+
export const DEFAULT_MAX_BODY_BYTES = 4 * 1024 * 1024;
|
|
32
|
+
/**
|
|
33
|
+
* The in-flight body budget, in cap-sized bodies: the bytes held across all
|
|
34
|
+
* requests whose response is still open (16 MiB by default) — room for
|
|
35
|
+
* thousands of ordinary JSON-RPC calls but only a handful of cap-sized
|
|
36
|
+
* uploads; a request past it gets 503.
|
|
37
|
+
*/
|
|
38
|
+
export const IN_FLIGHT_BODY_MULTIPLE = 4;
|
|
39
|
+
/**
|
|
40
|
+
* The env vars the shared edge reads. Composition roots spread them into
|
|
41
|
+
* their known-var list (typo warner, `.env.example` guards) instead of
|
|
42
|
+
* re-listing them.
|
|
43
|
+
*/
|
|
44
|
+
export const HTTP_EDGE_ENV_VARS = [
|
|
45
|
+
"MCP_URL",
|
|
46
|
+
"MCP_ALLOWED_HOSTS",
|
|
47
|
+
"MCP_ALLOWED_ORIGINS",
|
|
48
|
+
"MCP_MAX_BODY_BYTES",
|
|
49
|
+
"MCP_METRICS_TOKEN",
|
|
50
|
+
];
|
|
51
|
+
function listFrom(raw) {
|
|
52
|
+
const entries = (raw ?? "")
|
|
53
|
+
.split(",")
|
|
54
|
+
.map((entry) => entry.trim())
|
|
55
|
+
.filter(Boolean);
|
|
56
|
+
return entries.includes("*") ? "*" : entries;
|
|
57
|
+
}
|
|
58
|
+
function hostnameOf(entry, variable) {
|
|
59
|
+
try {
|
|
60
|
+
return new URL(entry.includes("://") ? entry : `http://${entry}`).hostname;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new Error(`${variable}: "${entry}" is not a hostname`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function originEntryOf(entry, variable) {
|
|
67
|
+
if (!entry.includes("://"))
|
|
68
|
+
return hostnameOf(entry, variable);
|
|
69
|
+
let origin;
|
|
70
|
+
try {
|
|
71
|
+
origin = new URL(entry).origin;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
origin = "null";
|
|
75
|
+
}
|
|
76
|
+
if (origin === "null")
|
|
77
|
+
throw new Error(`${variable}: "${entry}" is not an origin`);
|
|
78
|
+
return origin;
|
|
79
|
+
}
|
|
80
|
+
function publicUrl(raw) {
|
|
81
|
+
const value = raw?.trim();
|
|
82
|
+
if (!value)
|
|
83
|
+
return undefined;
|
|
84
|
+
let url;
|
|
85
|
+
try {
|
|
86
|
+
url = new URL(value);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
throw new Error(`MCP_URL "${value}" is not an absolute URL`);
|
|
90
|
+
}
|
|
91
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
92
|
+
throw new Error(`MCP_URL "${value}" must be an http(s) URL`);
|
|
93
|
+
}
|
|
94
|
+
return url;
|
|
95
|
+
}
|
|
96
|
+
function maxBodyBytesFrom(raw) {
|
|
97
|
+
const value = raw?.trim();
|
|
98
|
+
if (!value)
|
|
99
|
+
return DEFAULT_MAX_BODY_BYTES;
|
|
100
|
+
const bytes = Number(value);
|
|
101
|
+
if (!Number.isSafeInteger(bytes) || bytes < 1) {
|
|
102
|
+
throw new Error(`MCP_MAX_BODY_BYTES "${value}" must be a positive integer (bytes)`);
|
|
103
|
+
}
|
|
104
|
+
return bytes;
|
|
105
|
+
}
|
|
106
|
+
function withDerived(list, derived, normalize) {
|
|
107
|
+
if (list === "*")
|
|
108
|
+
return "*";
|
|
109
|
+
const entries = [...LOCALHOST_HOSTNAMES, ...(derived ? [derived] : []), ...list.map(normalize)];
|
|
110
|
+
return [...new Set(entries)];
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolve the edge policy from the env, ONCE per boot. Invalid values fail the
|
|
114
|
+
* boot instead of silently widening (or narrowing) the edge.
|
|
115
|
+
*/
|
|
116
|
+
export function resolveHttpEdgePolicy(env = process.env) {
|
|
117
|
+
const url = publicUrl(env.MCP_URL);
|
|
118
|
+
const metricsToken = env.MCP_METRICS_TOKEN?.trim();
|
|
119
|
+
const maxBodyBytes = maxBodyBytesFrom(env.MCP_MAX_BODY_BYTES);
|
|
120
|
+
return {
|
|
121
|
+
allowedHosts: withDerived(listFrom(env.MCP_ALLOWED_HOSTS), url?.hostname, (entry) => hostnameOf(entry, "MCP_ALLOWED_HOSTS")),
|
|
122
|
+
allowedOrigins: withDerived(listFrom(env.MCP_ALLOWED_ORIGINS), url?.origin, (entry) => originEntryOf(entry, "MCP_ALLOWED_ORIGINS")),
|
|
123
|
+
maxBodyBytes,
|
|
124
|
+
maxInFlightBodyBytes: IN_FLIGHT_BODY_MULTIPLE * maxBodyBytes,
|
|
125
|
+
...(metricsToken ? { metricsToken } : {}),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const formatBytes = (bytes) => {
|
|
129
|
+
const [unit, size] = bytes >= 1024 * 1024 ? ["MiB", 1024 * 1024] : ["KiB", 1024];
|
|
130
|
+
if (bytes < 1024)
|
|
131
|
+
return `${bytes} bytes`;
|
|
132
|
+
return `${Number((bytes / size).toFixed(2))} ${unit}`;
|
|
133
|
+
};
|
|
134
|
+
/** The one boot line stating the edge, so a 403 in the field is explainable from the log. */
|
|
135
|
+
export function describeHttpEdgePolicy(policy) {
|
|
136
|
+
const list = (allowList) => allowList === "*" ? "any (validation off)" : allowList.join(", ");
|
|
137
|
+
return (`HTTP edge — hosts: ${list(policy.allowedHosts)}; origins: ${list(policy.allowedOrigins)}; ` +
|
|
138
|
+
`max body ${formatBytes(policy.maxBodyBytes)} (${formatBytes(policy.maxInFlightBodyBytes)} in flight); ` +
|
|
139
|
+
`/metrics ${policy.metricsToken ? "token-protected" : "open"}`);
|
|
140
|
+
}
|
|
141
|
+
/** Why a `Host` header is refused, or `undefined` when it passes. */
|
|
142
|
+
export function hostRejection(host, policy) {
|
|
143
|
+
if (policy.allowedHosts === "*")
|
|
144
|
+
return undefined;
|
|
145
|
+
if (!host)
|
|
146
|
+
return "missing Host header";
|
|
147
|
+
let hostname;
|
|
148
|
+
try {
|
|
149
|
+
hostname = new URL(`http://${host}`).hostname;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return `invalid Host header "${host}"`;
|
|
153
|
+
}
|
|
154
|
+
if (policy.allowedHosts.includes(hostname))
|
|
155
|
+
return undefined;
|
|
156
|
+
return (`Host "${hostname}" is not allowed (DNS-rebinding protection). Set MCP_URL to the ` +
|
|
157
|
+
`server's public URL, or add the hostname to MCP_ALLOWED_HOSTS.`);
|
|
158
|
+
}
|
|
159
|
+
/** Why an `Origin` header is refused, or `undefined` when it passes. */
|
|
160
|
+
export function originRejection(origin, method, policy) {
|
|
161
|
+
if (policy.allowedOrigins === "*" || !origin)
|
|
162
|
+
return undefined;
|
|
163
|
+
// Safe methods carry no side effects, and sandboxed view iframes send
|
|
164
|
+
// `Origin: null` on their asset GETs (mcp-use applies the same rule).
|
|
165
|
+
if (method === "GET" || method === "HEAD")
|
|
166
|
+
return undefined;
|
|
167
|
+
let url;
|
|
168
|
+
try {
|
|
169
|
+
url = new URL(origin);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
url = undefined;
|
|
173
|
+
}
|
|
174
|
+
const allowed = url !== undefined &&
|
|
175
|
+
url.origin !== "null" &&
|
|
176
|
+
policy.allowedOrigins.some((entry) => entry.includes("://") ? entry === url.origin : entry === url.hostname);
|
|
177
|
+
if (allowed)
|
|
178
|
+
return undefined;
|
|
179
|
+
return (`Origin "${origin}" is not allowed (DNS-rebinding protection). Add it to ` +
|
|
180
|
+
`MCP_ALLOWED_ORIGINS if a browser app on that origin should reach this server.`);
|
|
181
|
+
}
|
|
182
|
+
const isExempt = (path, prefixes) => prefixes.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));
|
|
183
|
+
/**
|
|
184
|
+
* THE guard decision: why `request` is refused, or `undefined` when it passes
|
|
185
|
+
* (an exempt path always passes). Single-sourced so the Node listener — which
|
|
186
|
+
* discards a refused request's body unread — and the hono guard — which
|
|
187
|
+
* answers it — never disagree.
|
|
188
|
+
*/
|
|
189
|
+
export function edgeRejection(request, policy, exemptPaths = []) {
|
|
190
|
+
if (isExempt(request.path, exemptPaths))
|
|
191
|
+
return undefined;
|
|
192
|
+
return (hostRejection(request.host, policy) ?? originRejection(request.origin, request.method, policy));
|
|
193
|
+
}
|
|
194
|
+
/** A JSON-RPC-shaped error body, so MCP clients surface the reason verbatim. */
|
|
195
|
+
export function jsonRpcErrorBody(message) {
|
|
196
|
+
return JSON.stringify({ jsonrpc: "2.0", error: { code: -32000, message }, id: null });
|
|
197
|
+
}
|
|
198
|
+
function jsonRpcErrorResponse(status, message) {
|
|
199
|
+
return new Response(jsonRpcErrorBody(message), {
|
|
200
|
+
status,
|
|
201
|
+
headers: { "content-type": "application/json", "cache-control": "no-store" },
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Register the Host/Origin guard on every route registered AFTER it (hono
|
|
206
|
+
* runs handlers in registration order) — the MCP endpoint and the view
|
|
207
|
+
* assets are mounted by mcp-use later, so they are always covered. A refused
|
|
208
|
+
* request gets 403 with the reason and the env var that would admit it.
|
|
209
|
+
*/
|
|
210
|
+
export function installHttpEdgeGuard(server, policy, { exemptPaths = [] } = {}) {
|
|
211
|
+
server.use("*", async (ctx, next) => {
|
|
212
|
+
const { method, path } = ctx.req;
|
|
213
|
+
const rejection = edgeRejection({ method, path, host: ctx.req.header("host"), origin: ctx.req.header("origin") }, policy, exemptPaths);
|
|
214
|
+
if (rejection)
|
|
215
|
+
return jsonRpcErrorResponse(403, `Forbidden: ${rejection}`);
|
|
216
|
+
await next();
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=http-edge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-edge.js","sourceRoot":"","sources":["../src/http-edge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-edge.test.d.ts","sourceRoot":"","sources":["../src/http-edge.test.ts"],"names":[],"mappings":""}
|