drizzle-cube 0.5.8 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/{adapters/express → express}/index.d.ts +3 -3
- package/dist/adapters/express/index.js +50 -50
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/{adapters/fastify → fastify}/index.d.ts +3 -3
- package/dist/adapters/fastify/index.js +78 -78
- package/dist/adapters/google-BOnRIN1w.cjs +2 -0
- package/dist/{server/google-CFYljAOF.js → adapters/google-CvKM9yVM.js} +83 -71
- package/dist/adapters/{handler-Cx8QYLk6.js → handler-CfgE0JSL.js} +499 -576
- package/dist/adapters/handler-Cn0dOctE.cjs +25 -0
- package/dist/adapters/hono/agent-handler.d.ts +9 -0
- package/dist/adapters/hono/index.cjs +2 -2
- package/dist/adapters/{adapters/hono → hono}/index.d.ts +4 -4
- package/dist/adapters/hono/index.js +205 -175
- package/dist/adapters/hono/mcp-handler.d.ts +37 -0
- package/dist/adapters/locale-DDvZDFVn.js +8114 -0
- package/dist/adapters/locale-ZLUUNUxr.cjs +166 -0
- package/dist/adapters/{adapters/locale.d.ts → locale.d.ts} +1 -1
- package/dist/adapters/mcp-tools-handlers.d.ts +18 -0
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/{adapters/mcp-tools.d.ts → mcp-tools.d.ts} +5 -5
- package/dist/adapters/mcp-tools.js +49 -38
- package/dist/adapters/mcp-transport-B7ddET3M.cjs +40 -0
- package/dist/adapters/mcp-transport-Dfuj4j4q.js +591 -0
- package/dist/adapters/{adapters/mcp-transport.d.ts → mcp-transport.d.ts} +3 -3
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/{adapters/nextjs → nextjs}/index.d.ts +3 -3
- package/dist/adapters/nextjs/index.js +190 -197
- package/dist/adapters/nextjs/mcp-handler.d.ts +36 -0
- package/dist/adapters/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
- package/dist/adapters/openai-vXvLni8v.cjs +1 -0
- package/dist/adapters/{adapters/types.d.ts → types.d.ts} +1 -1
- package/dist/adapters/{utils-D9JPLmfl.js → utils-BPWZsX7k.js} +1271 -1218
- package/dist/adapters/utils-_whV4fXL.cjs +128 -0
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/{adapters/utils.d.ts → utils.d.ts} +17 -92
- package/dist/adapters/utils.js +2 -2
- package/dist/cli/index.cjs +2 -2
- package/dist/client/adapters/adapterRegistry.d.ts +2 -2
- package/dist/client/adapters/flowModeAdapter.d.ts +2 -2
- package/dist/client/adapters/funnelModeAdapter.d.ts +2 -2
- package/dist/client/adapters/index.d.ts +9 -9
- package/dist/client/adapters/modeAdapter.d.ts +1 -1
- package/dist/client/adapters/queryModeAdapter.d.ts +3 -3
- package/dist/client/adapters/retentionModeAdapter.d.ts +2 -2
- package/dist/client/charts/ChartLoader.d.ts +3 -17
- package/dist/client/charts/chartComponentRegistry.d.ts +46 -0
- package/dist/client/charts/chartConfigHelpers.d.ts +38 -0
- package/dist/client/charts/chartConfigRegistry.d.ts +1 -1
- package/dist/client/charts/chartPlugin.d.ts +3 -3
- package/dist/client/charts/lazyChartConfigRegistry.d.ts +2 -2
- package/dist/client/charts.d.ts +8 -8
- package/dist/client/charts.js +14 -13
- package/dist/client/chunks/{DashboardEditModal-CjCIAT-J.js → DashboardEditModal-okVfH8ZK.js} +5296 -4544
- package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +1 -0
- package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js → RetentionCombinedChart-BgbDhsPz.js} +10 -10
- package/dist/client/chunks/RetentionCombinedChart-BgbDhsPz.js.map +1 -0
- package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js → RetentionHeatmap-DjXZaTPq.js} +5 -5
- package/dist/client/chunks/RetentionHeatmap-DjXZaTPq.js.map +1 -0
- package/dist/client/chunks/analysis-builder-DB88FojM.js +5674 -0
- package/dist/client/chunks/analysis-builder-DB88FojM.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-CYVwSPqt.js → analysis-builder-shared-BVK4TYfR.js} +1578 -1292
- package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +1 -0
- package/dist/client/chunks/{chart-activity-grid-DmruKPab.js → chart-activity-grid-DX0SJbxs.js} +635 -492
- package/dist/client/chunks/chart-activity-grid-DX0SJbxs.js.map +1 -0
- package/dist/client/chunks/chart-area-of01_62R.js +775 -0
- package/dist/client/chunks/chart-area-of01_62R.js.map +1 -0
- package/dist/client/chunks/chart-bar-BqelQE_I.js +194 -0
- package/dist/client/chunks/chart-bar-BqelQE_I.js.map +1 -0
- package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js → chart-box-plot-kkBixZ27.js} +2 -2
- package/dist/client/chunks/chart-box-plot-kkBixZ27.js.map +1 -0
- package/dist/client/chunks/chart-bubble-B2he1--4.js +221 -0
- package/dist/client/chunks/chart-bubble-B2he1--4.js.map +1 -0
- package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js → chart-candlestick-DZp19Tzh.js} +2 -2
- package/dist/client/chunks/chart-candlestick-DZp19Tzh.js.map +1 -0
- package/dist/client/chunks/chart-config-activity-grid-D_UX4NHC.js.map +1 -1
- package/dist/client/chunks/chart-config-area-BNigHUy8.js +124 -0
- package/dist/client/chunks/chart-config-area-BNigHUy8.js.map +1 -0
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js +54 -0
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +1 -0
- package/dist/client/chunks/{chart-config-box-plot-DJ-dWWXA.js → chart-config-box-plot-oW8axV2q.js} +5 -10
- package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +1 -0
- package/dist/client/chunks/chart-config-bubble-gIoqVyjZ.js.map +1 -1
- package/dist/client/chunks/chart-config-candlestick-N6DchAA3.js.map +1 -1
- package/dist/client/chunks/chart-config-data-table-d7VBY-y_.js.map +1 -1
- package/dist/client/chunks/chart-config-funnel-DEYMcxsD.js.map +1 -1
- package/dist/client/chunks/{chart-config-gauge-DSwC04l0.js → chart-config-gauge-Dq-_H9UN.js} +5 -7
- package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +1 -0
- package/dist/client/chunks/chart-config-heat-map-CfRnRNcw.js.map +1 -1
- package/dist/client/chunks/{chart-config-kpi-delta-D6BIkHL3.js → chart-config-kpi-delta-DSQbvqu_.js} +5 -10
- package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-number-Bx-V9a62.js → chart-config-kpi-number-EFSWY1We.js} +5 -7
- package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-text-CcqC1u-8.js → chart-config-kpi-text-KM3V5X2u.js} +5 -7
- package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +1 -0
- package/dist/client/chunks/{chart-config-line-Db3jDsWc.js → chart-config-line-D6jG8PCH.js} +9 -36
- package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +1 -0
- package/dist/client/chunks/chart-config-markdown-BtRIe8JN.js.map +1 -1
- package/dist/client/chunks/chart-config-measure-profile-DxRGa-zf.js.map +1 -1
- package/dist/client/chunks/{chart-config-pie-DD4SmRTF.js → chart-config-pie-BhzW-fdn.js} +6 -16
- package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +1 -0
- package/dist/client/chunks/{chart-config-radar-CC2XAaGr.js → chart-config-radar-D7REP1q_.js} +6 -16
- package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +1 -0
- package/dist/client/chunks/{chart-config-radial-bar-DmxKx1R0.js → chart-config-radial-bar-Byx6qOPU.js} +6 -16
- package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +1 -0
- package/dist/client/chunks/chart-config-sankey-BTnWA7EW.js.map +1 -1
- package/dist/client/chunks/chart-config-scatter-DSYTjwRb.js.map +1 -1
- package/dist/client/chunks/chart-config-sunburst-Bwjtdf7X.js.map +1 -1
- package/dist/client/chunks/{chart-config-tree-map-BI-oQStO.js → chart-config-tree-map-DVrvf3yQ.js} +6 -16
- package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +1 -0
- package/dist/client/chunks/{chart-config-waterfall-DSnyixbI.js → chart-config-waterfall-DmFeQdIk.js} +5 -10
- package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-BO4sXsim.js → chart-data-table-CKauQXme.js} +1046 -1121
- package/dist/client/chunks/chart-data-table-CKauQXme.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-DnWRsmnS.js → chart-funnel-CToKSBaL.js} +184 -222
- package/dist/client/chunks/chart-funnel-CToKSBaL.js.map +1 -0
- package/dist/client/chunks/chart-gauge-DTVezSk7.js +403 -0
- package/dist/client/chunks/chart-gauge-DTVezSk7.js.map +1 -0
- package/dist/client/chunks/chart-heat-map-DTuUl0BR.js +236 -0
- package/dist/client/chunks/chart-heat-map-DTuUl0BR.js.map +1 -0
- package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js +408 -0
- package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js.map +1 -0
- package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js +244 -0
- package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js.map +1 -0
- package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js +185 -0
- package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js.map +1 -0
- package/dist/client/chunks/chart-line-DKgrQA6c.js +101 -0
- package/dist/client/chunks/chart-line-DKgrQA6c.js.map +1 -0
- package/dist/client/chunks/{chart-markdown-dgUetjyM.js → chart-markdown-CV75S_zL.js} +2 -2
- package/dist/client/chunks/chart-markdown-CV75S_zL.js.map +1 -0
- package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js → chart-measure-profile-Ket8fJyf.js} +7 -7
- package/dist/client/chunks/chart-measure-profile-Ket8fJyf.js.map +1 -0
- package/dist/client/chunks/chart-pie-ByieAX5H.js +119 -0
- package/dist/client/chunks/chart-pie-ByieAX5H.js.map +1 -0
- package/dist/client/chunks/chart-radar-CiSwHWp4.js +138 -0
- package/dist/client/chunks/chart-radar-CiSwHWp4.js.map +1 -0
- package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js +122 -0
- package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js.map +1 -0
- package/dist/client/chunks/{chart-sankey-M3XpO_ah.js → chart-sankey-DjrvKw6K.js} +36 -39
- package/dist/client/chunks/chart-sankey-DjrvKw6K.js.map +1 -0
- package/dist/client/chunks/chart-scatter-Dd9WFqnS.js +258 -0
- package/dist/client/chunks/chart-scatter-Dd9WFqnS.js.map +1 -0
- package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js → chart-sunburst-leGpuDj7.js} +3 -3
- package/dist/client/chunks/chart-sunburst-leGpuDj7.js.map +1 -0
- package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js +323 -0
- package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js.map +1 -0
- package/dist/client/chunks/{chart-waterfall-BuhMoagf.js → chart-waterfall-DyvQReN5.js} +7 -7
- package/dist/client/chunks/chart-waterfall-DyvQReN5.js.map +1 -0
- package/dist/client/chunks/{charts-core-jRtb0S2M.js → charts-core-DaXSt1Dd.js} +2 -2
- package/dist/client/chunks/charts-core-DaXSt1Dd.js.map +1 -0
- package/dist/client/chunks/charts-loader-DdTeCeNo.js +84 -0
- package/dist/client/chunks/charts-loader-DdTeCeNo.js.map +1 -0
- package/dist/client/chunks/{nl-NL-CpVs7ox3.js → nl-NL-2zTAWTej.js} +2 -1
- package/dist/client/chunks/{nl-NL-CpVs7ox3.js.map → nl-NL-2zTAWTej.js.map} +1 -1
- package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
- package/dist/client/chunks/{schema-visualization-DE09kQE3.js → schema-visualization-Cb_E9_Gd.js} +12 -12
- package/dist/client/chunks/schema-visualization-Cb_E9_Gd.js.map +1 -0
- package/dist/client/chunks/{useDirtyStateTracking-CoeQbprt.js → useDirtyStateTracking-MbpxH_v6.js} +95 -84
- package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-DlnXWdmz.js → useExplainAI-evnZkjCY.js} +14 -14
- package/dist/client/chunks/useExplainAI-evnZkjCY.js.map +1 -0
- package/dist/client/chunks/{utils-CTKNaXS8.js → utils-3P6z1vz5.js} +2 -2
- package/dist/client/chunks/utils-3P6z1vz5.js.map +1 -0
- package/dist/client/chunks/{vendor-CPIYyeuD.js → vendor-DSpR0IW6.js} +43 -43
- package/dist/client/chunks/{vendor-CPIYyeuD.js.map → vendor-DSpR0IW6.js.map} +1 -1
- package/dist/client/client/BatchCoordinator.d.ts +1 -1
- package/dist/client/client/CubeClient.d.ts +1 -1
- package/dist/client/components/AIAssistant/index.d.ts +3 -3
- package/dist/client/components/AIAssistant/utils.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/ChatMessage.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/NotebookCanvas.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/NotebookMarkdownBlock.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/NotebookPortletBlock.d.ts +2 -2
- package/dist/client/components/AgenticNotebook/agentChatParts.d.ts +34 -0
- package/dist/client/components/AgenticNotebook/chatMessageParts.d.ts +39 -0
- package/dist/client/components/AgenticNotebook/index.d.ts +2 -2
- package/dist/client/components/AgenticNotebook/useAgentChatController.d.ts +25 -0
- package/dist/client/components/AgenticNotebook/useNotebookAutosave.d.ts +12 -0
- package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +4 -4
- package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisFilterGroup.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/AnalysisFilterItem.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/AnalysisFilterSection.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisQueryPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisQueryPanelParts.d.ts +64 -0
- package/dist/client/components/AnalysisBuilder/AnalysisResultsHeader.d.ts +67 -0
- package/dist/client/components/AnalysisBuilder/AnalysisResultsPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisTypeSelector.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/BreakdownItemCard.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +26 -0
- package/dist/client/components/AnalysisBuilder/BreakdownSection.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +10 -0
- package/dist/client/components/AnalysisBuilder/ExecutionPlanPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/ExecutionPlanPanelParts.d.ts +22 -0
- package/dist/client/components/AnalysisBuilder/ExplainAIPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldDetailPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchItem.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchModal.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +16 -0
- package/dist/client/components/AnalysisBuilder/FilterConfigModal.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +63 -0
- package/dist/client/components/AnalysisBuilder/FlowConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +10 -0
- package/dist/client/components/AnalysisBuilder/FlowModeContent.d.ts +3 -3
- package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +7 -0
- package/dist/client/components/AnalysisBuilder/FunnelBindingKeySelector.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FunnelConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FunnelModeContent.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/FunnelStepCard.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FunnelStepList.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +8 -0
- package/dist/client/components/AnalysisBuilder/MetricItemCard.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +23 -0
- package/dist/client/components/AnalysisBuilder/MetricsSection.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/RetentionConfigPanel.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/RetentionModeContent.d.ts +3 -3
- package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/StringArrayInput.d.ts +17 -0
- package/dist/client/components/AnalysisBuilder/filterConfigModalUtils.d.ts +30 -0
- package/dist/client/components/AnalysisBuilder/hooks/useAnalysisBuilderImperativeHandle.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/hooks/useDragReorder.d.ts +25 -0
- package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +11 -0
- package/dist/client/components/AnalysisBuilder/index.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/types.d.ts +28 -28
- package/dist/client/components/AnalysisBuilder/utils/axisConfigUtils.d.ts +23 -0
- package/dist/client/components/AnalysisBuilder/utils/executionPlanMarkdown.d.ts +8 -0
- package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +7 -2
- package/dist/client/components/AnalysisBuilder/utils/filterUtils.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/utils/index.d.ts +6 -6
- package/dist/client/components/AnalysisBuilder/utils/queryUtils.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/utils/recentFieldsUtils.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/utils/resultsPanelDerive.d.ts +68 -0
- package/dist/client/components/AnalysisBuilder/utils/shareStateUtils.d.ts +68 -0
- package/dist/client/components/AnalysisBuilder/utils/sortUtils.d.ts +7 -0
- package/dist/client/components/AnalysisBuilder/utils/storageUtils.d.ts +2 -2
- package/dist/client/components/AnalysisBuilderLazy.d.ts +1 -1
- package/dist/client/components/AnalyticsDashboard.d.ts +1 -1
- package/dist/client/components/AnalyticsPortlet.d.ts +1 -1
- package/dist/client/components/ChartTypeSelector.d.ts +2 -2
- package/dist/client/components/DashboardFilterPanel.d.ts +1 -1
- package/dist/client/components/DashboardFilters/CompactFilterBar.d.ts +1 -1
- package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +26 -0
- package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +2 -2
- package/dist/client/components/DashboardFilters/DashboardFilterConfigModalParts.d.ts +27 -0
- package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +2 -2
- package/dist/client/components/DashboardFilters/DashboardFilterValueInput.d.ts +39 -0
- package/dist/client/components/DashboardFilters/EditModeFilterList.d.ts +1 -1
- package/dist/client/components/DashboardFilters/FilterChip.d.ts +1 -1
- package/dist/client/components/DashboardFilters/FilterEditModal.d.ts +2 -2
- package/dist/client/components/DashboardFilters/FilterValuePopover.d.ts +1 -1
- package/dist/client/components/DashboardFilters/ReadOnlyFilterList.d.ts +2 -2
- package/dist/client/components/DashboardFilters/dashboardFilterConfigModalUtils.d.ts +21 -0
- package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +19 -0
- package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +69 -0
- package/dist/client/components/DashboardFilters/useDateRangeState.d.ts +19 -0
- package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +21 -0
- package/dist/client/components/DashboardFilters/useFilterValueFetch.d.ts +23 -0
- package/dist/client/components/DashboardGrid.d.ts +2 -2
- package/dist/client/components/DashboardPortletCard.d.ts +2 -57
- package/dist/client/components/DebugModal.d.ts +2 -2
- package/dist/client/components/DrillBreadcrumb.d.ts +1 -1
- package/dist/client/components/DrillMenu.d.ts +1 -1
- package/dist/client/components/FloatingEditToolbar.d.ts +1 -1
- package/dist/client/components/MobileStackedLayout.d.ts +2 -2
- package/dist/client/components/PortletAnalysisModal.d.ts +1 -1
- package/dist/client/components/PortletContainer.d.ts +1 -1
- package/dist/client/components/PortletFilterConfigModal.d.ts +1 -1
- package/dist/client/components/RowManagedLayout.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/CubeNode.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/FieldDetailPanel.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/RelationshipEdge.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/SchemaVisualizationLazy.d.ts +1 -1
- package/dist/client/components/TextPortletModal.d.ts +2 -2
- package/dist/client/components/analyticsPortlet/PortletChart.d.ts +31 -0
- package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +35 -0
- package/dist/client/components/analyticsPortlet/PortletStates.d.ts +65 -0
- package/dist/client/components/analyticsPortlet/parsePortletQuery.d.ts +22 -0
- package/dist/client/components/analyticsPortlet/portletRenderState.d.ts +31 -0
- package/dist/client/components/analyticsPortlet/usePortletDebugData.d.ts +37 -0
- package/dist/client/components/analyticsPortlet/usePortletDrillState.d.ts +17 -0
- package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +37 -0
- package/dist/client/components/charts/ActivityGridChart.config.d.ts +1 -1
- package/dist/client/components/charts/ActivityGridChart.d.ts +1 -1
- package/dist/client/components/charts/ActivityGridChart.helpers.d.ts +33 -0
- package/dist/client/components/charts/ActivityGridChart.render.d.ts +31 -0
- package/dist/client/components/charts/AreaChart.config.d.ts +1 -1
- package/dist/client/components/charts/AreaChart.d.ts +1 -1
- package/dist/client/components/charts/AxisFormatControls.d.ts +4 -2
- package/dist/client/components/charts/BarChart.config.d.ts +1 -1
- package/dist/client/components/charts/BarChart.d.ts +1 -1
- package/dist/client/components/charts/BarChart.helpers.d.ts +23 -0
- package/dist/client/components/charts/BarSeries.d.ts +29 -0
- package/dist/client/components/charts/BoxPlotChart.config.d.ts +1 -1
- package/dist/client/components/charts/BoxPlotChart.d.ts +1 -1
- package/dist/client/components/charts/BubbleChart.config.d.ts +1 -1
- package/dist/client/components/charts/BubbleChart.d.ts +1 -1
- package/dist/client/components/charts/BubbleChart.helpers.d.ts +43 -0
- package/dist/client/components/charts/BubbleChart.render.d.ts +21 -0
- package/dist/client/components/charts/CandlestickChart.config.d.ts +1 -1
- package/dist/client/components/charts/CandlestickChart.d.ts +1 -1
- package/dist/client/components/charts/ChartStates.d.ts +38 -0
- package/dist/client/components/charts/DataTable.config.d.ts +1 -1
- package/dist/client/components/charts/DataTable.d.ts +1 -1
- package/dist/client/components/charts/FunnelChart.config.d.ts +1 -1
- package/dist/client/components/charts/FunnelChart.d.ts +1 -1
- package/dist/client/components/charts/FunnelChart.helpers.d.ts +25 -0
- package/dist/client/components/charts/FunnelViews.d.ts +16 -0
- package/dist/client/components/charts/GaugeChart.config.d.ts +1 -1
- package/dist/client/components/charts/GaugeChart.d.ts +1 -1
- package/dist/client/components/charts/HeatMapCanvas.d.ts +25 -0
- package/dist/client/components/charts/HeatMapChart.config.d.ts +1 -1
- package/dist/client/components/charts/HeatMapChart.d.ts +1 -1
- package/dist/client/components/charts/HeatMapChart.helpers.d.ts +64 -0
- package/dist/client/components/charts/KpiDelta.config.d.ts +1 -1
- package/dist/client/components/charts/KpiDelta.d.ts +1 -1
- package/dist/client/components/charts/KpiDelta.helpers.d.ts +20 -0
- package/dist/client/components/charts/KpiNumber.config.d.ts +1 -1
- package/dist/client/components/charts/KpiNumber.d.ts +1 -1
- package/dist/client/components/charts/KpiNumber.helpers.d.ts +30 -0
- package/dist/client/components/charts/KpiStates.d.ts +19 -0
- package/dist/client/components/charts/KpiText.config.d.ts +1 -1
- package/dist/client/components/charts/KpiText.d.ts +1 -1
- package/dist/client/components/charts/LineChart.config.d.ts +1 -1
- package/dist/client/components/charts/LineChart.d.ts +1 -1
- package/dist/client/components/charts/MarkdownChart.config.d.ts +1 -1
- package/dist/client/components/charts/MarkdownChart.d.ts +1 -1
- package/dist/client/components/charts/MeasureProfileChart.config.d.ts +1 -1
- package/dist/client/components/charts/MeasureProfileChart.d.ts +1 -1
- package/dist/client/components/charts/PieChart.config.d.ts +1 -1
- package/dist/client/components/charts/PieChart.d.ts +1 -1
- package/dist/client/components/charts/RadarChart.config.d.ts +1 -1
- package/dist/client/components/charts/RadarChart.d.ts +1 -1
- package/dist/client/components/charts/RadialBarChart.config.d.ts +1 -1
- package/dist/client/components/charts/RadialBarChart.d.ts +1 -1
- package/dist/client/components/charts/RetentionCombinedChart.config.d.ts +1 -1
- package/dist/client/components/charts/RetentionCombinedChart.d.ts +1 -1
- package/dist/client/components/charts/RetentionHeatmap.config.d.ts +1 -1
- package/dist/client/components/charts/RetentionHeatmap.d.ts +1 -1
- package/dist/client/components/charts/SankeyChart.config.d.ts +1 -1
- package/dist/client/components/charts/SankeyChart.d.ts +1 -1
- package/dist/client/components/charts/ScatterChart.config.d.ts +1 -1
- package/dist/client/components/charts/ScatterChart.d.ts +1 -1
- package/dist/client/components/charts/ScatterChart.helpers.d.ts +43 -0
- package/dist/client/components/charts/ScatterSeries.d.ts +17 -0
- package/dist/client/components/charts/ScatterTooltip.d.ts +21 -0
- package/dist/client/components/charts/SunburstChart.config.d.ts +1 -1
- package/dist/client/components/charts/SunburstChart.d.ts +1 -1
- package/dist/client/components/charts/TreeMapChart.config.d.ts +1 -1
- package/dist/client/components/charts/TreeMapChart.d.ts +1 -1
- package/dist/client/components/charts/TreeMapChart.helpers.d.ts +37 -0
- package/dist/client/components/charts/TreeMapContent.d.ts +24 -0
- package/dist/client/components/charts/TreeMapLegend.d.ts +13 -0
- package/dist/client/components/charts/WaterfallChart.config.d.ts +1 -1
- package/dist/client/components/charts/WaterfallChart.d.ts +1 -1
- package/dist/client/components/charts/cartesianChartHelpers.d.ts +126 -0
- package/dist/client/components/charts/chartAxisResolution.d.ts +32 -0
- package/dist/client/components/charts/chartScaffolding.d.ts +77 -0
- package/dist/client/components/charts/gaugeChartHelpers.d.ts +36 -0
- package/dist/client/components/charts/index.d.ts +21 -21
- package/dist/client/components/charts/kpiTextHelpers.d.ts +46 -0
- package/dist/client/components/charts/radarChartHelpers.d.ts +14 -0
- package/dist/client/components/charts/radialBarChartHelpers.d.ts +22 -0
- package/dist/client/components/charts/useChartDimensions.d.ts +20 -0
- package/dist/client/components/charts/useKpiDimensions.d.ts +30 -0
- package/dist/client/components/dashboard/DashboardContext.d.ts +6 -6
- package/dist/client/components/dashboard/DashboardCoordinator.d.ts +1 -1
- package/dist/client/components/dashboard/DashboardEditBar.d.ts +5 -0
- package/dist/client/components/dashboard/DashboardProvider.d.ts +1 -1
- package/dist/client/components/dashboard/LayoutModeToggle.d.ts +10 -0
- package/dist/client/components/dashboard/dashboardGridUtils.d.ts +1 -1
- package/dist/client/components/dashboard/index.d.ts +7 -7
- package/dist/client/components/dashboardPortletCard/FilterFieldChip.d.ts +12 -0
- package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +43 -0
- package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +33 -0
- package/dist/client/components/dashboardPortletCard/filterField.d.ts +12 -0
- package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +55 -0
- package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +16 -0
- package/dist/client/components/portletAnalysisModal/saveValidation.d.ts +8 -0
- package/dist/client/components/shared/DateRangeFilter.d.ts +1 -1
- package/dist/client/components/shared/FilterBuilder.d.ts +1 -1
- package/dist/client/components/shared/FilterGroup.d.ts +1 -1
- package/dist/client/components/shared/FilterItem.d.ts +1 -1
- package/dist/client/components/shared/FilterValueSelector.d.ts +1 -1
- package/dist/client/components/shared/dateRangeUtils.d.ts +40 -0
- package/dist/client/components/shared/filterDisplayUtils.d.ts +10 -0
- package/dist/client/components/shared/filterItem/FilterDateRangeSelector.d.ts +17 -0
- package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +16 -0
- package/dist/client/components/shared/filterItem/dateRangeSync.d.ts +14 -0
- package/dist/client/components/shared/filterItem/fieldVisuals.d.ts +5 -0
- package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +55 -0
- package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +25 -0
- package/dist/client/components/shared/queryFieldUtils.d.ts +21 -0
- package/dist/client/components/shared/types.d.ts +8 -8
- package/dist/client/components/shared/utils.d.ts +7 -46
- package/dist/client/components.d.ts +11 -11
- package/dist/client/components.js +3 -3
- package/dist/client/hooks/agentChatStream.d.ts +39 -0
- package/dist/client/hooks/analysisQueryExecutionModes.d.ts +133 -0
- package/dist/client/hooks/dashboard/layoutUtils.d.ts +1 -1
- package/dist/client/hooks/dashboard/useDashboardController.d.ts +2 -2
- package/dist/client/hooks/dashboard/useGridLayoutEngine.d.ts +1 -1
- package/dist/client/hooks/dashboard/useRowLayoutEngine.d.ts +1 -1
- package/dist/client/hooks/drillNavigation.d.ts +25 -0
- package/dist/client/hooks/queries/index.d.ts +9 -9
- package/dist/client/hooks/queries/useCubeLoadQuery.d.ts +2 -2
- package/dist/client/hooks/queries/useCubeMetaQuery.d.ts +2 -2
- package/dist/client/hooks/queries/useDryRunQuery.d.ts +2 -2
- package/dist/client/hooks/queries/useExplainAI.d.ts +1 -1
- package/dist/client/hooks/queries/useExplainQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useFlowQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useFunnelQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useMultiCubeLoadQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useRetentionQuery.d.ts +1 -1
- package/dist/client/hooks/useAgentChat.d.ts +1 -1
- package/dist/client/hooks/useAnalysisAI.d.ts +4 -4
- package/dist/client/hooks/useAnalysisBuilderHook.d.ts +27 -27
- package/dist/client/hooks/useAnalysisChartDefaults.d.ts +4 -4
- package/dist/client/hooks/useAnalysisCombinedFields.d.ts +2 -2
- package/dist/client/hooks/useAnalysisInitialization.d.ts +1 -1
- package/dist/client/hooks/useAnalysisQueryBuilder.d.ts +3 -3
- package/dist/client/hooks/useAnalysisQueryExecution.d.ts +7 -7
- package/dist/client/hooks/useAnalysisShare.d.ts +1 -1
- package/dist/client/hooks/useAnalysisUIState.d.ts +2 -2
- package/dist/client/hooks/useDashboardHook.d.ts +2 -2
- package/dist/client/hooks/useDataBrowser.d.ts +5 -5
- package/dist/client/hooks/useDrillInteraction.d.ts +1 -1
- package/dist/client/hooks/useTheme.d.ts +1 -1
- package/dist/client/hooks/useTranslation.d.ts +1 -1
- package/dist/client/hooks.d.ts +11 -11
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons/defaultIcons.d.ts +1 -1
- package/dist/client/icons/index.d.ts +3 -3
- package/dist/client/icons/registry.d.ts +1 -1
- package/dist/client/icons.js +2 -2
- package/dist/client/index.d.ts +74 -74
- package/dist/client/index.js +816 -669
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers/CubeApiProvider.d.ts +3 -3
- package/dist/client/providers/CubeFeaturesProvider.d.ts +1 -1
- package/dist/client/providers/CubeMetaContext.d.ts +1 -1
- package/dist/client/providers/CubeProvider.d.ts +7 -7
- package/dist/client/providers/I18nProvider.d.ts +1 -1
- package/dist/client/providers.d.ts +4 -4
- package/dist/client/providers.js +3 -3
- package/dist/client/schema.d.ts +2 -2
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/chartConfigBuilders.d.ts +18 -0
- package/dist/client/shared/chartDefaults.d.ts +4 -4
- package/dist/client/shared/components/QueryAnalysisPanel.d.ts +1 -1
- package/dist/client/shared/components/QueryAnalysisPanel.sections.d.ts +41 -0
- package/dist/client/shared/index.d.ts +7 -7
- package/dist/client/shared/queryTransforms.d.ts +20 -0
- package/dist/client/shared/types.d.ts +1 -1
- package/dist/client/shared/utils.d.ts +4 -6
- package/dist/client/stores/analysisBuilderStore.d.ts +9 -9
- package/dist/client/stores/dashboardStore.d.ts +3 -3
- package/dist/client/stores/dataBrowserStore.d.ts +1 -1
- package/dist/client/stores/notebookStore.d.ts +1 -1
- package/dist/client/stores/optionsToAnalysisConfig.d.ts +17 -0
- package/dist/client/stores/slices/coreSlice.d.ts +3 -3
- package/dist/client/stores/slices/flowSlice.d.ts +3 -3
- package/dist/client/stores/slices/funnelSlice.d.ts +3 -3
- package/dist/client/stores/slices/index.d.ts +7 -7
- package/dist/client/stores/slices/querySlice.d.ts +3 -3
- package/dist/client/stores/slices/retentionSlice.d.ts +3 -3
- package/dist/client/stores/slices/uiSlice.d.ts +2 -2
- package/dist/client/styles.css +1 -1
- package/dist/client/types/analysisConfig.d.ts +4 -4
- package/dist/client/types/drill.d.ts +5 -5
- package/dist/client/types/flow.d.ts +2 -2
- package/dist/client/types/funnel.d.ts +1 -1
- package/dist/client/types/retention.d.ts +2 -2
- package/dist/client/types.d.ts +12 -12
- package/dist/client/utils/axisValueFormatting.d.ts +32 -0
- package/dist/client/utils/chartUtils.d.ts +1 -1
- package/dist/client/utils/configMigration.d.ts +2 -2
- package/dist/client/utils/drillQueryBuilder.d.ts +2 -2
- package/dist/client/utils/exportXlsx.d.ts +2 -2
- package/dist/client/utils/filterUtils.d.ts +1 -1
- package/dist/client/utils/funnelExecution.d.ts +2 -2
- package/dist/client/utils/funnelValidation.d.ts +2 -2
- package/dist/client/utils/index.d.ts +10 -10
- package/dist/client/utils/joinReachability.d.ts +1 -1
- package/dist/client/utils/multiQueryUtils.d.ts +1 -1
- package/dist/client/utils/multiQueryValidation.d.ts +1 -1
- package/dist/client/utils/pivotUtils.d.ts +1 -1
- package/dist/client/utils/shareUtils.d.ts +1 -1
- package/dist/client/utils/thumbnail.d.ts +1 -1
- package/dist/client/utils/timeValueFormatting.d.ts +32 -0
- package/dist/client/utils.d.ts +2 -2
- package/dist/client/utils.js +6 -6
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +55 -55
- package/dist/server/{server/adapters → adapters}/base-adapter.d.ts +81 -36
- package/dist/server/adapters/databend-adapter.d.ts +63 -0
- package/dist/server/{server/adapters → adapters}/duckdb-adapter.d.ts +6 -60
- package/dist/server/adapters/mysql-adapter.d.ts +65 -0
- package/dist/server/adapters/postgres-adapter.d.ts +55 -0
- package/dist/server/{server/adapters → adapters}/singlestore-adapter.d.ts +1 -1
- package/dist/server/adapters/snowflake-adapter.d.ts +53 -0
- package/dist/server/{server/adapters → adapters}/sqlite-adapter.d.ts +13 -33
- package/dist/server/adapters/window-function-builder.d.ts +11 -0
- package/dist/server/{server/agent → agent}/chart-validation.d.ts +0 -5
- package/dist/server/agent/handler-steps.d.ts +37 -0
- package/dist/server/{server/agent → agent}/handler.d.ts +3 -3
- package/dist/server/agent/index.d.ts +11 -0
- package/dist/server/{server/agent → agent}/providers/anthropic.d.ts +1 -1
- package/dist/server/{server/agent → agent}/providers/factory.d.ts +1 -1
- package/dist/server/{server/agent → agent}/providers/google.d.ts +1 -1
- package/dist/server/agent/providers/index.d.ts +6 -0
- package/dist/server/{server/agent → agent}/providers/openai.d.ts +1 -1
- package/dist/server/{server/agent → agent}/system-prompt.d.ts +1 -1
- package/dist/server/{server/agent → agent}/tools.d.ts +4 -4
- package/dist/server/{server/agent → agent}/types.d.ts +1 -1
- package/dist/server/ai/discovery-helpers.d.ts +29 -0
- package/dist/server/{server/ai → ai}/discovery.d.ts +6 -2
- package/dist/server/{server/ai → ai}/index.d.ts +6 -6
- package/dist/server/ai/suggestion-helpers.d.ts +33 -0
- package/dist/server/{server/ai → ai}/suggestion.d.ts +2 -5
- package/dist/server/ai/validation-helpers.d.ts +21 -0
- package/dist/server/{server/ai → ai}/validation.d.ts +2 -5
- package/dist/server/builders/analysis-utils.d.ts +106 -0
- package/dist/server/{server/builders → builders}/comparison-query-builder.d.ts +2 -2
- package/dist/server/{server/builders → builders}/cte-builder.d.ts +48 -2
- package/dist/server/{server/builders → builders}/date-time-builder.d.ts +7 -2
- package/dist/server/builders/date-time-helpers.d.ts +34 -0
- package/dist/server/{server/builders → builders}/filter-builder.d.ts +5 -3
- package/dist/server/builders/filter-operators.d.ts +23 -0
- package/dist/server/builders/flow-query-builder.d.ts +136 -0
- package/dist/server/{server/builders → builders}/funnel-query-builder.d.ts +18 -7
- package/dist/server/{server/builders → builders}/group-by-builder.d.ts +13 -2
- package/dist/server/builders/index.d.ts +13 -0
- package/dist/server/{server/builders → builders}/measure-builder.d.ts +46 -3
- package/dist/server/{server/builders → builders}/retention-query-builder.d.ts +14 -16
- package/dist/server/cache-providers/index.d.ts +5 -0
- package/dist/server/{server/cache-providers → cache-providers}/memory.d.ts +1 -1
- package/dist/server/{server/cache-utils.d.ts → cache-utils.d.ts} +26 -6
- package/dist/server/compiler-metadata.d.ts +11 -0
- package/dist/server/{server/compiler.d.ts → compiler.d.ts} +9 -15
- package/dist/server/{server/cube-utils.d.ts → cube-utils.d.ts} +29 -4
- package/dist/server/{server/database-utils.d.ts → database-utils.d.ts} +1 -1
- package/dist/server/execution/annotation-builder.d.ts +12 -0
- package/dist/server/execution/filter-cache-preloader.d.ts +19 -0
- package/dist/server/execution/mode-router.d.ts +25 -0
- package/dist/server/execution/query-result-cache.d.ts +21 -0
- package/dist/server/execution/result-post-processor.d.ts +10 -0
- package/dist/server/{server/executor.d.ts → executor.d.ts} +35 -32
- package/dist/server/{server/executors → executors}/base-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/databend-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/duckdb-executor.d.ts +2 -2
- package/dist/server/executors/explain-utils.d.ts +28 -0
- package/dist/server/{server/executors → executors}/index.d.ts +9 -9
- package/dist/server/{server/executors → executors}/mysql-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/postgres-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/singlestore-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/snowflake-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/sqlite-executor.d.ts +2 -2
- package/dist/server/{server/explain → explain}/databend-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/duckdb-parser.d.ts +1 -1
- package/dist/server/explain/explain-tree.d.ts +20 -0
- package/dist/server/explain/index.d.ts +9 -0
- package/dist/server/{server/explain → explain}/mysql-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/postgres-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/snowflake-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/sqlite-parser.d.ts +1 -1
- package/dist/server/{server/filter-cache.d.ts → filter-cache.d.ts} +2 -2
- package/dist/server/{server/gap-filler.d.ts → gap-filler.d.ts} +8 -2
- package/dist/server/google-BOnRIN1w.cjs +2 -0
- package/dist/{adapters/google-CFYljAOF.js → server/google-CvKM9yVM.js} +83 -71
- package/dist/server/index.cjs +179 -211
- package/dist/server/index.d.ts +38 -2
- package/dist/server/index.js +6330 -6458
- package/dist/server/logical-plan/cte-planner-helpers.d.ts +37 -0
- package/dist/server/logical-plan/cte-planner.d.ts +104 -0
- package/dist/server/logical-plan/filter-propagation.d.ts +44 -0
- package/dist/server/{server/logical-plan → logical-plan}/index.d.ts +11 -6
- package/dist/server/logical-plan/join-planner.d.ts +27 -0
- package/dist/server/{server/logical-plan → logical-plan}/logical-plan-builder.d.ts +5 -5
- package/dist/server/logical-plan/logical-planner.d.ts +39 -0
- package/dist/server/{server/logical-plan → logical-plan}/optimiser.d.ts +4 -2
- package/dist/server/logical-plan/plan-analysis-reporter.d.ts +59 -0
- package/dist/server/logical-plan/planner-utils.d.ts +20 -0
- package/dist/server/{server/logical-plan → logical-plan}/types.d.ts +18 -10
- package/dist/server/measure-classification.d.ts +40 -0
- package/dist/server/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
- package/dist/server/openai-vXvLni8v.cjs +1 -0
- package/dist/server/physical-plan/drizzle-plan-builder.d.ts +50 -0
- package/dist/server/{server/physical-plan → physical-plan}/drizzle-sql-builder.d.ts +14 -3
- package/dist/server/physical-plan/index.d.ts +2 -0
- package/dist/server/{server/physical-plan → physical-plan}/processors/cte-processor.d.ts +2 -2
- package/dist/server/physical-plan/processors/index.d.ts +8 -0
- package/dist/server/{server/physical-plan → physical-plan}/processors/joins-processor.d.ts +2 -2
- package/dist/server/physical-plan/processors/keys-dedup-processor.d.ts +13 -0
- package/dist/server/physical-plan/processors/multi-fact-processor.d.ts +13 -0
- package/dist/server/{server/physical-plan → physical-plan}/processors/predicates-processor.d.ts +2 -2
- package/dist/server/{server/physical-plan → physical-plan}/processors/selection-processor.d.ts +2 -2
- package/dist/server/{server/physical-plan → physical-plan}/processors/shared.d.ts +9 -4
- package/dist/server/{server/physical-plan → physical-plan}/processors/window-processor.d.ts +2 -2
- package/dist/server/query-handlers.d.ts +79 -0
- package/dist/server/query-modes.d.ts +28 -0
- package/dist/server/query-validator.d.ts +9 -0
- package/dist/server/{server/resolvers → resolvers}/calculated-measure-resolver.d.ts +6 -1
- package/dist/server/{server/resolvers → resolvers}/index.d.ts +2 -2
- package/dist/server/{server/resolvers → resolvers}/join-path-resolver.d.ts +7 -1
- package/dist/server/sql-format.d.ts +11 -0
- package/dist/server/{server/template-substitution.d.ts → template-substitution.d.ts} +1 -1
- package/dist/server/{server/types → types}/cache.d.ts +1 -1
- package/dist/server/{server/types → types}/cube.d.ts +22 -8
- package/dist/server/{server/types → types}/executor.d.ts +2 -2
- package/dist/server/{server/types → types}/flow.d.ts +7 -6
- package/dist/server/{server/types → types}/funnel.d.ts +1 -1
- package/dist/server/types/index.d.ts +11 -0
- package/dist/server/{server/types → types}/metadata.d.ts +1 -1
- package/dist/server/{server/types → types}/query.d.ts +4 -4
- package/dist/server/{server/types → types}/retention.d.ts +1 -1
- package/dist/server/{server/types → types}/utils.d.ts +1 -1
- package/dist/server/types/validation.d.ts +14 -0
- package/package.json +22 -7
- package/dist/adapters/google-DUlXeeDA.cjs +0 -2
- package/dist/adapters/handler-CzbCuS6_.cjs +0 -25
- package/dist/adapters/locale-BPB7flIG.js +0 -8249
- package/dist/adapters/locale-tIMrNcCr.cjs +0 -198
- package/dist/adapters/mcp-transport-C2QzXm6h.cjs +0 -40
- package/dist/adapters/mcp-transport-D0B3S1tB.js +0 -579
- package/dist/adapters/openai-D_U4V0kT.cjs +0 -1
- package/dist/adapters/utils-KV37IBIv.cjs +0 -128
- package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +0 -1
- package/dist/client/chunks/RetentionCombinedChart-BPkfcTa8.js.map +0 -1
- package/dist/client/chunks/RetentionHeatmap-DGzLzr7h.js.map +0 -1
- package/dist/client/chunks/analysis-builder-MuMIzoRq.js +0 -5367
- package/dist/client/chunks/analysis-builder-MuMIzoRq.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-CYVwSPqt.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-DmruKPab.js.map +0 -1
- package/dist/client/chunks/chart-area-DHCPM4Em.js +0 -450
- package/dist/client/chunks/chart-area-DHCPM4Em.js.map +0 -1
- package/dist/client/chunks/chart-bar-KddciGDv.js +0 -271
- package/dist/client/chunks/chart-bar-KddciGDv.js.map +0 -1
- package/dist/client/chunks/chart-box-plot-DYKfyOI8.js.map +0 -1
- package/dist/client/chunks/chart-bubble-CfqiB538.js +0 -273
- package/dist/client/chunks/chart-bubble-CfqiB538.js.map +0 -1
- package/dist/client/chunks/chart-candlestick-Dwc92Mrj.js.map +0 -1
- package/dist/client/chunks/chart-config-area-Bq_UsW3x.js +0 -101
- package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-_JEGZnAu.js +0 -95
- package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-DJ-dWWXA.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-DSwC04l0.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-D6BIkHL3.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-Bx-V9a62.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-CcqC1u-8.js.map +0 -1
- package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-DD4SmRTF.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-CC2XAaGr.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-DmxKx1R0.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-BI-oQStO.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-DSnyixbI.js.map +0 -1
- package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +0 -1
- package/dist/client/chunks/chart-funnel-DnWRsmnS.js.map +0 -1
- package/dist/client/chunks/chart-gauge-CgMeqeGb.js +0 -424
- package/dist/client/chunks/chart-gauge-CgMeqeGb.js.map +0 -1
- package/dist/client/chunks/chart-heat-map-DcGm9SWK.js +0 -231
- package/dist/client/chunks/chart-heat-map-DcGm9SWK.js.map +0 -1
- package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js +0 -343
- package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js.map +0 -1
- package/dist/client/chunks/chart-kpi-number-gWYF44ol.js +0 -322
- package/dist/client/chunks/chart-kpi-number-gWYF44ol.js.map +0 -1
- package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js +0 -149
- package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js.map +0 -1
- package/dist/client/chunks/chart-line-9BEGN5Ti.js +0 -433
- package/dist/client/chunks/chart-line-9BEGN5Ti.js.map +0 -1
- package/dist/client/chunks/chart-markdown-dgUetjyM.js.map +0 -1
- package/dist/client/chunks/chart-measure-profile-ClfpLs4q.js.map +0 -1
- package/dist/client/chunks/chart-pie-BjAIhyOi.js +0 -172
- package/dist/client/chunks/chart-pie-BjAIhyOi.js.map +0 -1
- package/dist/client/chunks/chart-radar-Dgkcl2bN.js +0 -154
- package/dist/client/chunks/chart-radar-Dgkcl2bN.js.map +0 -1
- package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js +0 -148
- package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js.map +0 -1
- package/dist/client/chunks/chart-sankey-M3XpO_ah.js.map +0 -1
- package/dist/client/chunks/chart-scatter-DaHYP_OL.js +0 -255
- package/dist/client/chunks/chart-scatter-DaHYP_OL.js.map +0 -1
- package/dist/client/chunks/chart-sunburst-A_u6lqlS.js.map +0 -1
- package/dist/client/chunks/chart-tree-map-uiwUU4nb.js +0 -298
- package/dist/client/chunks/chart-tree-map-uiwUU4nb.js.map +0 -1
- package/dist/client/chunks/chart-waterfall-BuhMoagf.js.map +0 -1
- package/dist/client/chunks/charts-core-jRtb0S2M.js.map +0 -1
- package/dist/client/chunks/schema-visualization-DE09kQE3.js.map +0 -1
- package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +0 -1
- package/dist/client/chunks/useExplainAI-DlnXWdmz.js.map +0 -1
- package/dist/client/chunks/utils-CTKNaXS8.js.map +0 -1
- package/dist/server/google-DUlXeeDA.cjs +0 -2
- package/dist/server/openai-D_U4V0kT.cjs +0 -1
- package/dist/server/server/adapters/databend-adapter.d.ts +0 -114
- package/dist/server/server/adapters/mysql-adapter.d.ts +0 -122
- package/dist/server/server/adapters/postgres-adapter.d.ts +0 -119
- package/dist/server/server/adapters/snowflake-adapter.d.ts +0 -116
- package/dist/server/server/agent/index.d.ts +0 -11
- package/dist/server/server/agent/providers/index.d.ts +0 -6
- package/dist/server/server/builders/flow-query-builder.d.ts +0 -109
- package/dist/server/server/builders/index.d.ts +0 -13
- package/dist/server/server/cache-providers/index.d.ts +0 -5
- package/dist/server/server/explain/index.d.ts +0 -9
- package/dist/server/server/index.d.ts +0 -36
- package/dist/server/server/logical-plan/logical-planner.d.ts +0 -232
- package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +0 -50
- package/dist/server/server/physical-plan/index.d.ts +0 -2
- package/dist/server/server/physical-plan/processors/index.d.ts +0 -6
- package/dist/server/server/types/index.d.ts +0 -11
- /package/dist/server/{server/agent → agent}/providers/types.d.ts +0 -0
- /package/dist/server/{server/ai → ai}/mcp-prompts.d.ts +0 -0
- /package/dist/server/{server/ai → ai}/query-schema.d.ts +0 -0
- /package/dist/server/{server/ai → ai}/schemas.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/explain-analysis-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/index.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/single-step-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/step0-validation-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/step1-shape-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/step2-complete-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/types.d.ts +0 -0
- /package/dist/server/{server/types → types}/analysis.d.ts +0 -0
- /package/dist/server/{server/types → types}/core.d.ts +0 -0
package/README.md
CHANGED
|
@@ -260,6 +260,8 @@ Three built-in themes (light, dark, neon) with semantic CSS variables. Add custo
|
|
|
260
260
|
|
|
261
261
|
We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md).
|
|
262
262
|
|
|
263
|
+
Query performance is benchmarked on every push to `main` — browse the historical trends at the **[Performance Dashboard](https://cliftonc.github.io/drizzle-cube/dev/bench/)**.
|
|
264
|
+
|
|
263
265
|
## Roadmap
|
|
264
266
|
|
|
265
267
|
View and contribute to the roadmap on [GitHub Projects](https://github.com/users/cliftonc/projects/2).
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-_whV4fXL.cjs"),t=require("../locale-ZLUUNUxr.cjs"),n=require("../mcp-transport-B7ddET3M.cjs");let r=require("express");r=e.k(r,1);let i=require("cors");i=e.k(i,1);function a(a){let{cubes:o,drizzle:s,schema:c,extractSecurityContext:l,engineType:u,cors:d,basePath:f=`/cubejs-api/v1`,jsonLimit:p=`10mb`,cache:m,mcp:h={enabled:!0},agent:g}=a;if(!o||o.length===0)throw Error(`At least one cube must be provided in the cubes array`);let _=(0,r.Router)(),v=async(e,n)=>t.r(await l(e,n),t.n(t=>e.get(t)));if(d){let e={...d,allowedHeaders:t.t(d.allowedHeaders)};_.use((0,i.default)(e))}_.use(r.default.json({limit:p})),_.use(r.default.urlencoded({extended:!0,limit:p}));let y=new t.i({drizzle:s,schema:c,engineType:u,cache:m,rlsSetup:a.rlsSetup});if(o.forEach(e=>{y.registerCube(e)}),_.post(`${f}/load`,async(t,n)=>{try{let r=t.body.query||t.body,i=await v(t,n),a=y.validateQuery(r);if(!a.isValid)return n.status(400).json(e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=t.headers[`x-cache-control`]===`no-cache`,s=await y.executeMultiCubeQuery(r,i,{skipCache:o});n.json(e.r(r,s,y))}catch(t){console.error(`Query execution error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Query execution failed`,500))}}),_.get(`${f}/load`,async(t,n)=>{try{let r=t.query.query;if(!r)return n.status(400).json(e.i(`Query parameter is required`,400));let i;try{i=JSON.parse(r)}catch{return n.status(400).json(e.i(`Invalid JSON in query parameter`,400))}let a=await v(t,n),o=y.validateQuery(i);if(!o.isValid)return n.status(400).json(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=t.headers[`x-cache-control`]===`no-cache`,c=await y.executeMultiCubeQuery(i,a,{skipCache:s});n.json(e.r(i,c,y))}catch(t){console.error(`Query execution error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Query execution failed`,500))}}),_.post(`${f}/batch`,async(t,n)=>{try{let{queries:r}=t.body;if(!r||!Array.isArray(r))return n.status(400).json(e.i(`Request body must contain a "queries" array`,400));if(r.length===0)return n.status(400).json(e.i(`Queries array cannot be empty`,400));let i=await e.l(r,await v(t,n),y,{skipCache:t.headers[`x-cache-control`]===`no-cache`});n.json(i)}catch(t){console.error(`Batch execution error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Batch execution failed`,500))}}),_.get(`${f}/meta`,(t,n)=>{try{let t=y.getMetadata();n.json(e.a(t))}catch(t){console.error(`Metadata error:`,t),n.status(500).json(e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500))}}),_.post(`${f}/sql`,async(t,n)=>{try{let r=t.body,i=await v(t,n),a=y.validateQuery(r);if(!a.isValid)return n.status(400).json(e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=r.measures?.[0]||r.dimensions?.[0];if(!o)return n.status(400).json(e.i(`No measures or dimensions specified`,400));let s=o.split(`.`)[0],c=await y.generateSQL(s,r,i);n.json(e.o(r,c))}catch(t){console.error(`SQL generation error:`,String(t).replace(/\n|\r/g,``)),n.status(500).json(e.i(t instanceof Error?t.message:`SQL generation failed`,500))}}),_.get(`${f}/sql`,async(t,n)=>{try{let r=t.query.query;if(!r)return n.status(400).json(e.i(`Query parameter is required`,400));let i=JSON.parse(r),a=await v(t,n),o=y.validateQuery(i);if(!o.isValid)return n.status(400).json(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=i.measures?.[0]||i.dimensions?.[0];if(!s)return n.status(400).json(e.i(`No measures or dimensions specified`,400));let c=s.split(`.`)[0],l=await y.generateSQL(c,i,a);n.json(e.o(i,l))}catch(t){console.error(`SQL generation error:`,String(t).replace(/\n|\r/g,``)),n.status(500).json(e.i(t instanceof Error?t.message:`SQL generation failed`,500))}}),_.post(`${f}/dry-run`,async(t,n)=>{try{let r=await e.u(t.body.query||t.body,await v(t,n),y);n.json(r)}catch(e){console.error(`Dry-run error:`,e),n.status(400).json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),_.get(`${f}/dry-run`,async(t,n)=>{try{let r=t.query.query;if(!r)return n.status(400).json({error:`Query parameter is required`,valid:!1});let i=await e.u(JSON.parse(r),await v(t,n),y);n.json(i)}catch(e){console.error(`Dry-run error:`,e),n.status(400).json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),_.post(`${f}/explain`,async(e,t)=>{try{let n=e.body.query||e.body,r=e.body.options||{},i=await v(e,t),a=y.validateQuery(n);if(!a.isValid)return t.status(400).json({error:`Query validation failed: ${a.errors.join(`, `)}`});let o=await y.explainQuery(n,i,r);t.json(o)}catch(e){console.error(`Explain error:`,e),t.status(500).json({error:e instanceof Error?e.message:`Explain query failed`})}}),g&&_.post(`${f}/agent/chat`,async(e,t)=>{try{let{handleAgentChat:n}=await Promise.resolve().then(()=>require("../handler-Cn0dOctE.cjs")),{message:r,sessionId:i,history:a}=e.body;if(!r||typeof r!=`string`)return t.status(400).json({error:`message is required and must be a string`});let o=(g.apiKey||``).trim();if(g.allowClientApiKey){let t=e.headers[`x-agent-api-key`];t&&(o=t.trim())}if(!o)return t.status(401).json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`});let s=g.allowClientApiKey?e.headers[`x-agent-provider`]:void 0,c=g.allowClientApiKey?e.headers[`x-agent-model`]:void 0,l=g.allowClientApiKey?e.headers[`x-agent-provider-endpoint`]:void 0,u=await v(e,t),d=g.buildSystemContext?.(u);t.writeHead(200,{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});try{let e=n({message:r,sessionId:i,history:a,semanticLayer:y,securityContext:u,agentConfig:g,apiKey:o,systemContext:d,providerOverride:s,modelOverride:c,baseURLOverride:l});for await(let n of e)t.write(`data: ${JSON.stringify(n)}\n\n`)}catch(e){let n={type:`error`,data:{message:e instanceof Error?e.message:`Stream failed`}};t.write(`data: ${JSON.stringify(n)}\n\n`)}finally{t.end()}}catch(e){console.error(`Agent chat error:`,e),t.headersSent||t.status(500).json({error:e instanceof Error?e.message:`Agent chat failed`})}}),h.enabled!==!1){let e=n.o(y,h.resources),t=n.y(h.prompts),r=n.v(h.instructions),i=h.basePath??`/mcp`;_.post(`${i}`,async(i,a)=>{if(h.resourceMetadataUrl&&!n.u(i.headers.authorization))return a.setHeader(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),a.status(401).json({error:`Bearer token required`});let o=n.S(i.headers.origin,h.allowedOrigins?{allowedOrigins:h.allowedOrigins}:{});if(!o.valid)return a.status(403).json(n.i(null,-32600,o.reason));let s=i.headers.accept;if(!n.x(s))return a.status(400).json(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`));let c=n.h(i.headers);if(!c.ok)return a.status(426).json({error:`Unsupported MCP protocol version`,supported:c.supported});let l=n.g(i.body);if(!l)return a.status(400).json(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`));let u=n.C(s),d=l.method===`initialize`;try{let o=await n.l(l.method,l.params,{semanticLayer:y,extractSecurityContext:(e,t)=>v(e,t),rawRequest:i,rawResponse:a,negotiatedProtocol:c.negotiated,resources:e,prompts:t,instructions:r,appEnabled:!!h.app,appConfig:typeof h.app==`object`?h.app:void 0,serverName:h.serverName});if(n.m(l))return a.status(202).end();let s=d&&o&&typeof o==`object`&&`sessionId`in o?o.sessionId:void 0;s&&a.setHeader(n.r,s);let f=n.a(l.id??null,o);if(u){let e=n._();return a.status(200),a.setHeader(`Content-Type`,`text/event-stream`),a.setHeader(`Cache-Control`,`no-cache`),a.setHeader(`Connection`,`keep-alive`),a.write(`id: ${e}\n\n`),a.write(n.b(f,e)),a.end()}return a.json(f)}catch(e){if(n.m(l))return console.error(`MCP notification processing error:`,String(e).replace(/\n|\r/g,``)),a.status(202).end();console.error(`MCP RPC error:`,String(e).replace(/\n|\r/g,``));let t=e?.code??-32603,r=e?.data,i=e.message||`MCP request failed`,o=n.i(l.id??null,t,i,r);if(u){let e=n._();return a.status(200),a.setHeader(`Content-Type`,`text/event-stream`),a.setHeader(`Cache-Control`,`no-cache`),a.setHeader(`Connection`,`keep-alive`),a.write(`id: ${e}\n\n`),a.write(n.b(o,e)),a.end()}return a.status(200).json(o)}}),_.get(`${i}`,async(e,t)=>{if(h.resourceMetadataUrl&&!n.u(e.headers.authorization))return t.setHeader(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).json({error:`Bearer token required`});let r=n._();t.status(200),t.setHeader(`Content-Type`,`text/event-stream`),t.setHeader(`Cache-Control`,`no-cache`),t.setHeader(`Connection`,`keep-alive`),t.write(n.b({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},r,15e3));let i=setInterval(()=>{t.write(`: keep-alive
|
|
2
2
|
|
|
3
3
|
`)},15e3);e.on(`close`,()=>{clearInterval(i)})}),_.delete(`${i}`,(e,t)=>h.resourceMetadataUrl&&!n.u(e.headers.authorization)?(t.setHeader(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).json({error:`Bearer token required`})):t.status(405).json({error:`Session termination not supported`}))}return _.use((t,n,r,i)=>{console.error(`Express adapter error:`,t),r.headersSent||r.status(500).json(e.i(t,500))}),_}function o(e,t){let n=a(t);return e.use(`/`,n),e}function s(e){return o((0,r.default)(),e)}exports.createCubeApp=s,exports.createCubeRouter=a,exports.mountCubeRoutes=o;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Router, Request, Response, Express } from 'express';
|
|
2
2
|
import { CorsOptions } from 'cors';
|
|
3
|
-
import { SemanticQuery, SecurityContext, DatabaseExecutor, DrizzleDatabase, Cube, CacheConfig, RLSSetupFn } from '../../server';
|
|
4
|
-
import { AgentConfig } from '../../server/agent/types';
|
|
3
|
+
import { SemanticQuery, SecurityContext, DatabaseExecutor, DrizzleDatabase, Cube, CacheConfig, RLSSetupFn } from '../../server/index.js';
|
|
4
|
+
import { AgentConfig } from '../../server/agent/types.js';
|
|
5
5
|
import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
6
6
|
import { MySql2Database } from 'drizzle-orm/mysql2';
|
|
7
7
|
import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
8
|
-
import { MCPOptions } from '../utils';
|
|
8
|
+
import { MCPOptions } from '../utils.js';
|
|
9
9
|
export interface ExpressAdapterOptions {
|
|
10
10
|
/**
|
|
11
11
|
* Array of cube definitions to register
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as e,
|
|
2
|
-
import { i as o, n as s, r as c, t as l } from "../locale-
|
|
3
|
-
import { C as u, S as d, _ as f, a as p, b as m, c as h, g, h as _, i as v, l as y, m as b, o as x, r as S, u as C, v as w, x as T, y as E } from "../mcp-transport-
|
|
1
|
+
import { a as e, i as t, l as n, o as r, r as i, u as a } from "../utils-BPWZsX7k.js";
|
|
2
|
+
import { i as o, n as s, r as c, t as l } from "../locale-DDvZDFVn.js";
|
|
3
|
+
import { C as u, S as d, _ as f, a as p, b as m, c as h, g, h as _, i as v, l as y, m as b, o as x, r as S, u as C, v as w, x as T, y as E } from "../mcp-transport-Dfuj4j4q.js";
|
|
4
4
|
import D, { Router as O } from "express";
|
|
5
5
|
import k from "cors";
|
|
6
6
|
//#region src/adapters/express/index.ts
|
|
@@ -28,94 +28,94 @@ function A(A) {
|
|
|
28
28
|
});
|
|
29
29
|
if (j.forEach((e) => {
|
|
30
30
|
W.registerCube(e);
|
|
31
|
-
}), H.post(`${L}/load`, async (e,
|
|
31
|
+
}), H.post(`${L}/load`, async (e, n) => {
|
|
32
32
|
try {
|
|
33
|
-
let r = e.body.query || e.body, a = await U(e,
|
|
34
|
-
if (!o.isValid) return
|
|
33
|
+
let r = e.body.query || e.body, a = await U(e, n), o = W.validateQuery(r);
|
|
34
|
+
if (!o.isValid) return n.status(400).json(t(`Query validation failed: ${o.errors.join(", ")}`, 400));
|
|
35
35
|
let s = e.headers["x-cache-control"] === "no-cache", c = await W.executeMultiCubeQuery(r, a, { skipCache: s });
|
|
36
|
-
|
|
36
|
+
n.json(i(r, c, W));
|
|
37
37
|
} catch (e) {
|
|
38
|
-
console.error("Query execution error:", e),
|
|
38
|
+
console.error("Query execution error:", e), n.status(500).json(t(e instanceof Error ? e.message : "Query execution failed", 500));
|
|
39
39
|
}
|
|
40
|
-
}), H.get(`${L}/load`, async (e,
|
|
40
|
+
}), H.get(`${L}/load`, async (e, n) => {
|
|
41
41
|
try {
|
|
42
42
|
let r = e.query.query;
|
|
43
|
-
if (!r) return
|
|
43
|
+
if (!r) return n.status(400).json(t("Query parameter is required", 400));
|
|
44
44
|
let a;
|
|
45
45
|
try {
|
|
46
46
|
a = JSON.parse(r);
|
|
47
47
|
} catch {
|
|
48
|
-
return
|
|
48
|
+
return n.status(400).json(t("Invalid JSON in query parameter", 400));
|
|
49
49
|
}
|
|
50
|
-
let o = await U(e,
|
|
51
|
-
if (!s.isValid) return
|
|
50
|
+
let o = await U(e, n), s = W.validateQuery(a);
|
|
51
|
+
if (!s.isValid) return n.status(400).json(t(`Query validation failed: ${s.errors.join(", ")}`, 400));
|
|
52
52
|
let c = e.headers["x-cache-control"] === "no-cache", l = await W.executeMultiCubeQuery(a, o, { skipCache: c });
|
|
53
|
-
|
|
53
|
+
n.json(i(a, l, W));
|
|
54
54
|
} catch (e) {
|
|
55
|
-
console.error("Query execution error:", e),
|
|
55
|
+
console.error("Query execution error:", e), n.status(500).json(t(e instanceof Error ? e.message : "Query execution failed", 500));
|
|
56
56
|
}
|
|
57
|
-
}), H.post(`${L}/batch`, async (e,
|
|
57
|
+
}), H.post(`${L}/batch`, async (e, r) => {
|
|
58
58
|
try {
|
|
59
|
-
let { queries:
|
|
60
|
-
if (!
|
|
61
|
-
if (
|
|
62
|
-
let
|
|
63
|
-
|
|
59
|
+
let { queries: i } = e.body;
|
|
60
|
+
if (!i || !Array.isArray(i)) return r.status(400).json(t("Request body must contain a \"queries\" array", 400));
|
|
61
|
+
if (i.length === 0) return r.status(400).json(t("Queries array cannot be empty", 400));
|
|
62
|
+
let a = await n(i, await U(e, r), W, { skipCache: e.headers["x-cache-control"] === "no-cache" });
|
|
63
|
+
r.json(a);
|
|
64
64
|
} catch (e) {
|
|
65
|
-
console.error("Batch execution error:", e),
|
|
65
|
+
console.error("Batch execution error:", e), r.status(500).json(t(e instanceof Error ? e.message : "Batch execution failed", 500));
|
|
66
66
|
}
|
|
67
|
-
}), H.get(`${L}/meta`, (
|
|
67
|
+
}), H.get(`${L}/meta`, (n, r) => {
|
|
68
68
|
try {
|
|
69
69
|
let t = W.getMetadata();
|
|
70
70
|
r.json(e(t));
|
|
71
71
|
} catch (e) {
|
|
72
|
-
console.error("Metadata error:", e), r.status(500).json(
|
|
72
|
+
console.error("Metadata error:", e), r.status(500).json(t(e instanceof Error ? e.message : "Failed to fetch metadata", 500));
|
|
73
73
|
}
|
|
74
|
-
}), H.post(`${L}/sql`, async (e,
|
|
74
|
+
}), H.post(`${L}/sql`, async (e, n) => {
|
|
75
75
|
try {
|
|
76
|
-
let i = e.body, a = await U(e,
|
|
77
|
-
if (!o.isValid) return
|
|
76
|
+
let i = e.body, a = await U(e, n), o = W.validateQuery(i);
|
|
77
|
+
if (!o.isValid) return n.status(400).json(t(`Query validation failed: ${o.errors.join(", ")}`, 400));
|
|
78
78
|
let s = i.measures?.[0] || i.dimensions?.[0];
|
|
79
|
-
if (!s) return
|
|
79
|
+
if (!s) return n.status(400).json(t("No measures or dimensions specified", 400));
|
|
80
80
|
let c = s.split(".")[0], l = await W.generateSQL(c, i, a);
|
|
81
|
-
|
|
81
|
+
n.json(r(i, l));
|
|
82
82
|
} catch (e) {
|
|
83
|
-
console.error("SQL generation error:", String(e).replace(/\n|\r/g, "")),
|
|
83
|
+
console.error("SQL generation error:", String(e).replace(/\n|\r/g, "")), n.status(500).json(t(e instanceof Error ? e.message : "SQL generation failed", 500));
|
|
84
84
|
}
|
|
85
|
-
}), H.get(`${L}/sql`, async (e,
|
|
85
|
+
}), H.get(`${L}/sql`, async (e, n) => {
|
|
86
86
|
try {
|
|
87
87
|
let i = e.query.query;
|
|
88
|
-
if (!i) return
|
|
89
|
-
let a = JSON.parse(i), o = await U(e,
|
|
90
|
-
if (!s.isValid) return
|
|
88
|
+
if (!i) return n.status(400).json(t("Query parameter is required", 400));
|
|
89
|
+
let a = JSON.parse(i), o = await U(e, n), s = W.validateQuery(a);
|
|
90
|
+
if (!s.isValid) return n.status(400).json(t(`Query validation failed: ${s.errors.join(", ")}`, 400));
|
|
91
91
|
let c = a.measures?.[0] || a.dimensions?.[0];
|
|
92
|
-
if (!c) return
|
|
92
|
+
if (!c) return n.status(400).json(t("No measures or dimensions specified", 400));
|
|
93
93
|
let l = c.split(".")[0], u = await W.generateSQL(l, a, o);
|
|
94
|
-
|
|
94
|
+
n.json(r(a, u));
|
|
95
95
|
} catch (e) {
|
|
96
|
-
console.error("SQL generation error:", String(e).replace(/\n|\r/g, "")),
|
|
96
|
+
console.error("SQL generation error:", String(e).replace(/\n|\r/g, "")), n.status(500).json(t(e instanceof Error ? e.message : "SQL generation failed", 500));
|
|
97
97
|
}
|
|
98
|
-
}), H.post(`${L}/dry-run`, async (e,
|
|
98
|
+
}), H.post(`${L}/dry-run`, async (e, t) => {
|
|
99
99
|
try {
|
|
100
|
-
let
|
|
101
|
-
|
|
100
|
+
let n = await a(e.body.query || e.body, await U(e, t), W);
|
|
101
|
+
t.json(n);
|
|
102
102
|
} catch (e) {
|
|
103
|
-
console.error("Dry-run error:", e),
|
|
103
|
+
console.error("Dry-run error:", e), t.status(400).json({
|
|
104
104
|
error: e instanceof Error ? e.message : "Dry-run validation failed",
|
|
105
105
|
valid: !1
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
|
-
}), H.get(`${L}/dry-run`, async (e,
|
|
108
|
+
}), H.get(`${L}/dry-run`, async (e, t) => {
|
|
109
109
|
try {
|
|
110
|
-
let
|
|
111
|
-
if (!
|
|
110
|
+
let n = e.query.query;
|
|
111
|
+
if (!n) return t.status(400).json({
|
|
112
112
|
error: "Query parameter is required",
|
|
113
113
|
valid: !1
|
|
114
114
|
});
|
|
115
|
-
let
|
|
116
|
-
|
|
115
|
+
let r = await a(JSON.parse(n), await U(e, t), W);
|
|
116
|
+
t.json(r);
|
|
117
117
|
} catch (e) {
|
|
118
|
-
console.error("Dry-run error:", e),
|
|
118
|
+
console.error("Dry-run error:", e), t.status(400).json({
|
|
119
119
|
error: e instanceof Error ? e.message : "Dry-run validation failed",
|
|
120
120
|
valid: !1
|
|
121
121
|
});
|
|
@@ -131,7 +131,7 @@ function A(A) {
|
|
|
131
131
|
}
|
|
132
132
|
}), V && H.post(`${L}/agent/chat`, async (e, t) => {
|
|
133
133
|
try {
|
|
134
|
-
let { handleAgentChat: n } = await import("../handler-
|
|
134
|
+
let { handleAgentChat: n } = await import("../handler-CfgE0JSL.js"), { message: r, sessionId: i, history: a } = e.body;
|
|
135
135
|
if (!r || typeof r != "string") return t.status(400).json({ error: "message is required and must be a string" });
|
|
136
136
|
let o = (V.apiKey || "").trim();
|
|
137
137
|
if (V.allowClientApiKey) {
|
|
@@ -237,8 +237,8 @@ function A(A) {
|
|
|
237
237
|
});
|
|
238
238
|
}), H.delete(`${r}`, (e, t) => B.resourceMetadataUrl && !C(e.headers.authorization) ? (t.setHeader("WWW-Authenticate", h(B.resourceMetadataUrl)), t.status(401).json({ error: "Bearer token required" })) : t.status(405).json({ error: "Session termination not supported" }));
|
|
239
239
|
}
|
|
240
|
-
return H.use((e,
|
|
241
|
-
console.error("Express adapter error:", e), r.headersSent || r.status(500).json(
|
|
240
|
+
return H.use((e, n, r, i) => {
|
|
241
|
+
console.error("Express adapter error:", e), r.headersSent || r.status(500).json(t(e, 500));
|
|
242
242
|
}), H;
|
|
243
243
|
}
|
|
244
244
|
function j(e, t) {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-_whV4fXL.cjs"),t=require("../locale-ZLUUNUxr.cjs"),n=require("../mcp-transport-B7ddET3M.cjs");var r=function(r,i,a){let{cubes:o,drizzle:s,schema:c,extractSecurityContext:l,engineType:u,cors:d,basePath:f=`/cubejs-api/v1`,bodyLimit:p=10485760,cache:m,mcp:h={enabled:!0},agent:g}=i;if(!o||o.length===0)return a(Error(`At least one cube must be provided in the cubes array`));let _=async e=>t.r(await l(e),t.n(t=>e.headers[t.toLowerCase()]));if(d){let e={...d,allowedHeaders:t.t(d.allowedHeaders)};r.register(import(`@fastify/cors`),e)}r.addHook(`onRequest`,async(e,t)=>{e.method===`POST`&&(e.body=void 0)});let v=new t.i({drizzle:s,schema:c,engineType:u,cache:m,rlsSetup:i.rlsSetup});if(o.forEach(e=>{v.registerCube(e)}),r.post(`${f}/load`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(t,n)=>{try{let r=t.body,i=r.query||r,a=await _(t),o=v.validateQuery(i);if(!o.isValid)return n.status(400).send(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=t.headers[`x-cache-control`]===`no-cache`;return e.r(i,await v.executeMultiCubeQuery(i,a,{skipCache:s}),v)}catch(r){return t.log.error(r,`Query execution error`),n.status(500).send(e.i(r instanceof Error?r.message:`Query execution failed`,500))}}),r.get(`${f}/load`,{schema:{querystring:{type:`object`,properties:{query:{type:`string`}},required:[`query`]}}},async(t,n)=>{try{let{query:r}=t.query,i;try{i=JSON.parse(r)}catch{return n.status(400).send(e.i(`Invalid JSON in query parameter`,400))}let a=await _(t),o=v.validateQuery(i);if(!o.isValid)return n.status(400).send(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=t.headers[`x-cache-control`]===`no-cache`,c=await v.executeMultiCubeQuery(i,a,{skipCache:s});return e.r(i,c,v)}catch(r){return t.log.error(r,`Query execution error`),n.status(500).send(e.i(r instanceof Error?r.message:`Query execution failed`,500))}}),r.post(`${f}/batch`,{bodyLimit:p,schema:{body:{type:`object`,required:[`queries`],properties:{queries:{type:`array`,items:{type:`object`}}}}}},async(t,n)=>{try{let{queries:r}=t.body;return!r||!Array.isArray(r)?n.status(400).send(e.i(`Request body must contain a "queries" array`,400)):r.length===0?n.status(400).send(e.i(`Queries array cannot be empty`,400)):await e.l(r,await _(t),v,{skipCache:t.headers[`x-cache-control`]===`no-cache`})}catch(r){return t.log.error(r,`Batch execution error`),n.status(500).send(e.i(r instanceof Error?r.message:`Batch execution failed`,500))}}),r.get(`${f}/meta`,async(t,n)=>{try{return e.a(v.getMetadata())}catch(r){return t.log.error(r,`Metadata error`),n.status(500).send(e.i(r instanceof Error?r.message:`Failed to fetch metadata`,500))}}),r.post(`${f}/sql`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(t,n)=>{try{let r=t.body,i=await _(t),a=v.validateQuery(r);if(!a.isValid)return n.status(400).send(e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=r.measures?.[0]||r.dimensions?.[0];if(!o)return n.status(400).send(e.i(`No measures or dimensions specified`,400));let s=o.split(`.`)[0];return e.o(r,await v.generateSQL(s,r,i))}catch(r){return t.log.error({err:String(r).replace(/\n|\r/g,``)},`SQL generation error`),n.status(500).send(e.i(r instanceof Error?r.message:`SQL generation failed`,500))}}),r.get(`${f}/sql`,{schema:{querystring:{type:`object`,properties:{query:{type:`string`}},required:[`query`]}}},async(t,n)=>{try{let{query:r}=t.query,i=JSON.parse(r),a=await _(t),o=v.validateQuery(i);if(!o.isValid)return n.status(400).send(e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=i.measures?.[0]||i.dimensions?.[0];if(!s)return n.status(400).send(e.i(`No measures or dimensions specified`,400));let c=s.split(`.`)[0];return e.o(i,await v.generateSQL(c,i,a))}catch(r){return t.log.error({err:String(r).replace(/\n|\r/g,``)},`SQL generation error`),n.status(500).send(e.i(r instanceof Error?r.message:`SQL generation failed`,500))}}),r.post(`${f}/dry-run`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(t,n)=>{try{let n=t.body;return await e.u(n.query||n,await _(t),v)}catch(e){return t.log.error(e,`Dry-run error`),n.status(400).send({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),r.get(`${f}/dry-run`,{schema:{querystring:{type:`object`,properties:{query:{type:`string`}},required:[`query`]}}},async(t,n)=>{try{let{query:n}=t.query;return await e.u(JSON.parse(n),await _(t),v)}catch(e){return t.log.error(e,`Dry-run error`),n.status(400).send({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}),r.post(`${f}/explain`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(e,t)=>{try{let n=e.body,r=n.query||n,i=n.options||{},a=await _(e),o=v.validateQuery(r);return o.isValid?await v.explainQuery(r,a,i):t.status(400).send({error:`Query validation failed: ${o.errors.join(`, `)}`})}catch(n){return e.log.error(n,`Explain error`),t.status(500).send({error:n instanceof Error?n.message:`Explain query failed`})}}),g&&r.post(`${f}/agent/chat`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(e,t)=>{try{let{handleAgentChat:n}=await Promise.resolve().then(()=>require("../handler-Cn0dOctE.cjs")),{message:r,sessionId:i,history:a}=e.body;if(!r||typeof r!=`string`)return t.status(400).send({error:`message is required and must be a string`});let o=(g.apiKey||``).trim();if(g.allowClientApiKey){let t=e.headers[`x-agent-api-key`];t&&(o=t.trim())}if(!o)return t.status(401).send({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`});let s=g.allowClientApiKey?e.headers[`x-agent-provider`]:void 0,c=g.allowClientApiKey?e.headers[`x-agent-model`]:void 0,l=g.allowClientApiKey?e.headers[`x-agent-provider-endpoint`]:void 0,u=await _(e),d=g.buildSystemContext?.(u);t.raw.writeHead(200,{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});try{let e=n({message:r,sessionId:i,history:a,semanticLayer:v,securityContext:u,agentConfig:g,apiKey:o,systemContext:d,providerOverride:s,modelOverride:c,baseURLOverride:l});for await(let n of e)t.raw.write(`data: ${JSON.stringify(n)}\n\n`)}catch(e){let n={type:`error`,data:{message:e instanceof Error?e.message:`Stream failed`}};t.raw.write(`data: ${JSON.stringify(n)}\n\n`)}finally{t.raw.end()}}catch(n){if(e.log.error(n,`Agent chat error`),!t.raw.headersSent)return t.status(500).send({error:n instanceof Error?n.message:`Agent chat failed`})}}),h.enabled!==!1){let e=n.o(v,h.resources),t=n.y(h.prompts),i=n.v(h.instructions),a=h.basePath??`/mcp`;r.post(`${a}`,{bodyLimit:p,schema:{body:{type:`object`,additionalProperties:!0}}},async(r,a)=>{if(h.resourceMetadataUrl&&!n.u(r.headers.authorization))return a.header(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),a.status(401).send({error:`Bearer token required`});let o=n.S(r.headers.origin,h.allowedOrigins?{allowedOrigins:h.allowedOrigins}:{});if(!o.valid)return a.status(403).send(n.i(null,-32600,o.reason));let s=r.headers.accept;if(!n.x(s))return a.status(400).send(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`));let c=n.h(r.headers);if(!c.ok)return a.status(426).send({error:`Unsupported MCP protocol version`,supported:c.supported});let l=n.g(r.body);if(!l)return a.status(400).send(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`));let u=n.C(s),d=l.method===`initialize`;try{let o=await n.l(l.method,l.params,{semanticLayer:v,extractSecurityContext:(e,t)=>_(e),rawRequest:r,rawResponse:a,negotiatedProtocol:c.negotiated,resources:e,prompts:t,instructions:i,appEnabled:!!h.app,appConfig:typeof h.app==`object`?h.app:void 0,serverName:h.serverName});if(n.m(l))return a.status(202).send();let s=d&&o&&typeof o==`object`&&`sessionId`in o?o.sessionId:void 0;s&&a.header(n.r,s);let f=n.a(l.id??null,o);if(u){let e=n._();a.header(`Content-Type`,`text/event-stream`).header(`Cache-Control`,`no-cache`).header(`Connection`,`keep-alive`).send(`id: ${e}\n\n${n.b(f,e)}`);return}return a.send(f)}catch(e){if(n.m(l))return r.log.error({err:String(e).replace(/\n|\r/g,``)},`MCP notification processing error`),a.status(202).send();r.log.error({err:String(e).replace(/\n|\r/g,``)},`MCP RPC error`);let t=e?.code??-32603,i=e?.data,o=e.message||`MCP request failed`,s=n.i(l.id??null,t,o,i);if(u){let e=n._();a.header(`Content-Type`,`text/event-stream`).header(`Cache-Control`,`no-cache`).header(`Connection`,`keep-alive`).send(`id: ${e}\n\n${n.b(s,e)}`);return}return a.send(s)}}),r.get(`${a}`,async(e,t)=>{if(h.resourceMetadataUrl&&!n.u(e.headers.authorization))return t.header(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).send({error:`Bearer token required`});let r=n._();t.raw.writeHead(200,{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`}),t.raw.write(n.b({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},r,15e3));let i=setInterval(()=>{t.raw.write(`: keep-alive
|
|
2
2
|
|
|
3
3
|
`)},15e3);e.raw.on(`close`,()=>{clearInterval(i)})}),r.delete(`${a}`,async(e,t)=>h.resourceMetadataUrl&&!n.u(e.headers.authorization)?(t.header(`WWW-Authenticate`,n.c(h.resourceMetadataUrl)),t.status(401).send({error:`Bearer token required`})):t.status(405).send({error:`Session termination not supported`}))}r.setErrorHandler(async(t,n,r)=>(n.log.error(t,`Fastify cube adapter error`),r.statusCode<400&&r.status(500),e.i(t instanceof Error?t:String(t),r.statusCode))),a()};async function i(e,t){await e.register(r,t)}function a(e){let t=require("fastify")({logger:!0});return t.register(r,e),t}exports.createCubeApp=a,exports.cubePlugin=r,exports.registerCubeRoutes=i;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { FastifyPluginCallback, FastifyRequest, FastifyInstance } from 'fastify';
|
|
2
2
|
import { FastifyCorsOptions } from '@fastify/cors';
|
|
3
|
-
import { SemanticQuery, SecurityContext, DatabaseExecutor, DrizzleDatabase, Cube, CacheConfig, RLSSetupFn } from '../../server';
|
|
4
|
-
import { AgentConfig } from '../../server/agent/types';
|
|
3
|
+
import { SemanticQuery, SecurityContext, DatabaseExecutor, DrizzleDatabase, Cube, CacheConfig, RLSSetupFn } from '../../server/index.js';
|
|
4
|
+
import { AgentConfig } from '../../server/agent/types.js';
|
|
5
5
|
import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
6
6
|
import { MySql2Database } from 'drizzle-orm/mysql2';
|
|
7
7
|
import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
8
|
-
import { MCPOptions } from '../utils';
|
|
8
|
+
import { MCPOptions } from '../utils.js';
|
|
9
9
|
export interface FastifyAdapterOptions {
|
|
10
10
|
/**
|
|
11
11
|
* Array of cube definitions to register
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as e,
|
|
2
|
-
import { i as s, n as c, r as l, t as u } from "../locale-
|
|
3
|
-
import { C as d, S as f, _ as p, a as m, b as h, c as g, g as _, h as v, i as y, l as b, m as x, o as S, r as C, u as w, v as T, x as E, y as D } from "../mcp-transport-
|
|
1
|
+
import { a as e, i as t, k as n, l as r, o as i, r as a, u as o } from "../utils-BPWZsX7k.js";
|
|
2
|
+
import { i as s, n as c, r as l, t as u } from "../locale-DDvZDFVn.js";
|
|
3
|
+
import { C as d, S as f, _ as p, a as m, b as h, c as g, g as _, h as v, i as y, l as b, m as x, o as S, r as C, u as w, v as T, x as E, y as D } from "../mcp-transport-Dfuj4j4q.js";
|
|
4
4
|
//#region src/adapters/fastify/index.ts
|
|
5
|
-
var O = function(
|
|
5
|
+
var O = function(n, O, k) {
|
|
6
6
|
let { cubes: A, drizzle: j, schema: M, extractSecurityContext: N, engineType: P, cors: F, basePath: I = "/cubejs-api/v1", bodyLimit: L = 10485760, cache: R, mcp: z = { enabled: !0 }, agent: B } = O;
|
|
7
7
|
if (!A || A.length === 0) return k(/* @__PURE__ */ Error("At least one cube must be provided in the cubes array"));
|
|
8
8
|
let V = async (e) => l(await N(e), c((t) => e.headers[t.toLowerCase()]));
|
|
@@ -11,9 +11,9 @@ var O = function(o, O, k) {
|
|
|
11
11
|
...F,
|
|
12
12
|
allowedHeaders: u(F.allowedHeaders)
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
n.register(import("@fastify/cors"), e);
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
n.addHook("onRequest", async (e, t) => {
|
|
17
17
|
e.method === "POST" && (e.body = void 0);
|
|
18
18
|
});
|
|
19
19
|
let H = new s({
|
|
@@ -25,41 +25,41 @@ var O = function(o, O, k) {
|
|
|
25
25
|
});
|
|
26
26
|
if (A.forEach((e) => {
|
|
27
27
|
H.registerCube(e);
|
|
28
|
-
}),
|
|
28
|
+
}), n.post(`${I}/load`, {
|
|
29
29
|
bodyLimit: L,
|
|
30
30
|
schema: { body: {
|
|
31
31
|
type: "object",
|
|
32
32
|
additionalProperties: !0
|
|
33
33
|
} }
|
|
34
|
-
}, async (e,
|
|
34
|
+
}, async (e, n) => {
|
|
35
35
|
try {
|
|
36
|
-
let r = e.body,
|
|
37
|
-
if (!s.isValid) return
|
|
36
|
+
let r = e.body, i = r.query || r, o = await V(e), s = H.validateQuery(i);
|
|
37
|
+
if (!s.isValid) return n.status(400).send(t(`Query validation failed: ${s.errors.join(", ")}`, 400));
|
|
38
38
|
let c = e.headers["x-cache-control"] === "no-cache";
|
|
39
|
-
return i
|
|
39
|
+
return a(i, await H.executeMultiCubeQuery(i, o, { skipCache: c }), H);
|
|
40
40
|
} catch (r) {
|
|
41
|
-
return e.log.error(r, "Query execution error"),
|
|
41
|
+
return e.log.error(r, "Query execution error"), n.status(500).send(t(r instanceof Error ? r.message : "Query execution failed", 500));
|
|
42
42
|
}
|
|
43
|
-
}),
|
|
43
|
+
}), n.get(`${I}/load`, { schema: { querystring: {
|
|
44
44
|
type: "object",
|
|
45
45
|
properties: { query: { type: "string" } },
|
|
46
46
|
required: ["query"]
|
|
47
|
-
} } }, async (e,
|
|
47
|
+
} } }, async (e, n) => {
|
|
48
48
|
try {
|
|
49
|
-
let { query: r } = e.query,
|
|
49
|
+
let { query: r } = e.query, i;
|
|
50
50
|
try {
|
|
51
|
-
|
|
51
|
+
i = JSON.parse(r);
|
|
52
52
|
} catch {
|
|
53
|
-
return
|
|
53
|
+
return n.status(400).send(t("Invalid JSON in query parameter", 400));
|
|
54
54
|
}
|
|
55
|
-
let o = await V(e), s = H.validateQuery(
|
|
56
|
-
if (!s.isValid) return
|
|
57
|
-
let c = e.headers["x-cache-control"] === "no-cache", l = await H.executeMultiCubeQuery(
|
|
58
|
-
return i
|
|
55
|
+
let o = await V(e), s = H.validateQuery(i);
|
|
56
|
+
if (!s.isValid) return n.status(400).send(t(`Query validation failed: ${s.errors.join(", ")}`, 400));
|
|
57
|
+
let c = e.headers["x-cache-control"] === "no-cache", l = await H.executeMultiCubeQuery(i, o, { skipCache: c });
|
|
58
|
+
return a(i, l, H);
|
|
59
59
|
} catch (r) {
|
|
60
|
-
return e.log.error(r, "Query execution error"),
|
|
60
|
+
return e.log.error(r, "Query execution error"), n.status(500).send(t(r instanceof Error ? r.message : "Query execution failed", 500));
|
|
61
61
|
}
|
|
62
|
-
}),
|
|
62
|
+
}), n.post(`${I}/batch`, {
|
|
63
63
|
bodyLimit: L,
|
|
64
64
|
schema: { body: {
|
|
65
65
|
type: "object",
|
|
@@ -69,82 +69,82 @@ var O = function(o, O, k) {
|
|
|
69
69
|
items: { type: "object" }
|
|
70
70
|
} }
|
|
71
71
|
} }
|
|
72
|
-
}, async (e,
|
|
72
|
+
}, async (e, n) => {
|
|
73
73
|
try {
|
|
74
|
-
let { queries:
|
|
75
|
-
return !
|
|
74
|
+
let { queries: i } = e.body;
|
|
75
|
+
return !i || !Array.isArray(i) ? n.status(400).send(t("Request body must contain a \"queries\" array", 400)) : i.length === 0 ? n.status(400).send(t("Queries array cannot be empty", 400)) : await r(i, await V(e), H, { skipCache: e.headers["x-cache-control"] === "no-cache" });
|
|
76
76
|
} catch (r) {
|
|
77
|
-
return e.log.error(r, "Batch execution error"),
|
|
77
|
+
return e.log.error(r, "Batch execution error"), n.status(500).send(t(r instanceof Error ? r.message : "Batch execution failed", 500));
|
|
78
78
|
}
|
|
79
|
-
}),
|
|
79
|
+
}), n.get(`${I}/meta`, async (n, r) => {
|
|
80
80
|
try {
|
|
81
81
|
return e(H.getMetadata());
|
|
82
82
|
} catch (e) {
|
|
83
|
-
return
|
|
83
|
+
return n.log.error(e, "Metadata error"), r.status(500).send(t(e instanceof Error ? e.message : "Failed to fetch metadata", 500));
|
|
84
84
|
}
|
|
85
|
-
}),
|
|
85
|
+
}), n.post(`${I}/sql`, {
|
|
86
86
|
bodyLimit: L,
|
|
87
87
|
schema: { body: {
|
|
88
88
|
type: "object",
|
|
89
89
|
additionalProperties: !0
|
|
90
90
|
} }
|
|
91
|
-
}, async (e,
|
|
91
|
+
}, async (e, n) => {
|
|
92
92
|
try {
|
|
93
|
-
let
|
|
94
|
-
if (!o.isValid) return
|
|
95
|
-
let s =
|
|
96
|
-
if (!s) return
|
|
93
|
+
let r = e.body, a = await V(e), o = H.validateQuery(r);
|
|
94
|
+
if (!o.isValid) return n.status(400).send(t(`Query validation failed: ${o.errors.join(", ")}`, 400));
|
|
95
|
+
let s = r.measures?.[0] || r.dimensions?.[0];
|
|
96
|
+
if (!s) return n.status(400).send(t("No measures or dimensions specified", 400));
|
|
97
97
|
let c = s.split(".")[0];
|
|
98
|
-
return r
|
|
98
|
+
return i(r, await H.generateSQL(c, r, a));
|
|
99
99
|
} catch (r) {
|
|
100
|
-
return e.log.error({ err: String(r).replace(/\n|\r/g, "") }, "SQL generation error"),
|
|
100
|
+
return e.log.error({ err: String(r).replace(/\n|\r/g, "") }, "SQL generation error"), n.status(500).send(t(r instanceof Error ? r.message : "SQL generation failed", 500));
|
|
101
101
|
}
|
|
102
|
-
}),
|
|
102
|
+
}), n.get(`${I}/sql`, { schema: { querystring: {
|
|
103
103
|
type: "object",
|
|
104
104
|
properties: { query: { type: "string" } },
|
|
105
105
|
required: ["query"]
|
|
106
|
-
} } }, async (e,
|
|
106
|
+
} } }, async (e, n) => {
|
|
107
107
|
try {
|
|
108
|
-
let { query:
|
|
109
|
-
if (!s.isValid) return
|
|
108
|
+
let { query: r } = e.query, a = JSON.parse(r), o = await V(e), s = H.validateQuery(a);
|
|
109
|
+
if (!s.isValid) return n.status(400).send(t(`Query validation failed: ${s.errors.join(", ")}`, 400));
|
|
110
110
|
let c = a.measures?.[0] || a.dimensions?.[0];
|
|
111
|
-
if (!c) return
|
|
111
|
+
if (!c) return n.status(400).send(t("No measures or dimensions specified", 400));
|
|
112
112
|
let l = c.split(".")[0];
|
|
113
|
-
return
|
|
113
|
+
return i(a, await H.generateSQL(l, a, o));
|
|
114
114
|
} catch (r) {
|
|
115
|
-
return e.log.error({ err: String(r).replace(/\n|\r/g, "") }, "SQL generation error"),
|
|
115
|
+
return e.log.error({ err: String(r).replace(/\n|\r/g, "") }, "SQL generation error"), n.status(500).send(t(r instanceof Error ? r.message : "SQL generation failed", 500));
|
|
116
116
|
}
|
|
117
|
-
}),
|
|
117
|
+
}), n.post(`${I}/dry-run`, {
|
|
118
118
|
bodyLimit: L,
|
|
119
119
|
schema: { body: {
|
|
120
120
|
type: "object",
|
|
121
121
|
additionalProperties: !0
|
|
122
122
|
} }
|
|
123
|
-
}, async (e,
|
|
123
|
+
}, async (e, t) => {
|
|
124
124
|
try {
|
|
125
|
-
let
|
|
126
|
-
return await t
|
|
127
|
-
} catch (
|
|
128
|
-
return e.log.error(
|
|
129
|
-
error:
|
|
125
|
+
let t = e.body;
|
|
126
|
+
return await o(t.query || t, await V(e), H);
|
|
127
|
+
} catch (n) {
|
|
128
|
+
return e.log.error(n, "Dry-run error"), t.status(400).send({
|
|
129
|
+
error: n instanceof Error ? n.message : "Dry-run validation failed",
|
|
130
130
|
valid: !1
|
|
131
131
|
});
|
|
132
132
|
}
|
|
133
|
-
}),
|
|
133
|
+
}), n.get(`${I}/dry-run`, { schema: { querystring: {
|
|
134
134
|
type: "object",
|
|
135
135
|
properties: { query: { type: "string" } },
|
|
136
136
|
required: ["query"]
|
|
137
|
-
} } }, async (e,
|
|
137
|
+
} } }, async (e, t) => {
|
|
138
138
|
try {
|
|
139
|
-
let { query:
|
|
140
|
-
return await
|
|
141
|
-
} catch (
|
|
142
|
-
return e.log.error(
|
|
143
|
-
error:
|
|
139
|
+
let { query: t } = e.query;
|
|
140
|
+
return await o(JSON.parse(t), await V(e), H);
|
|
141
|
+
} catch (n) {
|
|
142
|
+
return e.log.error(n, "Dry-run error"), t.status(400).send({
|
|
143
|
+
error: n instanceof Error ? n.message : "Dry-run validation failed",
|
|
144
144
|
valid: !1
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
|
-
}),
|
|
147
|
+
}), n.post(`${I}/explain`, {
|
|
148
148
|
bodyLimit: L,
|
|
149
149
|
schema: { body: {
|
|
150
150
|
type: "object",
|
|
@@ -157,7 +157,7 @@ var O = function(o, O, k) {
|
|
|
157
157
|
} catch (n) {
|
|
158
158
|
return e.log.error(n, "Explain error"), t.status(500).send({ error: n instanceof Error ? n.message : "Explain query failed" });
|
|
159
159
|
}
|
|
160
|
-
}), B &&
|
|
160
|
+
}), B && n.post(`${I}/agent/chat`, {
|
|
161
161
|
bodyLimit: L,
|
|
162
162
|
schema: { body: {
|
|
163
163
|
type: "object",
|
|
@@ -165,7 +165,7 @@ var O = function(o, O, k) {
|
|
|
165
165
|
} }
|
|
166
166
|
}, async (e, t) => {
|
|
167
167
|
try {
|
|
168
|
-
let { handleAgentChat: n } = await import("../handler-
|
|
168
|
+
let { handleAgentChat: n } = await import("../handler-CfgE0JSL.js"), { message: r, sessionId: i, history: a } = e.body;
|
|
169
169
|
if (!r || typeof r != "string") return t.status(400).send({ error: "message is required and must be a string" });
|
|
170
170
|
let o = (B.apiKey || "").trim();
|
|
171
171
|
if (B.allowClientApiKey) {
|
|
@@ -207,37 +207,37 @@ var O = function(o, O, k) {
|
|
|
207
207
|
if (e.log.error(n, "Agent chat error"), !t.raw.headersSent) return t.status(500).send({ error: n instanceof Error ? n.message : "Agent chat failed" });
|
|
208
208
|
}
|
|
209
209
|
}), z.enabled !== !1) {
|
|
210
|
-
let e = S(H, z.resources), t = D(z.prompts),
|
|
211
|
-
|
|
210
|
+
let e = S(H, z.resources), t = D(z.prompts), r = T(z.instructions), i = z.basePath ?? "/mcp";
|
|
211
|
+
n.post(`${i}`, {
|
|
212
212
|
bodyLimit: L,
|
|
213
213
|
schema: { body: {
|
|
214
214
|
type: "object",
|
|
215
215
|
additionalProperties: !0
|
|
216
216
|
} }
|
|
217
|
-
}, async (
|
|
218
|
-
if (z.resourceMetadataUrl && !w(
|
|
219
|
-
let a = f(
|
|
217
|
+
}, async (n, i) => {
|
|
218
|
+
if (z.resourceMetadataUrl && !w(n.headers.authorization)) return i.header("WWW-Authenticate", g(z.resourceMetadataUrl)), i.status(401).send({ error: "Bearer token required" });
|
|
219
|
+
let a = f(n.headers.origin, z.allowedOrigins ? { allowedOrigins: z.allowedOrigins } : {});
|
|
220
220
|
if (!a.valid) return i.status(403).send(y(null, -32600, a.reason));
|
|
221
|
-
let o =
|
|
221
|
+
let o = n.headers.accept;
|
|
222
222
|
if (!E(o)) return i.status(400).send(y(null, -32600, "Accept header must include both application/json and text/event-stream"));
|
|
223
|
-
let s = v(
|
|
223
|
+
let s = v(n.headers);
|
|
224
224
|
if (!s.ok) return i.status(426).send({
|
|
225
225
|
error: "Unsupported MCP protocol version",
|
|
226
226
|
supported: s.supported
|
|
227
227
|
});
|
|
228
|
-
let c = _(
|
|
228
|
+
let c = _(n.body);
|
|
229
229
|
if (!c) return i.status(400).send(y(null, -32600, "Invalid JSON-RPC 2.0 request"));
|
|
230
230
|
let l = d(o), u = c.method === "initialize";
|
|
231
231
|
try {
|
|
232
232
|
let a = await b(c.method, c.params, {
|
|
233
233
|
semanticLayer: H,
|
|
234
234
|
extractSecurityContext: (e, t) => V(e),
|
|
235
|
-
rawRequest:
|
|
235
|
+
rawRequest: n,
|
|
236
236
|
rawResponse: i,
|
|
237
237
|
negotiatedProtocol: s.negotiated,
|
|
238
238
|
resources: e,
|
|
239
239
|
prompts: t,
|
|
240
|
-
instructions:
|
|
240
|
+
instructions: r,
|
|
241
241
|
appEnabled: !!z.app,
|
|
242
242
|
appConfig: typeof z.app == "object" ? z.app : void 0,
|
|
243
243
|
serverName: z.serverName
|
|
@@ -253,9 +253,9 @@ var O = function(o, O, k) {
|
|
|
253
253
|
}
|
|
254
254
|
return i.send(d);
|
|
255
255
|
} catch (e) {
|
|
256
|
-
if (x(c)) return
|
|
257
|
-
|
|
258
|
-
let t = e?.code ?? -32603,
|
|
256
|
+
if (x(c)) return n.log.error({ err: String(e).replace(/\n|\r/g, "") }, "MCP notification processing error"), i.status(202).send();
|
|
257
|
+
n.log.error({ err: String(e).replace(/\n|\r/g, "") }, "MCP RPC error");
|
|
258
|
+
let t = e?.code ?? -32603, r = e?.data, a = e.message || "MCP request failed", o = y(c.id ?? null, t, a, r);
|
|
259
259
|
if (l) {
|
|
260
260
|
let e = p();
|
|
261
261
|
i.header("Content-Type", "text/event-stream").header("Cache-Control", "no-cache").header("Connection", "keep-alive").send(`id: ${e}\n\n${h(o, e)}`);
|
|
@@ -263,7 +263,7 @@ var O = function(o, O, k) {
|
|
|
263
263
|
}
|
|
264
264
|
return i.send(o);
|
|
265
265
|
}
|
|
266
|
-
}),
|
|
266
|
+
}), n.get(`${i}`, async (e, t) => {
|
|
267
267
|
if (z.resourceMetadataUrl && !w(e.headers.authorization)) return t.header("WWW-Authenticate", g(z.resourceMetadataUrl)), t.status(401).send({ error: "Bearer token required" });
|
|
268
268
|
let n = p();
|
|
269
269
|
t.raw.writeHead(200, {
|
|
@@ -281,15 +281,15 @@ var O = function(o, O, k) {
|
|
|
281
281
|
e.raw.on("close", () => {
|
|
282
282
|
clearInterval(r);
|
|
283
283
|
});
|
|
284
|
-
}),
|
|
284
|
+
}), n.delete(`${i}`, async (e, t) => z.resourceMetadataUrl && !w(e.headers.authorization) ? (t.header("WWW-Authenticate", g(z.resourceMetadataUrl)), t.status(401).send({ error: "Bearer token required" })) : t.status(405).send({ error: "Session termination not supported" }));
|
|
285
285
|
}
|
|
286
|
-
|
|
286
|
+
n.setErrorHandler(async (e, n, r) => (n.log.error(e, "Fastify cube adapter error"), r.statusCode < 400 && r.status(500), t(e instanceof Error ? e : String(e), r.statusCode))), k();
|
|
287
287
|
};
|
|
288
288
|
async function k(e, t) {
|
|
289
289
|
await e.register(O, t);
|
|
290
290
|
}
|
|
291
291
|
function A(e) {
|
|
292
|
-
let t =
|
|
292
|
+
let t = n("fastify")({ logger: !0 });
|
|
293
293
|
return t.register(O, e), t;
|
|
294
294
|
}
|
|
295
295
|
//#endregion
|