@seed-ship/mcp-ui-solid 5.5.0 → 5.6.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.
Files changed (62) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/components/FormRenderer.cjs +13 -2
  3. package/dist/components/FormRenderer.cjs.map +1 -1
  4. package/dist/components/FormRenderer.d.ts.map +1 -1
  5. package/dist/components/FormRenderer.js +13 -2
  6. package/dist/components/FormRenderer.js.map +1 -1
  7. package/dist/components/GenerativeUIErrorBoundary.cjs +11 -0
  8. package/dist/components/GenerativeUIErrorBoundary.cjs.map +1 -1
  9. package/dist/components/GenerativeUIErrorBoundary.d.ts.map +1 -1
  10. package/dist/components/GenerativeUIErrorBoundary.js +11 -0
  11. package/dist/components/GenerativeUIErrorBoundary.js.map +1 -1
  12. package/dist/components/StreamingUIRenderer.cjs +49 -3
  13. package/dist/components/StreamingUIRenderer.cjs.map +1 -1
  14. package/dist/components/StreamingUIRenderer.d.ts.map +1 -1
  15. package/dist/components/StreamingUIRenderer.js +51 -5
  16. package/dist/components/StreamingUIRenderer.js.map +1 -1
  17. package/dist/components/UIResourceRenderer.cjs +62 -3
  18. package/dist/components/UIResourceRenderer.cjs.map +1 -1
  19. package/dist/components/UIResourceRenderer.d.ts.map +1 -1
  20. package/dist/components/UIResourceRenderer.js +64 -5
  21. package/dist/components/UIResourceRenderer.js.map +1 -1
  22. package/dist/context/MCPUITelemetryContext.cjs +25 -0
  23. package/dist/context/MCPUITelemetryContext.cjs.map +1 -0
  24. package/dist/context/MCPUITelemetryContext.d.ts +36 -0
  25. package/dist/context/MCPUITelemetryContext.d.ts.map +1 -0
  26. package/dist/context/MCPUITelemetryContext.js +25 -0
  27. package/dist/context/MCPUITelemetryContext.js.map +1 -0
  28. package/dist/index.cjs +6 -0
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.cts +4 -0
  31. package/dist/index.d.ts +4 -0
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +6 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/mcp-ui-spec/dist/schemas.cjs +16 -5
  36. package/dist/mcp-ui-spec/dist/schemas.cjs.map +1 -1
  37. package/dist/mcp-ui-spec/dist/schemas.js +16 -5
  38. package/dist/mcp-ui-spec/dist/schemas.js.map +1 -1
  39. package/dist/services/telemetry.cjs +56 -0
  40. package/dist/services/telemetry.cjs.map +1 -0
  41. package/dist/services/telemetry.d.ts +87 -0
  42. package/dist/services/telemetry.d.ts.map +1 -0
  43. package/dist/services/telemetry.js +56 -0
  44. package/dist/services/telemetry.js.map +1 -0
  45. package/dist/services/validation.cjs +28 -26
  46. package/dist/services/validation.cjs.map +1 -1
  47. package/dist/services/validation.d.ts.map +1 -1
  48. package/dist/services/validation.js +29 -27
  49. package/dist/services/validation.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/components/FormRenderer.tsx +14 -0
  52. package/src/components/GenerativeUIErrorBoundary.tsx +17 -1
  53. package/src/components/StreamingUIRenderer.tsx +55 -3
  54. package/src/components/UIResourceRenderer.tsx +79 -3
  55. package/src/context/MCPUITelemetryContext.test.tsx +119 -0
  56. package/src/context/MCPUITelemetryContext.tsx +71 -0
  57. package/src/index.ts +15 -0
  58. package/src/services/telemetry.test.ts +134 -0
  59. package/src/services/telemetry.ts +149 -0
  60. package/src/services/validation.test.ts +53 -3
  61. package/src/services/validation.ts +54 -44
  62. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sources":["../../../../mcp-ui-spec/dist/schemas.js"],"sourcesContent":["import { z } from \"zod\";\nconst GridPositionSchema = z.object({\n colStart: z.number().int().min(1).max(12),\n colSpan: z.number().int().min(1).max(12),\n rowStart: z.number().int().min(1).optional(),\n rowSpan: z.number().int().min(1).default(1).optional()\n});\nconst ComponentTypeSchema = z.enum([\n \"chart\",\n \"table\",\n \"metric\",\n \"text\",\n \"composite\",\n \"grid\",\n // Phase 5.0: Nested grid layouts\n \"iframe\",\n \"image\",\n \"link\",\n \"action\",\n // Phase 5.0: Tool call actions\n \"footer\",\n // Phase 5.0: Metadata footer\n \"carousel\",\n \"artifact\",\n \"form\",\n // Sprint 1: Form component\n \"modal\",\n // Sprint 3: Modal/dialog component\n \"action-group\",\n // Sprint 3: Action grouping component\n \"image-gallery\",\n // Sprint 5: Image gallery with lightbox\n \"video\",\n // Sprint 5: Video embed (YouTube, Vimeo, direct)\n \"code\",\n // Sprint 6: Syntax highlighted code block\n \"map\"\n // Sprint 6: Interactive map (Leaflet)\n]);\nconst FormFieldOptionSchema = z.object({\n label: z.string().min(1),\n value: z.string(),\n disabled: z.boolean().optional()\n});\nconst FormFieldTypeSchema = z.enum([\n \"text\",\n \"email\",\n \"password\",\n \"number\",\n \"date\",\n \"textarea\",\n \"select\",\n \"checkbox\",\n \"radio\",\n \"autocomplete\",\n \"range\",\n \"tags\",\n \"toggle\",\n \"fieldset\"\n]);\nconst ShowWhenOperatorSchema = z.enum([\n \"equals\",\n \"notEquals\",\n \"in\",\n \"notIn\",\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"greaterThan\",\n \"lessThan\",\n \"isEmpty\",\n \"isNotEmpty\",\n \"isTrue\",\n \"isFalse\"\n]);\nconst ShowWhenConditionSchema = z.object({\n field: z.string().min(1),\n operator: ShowWhenOperatorSchema,\n value: z.any().optional()\n});\nconst PrefillSourceSchema = z.enum([\"user\", \"detected\", \"inferred\", \"default\"]);\nconst FormFieldSchema = z.object({\n name: z.string().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),\n type: FormFieldTypeSchema,\n label: z.string().optional(),\n placeholder: z.string().optional(),\n helpText: z.string().optional(),\n required: z.boolean().optional(),\n disabled: z.boolean().optional(),\n defaultValue: z.any().optional(),\n // Prefill — pre-populated value with source tracking (v4.2.0)\n prefill: z.union([z.string(), z.array(z.string())]).optional(),\n displayHint: z.string().optional(),\n source: PrefillSourceSchema.optional(),\n muted: z.boolean().optional(),\n // Prefill mode for autocomplete fields (v4.3.0)\n prefillMode: z.enum([\"exact\", \"resolve\"]).optional(),\n // Value format validation (v4.3.0)\n valueFormat: z.string().optional(),\n valueFormatHint: z.string().optional(),\n // Text/textarea specific\n minLength: z.number().int().min(0).optional(),\n maxLength: z.number().int().min(1).optional(),\n pattern: z.string().optional(),\n // Number specific\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n // Date specific\n minDate: z.string().optional(),\n maxDate: z.string().optional(),\n // Select/Radio specific\n options: z.array(FormFieldOptionSchema).optional(),\n // Multi-select (v2.6.0)\n multiple: z.boolean().optional(),\n // Autocomplete specific (v2.6.0)\n apiUrl: z.string().url().optional(),\n searchParam: z.string().optional(),\n labelField: z.string().optional(),\n valueField: z.string().optional(),\n extraParams: z.record(z.string()).optional(),\n minChars: z.number().int().min(0).optional(),\n debounceMs: z.number().int().min(0).optional(),\n // Dependent field (v2.7.0)\n dependsOn: z.object({\n field: z.string(),\n apiUrl: z.string(),\n labelField: z.string(),\n valueField: z.string(),\n extraParams: z.record(z.string()).optional()\n }).optional(),\n // Field status — API capability indicator (v2.11.0)\n fieldStatus: z.enum([\"required\", \"optional\", \"unsupported\", \"unknown\"]).optional(),\n statusReason: z.string().optional(),\n // Checkbox specific\n checkboxLabel: z.string().optional(),\n // Textarea specific\n rows: z.number().int().min(1).max(20).optional(),\n // Conditional visibility\n showWhen: ShowWhenConditionSchema.optional()\n});\nconst FormSubmitActionSchema = z.object({\n toolName: z.string().min(1),\n params: z.record(z.unknown()).optional()\n});\nconst FormComponentParamsSchema = z.object({\n title: z.string().optional(),\n fields: z.array(FormFieldSchema).min(1),\n submitLabel: z.string().optional(),\n showReset: z.boolean().optional(),\n submitAction: FormSubmitActionSchema.optional(),\n // Persistence options (Sprint 4)\n persistKey: z.string().optional(),\n excludeFromPersistence: z.array(z.string()).optional(),\n persistExpiresIn: z.number().int().positive().optional(),\n layout: z.enum([\"vertical\", \"horizontal\", \"inline\"]).optional(),\n // Auto-submit countdown in ms when all required fields are prefilled (v4.2.0)\n autoSubmitDelay: z.number().int().min(1e3).max(3e4).optional()\n});\nconst ModalSizeSchema = z.enum([\"sm\", \"md\", \"lg\", \"xl\", \"full\"]);\nconst ModalComponentParamsSchema = z.object({\n title: z.string().optional(),\n size: ModalSizeSchema.optional(),\n showClose: z.boolean().optional(),\n closeOnEscape: z.boolean().optional(),\n closeOnBackdrop: z.boolean().optional(),\n maxHeight: z.string().optional()\n // Note: content and footer are UIComponent references, validated separately\n});\nconst ActionGroupLayoutSchema = z.enum([\n \"horizontal\",\n \"vertical\",\n \"space-between\",\n \"end\",\n \"center\"\n]);\nconst ActionGroupGapSchema = z.enum([\"none\", \"sm\", \"md\", \"lg\"]);\nconst ActionParamsSchema = z.object({\n label: z.string().min(1),\n type: z.enum([\"button\", \"link\"]).optional(),\n action: z.enum([\"tool-call\", \"link\", \"submit\"]).optional(),\n toolName: z.string().optional(),\n params: z.record(z.unknown()).optional(),\n url: z.string().optional(),\n variant: z.enum([\"primary\", \"secondary\", \"outline\", \"ghost\", \"danger\"]).optional(),\n size: z.enum([\"sm\", \"md\", \"lg\"]).optional(),\n icon: z.string().optional(),\n disabled: z.boolean().optional()\n});\nconst ActionGroupParamsSchema = z.object({\n actions: z.array(ActionParamsSchema).min(1),\n layout: ActionGroupLayoutSchema.optional(),\n gap: ActionGroupGapSchema.optional(),\n fullWidth: z.boolean().optional(),\n label: z.string().optional()\n});\nconst GalleryImageSchema = z.object({\n url: z.string().url(),\n thumbnail: z.string().url().optional(),\n alt: z.string().optional(),\n caption: z.string().optional(),\n srcset: z.string().optional(),\n sizes: z.string().optional()\n});\nconst ImageGalleryColumnsSchema = z.enum([\"2\", \"3\", \"4\", \"5\"]).transform(Number);\nconst ImageGalleryGapSchema = z.enum([\"none\", \"sm\", \"md\", \"lg\"]);\nconst ImageGalleryAspectRatioSchema = z.enum([\"1:1\", \"16:9\", \"4:3\", \"auto\"]);\nconst ImageGalleryParamsSchema = z.object({\n title: z.string().optional(),\n images: z.array(GalleryImageSchema).min(1),\n columns: z.union([z.literal(2), z.literal(3), z.literal(4), z.literal(5)]).optional(),\n gap: ImageGalleryGapSchema.optional(),\n aspectRatio: ImageGalleryAspectRatioSchema.optional(),\n lightbox: z.boolean().optional(),\n showCaptions: z.boolean().optional()\n});\nconst VideoAspectRatioSchema = z.enum([\"16:9\", \"4:3\", \"1:1\", \"21:9\"]);\nconst VideoComponentParamsSchema = z.object({\n url: z.string().url(),\n title: z.string().optional(),\n caption: z.string().optional(),\n poster: z.string().url().optional(),\n aspectRatio: VideoAspectRatioSchema.optional(),\n autoplay: z.boolean().optional(),\n controls: z.boolean().optional(),\n loop: z.boolean().optional(),\n muted: z.boolean().optional(),\n startTime: z.number().int().min(0).optional()\n});\nconst CodeComponentParamsSchema = z.object({\n code: z.string(),\n language: z.string().optional(),\n filename: z.string().optional(),\n showLineNumbers: z.boolean().optional(),\n startLine: z.number().optional(),\n highlightLines: z.array(z.number()).optional(),\n maxHeight: z.string().optional(),\n theme: z.enum([\"light\", \"dark\"]).optional()\n});\nconst MapMarkerSchema = z.object({\n position: z.tuple([z.number(), z.number()]),\n tooltip: z.string().optional(),\n popup: z.string().optional()\n});\nconst MapComponentParamsSchema = z.object({\n center: z.tuple([z.number(), z.number()]).optional(),\n zoom: z.number().optional(),\n markers: z.array(MapMarkerSchema).optional(),\n height: z.string().optional(),\n fitBounds: z.boolean().optional(),\n zoomControl: z.boolean().optional(),\n scrollWheelZoom: z.boolean().optional(),\n tileLayer: z.string().optional(),\n attribution: z.string().optional()\n});\nconst ChartTypeSchema = z.enum([\n \"bar\",\n \"line\",\n \"pie\",\n \"doughnut\",\n \"radar\",\n \"scatter\",\n \"bubble\",\n \"polarArea\"\n]);\nconst ChartDatasetSchema = z.object({\n label: z.string(),\n // Either an array of numbers or an array of {x, y} points (Chart.js shapes)\n data: z.union([\n z.array(z.number()),\n z.array(\n z.object({\n x: z.union([z.string(), z.number()]),\n y: z.number()\n })\n )\n ]),\n backgroundColor: z.union([z.string(), z.array(z.string())]).optional(),\n borderColor: z.union([z.string(), z.array(z.string())]).optional(),\n borderWidth: z.number().optional(),\n fill: z.union([z.boolean(), z.string()]).optional(),\n tension: z.number().optional()\n});\nconst ChartTimeAxisSchema = z.object({\n parser: z.string().optional(),\n unit: z.enum([\"day\", \"week\", \"month\", \"quarter\", \"year\"]).optional(),\n tooltipFormat: z.string().optional(),\n min: z.string().optional(),\n max: z.string().optional()\n});\nconst ChartComponentParamsSchema = z.object({\n type: ChartTypeSchema,\n title: z.string().optional(),\n data: z.object({\n labels: z.array(z.string()),\n datasets: z.array(ChartDatasetSchema)\n }),\n options: z.object({\n responsive: z.boolean().optional(),\n maintainAspectRatio: z.boolean().optional(),\n tension: z.number().optional(),\n // `scales` and `plugins` are Chart.js opaque config objects — kept loose\n scales: z.unknown().optional(),\n plugins: z.unknown().optional()\n }).optional(),\n renderer: z.enum([\"native\", \"iframe\", \"auto\"]).optional(),\n exportable: z.boolean().optional(),\n timeAxis: ChartTimeAxisSchema.optional(),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst TableColumnSchema = z.object({\n key: z.string().min(1),\n label: z.string(),\n sortable: z.boolean().optional(),\n width: z.string().optional()\n});\nconst TablePaginationSchema = z.object({\n currentPage: z.number().int().min(1),\n pageSize: z.number().int().min(1),\n totalRows: z.number().int().min(0)\n});\nconst TableVirtualizeOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n rowHeight: z.number().int().min(1).optional(),\n overscan: z.number().int().min(0).optional(),\n threshold: z.number().int().min(1).optional()\n});\nconst TableExportableSchema = z.union([\n z.boolean(),\n z.object({\n formats: z.array(z.enum([\"csv\", \"tsv\", \"json\"])).optional(),\n filename: z.string().optional()\n })\n]);\nconst TableComponentParamsSchema = z.object({\n title: z.string().optional(),\n columns: z.array(TableColumnSchema).min(1),\n rows: z.array(z.record(z.unknown())),\n pagination: TablePaginationSchema.optional(),\n virtualize: z.union([z.boolean(), TableVirtualizeOptionsSchema]).optional(),\n exportable: TableExportableSchema.optional(),\n className: z.string().optional()\n});\nconst MetricTrendSchema = z.object({\n value: z.number(),\n direction: z.enum([\"up\", \"down\", \"neutral\"])\n});\nconst MetricComponentParamsSchema = z.object({\n title: z.string().min(1),\n value: z.union([z.string(), z.number()]),\n unit: z.string().optional(),\n trend: MetricTrendSchema.optional(),\n subtitle: z.string().optional(),\n icon: z.string().optional(),\n className: z.string().optional()\n});\nconst TextComponentParamsSchema = z.object({\n content: z.string().min(1),\n markdown: z.boolean().optional(),\n className: z.string().optional()\n});\nconst IframeComponentParamsSchema = z.object({\n url: z.string().min(1),\n title: z.string().optional(),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst ImageComponentParamsSchema = z.object({\n url: z.string().min(1),\n alt: z.string().optional(),\n caption: z.string().optional(),\n className: z.string().optional()\n});\nconst LinkComponentParamsSchema = z.object({\n url: z.string().min(1),\n label: z.string().optional(),\n description: z.string().optional(),\n className: z.string().optional()\n});\nconst CarouselComponentParamsSchema = z.object({\n items: z.array(z.unknown()).min(1),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst ArtifactComponentParamsSchema = z.object({\n url: z.string().min(1),\n filename: z.string().min(1),\n mimeType: z.string().min(1),\n size: z.number().int().min(0).optional(),\n description: z.string().optional()\n});\nconst SandboxFlagSchema = z.enum([\n \"allow-scripts\",\n \"allow-same-origin\",\n \"allow-forms\",\n \"allow-popups\",\n \"allow-modals\"\n]);\nconst SecurityConstraintsSchema = z.object({\n requiresAuth: z.boolean().default(false).optional(),\n allowedDomains: z.array(z.string()).optional(),\n maxIframeDepth: z.number().int().min(0).max(3).default(1).optional(),\n sandboxFlags: z.array(SandboxFlagSchema).optional()\n});\nconst PerformanceConstraintsSchema = z.object({\n maxRenderTime: z.number().int().min(100).default(5e3).optional(),\n maxDataSize: z.number().int().min(1024).default(102400).optional()\n});\nconst ComponentSchemaSchema = z.object({\n type: z.literal(\"object\"),\n required: z.array(z.string()).optional(),\n properties: z.record(z.unknown()),\n additionalProperties: z.boolean().optional()\n});\nconst ComponentExampleSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n params: z.record(z.unknown()),\n position: GridPositionSchema.optional()\n});\nconst ComponentSchema = z.object({\n id: z.string().regex(/^[a-z0-9-]+$/),\n type: ComponentTypeSchema,\n name: z.string().min(1),\n description: z.string().optional(),\n schema: ComponentSchemaSchema,\n examples: z.array(ComponentExampleSchema).min(1),\n security: SecurityConstraintsSchema.optional(),\n performance: PerformanceConstraintsSchema.optional(),\n tags: z.array(z.string().regex(/^[a-z0-9-]+$/)).optional(),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/).optional(),\n deprecated: z.boolean().default(false).optional(),\n deprecationMessage: z.string().optional()\n});\nconst RegistryMetadataSchema = z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().url().optional()\n});\nconst ComponentRegistrySchema = z.object({\n version: z.literal(\"1.0.0\"),\n metadata: RegistryMetadataSchema.optional(),\n components: z.array(ComponentSchema).min(1)\n});\nexport {\n ActionGroupGapSchema,\n ActionGroupLayoutSchema,\n ActionGroupParamsSchema,\n ActionParamsSchema,\n ArtifactComponentParamsSchema,\n CarouselComponentParamsSchema,\n ChartComponentParamsSchema,\n ChartDatasetSchema,\n ChartTimeAxisSchema,\n ChartTypeSchema,\n CodeComponentParamsSchema,\n ComponentExampleSchema,\n ComponentRegistrySchema,\n ComponentSchema,\n ComponentSchemaSchema,\n ComponentTypeSchema,\n FormComponentParamsSchema,\n FormFieldOptionSchema,\n FormFieldSchema,\n FormFieldTypeSchema,\n FormSubmitActionSchema,\n GalleryImageSchema,\n GridPositionSchema,\n IframeComponentParamsSchema,\n ImageComponentParamsSchema,\n ImageGalleryAspectRatioSchema,\n ImageGalleryColumnsSchema,\n ImageGalleryGapSchema,\n ImageGalleryParamsSchema,\n LinkComponentParamsSchema,\n MapComponentParamsSchema,\n MapMarkerSchema,\n MetricComponentParamsSchema,\n MetricTrendSchema,\n ModalComponentParamsSchema,\n ModalSizeSchema,\n PerformanceConstraintsSchema,\n PrefillSourceSchema,\n RegistryMetadataSchema,\n SandboxFlagSchema,\n SecurityConstraintsSchema,\n ShowWhenConditionSchema,\n ShowWhenOperatorSchema,\n TableColumnSchema,\n TableComponentParamsSchema,\n TableExportableSchema,\n TablePaginationSchema,\n TableVirtualizeOptionsSchema,\n TextComponentParamsSchema,\n VideoAspectRatioSchema,\n VideoComponentParamsSchema\n};\n//# sourceMappingURL=schemas.js.map\n"],"names":["z.object","z.number","z.enum","z.string","z.boolean","z.any","z.union","z.array","z.record","z.unknown","z.literal","z.tuple"],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sources":["../../../../mcp-ui-spec/dist/schemas.js"],"sourcesContent":["import { z } from \"zod\";\nconst GridPositionSchema = z.object({\n colStart: z.number().int().min(1).max(12),\n colSpan: z.number().int().min(1).max(12),\n rowStart: z.number().int().min(1).optional(),\n rowSpan: z.number().int().min(1).default(1).optional()\n});\nconst ComponentTypeSchema = z.enum([\n \"chart\",\n \"table\",\n \"metric\",\n \"text\",\n \"composite\",\n \"grid\",\n // Phase 5.0: Nested grid layouts\n \"iframe\",\n \"image\",\n \"link\",\n \"action\",\n // Phase 5.0: Tool call actions\n \"footer\",\n // Phase 5.0: Metadata footer\n \"carousel\",\n \"artifact\",\n \"form\",\n // Sprint 1: Form component\n \"modal\",\n // Sprint 3: Modal/dialog component\n \"action-group\",\n // Sprint 3: Action grouping component\n \"image-gallery\",\n // Sprint 5: Image gallery with lightbox\n \"video\",\n // Sprint 5: Video embed (YouTube, Vimeo, direct)\n \"code\",\n // Sprint 6: Syntax highlighted code block\n \"map\"\n // Sprint 6: Interactive map (Leaflet)\n]);\nconst FormFieldOptionSchema = z.object({\n label: z.string().min(1),\n value: z.string(),\n disabled: z.boolean().optional()\n});\nconst FormFieldTypeSchema = z.enum([\n \"text\",\n \"email\",\n \"password\",\n \"number\",\n \"date\",\n \"textarea\",\n \"select\",\n \"checkbox\",\n \"radio\",\n \"autocomplete\",\n \"range\",\n \"tags\",\n \"toggle\",\n \"fieldset\"\n]);\nconst ShowWhenOperatorSchema = z.enum([\n \"equals\",\n \"notEquals\",\n \"in\",\n \"notIn\",\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"greaterThan\",\n \"lessThan\",\n \"isEmpty\",\n \"isNotEmpty\",\n \"isTrue\",\n \"isFalse\"\n]);\nconst ShowWhenConditionSchema = z.object({\n field: z.string().min(1),\n operator: ShowWhenOperatorSchema,\n value: z.any().optional()\n});\nconst PrefillSourceSchema = z.enum([\"user\", \"detected\", \"inferred\", \"default\"]);\nconst FormFieldSchema = z.object({\n name: z.string().regex(/^[a-zA-Z][\\w.-]*$/),\n type: FormFieldTypeSchema,\n label: z.string().optional(),\n placeholder: z.string().optional(),\n helpText: z.string().optional(),\n required: z.boolean().optional(),\n disabled: z.boolean().optional(),\n defaultValue: z.any().optional(),\n // Prefill — pre-populated value with source tracking (v4.2.0)\n prefill: z.union([z.string(), z.array(z.string())]).optional(),\n displayHint: z.string().optional(),\n source: PrefillSourceSchema.optional(),\n muted: z.boolean().optional(),\n // Prefill mode for autocomplete fields (v4.3.0)\n prefillMode: z.enum([\"exact\", \"resolve\"]).optional(),\n // Value format validation (v4.3.0)\n valueFormat: z.string().optional(),\n valueFormatHint: z.string().optional(),\n // Text/textarea specific\n minLength: z.number().int().min(0).optional(),\n maxLength: z.number().int().min(1).optional(),\n pattern: z.string().optional(),\n // Number specific\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n // Date specific\n minDate: z.string().optional(),\n maxDate: z.string().optional(),\n // Select/Radio specific\n options: z.array(FormFieldOptionSchema).optional(),\n // Multi-select (v2.6.0)\n multiple: z.boolean().optional(),\n // Autocomplete specific (v2.6.0)\n apiUrl: z.string().url().optional(),\n searchParam: z.string().optional(),\n labelField: z.string().optional(),\n valueField: z.string().optional(),\n extraParams: z.record(z.string()).optional(),\n minChars: z.number().int().min(0).optional(),\n debounceMs: z.number().int().min(0).optional(),\n // Dependent field (v2.7.0)\n dependsOn: z.object({\n field: z.string(),\n apiUrl: z.string(),\n labelField: z.string(),\n valueField: z.string(),\n extraParams: z.record(z.string()).optional()\n }).optional(),\n // Field status — API capability indicator (v2.11.0)\n fieldStatus: z.enum([\"required\", \"optional\", \"unsupported\", \"unknown\"]).optional(),\n statusReason: z.string().optional(),\n // Checkbox specific\n checkboxLabel: z.string().optional(),\n // Textarea specific\n rows: z.number().int().min(1).max(20).optional(),\n // Conditional visibility\n showWhen: ShowWhenConditionSchema.optional()\n});\nconst FormSubmitActionSchema = z.object({\n toolName: z.string().min(1),\n params: z.record(z.unknown()).optional()\n});\nconst FormComponentParamsSchema = z.object({\n title: z.string().optional(),\n fields: z.array(FormFieldSchema).min(1),\n submitLabel: z.string().optional(),\n showReset: z.boolean().optional(),\n submitAction: FormSubmitActionSchema.optional(),\n // Persistence options (Sprint 4)\n persistKey: z.string().optional(),\n excludeFromPersistence: z.array(z.string()).optional(),\n persistExpiresIn: z.number().int().positive().optional(),\n layout: z.enum([\"vertical\", \"horizontal\", \"inline\"]).optional(),\n // Auto-submit countdown in ms when all required fields are prefilled (v4.2.0)\n autoSubmitDelay: z.number().int().min(1e3).max(3e4).optional()\n});\nconst ModalSizeSchema = z.enum([\"sm\", \"md\", \"lg\", \"xl\", \"full\"]);\nconst ModalComponentParamsSchema = z.object({\n title: z.string().optional(),\n size: ModalSizeSchema.optional(),\n showClose: z.boolean().optional(),\n closeOnEscape: z.boolean().optional(),\n closeOnBackdrop: z.boolean().optional(),\n maxHeight: z.string().optional()\n // Note: content and footer are UIComponent references, validated separately\n});\nconst ActionGroupLayoutSchema = z.enum([\n \"horizontal\",\n \"vertical\",\n \"space-between\",\n \"end\",\n \"center\"\n]);\nconst ActionGroupGapSchema = z.enum([\"none\", \"sm\", \"md\", \"lg\"]);\nconst ActionParamsSchema = z.object({\n label: z.string().min(1),\n type: z.enum([\"button\", \"link\"]).optional(),\n action: z.enum([\"tool-call\", \"link\", \"submit\"]).optional(),\n toolName: z.string().optional(),\n params: z.record(z.unknown()).optional(),\n url: z.string().optional(),\n variant: z.enum([\"primary\", \"secondary\", \"outline\", \"ghost\", \"danger\"]).optional(),\n size: z.enum([\"sm\", \"md\", \"lg\"]).optional(),\n icon: z.string().optional(),\n disabled: z.boolean().optional()\n});\nconst ActionGroupParamsSchema = z.object({\n actions: z.array(ActionParamsSchema).min(1),\n layout: ActionGroupLayoutSchema.optional(),\n gap: ActionGroupGapSchema.optional(),\n fullWidth: z.boolean().optional(),\n label: z.string().optional()\n});\nconst GalleryImageSchema = z.object({\n url: z.string().url(),\n thumbnail: z.string().url().optional(),\n alt: z.string().optional(),\n caption: z.string().optional(),\n srcset: z.string().optional(),\n sizes: z.string().optional()\n});\nconst ImageGalleryColumnsSchema = z.enum([\"2\", \"3\", \"4\", \"5\"]).transform(Number);\nconst ImageGalleryGapSchema = z.enum([\"none\", \"sm\", \"md\", \"lg\"]);\nconst ImageGalleryAspectRatioSchema = z.enum([\"1:1\", \"16:9\", \"4:3\", \"auto\"]);\nconst ImageGalleryParamsSchema = z.object({\n title: z.string().optional(),\n images: z.array(GalleryImageSchema).min(1),\n columns: z.union([z.literal(2), z.literal(3), z.literal(4), z.literal(5)]).optional(),\n gap: ImageGalleryGapSchema.optional(),\n aspectRatio: ImageGalleryAspectRatioSchema.optional(),\n lightbox: z.boolean().optional(),\n showCaptions: z.boolean().optional()\n});\nconst VideoAspectRatioSchema = z.enum([\"16:9\", \"4:3\", \"1:1\", \"21:9\"]);\nconst VideoComponentParamsSchema = z.object({\n url: z.string().url(),\n title: z.string().optional(),\n caption: z.string().optional(),\n poster: z.string().url().optional(),\n aspectRatio: VideoAspectRatioSchema.optional(),\n autoplay: z.boolean().optional(),\n controls: z.boolean().optional(),\n loop: z.boolean().optional(),\n muted: z.boolean().optional(),\n startTime: z.number().int().min(0).optional()\n});\nconst CodeComponentParamsSchema = z.object({\n code: z.string(),\n language: z.string().optional(),\n filename: z.string().optional(),\n showLineNumbers: z.boolean().optional(),\n startLine: z.number().optional(),\n highlightLines: z.array(z.number()).optional(),\n maxHeight: z.string().optional(),\n theme: z.enum([\"light\", \"dark\"]).optional()\n});\nconst LatLngObjectSchema = z.object({\n lat: z.number(),\n lng: z.number()\n});\nconst LatLngTupleSchema = z.tuple([z.number(), z.number()]);\nconst LatLngPointSchema = z.union([LatLngTupleSchema, LatLngObjectSchema]);\nconst MapMarkerSchema = z.object({\n position: LatLngPointSchema,\n tooltip: z.string().optional(),\n popup: z.string().optional()\n});\nconst MapComponentParamsSchema = z.object({\n center: LatLngPointSchema.optional(),\n zoom: z.number().optional(),\n markers: z.array(MapMarkerSchema).optional(),\n height: z.string().optional(),\n fitBounds: z.boolean().optional(),\n zoomControl: z.boolean().optional(),\n scrollWheelZoom: z.boolean().optional(),\n tileLayer: z.string().optional(),\n attribution: z.string().optional()\n});\nconst ChartTypeSchema = z.enum([\n \"bar\",\n \"line\",\n \"pie\",\n \"doughnut\",\n \"radar\",\n \"scatter\",\n \"bubble\",\n \"polarArea\"\n]);\nconst ChartDatasetSchema = z.object({\n label: z.string(),\n // Either an array of numbers or an array of {x, y} points (Chart.js shapes)\n data: z.union([\n z.array(z.number()),\n z.array(\n z.object({\n x: z.union([z.string(), z.number()]),\n y: z.number()\n })\n )\n ]),\n backgroundColor: z.union([z.string(), z.array(z.string())]).optional(),\n borderColor: z.union([z.string(), z.array(z.string())]).optional(),\n borderWidth: z.number().optional(),\n fill: z.union([z.boolean(), z.string()]).optional(),\n tension: z.number().optional()\n});\nconst ChartTimeAxisSchema = z.object({\n parser: z.string().optional(),\n unit: z.enum([\"day\", \"week\", \"month\", \"quarter\", \"year\"]).optional(),\n tooltipFormat: z.string().optional(),\n min: z.string().optional(),\n max: z.string().optional()\n});\nconst ChartComponentParamsSchema = z.object({\n type: ChartTypeSchema,\n title: z.string().optional(),\n data: z.object({\n labels: z.array(z.string()),\n datasets: z.array(ChartDatasetSchema)\n }),\n options: z.object({\n responsive: z.boolean().optional(),\n maintainAspectRatio: z.boolean().optional(),\n tension: z.number().optional(),\n // `scales` and `plugins` are Chart.js opaque config objects — kept loose\n scales: z.unknown().optional(),\n plugins: z.unknown().optional()\n }).optional(),\n renderer: z.enum([\"native\", \"iframe\", \"auto\"]).optional(),\n exportable: z.boolean().optional(),\n timeAxis: ChartTimeAxisSchema.optional(),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst TableColumnSchema = z.object({\n key: z.string().min(1),\n label: z.string(),\n sortable: z.boolean().optional(),\n width: z.string().optional()\n});\nconst TablePaginationSchema = z.object({\n currentPage: z.number().int().min(1),\n pageSize: z.number().int().min(1),\n totalRows: z.number().int().min(0)\n});\nconst TableVirtualizeOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n rowHeight: z.number().int().min(1).optional(),\n overscan: z.number().int().min(0).optional(),\n threshold: z.number().int().min(1).optional()\n});\nconst TableExportableSchema = z.union([\n z.boolean(),\n z.object({\n formats: z.array(z.enum([\"csv\", \"tsv\", \"json\"])).optional(),\n filename: z.string().optional()\n })\n]);\nconst TableComponentParamsSchema = z.object({\n title: z.string().optional(),\n columns: z.array(TableColumnSchema).min(1),\n rows: z.array(z.record(z.unknown())),\n pagination: TablePaginationSchema.optional(),\n virtualize: z.union([z.boolean(), TableVirtualizeOptionsSchema]).optional(),\n exportable: TableExportableSchema.optional(),\n className: z.string().optional()\n});\nconst MetricTrendSchema = z.object({\n value: z.number(),\n direction: z.enum([\"up\", \"down\", \"neutral\"])\n});\nconst MetricComponentParamsSchema = z.object({\n title: z.string().min(1),\n value: z.union([z.string(), z.number()]),\n unit: z.string().optional(),\n trend: MetricTrendSchema.optional(),\n subtitle: z.string().optional(),\n icon: z.string().optional(),\n className: z.string().optional()\n});\nconst TextComponentParamsSchema = z.object({\n content: z.string().min(1),\n markdown: z.boolean().optional(),\n className: z.string().optional()\n});\nconst IframeComponentParamsSchema = z.object({\n url: z.string().min(1),\n title: z.string().optional(),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst ImageComponentParamsSchema = z.object({\n url: z.string().min(1),\n alt: z.string().optional(),\n caption: z.string().optional(),\n className: z.string().optional()\n});\nconst LinkComponentParamsSchema = z.object({\n url: z.string().min(1),\n label: z.string().optional(),\n description: z.string().optional(),\n className: z.string().optional()\n});\nconst CarouselComponentParamsSchema = z.object({\n items: z.array(z.unknown()).min(1),\n height: z.string().optional(),\n className: z.string().optional()\n});\nconst ArtifactComponentParamsSchema = z.object({\n url: z.string().min(1),\n filename: z.string().min(1),\n mimeType: z.string().min(1),\n size: z.number().int().min(0).optional(),\n description: z.string().optional()\n});\nconst SandboxFlagSchema = z.enum([\n \"allow-scripts\",\n \"allow-same-origin\",\n \"allow-forms\",\n \"allow-popups\",\n \"allow-modals\"\n]);\nconst SecurityConstraintsSchema = z.object({\n requiresAuth: z.boolean().default(false).optional(),\n allowedDomains: z.array(z.string()).optional(),\n maxIframeDepth: z.number().int().min(0).max(3).default(1).optional(),\n sandboxFlags: z.array(SandboxFlagSchema).optional()\n});\nconst PerformanceConstraintsSchema = z.object({\n maxRenderTime: z.number().int().min(100).default(5e3).optional(),\n maxDataSize: z.number().int().min(1024).default(102400).optional()\n});\nconst ComponentSchemaSchema = z.object({\n type: z.literal(\"object\"),\n required: z.array(z.string()).optional(),\n properties: z.record(z.unknown()),\n additionalProperties: z.boolean().optional()\n});\nconst ComponentExampleSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n params: z.record(z.unknown()),\n position: GridPositionSchema.optional()\n});\nconst ComponentSchema = z.object({\n id: z.string().regex(/^[a-z0-9-]+$/),\n type: ComponentTypeSchema,\n name: z.string().min(1),\n description: z.string().optional(),\n schema: ComponentSchemaSchema,\n examples: z.array(ComponentExampleSchema).min(1),\n security: SecurityConstraintsSchema.optional(),\n performance: PerformanceConstraintsSchema.optional(),\n tags: z.array(z.string().regex(/^[a-z0-9-]+$/)).optional(),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/).optional(),\n deprecated: z.boolean().default(false).optional(),\n deprecationMessage: z.string().optional()\n});\nconst RegistryMetadataSchema = z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n author: z.string().optional(),\n repository: z.string().url().optional()\n});\nconst ComponentRegistrySchema = z.object({\n version: z.literal(\"1.0.0\"),\n metadata: RegistryMetadataSchema.optional(),\n components: z.array(ComponentSchema).min(1)\n});\nexport {\n ActionGroupGapSchema,\n ActionGroupLayoutSchema,\n ActionGroupParamsSchema,\n ActionParamsSchema,\n ArtifactComponentParamsSchema,\n CarouselComponentParamsSchema,\n ChartComponentParamsSchema,\n ChartDatasetSchema,\n ChartTimeAxisSchema,\n ChartTypeSchema,\n CodeComponentParamsSchema,\n ComponentExampleSchema,\n ComponentRegistrySchema,\n ComponentSchema,\n ComponentSchemaSchema,\n ComponentTypeSchema,\n FormComponentParamsSchema,\n FormFieldOptionSchema,\n FormFieldSchema,\n FormFieldTypeSchema,\n FormSubmitActionSchema,\n GalleryImageSchema,\n GridPositionSchema,\n IframeComponentParamsSchema,\n ImageComponentParamsSchema,\n ImageGalleryAspectRatioSchema,\n ImageGalleryColumnsSchema,\n ImageGalleryGapSchema,\n ImageGalleryParamsSchema,\n LatLngObjectSchema,\n LatLngPointSchema,\n LatLngTupleSchema,\n LinkComponentParamsSchema,\n MapComponentParamsSchema,\n MapMarkerSchema,\n MetricComponentParamsSchema,\n MetricTrendSchema,\n ModalComponentParamsSchema,\n ModalSizeSchema,\n PerformanceConstraintsSchema,\n PrefillSourceSchema,\n RegistryMetadataSchema,\n SandboxFlagSchema,\n SecurityConstraintsSchema,\n ShowWhenConditionSchema,\n ShowWhenOperatorSchema,\n TableColumnSchema,\n TableComponentParamsSchema,\n TableExportableSchema,\n TablePaginationSchema,\n TableVirtualizeOptionsSchema,\n TextComponentParamsSchema,\n VideoAspectRatioSchema,\n VideoComponentParamsSchema\n};\n//# sourceMappingURL=schemas.js.map\n"],"names":["z.object","z.number","z.enum","z.string","z.boolean","z.any","z.union","z.array","z.record","z.unknown","z.literal","z.tuple"],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const DEFAULT_BUFFER_MS = 100;
