@miragon/pulse-widget-shell 0.0.0-stage → 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 +164 -2
- 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 -3
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { mkdtemp, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import postgres from "postgres";
|
|
5
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
6
|
+
import { createFileSystemProfileStore, createInMemoryProfileStore, } from "./profile-store.js";
|
|
7
|
+
import { createPostgresProfileStore, PROFILE_STORE_MIGRATIONS } from "./profile-store-postgres.js";
|
|
8
|
+
import { defaultProfileRecord } from "./profile-record.js";
|
|
9
|
+
import { saveModuleSlice } from "./profile-slice.js";
|
|
10
|
+
describe("defaultProfileRecord", () => {
|
|
11
|
+
it("returns a complete, defaulted record for an unsaved key", () => {
|
|
12
|
+
const p = defaultProfileRecord("sess-1");
|
|
13
|
+
expect(p).toMatchObject({
|
|
14
|
+
id: "sess-1",
|
|
15
|
+
language: "system",
|
|
16
|
+
modules: {},
|
|
17
|
+
schemaVersion: 3,
|
|
18
|
+
});
|
|
19
|
+
expect(p.userId).toBeUndefined();
|
|
20
|
+
expect(p.createdAt).toBe(p.updatedAt);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Behavioral contract every ProfileStore implementation must satisfy — run
|
|
25
|
+
* against each store so the implementations cannot drift apart. `makeStore`
|
|
26
|
+
* must return a store whose keys start out absent.
|
|
27
|
+
*/
|
|
28
|
+
function profileStoreContract(makeStore) {
|
|
29
|
+
it("returns undefined for an unknown key", async () => {
|
|
30
|
+
const store = await makeStore();
|
|
31
|
+
expect(await store.get("missing")).toBeUndefined();
|
|
32
|
+
});
|
|
33
|
+
it("creates, then merges partial updates without wiping other fields", async () => {
|
|
34
|
+
const store = await makeStore();
|
|
35
|
+
const created = await store.save("sess-1", { language: "de" });
|
|
36
|
+
expect(created.language).toBe("de");
|
|
37
|
+
// Untouched fields keep their defaults.
|
|
38
|
+
expect(created.modules).toEqual({});
|
|
39
|
+
// A single-field update must not reset language.
|
|
40
|
+
const updated = await store.save("sess-1", { modules: { analytics: { defaultPeriod: "7d" } } });
|
|
41
|
+
expect(updated.modules).toEqual({ analytics: { defaultPeriod: "7d" } });
|
|
42
|
+
expect(updated.language).toBe("de");
|
|
43
|
+
// createdAt is preserved across saves; updatedAt advances (or is unchanged).
|
|
44
|
+
expect(updated.createdAt).toBe(created.createdAt);
|
|
45
|
+
expect(updated.updatedAt >= created.updatedAt).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it("merges module slices per namespace without wiping other modules", async () => {
|
|
48
|
+
const store = await makeStore();
|
|
49
|
+
await store.save("sess-1", { modules: { analytics: { defaultPeriod: "30d" } } });
|
|
50
|
+
const updated = await store.save("sess-1", { modules: { other: { flag: true } } });
|
|
51
|
+
expect(updated.modules).toEqual({
|
|
52
|
+
analytics: { defaultPeriod: "30d" },
|
|
53
|
+
other: { flag: true },
|
|
54
|
+
});
|
|
55
|
+
// A save without `modules` leaves all slices untouched.
|
|
56
|
+
const untouched = await store.save("sess-1", { language: "de" });
|
|
57
|
+
expect(untouched.modules).toEqual(updated.modules);
|
|
58
|
+
});
|
|
59
|
+
it("merges the saved module slice one level deep, leaving siblings intact", async () => {
|
|
60
|
+
const store = await makeStore();
|
|
61
|
+
await store.save("sess-1", {
|
|
62
|
+
modules: { camunda7: { defaultEngineId: "prod-a" }, analytics: { defaultPeriod: "30d" } },
|
|
63
|
+
});
|
|
64
|
+
const updated = await store.save("sess-1", { modules: { camunda7: { pinned: ["d1"] } } });
|
|
65
|
+
// Per-key one-level MERGE (inside the store's lock, so concurrent saves
|
|
66
|
+
// of disjoint fields in the SAME slice both survive); a field clears via
|
|
67
|
+
// explicit `undefined`, tested below.
|
|
68
|
+
expect(updated.modules).toEqual({
|
|
69
|
+
camunda7: { defaultEngineId: "prod-a", pinned: ["d1"] },
|
|
70
|
+
analytics: { defaultPeriod: "30d" },
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
it("clears a slice field via explicit undefined and keeps merging afterwards", async () => {
|
|
74
|
+
const store = await makeStore();
|
|
75
|
+
await store.save("sess-1", {
|
|
76
|
+
modules: { camunda7: { defaultEngineId: "prod-a", pinned: ["d1"] } },
|
|
77
|
+
});
|
|
78
|
+
const cleared = await store.save("sess-1", {
|
|
79
|
+
modules: { camunda7: { defaultEngineId: undefined } },
|
|
80
|
+
});
|
|
81
|
+
expect(cleared.modules?.camunda7).toEqual({ pinned: ["d1"] });
|
|
82
|
+
const merged = await store.save("sess-1", { modules: { camunda7: { fresh: true } } });
|
|
83
|
+
expect(merged.modules?.camunda7).toEqual({ pinned: ["d1"], fresh: true });
|
|
84
|
+
});
|
|
85
|
+
it("deletes a stored profile", async () => {
|
|
86
|
+
const store = await makeStore();
|
|
87
|
+
await store.save("sess-1", { language: "de" });
|
|
88
|
+
expect(await store.delete("sess-1")).toBe(true);
|
|
89
|
+
expect(await store.get("sess-1")).toBeUndefined();
|
|
90
|
+
expect(await store.delete("sess-1")).toBe(false);
|
|
91
|
+
});
|
|
92
|
+
it("keeps both of two concurrent saves of disjoint top-level fields", async () => {
|
|
93
|
+
const store = await makeStore();
|
|
94
|
+
// The settings page has two independent save buttons — overlapping saves
|
|
95
|
+
// must both land: every store merges INSIDE its per-key serialization.
|
|
96
|
+
await Promise.all([
|
|
97
|
+
store.save("sess-1", { modules: { analytics: { defaultPeriod: "30d" } } }),
|
|
98
|
+
store.save("sess-1", { language: "de" }),
|
|
99
|
+
]);
|
|
100
|
+
const profile = await store.get("sess-1");
|
|
101
|
+
expect(profile?.modules).toEqual({ analytics: { defaultPeriod: "30d" } });
|
|
102
|
+
expect(profile?.language).toBe("de");
|
|
103
|
+
});
|
|
104
|
+
it("keeps concurrent saves from DIFFERENT modules — no module's update is lost", async () => {
|
|
105
|
+
const store = await makeStore();
|
|
106
|
+
// Exactly the tool paths: each module's save tool hands the store its
|
|
107
|
+
// patch (`saveModuleSlice`); the model may fire camunda7_select_engine
|
|
108
|
+
// and analytics_save_settings in one turn. Repeated, because an
|
|
109
|
+
// unserialized read-merge-write loses one of them only when the two
|
|
110
|
+
// calls interleave.
|
|
111
|
+
for (let round = 0; round < 10; round += 1) {
|
|
112
|
+
const key = `user-${round}`;
|
|
113
|
+
await store.save(key, { modules: { camunda7: { pinnedDashboardIds: ["d1"] } } });
|
|
114
|
+
await Promise.all([
|
|
115
|
+
saveModuleSlice(store, key, "camunda7", { defaultEngineId: "prod-a" }),
|
|
116
|
+
saveModuleSlice(store, key, "analytics", { defaultPeriod: "30d" }),
|
|
117
|
+
store.save(key, { language: "de" }),
|
|
118
|
+
]);
|
|
119
|
+
const profile = await store.get(key);
|
|
120
|
+
expect(profile?.modules).toEqual({
|
|
121
|
+
camunda7: { pinnedDashboardIds: ["d1"], defaultEngineId: "prod-a" },
|
|
122
|
+
analytics: { defaultPeriod: "30d" },
|
|
123
|
+
});
|
|
124
|
+
expect(profile?.language).toBe("de");
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
it("keeps concurrent saves of different fields in the SAME slice: a stale value never wins", async () => {
|
|
128
|
+
const store = await makeStore();
|
|
129
|
+
// The model fires camunda7_select_engine and camunda7_save_settings
|
|
130
|
+
// in one turn, and the field the select changes ALREADY holds a value.
|
|
131
|
+
// A save tool that hands the store a pre-read slice (read outside the
|
|
132
|
+
// lock) writes that stale value back. The patch alone, merged inside the
|
|
133
|
+
// store's per-key serialization, keeps both.
|
|
134
|
+
for (let round = 0; round < 10; round += 1) {
|
|
135
|
+
const key = `user-${round}`;
|
|
136
|
+
await store.save(key, { modules: { camunda7: { defaultEngineId: "prod-a", extra: 1 } } });
|
|
137
|
+
await Promise.all([
|
|
138
|
+
saveModuleSlice(store, key, "camunda7", { defaultEngineId: "prod-b" }),
|
|
139
|
+
saveModuleSlice(store, key, "camunda7", { pinnedDashboardIds: ["d1"] }),
|
|
140
|
+
]);
|
|
141
|
+
expect((await store.get(key))?.modules?.camunda7).toEqual({
|
|
142
|
+
defaultEngineId: "prod-b",
|
|
143
|
+
pinnedDashboardIds: ["d1"],
|
|
144
|
+
extra: 1,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
it("saveModuleSlice clears a field patched to undefined and reports the saved slice", async () => {
|
|
149
|
+
const store = await makeStore();
|
|
150
|
+
await saveModuleSlice(store, "sess-1", "camunda7", { defaultEngineId: "prod-a", keep: true });
|
|
151
|
+
const slice = await saveModuleSlice(store, "sess-1", "camunda7", { defaultEngineId: undefined });
|
|
152
|
+
expect(slice).toEqual({ keep: true });
|
|
153
|
+
expect((await store.get("sess-1"))?.modules?.camunda7).toEqual({ keep: true });
|
|
154
|
+
});
|
|
155
|
+
it("stamps the owner and keeps it on later saves without auth context", async () => {
|
|
156
|
+
const store = await makeStore();
|
|
157
|
+
const created = await store.save("user-1", { language: "de" }, { userId: "user-1" });
|
|
158
|
+
expect(created.userId).toBe("user-1");
|
|
159
|
+
const updated = await store.save("user-1", { language: "en" });
|
|
160
|
+
expect(updated.userId).toBe("user-1");
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
describe("createInMemoryProfileStore", () => {
|
|
164
|
+
profileStoreContract(() => Promise.resolve(createInMemoryProfileStore()));
|
|
165
|
+
});
|
|
166
|
+
describe("createFileSystemProfileStore", () => {
|
|
167
|
+
profileStoreContract(async () => createFileSystemProfileStore({ dir: await mkdtemp(path.join(tmpdir(), "profile-store-")) }));
|
|
168
|
+
it("serializes saves per key across two store instances on the same directory", async () => {
|
|
169
|
+
const dir = await mkdtemp(path.join(tmpdir(), "profile-store-"));
|
|
170
|
+
const a = createFileSystemProfileStore({ dir });
|
|
171
|
+
const b = createFileSystemProfileStore({ dir });
|
|
172
|
+
await Promise.all([
|
|
173
|
+
a.save("sess-1", { modules: { camunda7: { defaultEngineId: "prod-a" } } }),
|
|
174
|
+
b.save("sess-1", { modules: { analytics: { defaultPeriod: "30d" } } }),
|
|
175
|
+
]);
|
|
176
|
+
expect((await a.get("sess-1"))?.modules).toEqual({
|
|
177
|
+
camunda7: { defaultEngineId: "prod-a" },
|
|
178
|
+
analytics: { defaultPeriod: "30d" },
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
it("keeps serving the key after a failed save (the lock is released on error)", async () => {
|
|
182
|
+
const dir = await mkdtemp(path.join(tmpdir(), "profile-store-"));
|
|
183
|
+
// A FILE where the store expects its directory: every write fails.
|
|
184
|
+
const blocked = path.join(dir, "blocked");
|
|
185
|
+
await writeFile(blocked, "", "utf-8");
|
|
186
|
+
const store = createFileSystemProfileStore({ dir: blocked });
|
|
187
|
+
await expect(store.save("sess-1", { language: "de" })).rejects.toThrow();
|
|
188
|
+
await expect(store.save("sess-1", { language: "de" })).rejects.toThrow();
|
|
189
|
+
});
|
|
190
|
+
it("reads a record from before the migration baseline fail-soft and adopts it on save", async () => {
|
|
191
|
+
const dir = await mkdtemp(path.join(tmpdir(), "profile-store-"));
|
|
192
|
+
const store = createFileSystemProfileStore({ dir });
|
|
193
|
+
const file = path.join(dir, "early.json");
|
|
194
|
+
await writeFile(file, JSON.stringify(V1_RECORD), "utf-8");
|
|
195
|
+
// No error, no reset: the fields every record carries survive; the flat
|
|
196
|
+
// module preferences of the pre-baseline shape read as the defaults.
|
|
197
|
+
expect(await store.get("early")).toEqual({
|
|
198
|
+
id: "early",
|
|
199
|
+
language: "de",
|
|
200
|
+
modules: {},
|
|
201
|
+
createdAt: V1_RECORD.createdAt,
|
|
202
|
+
updatedAt: V1_RECORD.updatedAt,
|
|
203
|
+
schemaVersion: 3,
|
|
204
|
+
});
|
|
205
|
+
const saved = await store.save("early", { modules: { analytics: { defaultPeriod: "7d" } } });
|
|
206
|
+
expect(saved).toMatchObject({ language: "de", modules: { analytics: { defaultPeriod: "7d" } } });
|
|
207
|
+
// Stamped at the baseline; the keys it does not know stay inert, raw —
|
|
208
|
+
// the retired theme preference included.
|
|
209
|
+
expect(JSON.parse(await readFile(file, "utf-8"))).toMatchObject({
|
|
210
|
+
schemaVersion: 3,
|
|
211
|
+
theme: "dark",
|
|
212
|
+
analyticsDefaultPeriod: "30d",
|
|
213
|
+
modules: { analytics: { defaultPeriod: "7d" } },
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
it("reads a record it cannot date (the next save stamps both timestamps)", async () => {
|
|
217
|
+
const dir = await mkdtemp(path.join(tmpdir(), "profile-store-"));
|
|
218
|
+
const store = createFileSystemProfileStore({ dir });
|
|
219
|
+
await writeFile(path.join(dir, "undated.json"), JSON.stringify({ schemaVersion: 3 }), "utf-8");
|
|
220
|
+
expect(await store.get("undated")).toMatchObject({ id: "undated", updatedAt: "" });
|
|
221
|
+
const saved = await store.save("undated", { language: "de" });
|
|
222
|
+
expect(saved.updatedAt).not.toBe("");
|
|
223
|
+
expect(saved.createdAt).toBe(saved.updatedAt);
|
|
224
|
+
});
|
|
225
|
+
it("treats a file that is not JSON as absent and replaces it on the next save", async () => {
|
|
226
|
+
const dir = await mkdtemp(path.join(tmpdir(), "profile-store-"));
|
|
227
|
+
const store = createFileSystemProfileStore({ dir });
|
|
228
|
+
await writeFile(path.join(dir, "broken.json"), "{ not json", "utf-8");
|
|
229
|
+
expect(await store.get("broken")).toBeUndefined();
|
|
230
|
+
expect((await store.save("broken", { language: "de" })).language).toBe("de");
|
|
231
|
+
expect((await store.get("broken"))?.language).toBe("de");
|
|
232
|
+
});
|
|
233
|
+
it("reads a record with the retired theme preference fail-soft and keeps the key inert", async () => {
|
|
234
|
+
const dir = await mkdtemp(path.join(tmpdir(), "profile-store-"));
|
|
235
|
+
const store = createFileSystemProfileStore({ dir });
|
|
236
|
+
const file = path.join(dir, "themed.json");
|
|
237
|
+
await writeFile(file, JSON.stringify(THEMED_RECORD), "utf-8");
|
|
238
|
+
// The view never carries it (widgets follow the host's theme) …
|
|
239
|
+
const read = await store.get("themed");
|
|
240
|
+
expect(read).toMatchObject({ id: "themed", language: "de", modules: {} });
|
|
241
|
+
expect(read).not.toHaveProperty("theme");
|
|
242
|
+
// … and a save merges over the raw document, so it stays there, unread.
|
|
243
|
+
const saved = await store.save("themed", { language: "en" });
|
|
244
|
+
expect(saved).not.toHaveProperty("theme");
|
|
245
|
+
expect(JSON.parse(await readFile(file, "utf-8"))).toMatchObject({
|
|
246
|
+
language: "en",
|
|
247
|
+
theme: "dark",
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
/** A current-shape record an earlier build saved with its theme preference. */
|
|
252
|
+
const THEMED_RECORD = {
|
|
253
|
+
id: "themed",
|
|
254
|
+
language: "de",
|
|
255
|
+
theme: "dark",
|
|
256
|
+
modules: {},
|
|
257
|
+
createdAt: "2026-09-01T00:00:00.000Z",
|
|
258
|
+
updatedAt: "2026-09-01T00:00:00.000Z",
|
|
259
|
+
schemaVersion: 3,
|
|
260
|
+
};
|
|
261
|
+
/** A record as a pre-baseline (v1) build persisted it: flat module fields. */
|
|
262
|
+
const V1_RECORD = {
|
|
263
|
+
id: "early",
|
|
264
|
+
language: "de",
|
|
265
|
+
theme: "dark",
|
|
266
|
+
pinnedDashboardIds: [],
|
|
267
|
+
analyticsDefaultPeriod: "30d",
|
|
268
|
+
analyticsMinBucketSize: 25,
|
|
269
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
270
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
271
|
+
schemaVersion: 1,
|
|
272
|
+
};
|
|
273
|
+
// Opt-in integration slice (like test:host): needs a reachable Postgres, so it
|
|
274
|
+
// only runs when TEST_DATABASE_URL is set — `pnpm test:pg` at the repo root
|
|
275
|
+
// points it at the compose stack's dedicated test database. An own schema
|
|
276
|
+
// isolates it from the other packages' suites sharing that database.
|
|
277
|
+
const TEST_DATABASE_URL = process.env.TEST_DATABASE_URL;
|
|
278
|
+
const TEST_SCHEMA = "widget_shell_profile_store_test";
|
|
279
|
+
describe.skipIf(!TEST_DATABASE_URL)("createPostgresProfileStore", () => {
|
|
280
|
+
let sql;
|
|
281
|
+
beforeAll(async () => {
|
|
282
|
+
sql = postgres(TEST_DATABASE_URL, {
|
|
283
|
+
max: 2,
|
|
284
|
+
onnotice: () => { },
|
|
285
|
+
connection: { search_path: TEST_SCHEMA },
|
|
286
|
+
});
|
|
287
|
+
await sql.unsafe(`DROP SCHEMA IF EXISTS ${TEST_SCHEMA} CASCADE`);
|
|
288
|
+
await sql.unsafe(`CREATE SCHEMA ${TEST_SCHEMA}`);
|
|
289
|
+
for (const migration of PROFILE_STORE_MIGRATIONS) {
|
|
290
|
+
for (const statement of migration.statements) {
|
|
291
|
+
await sql.unsafe(statement);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
beforeEach(async () => {
|
|
296
|
+
await sql `DELETE FROM user_profiles`;
|
|
297
|
+
});
|
|
298
|
+
afterAll(async () => {
|
|
299
|
+
await sql.end({ timeout: 5 });
|
|
300
|
+
});
|
|
301
|
+
profileStoreContract(() => Promise.resolve(createPostgresProfileStore({ sql })));
|
|
302
|
+
it("reads a row missing every field best-effort and keeps it on save", async () => {
|
|
303
|
+
const store = createPostgresProfileStore({ sql });
|
|
304
|
+
await sql `
|
|
305
|
+
INSERT INTO user_profiles (key, profile)
|
|
306
|
+
VALUES ('sess-sparse', '{"schemaVersion": 999}'::jsonb)
|
|
307
|
+
`;
|
|
308
|
+
expect(await store.get("sess-sparse")).toMatchObject({
|
|
309
|
+
id: "sess-sparse",
|
|
310
|
+
language: "system",
|
|
311
|
+
modules: {},
|
|
312
|
+
});
|
|
313
|
+
const saved = await store.save("sess-sparse", { language: "de" });
|
|
314
|
+
expect(saved.language).toBe("de");
|
|
315
|
+
expect(await store.get("sess-sparse")).toEqual(saved);
|
|
316
|
+
});
|
|
317
|
+
it("reads a row from before the migration baseline fail-soft and adopts it on save", async () => {
|
|
318
|
+
const store = createPostgresProfileStore({ sql });
|
|
319
|
+
await sql `
|
|
320
|
+
INSERT INTO user_profiles (key, profile)
|
|
321
|
+
VALUES ('early', ${sql.json(V1_RECORD)})
|
|
322
|
+
`;
|
|
323
|
+
const early = await store.get("early");
|
|
324
|
+
expect(early).toMatchObject({ language: "de", modules: {}, schemaVersion: 3 });
|
|
325
|
+
expect(early).not.toHaveProperty("theme");
|
|
326
|
+
const saved = await store.save("early", { language: "en" });
|
|
327
|
+
expect(saved).toMatchObject({ language: "en", modules: {} });
|
|
328
|
+
expect(saved).not.toHaveProperty("theme");
|
|
329
|
+
const rows = await sql `
|
|
330
|
+
SELECT profile FROM user_profiles WHERE key = 'early'
|
|
331
|
+
`;
|
|
332
|
+
// The keys this build does not know stay inert in the row, the retired
|
|
333
|
+
// theme preference included.
|
|
334
|
+
expect(rows[0]?.profile).toMatchObject({
|
|
335
|
+
schemaVersion: 3,
|
|
336
|
+
theme: "dark",
|
|
337
|
+
analyticsDefaultPeriod: "30d",
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
it("merges concurrent saves of disjoint fields in the SAME module slice", async () => {
|
|
341
|
+
const store = createPostgresProfileStore({ sql });
|
|
342
|
+
// The one-level slice merge runs inside the per-key lock, so neither
|
|
343
|
+
// field may get lost even though both writers pre-read the same (empty)
|
|
344
|
+
// slice outside it.
|
|
345
|
+
await Promise.all([
|
|
346
|
+
store.save("sess-2", { modules: { camunda7: { defaultEngineId: "prod-a" } } }),
|
|
347
|
+
store.save("sess-2", { modules: { camunda7: { pinned: ["d1"] } } }),
|
|
348
|
+
]);
|
|
349
|
+
const profile = await store.get("sess-2");
|
|
350
|
+
expect(profile?.modules?.camunda7).toEqual({ defaultEngineId: "prod-a", pinned: ["d1"] });
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
//# sourceMappingURL=profile-store.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-store.test.js","sourceRoot":"","sources":["../src/profile-store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The profile key of an EXPLICITLY declared local caller — a transport without
|
|
4
|
+
* auth that serves exactly one user (stdio, tests), declared via
|
|
5
|
+
* `runWithMcpRequestInfo({ anonymousCaller: true }, …)`. Never reached by an
|
|
6
|
+
* HTTP request: a request without OAuth has no identity at all.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ANONYMOUS_PROFILE_KEY = "anonymous";
|
|
9
|
+
/**
|
|
10
|
+
* The minimal structural view of the profile store a module needs for its own
|
|
11
|
+
* settings slice: read the record, and (when the host wired a writable store)
|
|
12
|
+
* write back a `modules` patch. Deliberately narrower than camunda7's
|
|
13
|
+
* `ProfileStore` — a module has no business with `delete` or with another
|
|
14
|
+
* module's slice. `save` merges per module key on the store side,
|
|
15
|
+
* one level deep and atomically per key: a `modules.<yours>` patch spreads
|
|
16
|
+
* over your stored slice (`undefined` clears a field) and never touches a
|
|
17
|
+
* foreign slice, which is what lets a save carry its patch alone
|
|
18
|
+
* (`saveModuleSlice`).
|
|
19
|
+
*/
|
|
20
|
+
export interface ProfileSource {
|
|
21
|
+
get(key: string): Promise<ProfileSlice | undefined>;
|
|
22
|
+
save?(key: string, input: {
|
|
23
|
+
modules: Record<string, unknown>;
|
|
24
|
+
}, opts?: {
|
|
25
|
+
userId?: string;
|
|
26
|
+
}): Promise<unknown>;
|
|
27
|
+
}
|
|
28
|
+
/** The slice of the shared profile record a foreign module may read. */
|
|
29
|
+
export interface ProfileSlice {
|
|
30
|
+
/** UI + summary language, for localizing the module's own tool summaries. */
|
|
31
|
+
language?: string;
|
|
32
|
+
/** Per-module settings slices, keyed by module name. */
|
|
33
|
+
modules?: Record<string, unknown>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolves the key a user profile hangs on — the single place that decides
|
|
37
|
+
* "whose profile is this", shared by every module. Fail-closed precedence:
|
|
38
|
+
*
|
|
39
|
+
* 1. the OAuth caller — resolved from the handler `ctx` through the
|
|
40
|
+
* toolkit's `resolveCaller` whenever a `ctx` is passed (registrar and
|
|
41
|
+
* widget-tool handlers all have one), else from the ambient request
|
|
42
|
+
* info the middleware derived the same way (ctx-less paths: pipeline
|
|
43
|
+
* steps). An authenticated `ctx` decides ALONE: a provider that maps no
|
|
44
|
+
* subject yields no key, never a fallback;
|
|
45
|
+
* 2. {@link ANONYMOUS_PROFILE_KEY} for an explicitly declared local caller
|
|
46
|
+
* (`anonymousCaller` — stdio, tests; never set from a request);
|
|
47
|
+
* 3. `undefined` otherwise — an HTTP request without OAuth, or no request
|
|
48
|
+
* context at all (a missing middleware install included). Reads fall back
|
|
49
|
+
* to defaults, saves refuse (`requireProfileKey`).
|
|
50
|
+
*
|
|
51
|
+
* Nothing a client chooses for itself (a session id, a header) is ever a key.
|
|
52
|
+
* `ctx` is typed `unknown` so the mcp-use handler context (whose exact shape
|
|
53
|
+
* isn't part of the stable surface) passes without a cast at the call site.
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveProfileKey(ctx?: unknown): string | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Just the OAuth half of {@link resolveProfileKey}: the authenticated
|
|
58
|
+
* caller's id (from `ctx`, else the ambient request info), never the declared
|
|
59
|
+
* anonymous key. Save paths stamp it onto the record as its owner
|
|
60
|
+
* (`opts.userId`), so a record says which signed-in user it belongs to.
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolveAuthUserId(ctx?: unknown): string | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Strip `.default()` wrappers from a schema shape, keeping each field's
|
|
65
|
+
* description — the safe way to derive a settings SAVE input from the schema
|
|
66
|
+
* that defines the settings themselves.
|
|
67
|
+
*
|
|
68
|
+
* Zod 4 re-applies defaults THROUGH `.partial()` on parse, so a defaulted
|
|
69
|
+
* partial would materialize omitted fields at the tool boundary: a
|
|
70
|
+
* "single-field" save would then silently reset every other defaulted
|
|
71
|
+
* preference. Save inputs therefore must be default-free — build them as
|
|
72
|
+
* `z.object(withoutDefaults(schema.shape)).partial()`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function withoutDefaults(shape: z.ZodRawShape): z.ZodRawShape;
|
|
75
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,cAAc,CAAA;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IACnD,IAAI,CAAC,CACH,GAAG,EAAE,MAAM,EACX,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAC3C,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACzB,OAAO,CAAC,OAAO,CAAC,CAAA;CACpB;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMnE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAQnE"}
|
package/dist/profile.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cross-module contract for user settings: WHOSE profile a request touches
|
|
3
|
+
* and WHAT shape a module may read/write on it.
|
|
4
|
+
*
|
|
5
|
+
* Modules are peers and never import each other, but they all read and write
|
|
6
|
+
* ONE shared profile record — so the key resolution and the fallback key are
|
|
7
|
+
* not per-module opinions, they are a contract that must be byte-identical
|
|
8
|
+
* everywhere. Two modules resolving different keys for the same caller would
|
|
9
|
+
* silently split a user's settings across two records (language from one,
|
|
10
|
+
* analytics defaults from another) without any error. This module is that
|
|
11
|
+
* single source, imported by both the profile store's owner (camunda7) and
|
|
12
|
+
* every module that keeps a `profile.modules.<module>` slice.
|
|
13
|
+
*
|
|
14
|
+
* Lives on the `/server` path only — the ambient request info pulls in
|
|
15
|
+
* `node:async_hooks`, which must never reach the widget bundle.
|
|
16
|
+
*/
|
|
17
|
+
import { resolveCaller } from "@miragon/mcp-toolkit-core";
|
|
18
|
+
import { z } from "zod";
|
|
19
|
+
import { getMcpRequestInfo } from "./request-context.js";
|
|
20
|
+
/**
|
|
21
|
+
* The profile key of an EXPLICITLY declared local caller — a transport without
|
|
22
|
+
* auth that serves exactly one user (stdio, tests), declared via
|
|
23
|
+
* `runWithMcpRequestInfo({ anonymousCaller: true }, …)`. Never reached by an
|
|
24
|
+
* HTTP request: a request without OAuth has no identity at all.
|
|
25
|
+
*/
|
|
26
|
+
export const ANONYMOUS_PROFILE_KEY = "anonymous";
|
|
27
|
+
/**
|
|
28
|
+
* Resolves the key a user profile hangs on — the single place that decides
|
|
29
|
+
* "whose profile is this", shared by every module. Fail-closed precedence:
|
|
30
|
+
*
|
|
31
|
+
* 1. the OAuth caller — resolved from the handler `ctx` through the
|
|
32
|
+
* toolkit's `resolveCaller` whenever a `ctx` is passed (registrar and
|
|
33
|
+
* widget-tool handlers all have one), else from the ambient request
|
|
34
|
+
* info the middleware derived the same way (ctx-less paths: pipeline
|
|
35
|
+
* steps). An authenticated `ctx` decides ALONE: a provider that maps no
|
|
36
|
+
* subject yields no key, never a fallback;
|
|
37
|
+
* 2. {@link ANONYMOUS_PROFILE_KEY} for an explicitly declared local caller
|
|
38
|
+
* (`anonymousCaller` — stdio, tests; never set from a request);
|
|
39
|
+
* 3. `undefined` otherwise — an HTTP request without OAuth, or no request
|
|
40
|
+
* context at all (a missing middleware install included). Reads fall back
|
|
41
|
+
* to defaults, saves refuse (`requireProfileKey`).
|
|
42
|
+
*
|
|
43
|
+
* Nothing a client chooses for itself (a session id, a header) is ever a key.
|
|
44
|
+
* `ctx` is typed `unknown` so the mcp-use handler context (whose exact shape
|
|
45
|
+
* isn't part of the stable surface) passes without a cast at the call site.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveProfileKey(ctx) {
|
|
48
|
+
const caller = resolveCaller(ctx);
|
|
49
|
+
if (caller)
|
|
50
|
+
return caller.userId;
|
|
51
|
+
const info = getMcpRequestInfo();
|
|
52
|
+
if (info?.authUserId)
|
|
53
|
+
return info.authUserId;
|
|
54
|
+
return info?.anonymousCaller ? ANONYMOUS_PROFILE_KEY : undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Just the OAuth half of {@link resolveProfileKey}: the authenticated
|
|
58
|
+
* caller's id (from `ctx`, else the ambient request info), never the declared
|
|
59
|
+
* anonymous key. Save paths stamp it onto the record as its owner
|
|
60
|
+
* (`opts.userId`), so a record says which signed-in user it belongs to.
|
|
61
|
+
*/
|
|
62
|
+
export function resolveAuthUserId(ctx) {
|
|
63
|
+
const caller = resolveCaller(ctx);
|
|
64
|
+
return caller ? caller.userId : getMcpRequestInfo()?.authUserId;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Strip `.default()` wrappers from a schema shape, keeping each field's
|
|
68
|
+
* description — the safe way to derive a settings SAVE input from the schema
|
|
69
|
+
* that defines the settings themselves.
|
|
70
|
+
*
|
|
71
|
+
* Zod 4 re-applies defaults THROUGH `.partial()` on parse, so a defaulted
|
|
72
|
+
* partial would materialize omitted fields at the tool boundary: a
|
|
73
|
+
* "single-field" save would then silently reset every other defaulted
|
|
74
|
+
* preference. Save inputs therefore must be default-free — build them as
|
|
75
|
+
* `z.object(withoutDefaults(schema.shape)).partial()`.
|
|
76
|
+
*/
|
|
77
|
+
export function withoutDefaults(shape) {
|
|
78
|
+
return Object.fromEntries(Object.entries(shape).map(([key, schema]) => {
|
|
79
|
+
if (!(schema instanceof z.ZodDefault))
|
|
80
|
+
return [key, schema];
|
|
81
|
+
const inner = schema.unwrap();
|
|
82
|
+
return [key, schema.description ? inner.describe(schema.description) : inner];
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAA;AA8BhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAa;IAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,MAAM,CAAA;IAChC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAChC,IAAI,IAAI,EAAE,UAAU;QAAE,OAAO,IAAI,CAAC,UAAU,CAAA;IAC5C,OAAO,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAA;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAa;IAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,UAAU,CAAA;AACjE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,UAAU,CAAC;YAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAe,CAAA;QAC1C,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC/E,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.test.d.ts","sourceRoot":"","sources":["../src/profile.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { ANONYMOUS_PROFILE_KEY, resolveAuthUserId, resolveProfileKey, withoutDefaults, } from "./profile.js";
|
|
4
|
+
import { runWithMcpRequestInfo } from "./request-context.js";
|
|
5
|
+
/** A tool-handler `ctx` as mcp-use hands it to callbacks (flattened `auth.user`). */
|
|
6
|
+
const authed = (user) => ({ auth: { user, payload: {} } });
|
|
7
|
+
describe("resolveProfileKey", () => {
|
|
8
|
+
it("resolves the OAuth caller from the handler ctx (any provider spelling)", () => {
|
|
9
|
+
expect(resolveProfileKey(authed({ id: "user-1" }))).toBe("user-1");
|
|
10
|
+
expect(resolveProfileKey(authed({ userId: "user-2" }))).toBe("user-2");
|
|
11
|
+
expect(resolveProfileKey({ auth: { payload: { sub: "user-3" } } })).toBe("user-3");
|
|
12
|
+
});
|
|
13
|
+
it("lets an authenticated ctx decide alone — no subject is NO key, never a fallback", () => {
|
|
14
|
+
const anonymous = { anonymousCaller: true };
|
|
15
|
+
expect(runWithMcpRequestInfo(anonymous, () => resolveProfileKey(authed({ id: "" })))).toBe(undefined);
|
|
16
|
+
expect(runWithMcpRequestInfo({ authUserId: "user-9" }, () => resolveProfileKey(authed({ id: 42 })))).toBeUndefined();
|
|
17
|
+
});
|
|
18
|
+
it("falls back to the ambient OAuth caller for ctx-less paths (pipeline steps)", () => {
|
|
19
|
+
expect(runWithMcpRequestInfo({ authUserId: "user-7" }, () => resolveProfileKey())).toBe("user-7");
|
|
20
|
+
// A ctx WITHOUT auth (a signed-out call) does not shadow it.
|
|
21
|
+
expect(runWithMcpRequestInfo({ authUserId: "user-7" }, () => resolveProfileKey({}))).toBe("user-7");
|
|
22
|
+
});
|
|
23
|
+
it("resolves the anonymous key only for an EXPLICITLY declared local caller", () => {
|
|
24
|
+
expect(runWithMcpRequestInfo({ anonymousCaller: true }, () => resolveProfileKey())).toBe(ANONYMOUS_PROFILE_KEY);
|
|
25
|
+
});
|
|
26
|
+
it("fails closed: no request context (missing middleware install) is no identity", () => {
|
|
27
|
+
expect(resolveProfileKey()).toBeUndefined();
|
|
28
|
+
expect(resolveProfileKey({})).toBeUndefined();
|
|
29
|
+
});
|
|
30
|
+
it("fails closed: an HTTP request without OAuth is no identity", () => {
|
|
31
|
+
expect(runWithMcpRequestInfo({}, () => resolveProfileKey())).toBeUndefined();
|
|
32
|
+
expect(runWithMcpRequestInfo({ authorization: "Bearer x" }, () => resolveProfileKey())).toBeUndefined();
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("resolveAuthUserId", () => {
|
|
36
|
+
it("returns only the OAuth caller, never the anonymous key", () => {
|
|
37
|
+
expect(resolveAuthUserId(authed({ id: "user-1" }))).toBe("user-1");
|
|
38
|
+
expect(runWithMcpRequestInfo({ authUserId: "user-7" }, () => resolveAuthUserId())).toBe("user-7");
|
|
39
|
+
expect(runWithMcpRequestInfo({ anonymousCaller: true }, () => resolveAuthUserId())).toBe(undefined);
|
|
40
|
+
expect(resolveAuthUserId()).toBeUndefined();
|
|
41
|
+
expect(resolveAuthUserId({ auth: {} })).toBeUndefined();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe("withoutDefaults", () => {
|
|
45
|
+
const schema = z.object({
|
|
46
|
+
period: z.enum(["7d", "30d"]).default("7d").describe("Look-back window."),
|
|
47
|
+
limit: z.number().int().default(10),
|
|
48
|
+
optional: z.string().optional(),
|
|
49
|
+
});
|
|
50
|
+
it("keeps omitted fields ABSENT instead of materializing defaults (the zod-4 partial trap)", () => {
|
|
51
|
+
// The trap this guards: `schema.partial()` re-applies the defaults on parse.
|
|
52
|
+
expect(schema.partial().parse({})).toEqual({ period: "7d", limit: 10 });
|
|
53
|
+
const saveInput = z.object(withoutDefaults(schema.shape)).partial();
|
|
54
|
+
expect(saveInput.parse({})).toEqual({});
|
|
55
|
+
expect(saveInput.parse({ limit: 3 })).toEqual({ limit: 3 });
|
|
56
|
+
});
|
|
57
|
+
it("preserves each field's description (the model reads them at the tool boundary)", () => {
|
|
58
|
+
const stripped = withoutDefaults(schema.shape);
|
|
59
|
+
expect(stripped.period.description).toBe("Look-back window.");
|
|
60
|
+
});
|
|
61
|
+
it("still validates the stripped fields", () => {
|
|
62
|
+
const saveInput = z.object(withoutDefaults(schema.shape)).partial();
|
|
63
|
+
expect(saveInput.safeParse({ period: "nope" }).success).toBe(false);
|
|
64
|
+
expect(saveInput.safeParse({ period: "30d" }).success).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it("passes fields that carry no default through untouched", () => {
|
|
67
|
+
const stripped = withoutDefaults(schema.shape);
|
|
68
|
+
expect(stripped.optional).toBe(schema.shape.optional);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=profile.test.js.map
|