4
+ const DEFAULT_BUFFER_MAX = 50;
5
+ function shouldSample(eventType, options) {
6
+ var _a;
7
+ const perTypeRate = (_a = options == null ? void 0 : options.sampleByType) == null ? void 0 : _a[eventType];
8
+ const rate = perTypeRate !== void 0 ? perTypeRate : (options == null ? void 0 : options.sampleRate) ?? 1;
9
+ if (rate >= 1) return true;
10
+ if (rate <= 0) return false;
11
+ return Math.random() < rate;
12
+ }
13
+ function createTelemetryDispatcher(sink, options) {
14
+ const buffer = [];
15
+ const bufferMs = (options == null ? void 0 : options.bufferMs) ?? DEFAULT_BUFFER_MS;
16
+ const bufferMax = (options == null ? void 0 : options.bufferMax) ?? DEFAULT_BUFFER_MAX;
17
+ let flushTimer;
18
+ function deliver(batch) {
19
+ try {
20
+ const result = sink(batch);
21
+ if (result && typeof result.then === "function") {
22
+ ;
23
+ result.catch(() => {
24
+ });
25
+ }
26
+ } catch {
27
+ }
28
+ }
29
+ function flush() {
30
+ if (flushTimer !== void 0) {
31
+ clearTimeout(flushTimer);
32
+ flushTimer = void 0;
33
+ }
34
+ if (buffer.length === 0) return;
35
+ const batch = buffer.splice(0, buffer.length);
36
+ deliver(batch);
37
+ }
38
+ function dispatch(event) {
39
+ if (!shouldSample(event.type, options)) return;
40
+ buffer.push(event);
41
+ if (buffer.length >= bufferMax) {
42
+ flush();
43
+ return;
44
+ }
45
+ if (bufferMs <= 0) {
46
+ flush();
47
+ return;
48
+ }
49
+ if (flushTimer === void 0) {
50
+ flushTimer = setTimeout(flush, bufferMs);
51
+ }
52
+ }
53
+ return { dispatch, flush };
54
+ }
55
+ exports.createTelemetryDispatcher = createTelemetryDispatcher;
56
+ //# sourceMappingURL=telemetry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.cjs","sources":["../../src/services/telemetry.ts"],"sourcesContent":["/**\n * UI telemetry sink (B.5 — v5.6.0)\n *\n * Minimal OpenTelemetry-like Provider that lets a consumer (e.g. deposium\n * `/admin/ui-telemetry`) collect lifecycle + error + action events from\n * mcp-ui components without imposing any API change on apps that don't use\n * it. Spec'd in `MCP-UI-AUDIT-2026-04-26.md` §M.6.\n *\n * Three hard rules:\n * 1. Provider is OPTIONAL. When absent, `useTelemetry()` returns `null`\n * and dispatch sites no-op. Existing apps see zero behavior change.\n * 2. Sink is FAIL-OPEN. A `sink()` throw or rejected promise is caught\n * silently — telemetry never crashes the renderer.\n * 3. Events carry NO payload data. Only meta (type + id + counts + timing)\n * to avoid PII / data leaks in centralized logs.\n */\n\nimport type { ComponentType } from '../types'\n\ninterface TelemetryEventBase {\n /** Component instance id (from `UIComponent.id` or auto-generated). */\n id: string\n /** ComponentType, e.g. 'chart' / 'metric' / 'iframe'. */\n componentType: ComponentType\n /** Wall-clock timestamp (ms epoch) for cross-stack correlation. */\n ts: number\n}\n\n/**\n * Discriminated union of all telemetry events emitted by mcp-ui.\n * See §M.6.2 for field semantics + privacy rules.\n */\nexport type TelemetryEvent =\n | ({ type: 'component:mounted' } & TelemetryEventBase)\n | ({ type: 'component:rendered'; durationMs: number } & TelemetryEventBase)\n | ({ type: 'component:unmounted' } & TelemetryEventBase)\n | ({\n type: 'validation:failed'\n errorCount: number\n firstErrorCode: string | null\n } & TelemetryEventBase)\n | ({ type: 'render:error'; errorMessage: string } & TelemetryEventBase)\n | ({ type: 'action:dispatched'; actionName: string } & TelemetryEventBase)\n\n/**\n * Consumer-supplied sink. Receives a batch of events (always an array,\n * even for `bufferMs: 0` — single-element array in that case). Errors\n * and rejected promises are caught silently by the dispatcher.\n */\nexport interface TelemetrySink {\n (events: TelemetryEvent[]): void | Promise<void>\n}\n\nexport interface TelemetryOptions {\n /** Per-event base sampling rate, 0..1, default 1.0 (all events). */\n sampleRate?: number\n /** Buffer events and flush after N ms (default 100). 0 = no buffer. */\n bufferMs?: number\n /** Max buffered events before forced flush (default 50). */\n bufferMax?: number\n /** Per-event-type override on sampling (high-volume types can be lower). */\n sampleByType?: Partial<Record<TelemetryEvent['type'], number>>\n}\n\n/**\n * Dispatcher returned by `createTelemetryDispatcher`. Used internally by\n * the Provider, exposed only so tests can drive it without React/Solid.\n */\nexport interface TelemetryDispatcher {\n /**\n * Push an event. Sampling + buffering applied transparently. Never throws.\n */\n dispatch(event: TelemetryEvent): void\n /**\n * Force-flush the buffer. Useful on tab-hidden / unload, or for tests.\n * Never throws.\n */\n flush(): void\n}\n\nconst DEFAULT_BUFFER_MS = 100\nconst DEFAULT_BUFFER_MAX = 50\n\nfunction shouldSample(\n eventType: TelemetryEvent['type'],\n options: TelemetryOptions | undefined\n): boolean {\n const perTypeRate = options?.sampleByType?.[eventType]\n const rate = perTypeRate !== undefined ? perTypeRate : (options?.sampleRate ?? 1.0)\n if (rate >= 1) return true\n if (rate <= 0) return false\n return Math.random() < rate\n}\n\n/**\n * Create a telemetry dispatcher. Pure function, no Solid context — exists\n * separately from the Provider so it can be unit-tested in isolation.\n */\nexport function createTelemetryDispatcher(\n sink: TelemetrySink,\n options?: TelemetryOptions\n): TelemetryDispatcher {\n const buffer: TelemetryEvent[] = []\n const bufferMs = options?.bufferMs ?? DEFAULT_BUFFER_MS\n const bufferMax = options?.bufferMax ?? DEFAULT_BUFFER_MAX\n let flushTimer: ReturnType<typeof setTimeout> | undefined\n\n function deliver(batch: TelemetryEvent[]): void {\n try {\n const result = sink(batch)\n // Promise rejections are silenced too (fail-open, §M.6.1).\n if (result && typeof (result as Promise<void>).then === 'function') {\n ;(result as Promise<void>).catch(() => {\n /* silent */\n })\n }\n } catch {\n /* silent */\n }\n }\n\n function flush(): void {\n if (flushTimer !== undefined) {\n clearTimeout(flushTimer)\n flushTimer = undefined\n }\n if (buffer.length === 0) return\n const batch = buffer.splice(0, buffer.length)\n deliver(batch)\n }\n\n function dispatch(event: TelemetryEvent): void {\n if (!shouldSample(event.type, options)) return\n buffer.push(event)\n if (buffer.length >= bufferMax) {\n flush()\n return\n }\n if (bufferMs <= 0) {\n flush()\n return\n }\n if (flushTimer === undefined) {\n flushTimer = setTimeout(flush, bufferMs)\n }\n }\n\n return { dispatch, flush }\n}\n"],"names":[],"mappings":";;AAgFA,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAE3B,SAAS,aACP,WACA,SACS;;AACT,QAAM,eAAc,wCAAS,iBAAT,mBAAwB;AAC5C,QAAM,OAAO,gBAAgB,SAAY,eAAe,mCAAS,eAAc;AAC/E,MAAI,QAAQ,EAAG,QAAO;AACtB,MAAI,QAAQ,EAAG,QAAO;AACtB,SAAO,KAAK,WAAW;AACzB;AAMO,SAAS,0BACd,MACA,SACqB;AACrB,QAAM,SAA2B,CAAA;AACjC,QAAM,YAAW,mCAAS,aAAY;AACtC,QAAM,aAAY,mCAAS,cAAa;AACxC,MAAI;AAEJ,WAAS,QAAQ,OAA+B;AAC9C,QAAI;AACF,YAAM,SAAS,KAAK,KAAK;AAEzB,UAAI,UAAU,OAAQ,OAAyB,SAAS,YAAY;AAClE;AAAE,eAAyB,MAAM,MAAM;AAAA,QAEvC,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,WAAS,QAAc;AACrB,QAAI,eAAe,QAAW;AAC5B,mBAAa,UAAU;AACvB,mBAAa;AAAA,IACf;AACA,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,QAAQ,OAAO,OAAO,GAAG,OAAO,MAAM;AAC5C,YAAQ,KAAK;AAAA,EACf;AAEA,WAAS,SAAS,OAA6B;AAC7C,QAAI,CAAC,aAAa,MAAM,MAAM,OAAO,EAAG;AACxC,WAAO,KAAK,KAAK;AACjB,QAAI,OAAO,UAAU,WAAW;AAC9B,YAAA;AACA;AAAA,IACF;AACA,QAAI,YAAY,GAAG;AACjB,YAAA;AACA;AAAA,IACF;AACA,QAAI,eAAe,QAAW;AAC5B,mBAAa,WAAW,OAAO,QAAQ;AAAA,IACzC;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,MAAA;AACrB;;"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * UI telemetry sink (B.5 — v5.6.0)
3
+ *
4
+ * Minimal OpenTelemetry-like Provider that lets a consumer (e.g. deposium
5
+ * `/admin/ui-telemetry`) collect lifecycle + error + action events from
6
+ * mcp-ui components without imposing any API change on apps that don't use
7
+ * it. Spec'd in `MCP-UI-AUDIT-2026-04-26.md` §M.6.
8
+ *
9
+ * Three hard rules:
10
+ * 1. Provider is OPTIONAL. When absent, `useTelemetry()` returns `null`
11
+ * and dispatch sites no-op. Existing apps see zero behavior change.
12
+ * 2. Sink is FAIL-OPEN. A `sink()` throw or rejected promise is caught
13
+ * silently — telemetry never crashes the renderer.
14
+ * 3. Events carry NO payload data. Only meta (type + id + counts + timing)
15
+ * to avoid PII / data leaks in centralized logs.
16
+ */
17
+ import type { ComponentType } from '../types';
18
+ interface TelemetryEventBase {
19
+ /** Component instance id (from `UIComponent.id` or auto-generated). */
20
+ id: string;
21
+ /** ComponentType, e.g. 'chart' / 'metric' / 'iframe'. */
22
+ componentType: ComponentType;
23
+ /** Wall-clock timestamp (ms epoch) for cross-stack correlation. */
24
+ ts: number;
25
+ }
26
+ /**
27
+ * Discriminated union of all telemetry events emitted by mcp-ui.
28
+ * See §M.6.2 for field semantics + privacy rules.
29
+ */
30
+ export type TelemetryEvent = ({
31
+ type: 'component:mounted';
32
+ } & TelemetryEventBase) | ({
33
+ type: 'component:rendered';
34
+ durationMs: number;
35
+ } & TelemetryEventBase) | ({
36
+ type: 'component:unmounted';
37
+ } & TelemetryEventBase) | ({
38
+ type: 'validation:failed';
39
+ errorCount: number;
40
+ firstErrorCode: string | null;
41
+ } & TelemetryEventBase) | ({
42
+ type: 'render:error';
43
+ errorMessage: string;
44
+ } & TelemetryEventBase) | ({
45
+ type: 'action:dispatched';
46
+ actionName: string;
47
+ } & TelemetryEventBase);
48
+ /**
49
+ * Consumer-supplied sink. Receives a batch of events (always an array,
50
+ * even for `bufferMs: 0` — single-element array in that case). Errors
51
+ * and rejected promises are caught silently by the dispatcher.
52
+ */
53
+ export interface TelemetrySink {
54
+ (events: TelemetryEvent[]): void | Promise<void>;
55
+ }
56
+ export interface TelemetryOptions {
57
+ /** Per-event base sampling rate, 0..1, default 1.0 (all events). */
58
+ sampleRate?: number;
59
+ /** Buffer events and flush after N ms (default 100). 0 = no buffer. */
60
+ bufferMs?: number;
61
+ /** Max buffered events before forced flush (default 50). */
62
+ bufferMax?: number;
63
+ /** Per-event-type override on sampling (high-volume types can be lower). */
64
+ sampleByType?: Partial<Record<TelemetryEvent['type'], number>>;
65
+ }
66
+ /**
67
+ * Dispatcher returned by `createTelemetryDispatcher`. Used internally by
68
+ * the Provider, exposed only so tests can drive it without React/Solid.
69
+ */
70
+ export interface TelemetryDispatcher {
71
+ /**
72
+ * Push an event. Sampling + buffering applied transparently. Never throws.
73
+ */
74
+ dispatch(event: TelemetryEvent): void;
75
+ /**
76
+ * Force-flush the buffer. Useful on tab-hidden / unload, or for tests.
77
+ * Never throws.
78
+ */
79
+ flush(): void;
80
+ }
81
+ /**
82
+ * Create a telemetry dispatcher. Pure function, no Solid context — exists
83
+ * separately from the Provider so it can be unit-tested in isolation.
84
+ */
85
+ export declare function createTelemetryDispatcher(sink: TelemetrySink, options?: TelemetryOptions): TelemetryDispatcher;
86
+ export {};
87
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/services/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,UAAU,kBAAkB;IAC1B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAA;IACV,yDAAyD;IACzD,aAAa,EAAE,aAAa,CAAA;IAC5B,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,CAAC;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACpD,CAAC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACzE,CAAC;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACtD,CAAC;IACC,IAAI,EAAE,mBAAmB,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B,GAAG,kBAAkB,CAAC,GACvB,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACrE,CAAC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAC,CAAA;AAE5E;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;CAC/D;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IACrC;;;OAGG;IACH,KAAK,IAAI,IAAI,CAAA;CACd;AAgBD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,aAAa,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACzB,mBAAmB,CA+CrB"}
@@ -0,0 +1,56 @@
1
+ const DEFAULT_BUFFER_MS = 100;
2
+ const DEFAULT_BUFFER_MAX = 50;
3
+ function shouldSample(eventType, options) {
4
+ var _a;
5
+ const perTypeRate = (_a = options == null ? void 0 : options.sampleByType) == null ? void 0 : _a[eventType];
6
+ const rate = perTypeRate !== void 0 ? perTypeRate : (options == null ? void 0 : options.sampleRate) ?? 1;
7
+ if (rate >= 1) return true;
8
+ if (rate <= 0) return false;
9
+ return Math.random() < rate;
10
+ }
11
+ function createTelemetryDispatcher(sink, options) {
12
+ const buffer = [];
13
+ const bufferMs = (options == null ? void 0 : options.bufferMs) ?? DEFAULT_BUFFER_MS;
14
+ const bufferMax = (options == null ? void 0 : options.bufferMax) ?? DEFAULT_BUFFER_MAX;
15
+ let flushTimer;
16
+ function deliver(batch) {
17
+ try {
18
+ const result = sink(batch);
19
+ if (result && typeof result.then === "function") {
20
+ ;
21
+ result.catch(() => {
22
+ });
23
+ }
24
+ } catch {
25
+ }
26
+ }
27
+ function flush() {
28
+ if (flushTimer !== void 0) {
29
+ clearTimeout(flushTimer);
30
+ flushTimer = void 0;
31
+ }
32
+ if (buffer.length === 0) return;
33
+ const batch = buffer.splice(0, buffer.length);
34
+ deliver(batch);
35
+ }
36
+ function dispatch(event) {
37
+ if (!shouldSample(event.type, options)) return;
38
+ buffer.push(event);
39
+ if (buffer.length >= bufferMax) {
40
+ flush();
41
+ return;
42
+ }
43
+ if (bufferMs <= 0) {
44
+ flush();
45
+ return;
46
+ }
47
+ if (flushTimer === void 0) {
48
+ flushTimer = setTimeout(flush, bufferMs);
49
+ }
50
+ }
51
+ return { dispatch, flush };
52
+ }
53
+ export {
54
+ createTelemetryDispatcher
55
+ };
56
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sources":["../../src/services/telemetry.ts"],"sourcesContent":["/**\n * UI telemetry sink (B.5 — v5.6.0)\n *\n * Minimal OpenTelemetry-like Provider that lets a consumer (e.g. deposium\n * `/admin/ui-telemetry`) collect lifecycle + error + action events from\n * mcp-ui components without imposing any API change on apps that don't use\n * it. Spec'd in `MCP-UI-AUDIT-2026-04-26.md` §M.6.\n *\n * Three hard rules:\n * 1. Provider is OPTIONAL. When absent, `useTelemetry()` returns `null`\n * and dispatch sites no-op. Existing apps see zero behavior change.\n * 2. Sink is FAIL-OPEN. A `sink()` throw or rejected promise is caught\n * silently — telemetry never crashes the renderer.\n * 3. Events carry NO payload data. Only meta (type + id + counts + timing)\n * to avoid PII / data leaks in centralized logs.\n */\n\nimport type { ComponentType } from '../types'\n\ninterface TelemetryEventBase {\n /** Component instance id (from `UIComponent.id` or auto-generated). */\n id: string\n /** ComponentType, e.g. 'chart' / 'metric' / 'iframe'. */\n componentType: ComponentType\n /** Wall-clock timestamp (ms epoch) for cross-stack correlation. */\n ts: number\n}\n\n/**\n * Discriminated union of all telemetry events emitted by mcp-ui.\n * See §M.6.2 for field semantics + privacy rules.\n */\nexport type TelemetryEvent =\n | ({ type: 'component:mounted' } & TelemetryEventBase)\n | ({ type: 'component:rendered'; durationMs: number } & TelemetryEventBase)\n | ({ type: 'component:unmounted' } & TelemetryEventBase)\n | ({\n type: 'validation:failed'\n errorCount: number\n firstErrorCode: string | null\n } & TelemetryEventBase)\n | ({ type: 'render:error'; errorMessage: string } & TelemetryEventBase)\n | ({ type: 'action:dispatched'; actionName: string } & TelemetryEventBase)\n\n/**\n * Consumer-supplied sink. Receives a batch of events (always an array,\n * even for `bufferMs: 0` — single-element array in that case). Errors\n * and rejected promises are caught silently by the dispatcher.\n */\nexport interface TelemetrySink {\n (events: TelemetryEvent[]): void | Promise<void>\n}\n\nexport interface TelemetryOptions {\n /** Per-event base sampling rate, 0..1, default 1.0 (all events). */\n sampleRate?: number\n /** Buffer events and flush after N ms (default 100). 0 = no buffer. */\n bufferMs?: number\n /** Max buffered events before forced flush (default 50). */\n bufferMax?: number\n /** Per-event-type override on sampling (high-volume types can be lower). */\n sampleByType?: Partial<Record<TelemetryEvent['type'], number>>\n}\n\n/**\n * Dispatcher returned by `createTelemetryDispatcher`. Used internally by\n * the Provider, exposed only so tests can drive it without React/Solid.\n */\nexport interface TelemetryDispatcher {\n /**\n * Push an event. Sampling + buffering applied transparently. Never throws.\n */\n dispatch(event: TelemetryEvent): void\n /**\n * Force-flush the buffer. Useful on tab-hidden / unload, or for tests.\n * Never throws.\n */\n flush(): void\n}\n\nconst DEFAULT_BUFFER_MS = 100\nconst DEFAULT_BUFFER_MAX = 50\n\nfunction shouldSample(\n eventType: TelemetryEvent['type'],\n options: TelemetryOptions | undefined\n): boolean {\n const perTypeRate = options?.sampleByType?.[eventType]\n const rate = perTypeRate !== undefined ? perTypeRate : (options?.sampleRate ?? 1.0)\n if (rate >= 1) return true\n if (rate <= 0) return false\n return Math.random() < rate\n}\n\n/**\n * Create a telemetry dispatcher. Pure function, no Solid context — exists\n * separately from the Provider so it can be unit-tested in isolation.\n */\nexport function createTelemetryDispatcher(\n sink: TelemetrySink,\n options?: TelemetryOptions\n): TelemetryDispatcher {\n const buffer: TelemetryEvent[] = []\n const bufferMs = options?.bufferMs ?? DEFAULT_BUFFER_MS\n const bufferMax = options?.bufferMax ?? DEFAULT_BUFFER_MAX\n let flushTimer: ReturnType<typeof setTimeout> | undefined\n\n function deliver(batch: TelemetryEvent[]): void {\n try {\n const result = sink(batch)\n // Promise rejections are silenced too (fail-open, §M.6.1).\n if (result && typeof (result as Promise<void>).then === 'function') {\n ;(result as Promise<void>).catch(() => {\n /* silent */\n })\n }\n } catch {\n /* silent */\n }\n }\n\n function flush(): void {\n if (flushTimer !== undefined) {\n clearTimeout(flushTimer)\n flushTimer = undefined\n }\n if (buffer.length === 0) return\n const batch = buffer.splice(0, buffer.length)\n deliver(batch)\n }\n\n function dispatch(event: TelemetryEvent): void {\n if (!shouldSample(event.type, options)) return\n buffer.push(event)\n if (buffer.length >= bufferMax) {\n flush()\n return\n }\n if (bufferMs <= 0) {\n flush()\n return\n }\n if (flushTimer === undefined) {\n flushTimer = setTimeout(flush, bufferMs)\n }\n }\n\n return { dispatch, flush }\n}\n"],"names":[],"mappings":"AAgFA,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAE3B,SAAS,aACP,WACA,SACS;AANX;AAOE,QAAM,eAAc,wCAAS,iBAAT,mBAAwB;AAC5C,QAAM,OAAO,gBAAgB,SAAY,eAAe,mCAAS,eAAc;AAC/E,MAAI,QAAQ,EAAG,QAAO;AACtB,MAAI,QAAQ,EAAG,QAAO;AACtB,SAAO,KAAK,WAAW;AACzB;AAMO,SAAS,0BACd,MACA,SACqB;AACrB,QAAM,SAA2B,CAAA;AACjC,QAAM,YAAW,mCAAS,aAAY;AACtC,QAAM,aAAY,mCAAS,cAAa;AACxC,MAAI;AAEJ,WAAS,QAAQ,OAA+B;AAC9C,QAAI;AACF,YAAM,SAAS,KAAK,KAAK;AAEzB,UAAI,UAAU,OAAQ,OAAyB,SAAS,YAAY;AAClE;AAAE,eAAyB,MAAM,MAAM;AAAA,QAEvC,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,WAAS,QAAc;AACrB,QAAI,eAAe,QAAW;AAC5B,mBAAa,UAAU;AACvB,mBAAa;AAAA,IACf;AACA,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,QAAQ,OAAO,OAAO,GAAG,OAAO,MAAM;AAC5C,YAAQ,KAAK;AAAA,EACf;AAEA,WAAS,SAAS,OAA6B;AAC7C,QAAI,CAAC,aAAa,MAAM,MAAM,OAAO,EAAG;AACxC,WAAO,KAAK,KAAK;AACjB,QAAI,OAAO,UAAU,WAAW;AAC9B,YAAA;AACA;AAAA,IACF;AACA,QAAI,YAAY,GAAG;AACjB,YAAA;AACA;AAAA,IACF;AACA,QAAI,eAAe,QAAW;AAC5B,mBAAa,WAAW,OAAO,QAAQ;AAAA,IACzC;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,MAAA;AACrB;"}
@@ -34,7 +34,10 @@ const SPEC_VALIDATORS = {
34
34
  "image-gallery": { schema: schemas.ImageGalleryParamsSchema, legacyCode: "EMPTY_GALLERY" },
35
35
  "action-group": { schema: schemas.ActionGroupParamsSchema, legacyCode: "EMPTY_ACTION_GROUP" },
36
36
  code: { schema: schemas.CodeComponentParamsSchema, legacyCode: "INVALID_CODE" },
37
- artifact: { schema: schemas.ArtifactComponentParamsSchema, legacyCode: "INVALID_ARTIFACT" }
37
+ artifact: { schema: schemas.ArtifactComponentParamsSchema, legacyCode: "INVALID_ARTIFACT" },
38
+ // v5.6.0 additions
39
+ form: { schema: schemas.FormComponentParamsSchema, legacyCode: "EMPTY_FORM" },
40
+ map: { schema: schemas.MapComponentParamsSchema, legacyCode: "INVALID_MAP" }
38
41
  };
39
42
  function mapZodIssuesToErrors(issues, legacyCode) {
40
43
  return issues.map((issue) => ({
@@ -393,8 +396,9 @@ function validateIframeDomain(url, options) {
393
396
  if ((options == null ? void 0 : options.policy) === "extend" && options.customDomains) {
394
397
  effectiveWhitelist = [...DEFAULT_IFRAME_DOMAINS, ...options.customDomains];
395
398
  }
396
- const isAllowed = effectiveWhitelist.some(
397
- (allowed) => domain === allowed || domain.endsWith(`.${allowed}`) || allowed === "localhost"
399
+ const isLoopback = domain === "localhost" || /^127(\.\d{1,3}){3}$/.test(domain);
400
+ const isAllowed = isLoopback || effectiveWhitelist.some(
401
+ (allowed) => allowed !== "localhost" && (domain === allowed || domain.endsWith(`.${allowed}`))
398
402
  );
399
403
  if (!isAllowed) {
400
404
  return {
@@ -461,15 +465,27 @@ function validateComponent(component, options) {
461
465
  if (!result.success) {
462
466
  errors.push(...mapZodIssuesToErrors(result.error.issues, specValidator.legacyCode));
463
467
  }
464
- if (result.success && (component.type === "iframe" || component.type === "video")) {
465
- const url = (_a = component.params) == null ? void 0 : _a.url;
466
- if (typeof url === "string") {
467
- const domainResult = validateIframeDomain(url, {
468
- policy: options == null ? void 0 : options.iframePolicy,
469
- customDomains: options == null ? void 0 : options.customIframeDomains
470
- });
471
- if (!domainResult.valid) {
472
- errors.push(...domainResult.errors || []);
468
+ if (result.success) {
469
+ if (component.type === "iframe" || component.type === "video") {
470
+ const url = (_a = component.params) == null ? void 0 : _a.url;
471
+ if (typeof url === "string") {
472
+ const domainResult = validateIframeDomain(url, {
473
+ policy: options == null ? void 0 : options.iframePolicy,
474
+ customDomains: options == null ? void 0 : options.customIframeDomains
475
+ });
476
+ if (!domainResult.valid) {
477
+ errors.push(...domainResult.errors || []);
478
+ }
479
+ }
480
+ }
481
+ if (component.type === "map") {
482
+ const mapParams = component.params;
483
+ if (!mapParams.center && (!Array.isArray(mapParams.markers) || mapParams.markers.length === 0)) {
484
+ errors.push({
485
+ path: "params",
486
+ message: "Map must have center or markers",
487
+ code: "INVALID_MAP"
488
+ });
473
489
  }
474
490
  }
475
491
  }
@@ -489,20 +505,6 @@ function validateComponent(component, options) {
489
505
  }
490
506
  break;
491
507
  }
492
- case "form": {
493
- const formParams = component.params;
494
- if (!Array.isArray(formParams.fields) || formParams.fields.length === 0) {
495
- errors.push({ path: "params.fields", message: "Form must have non-empty fields array", code: "EMPTY_FORM" });
496
- }
497
- break;
498
- }
499
- case "map": {
500
- const mapParams = component.params;
501
- if (!mapParams.center && (!Array.isArray(mapParams.markers) || mapParams.markers.length === 0)) {
502
- errors.push({ path: "params", message: "Map must have center or markers", code: "INVALID_MAP" });
503
- }
504
- break;
505
- }
506
508
  case "modal":
507
509
  break;
508
510
  default: