drizzle-cube 0.6.2 → 0.6.4
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/dist/adapters/ActivityGridChart.config-BtECymia.cjs +1 -0
- package/dist/adapters/ActivityGridChart.config-CTd5HYjI.js +2 -0
- package/dist/adapters/AreaChart.config-1B8iQnfn.js +2 -0
- package/dist/adapters/AreaChart.config-hnncyQL4.cjs +1 -0
- package/dist/adapters/BarChart.config-C-QCf1rL.cjs +1 -0
- package/dist/adapters/BarChart.config-CFelK1qP.js +2 -0
- package/dist/adapters/BoxPlotChart.config-CD9WEPyF.js +2 -0
- package/dist/adapters/BoxPlotChart.config-DEbLA0BX.cjs +1 -0
- package/dist/adapters/BubbleChart.config-B_M4hzzV.js +2 -0
- package/dist/adapters/BubbleChart.config-dRZZlAke.cjs +1 -0
- package/dist/adapters/CandlestickChart.config-Dsil2Fop.cjs +1 -0
- package/dist/adapters/CandlestickChart.config-fuhyFvob.js +2 -0
- package/dist/adapters/DataTable.config-q2gqBi6t.cjs +1 -0
- package/dist/adapters/DataTable.config-wIQnHX5R.js +2 -0
- package/dist/adapters/FunnelChart.config-Dz710ssx.js +2 -0
- package/dist/adapters/FunnelChart.config-YNP9CeS-.cjs +1 -0
- package/dist/adapters/GaugeChart.config-BG9FcMCn.cjs +1 -0
- package/dist/adapters/GaugeChart.config-CgwniXkd.js +2 -0
- package/dist/adapters/HeatMapChart.config-1zSMXXoN.cjs +1 -0
- package/dist/adapters/HeatMapChart.config-YVEWx6s5.js +2 -0
- package/dist/adapters/KpiDelta.config-BWvYXuFp.cjs +1 -0
- package/dist/adapters/KpiDelta.config-C_dYM64q.js +2 -0
- package/dist/adapters/KpiNumber.config-CXg6toZG.js +2 -0
- package/dist/adapters/KpiNumber.config-CZmV-yU1.cjs +1 -0
- package/dist/adapters/KpiText.config-BY-SJvAF.js +2 -0
- package/dist/adapters/KpiText.config-GSIxy0CE.cjs +1 -0
- package/dist/adapters/LineChart.config-CJtF8SOu.js +2 -0
- package/dist/adapters/LineChart.config-d0y60gw9.cjs +1 -0
- package/dist/adapters/MarkdownChart.config-B6w0spya.cjs +1 -0
- package/dist/adapters/MarkdownChart.config-BuIQcWOn.js +2 -0
- package/dist/adapters/MeasureProfileChart.config-Bo2n5Ae5.cjs +1 -0
- package/dist/adapters/MeasureProfileChart.config-C5d34lsc.js +2 -0
- package/dist/adapters/PieChart.config-CDxfXCIt.cjs +1 -0
- package/dist/adapters/PieChart.config-CuZxQc5m.js +2 -0
- package/dist/adapters/RadarChart.config-DpdVWyh5.cjs +1 -0
- package/dist/adapters/RadarChart.config-KrxwaaGu.js +2 -0
- package/dist/adapters/RadialBarChart.config-DpRZd0FW.js +2 -0
- package/dist/adapters/RadialBarChart.config-faIY4jpE.cjs +1 -0
- package/dist/adapters/RetentionCombinedChart.config-CUnScqnS.cjs +1 -0
- package/dist/adapters/RetentionCombinedChart.config-Dd8FuawP.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-CPd6GeoQ.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-CPlHbLom.cjs +1 -0
- package/dist/adapters/SankeyChart.config-DbIUqi-H.cjs +1 -0
- package/dist/adapters/SankeyChart.config-kzAnW0C7.js +2 -0
- package/dist/adapters/ScatterChart.config-4Okvn27v.js +2 -0
- package/dist/adapters/ScatterChart.config-4f9nNw3e.cjs +1 -0
- package/dist/adapters/SunburstChart.config-BsUQkIM_.js +2 -0
- package/dist/adapters/SunburstChart.config-lvnYkWs7.cjs +1 -0
- package/dist/adapters/TreeMapChart.config-S0qsgAFW.js +2 -0
- package/dist/adapters/TreeMapChart.config-jbwKsTYt.cjs +1 -0
- package/dist/adapters/WaterfallChart.config-CDQ74-pS.cjs +1 -0
- package/dist/adapters/WaterfallChart.config-XdtH-O5g.js +2 -0
- package/dist/adapters/chartConfigHelpers-CcvqrIWF.js +72 -0
- package/dist/adapters/chartConfigHelpers-DHQB-_v5.cjs +1 -0
- package/dist/adapters/compiler-DyyBaLry.cjs +166 -0
- package/dist/adapters/{locale-DDvZDFVn.js → compiler-lG6eNsoI.js} +215 -230
- package/dist/adapters/core/cube-http-handler.d.ts +27 -0
- package/dist/adapters/core/http-port.d.ts +39 -0
- package/dist/adapters/core/index.cjs +1 -0
- package/dist/adapters/core/index.d.ts +11 -0
- package/dist/adapters/core/index.js +2 -0
- package/dist/adapters/core/mcp-handler.d.ts +13 -0
- package/dist/adapters/core/rest-handlers.d.ts +14 -0
- package/dist/adapters/core/security-context.d.ts +17 -0
- package/dist/adapters/core-Bbchr0ui.js +244 -0
- package/dist/adapters/core-F1pCQPde.cjs +1 -0
- package/dist/adapters/express/index.cjs +2 -2
- package/dist/adapters/express/index.js +93 -201
- package/dist/adapters/fastify/index.cjs +2 -2
- package/dist/adapters/fastify/index.js +79 -217
- package/dist/adapters/handler-DRZb2ip6.cjs +25 -0
- package/dist/adapters/{handler-CtaSua-i.js → handler-u8FyzPBT.js} +1572 -1500
- package/dist/adapters/hono/index.cjs +2 -2
- package/dist/adapters/hono/index.js +69 -225
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +1 -1
- package/dist/adapters/mcp-transport-Bw_zqky2.js +591 -0
- package/dist/adapters/mcp-transport-CNIPoe1i.cjs +40 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.d.ts +18 -9
- package/dist/adapters/nextjs/index.js +186 -289
- package/dist/adapters/nextjs/mcp-handler.d.ts +0 -28
- package/dist/adapters/{openai-D-6l1Y8h.cjs → openai-B4kAJTSD.cjs} +1 -1
- package/dist/adapters/{openai-DTSTMiXL.cjs → openai-Cdf2wWZA.cjs} +1 -1
- package/dist/adapters/{openai-CmVRIbUg.js → openai-CmMzrs1Y.js} +1 -1
- package/dist/adapters/{openai-CtXqeznO.js → openai-DhzGY9R4.js} +1 -1
- package/dist/cjs/adapters/core/cube-http-handler.d.ts +27 -0
- package/dist/cjs/adapters/core/http-port.d.ts +39 -0
- package/dist/cjs/adapters/core/index.d.ts +11 -0
- package/dist/cjs/adapters/core/mcp-handler.d.ts +13 -0
- package/dist/cjs/adapters/core/rest-handlers.d.ts +14 -0
- package/dist/cjs/adapters/core/security-context.d.ts +17 -0
- package/dist/cjs/adapters/nextjs/index.d.ts +18 -9
- package/dist/cjs/adapters/nextjs/mcp-handler.d.ts +0 -28
- package/dist/cjs/client/charts/chartComponentRegistry.d.ts +1 -9
- package/dist/cjs/client/charts/chartConfigRegistry.d.ts +5 -1
- package/dist/cjs/client/charts/chartPlugin.d.ts +1 -2
- package/dist/cjs/client/charts/chartRegistry.d.ts +73 -0
- package/dist/cjs/client/components/AIAssistant/index.d.ts +2 -2
- package/dist/cjs/client/components/AnalysisBuilder/utils/filterUtils.d.ts +4 -10
- package/dist/cjs/client/components/charts/ActivityGridChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/AreaChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/BarChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/BoxPlotChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/BubbleChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/CandlestickChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/DataTable.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/FunnelChart.config.d.ts +5 -0
- package/dist/cjs/client/components/charts/GaugeChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/HeatMapChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/KpiDelta.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/KpiNumber.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/KpiText.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/LineChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/MarkdownChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/MeasureProfileChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/PieChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/RadarChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/RadialBarChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/SankeyChart.config.d.ts +5 -0
- package/dist/cjs/client/components/charts/ScatterChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/SunburstChart.config.d.ts +5 -0
- package/dist/cjs/client/components/charts/TreeMapChart.config.d.ts +6 -1
- package/dist/cjs/client/components/charts/WaterfallChart.config.d.ts +6 -1
- package/dist/cjs/client/components/shared/utils.d.ts +2 -1
- package/dist/cjs/client/hooks/analysisQueryExecutionModes.d.ts +1 -1
- package/dist/cjs/client/hooks/useAnalysisEffects.d.ts +33 -0
- package/dist/{client/hooks/useAnalysisQueryExecution.d.ts → cjs/client/hooks/useAnalysisQuery.d.ts} +3 -3
- package/dist/cjs/client/hooks/useAnalysisState.d.ts +165 -0
- package/dist/cjs/client/icons/registry.d.ts +0 -6
- package/dist/cjs/client/icons/types.d.ts +5 -0
- package/dist/cjs/client/shared/filters/filterOperations.d.ts +95 -0
- package/dist/cjs/client/shared/filters/index.d.ts +10 -0
- package/dist/cjs/client/shared/filters/operators.d.ts +23 -0
- package/dist/cjs/client/shared/index.d.ts +3 -2
- package/dist/cjs/client/shared/types.d.ts +3 -10
- package/dist/cjs/client/shared/utils.d.ts +1 -59
- package/dist/cjs/client/utils/filterUtils.d.ts +2 -9
- package/dist/cjs/server/logical-plan/logical-plan-builder.d.ts +0 -5
- package/dist/cjs/server/logical-plan/schema-builder.d.ts +19 -0
- package/dist/client/charts/chartComponentRegistry.d.ts +1 -9
- package/dist/client/charts/chartConfigRegistry.d.ts +5 -1
- package/dist/client/charts/chartPlugin.d.ts +1 -2
- package/dist/client/charts/chartRegistry.d.ts +73 -0
- package/dist/client/charts.js +3 -3
- package/dist/client/chunks/{DashboardEditModal-okVfH8ZK.js → DashboardEditModal-Cs1ig1_V.js} +1522 -1121
- package/dist/client/chunks/DashboardEditModal-Cs1ig1_V.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-DB88FojM.js → analysis-builder-B64yaeDe.js} +1609 -1878
- package/dist/client/chunks/analysis-builder-B64yaeDe.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-BVK4TYfR.js → analysis-builder-shared-CD0n2Nb8.js} +1545 -1355
- package/dist/client/chunks/analysis-builder-shared-CD0n2Nb8.js.map +1 -0
- package/dist/client/chunks/{chart-config-activity-grid-D_UX4NHC.js → chart-config-activity-grid-BU_bkvER.js} +1 -11
- package/dist/client/chunks/chart-config-activity-grid-BU_bkvER.js.map +1 -0
- package/dist/client/chunks/{chart-config-area-BNigHUy8.js → chart-config-area-DxwIZ4Uf.js} +1 -5
- package/dist/client/chunks/{chart-config-area-BNigHUy8.js.map → chart-config-area-DxwIZ4Uf.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bar-DSO_LRTx.js → chart-config-bar-Cc8GY9aQ.js} +5 -9
- package/dist/client/chunks/chart-config-bar-Cc8GY9aQ.js.map +1 -0
- package/dist/client/chunks/{chart-config-box-plot-oW8axV2q.js → chart-config-box-plot-Bs8ovYvV.js} +3 -8
- package/dist/client/chunks/chart-config-box-plot-Bs8ovYvV.js.map +1 -0
- package/dist/client/chunks/{chart-config-bubble-gIoqVyjZ.js → chart-config-bubble-BfgY7pt8.js} +1 -11
- package/dist/client/chunks/chart-config-bubble-BfgY7pt8.js.map +1 -0
- package/dist/client/chunks/{chart-config-candlestick-N6DchAA3.js → chart-config-candlestick-jaeNNEtC.js} +1 -11
- package/dist/client/chunks/chart-config-candlestick-jaeNNEtC.js.map +1 -0
- package/dist/client/chunks/{chart-config-data-table-d7VBY-y_.js → chart-config-data-table-CRk0C0rW.js} +1 -4
- package/dist/client/chunks/chart-config-data-table-CRk0C0rW.js.map +1 -0
- package/dist/client/chunks/{chart-config-funnel-DEYMcxsD.js → chart-config-funnel-boT_LNfl.js} +1 -4
- package/dist/client/chunks/chart-config-funnel-boT_LNfl.js.map +1 -0
- package/dist/client/chunks/{chart-config-gauge-Dq-_H9UN.js → chart-config-gauge-C5uJEr97.js} +3 -8
- package/dist/client/chunks/chart-config-gauge-C5uJEr97.js.map +1 -0
- package/dist/client/chunks/{chart-config-heat-map-CfRnRNcw.js → chart-config-heat-map-CCarP44-.js} +1 -11
- package/dist/client/chunks/chart-config-heat-map-CCarP44-.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-delta-DSQbvqu_.js → chart-config-kpi-delta-DYopvwyG.js} +3 -8
- package/dist/client/chunks/chart-config-kpi-delta-DYopvwyG.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-number-EFSWY1We.js → chart-config-kpi-number-BhMdoArB.js} +3 -8
- package/dist/client/chunks/chart-config-kpi-number-BhMdoArB.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-text-KM3V5X2u.js → chart-config-kpi-text-DE6Zdi53.js} +3 -8
- package/dist/client/chunks/chart-config-kpi-text-DE6Zdi53.js.map +1 -0
- package/dist/client/chunks/{chart-config-line-D6jG8PCH.js → chart-config-line-CBfM0Rds.js} +6 -10
- package/dist/client/chunks/chart-config-line-CBfM0Rds.js.map +1 -0
- package/dist/client/chunks/{chart-config-markdown-BtRIe8JN.js → chart-config-markdown-BCDyBI8K.js} +1 -4
- package/dist/client/chunks/chart-config-markdown-BCDyBI8K.js.map +1 -0
- package/dist/client/chunks/{chart-config-measure-profile-DxRGa-zf.js → chart-config-measure-profile-BgQIH1u2.js} +1 -8
- package/dist/client/chunks/chart-config-measure-profile-BgQIH1u2.js.map +1 -0
- package/dist/client/chunks/{chart-config-pie-BhzW-fdn.js → chart-config-pie-ChfFz6DV.js} +5 -9
- package/dist/client/chunks/chart-config-pie-ChfFz6DV.js.map +1 -0
- package/dist/client/chunks/{chart-config-radar-D7REP1q_.js → chart-config-radar-BlAIGnww.js} +5 -9
- package/dist/client/chunks/chart-config-radar-BlAIGnww.js.map +1 -0
- package/dist/client/chunks/{chart-config-radial-bar-Byx6qOPU.js → chart-config-radial-bar-VFerwbCO.js} +5 -9
- package/dist/client/chunks/chart-config-radial-bar-VFerwbCO.js.map +1 -0
- package/dist/client/chunks/{chart-config-sankey-BTnWA7EW.js → chart-config-sankey-BhrDxIgj.js} +1 -4
- package/dist/client/chunks/chart-config-sankey-BhrDxIgj.js.map +1 -0
- package/dist/client/chunks/{chart-config-scatter-DSYTjwRb.js → chart-config-scatter-q_olh54e.js} +1 -11
- package/dist/client/chunks/chart-config-scatter-q_olh54e.js.map +1 -0
- package/dist/client/chunks/{chart-config-sunburst-Bwjtdf7X.js → chart-config-sunburst-BOmkOnKn.js} +1 -4
- package/dist/client/chunks/chart-config-sunburst-BOmkOnKn.js.map +1 -0
- package/dist/client/chunks/{chart-config-tree-map-DVrvf3yQ.js → chart-config-tree-map-BjX88YBY.js} +5 -9
- package/dist/client/chunks/chart-config-tree-map-BjX88YBY.js.map +1 -0
- package/dist/client/chunks/{chart-config-waterfall-DmFeQdIk.js → chart-config-waterfall-QsWXVSoF.js} +3 -8
- package/dist/client/chunks/chart-config-waterfall-QsWXVSoF.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-CKauQXme.js → chart-data-table-D4g5_jfF.js} +1277 -1094
- package/dist/client/chunks/chart-data-table-D4g5_jfF.js.map +1 -0
- package/dist/client/chunks/{chart-kpi-delta-Dn-jjO-2.js → chart-kpi-delta-BvWOt8-D.js} +2 -2
- package/dist/client/chunks/{chart-kpi-delta-Dn-jjO-2.js.map → chart-kpi-delta-BvWOt8-D.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-P_WBiO5S.js → chart-kpi-number-xgZmMiQY.js} +3 -3
- package/dist/client/chunks/{chart-kpi-number-P_WBiO5S.js.map → chart-kpi-number-xgZmMiQY.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-C-Y4eb5H.js → chart-kpi-text-ZO3eFi7t.js} +2 -2
- package/dist/client/chunks/{chart-kpi-text-C-Y4eb5H.js.map → chart-kpi-text-ZO3eFi7t.js.map} +1 -1
- package/dist/client/chunks/{charts-loader-DdTeCeNo.js → charts-loader-B0DOQMFH.js} +6 -6
- package/dist/client/chunks/{charts-loader-DdTeCeNo.js.map → charts-loader-B0DOQMFH.js.map} +1 -1
- package/dist/client/chunks/{schema-visualization-Cb_E9_Gd.js → schema-visualization-DJPTktM6.js} +2 -2
- package/dist/client/chunks/{schema-visualization-Cb_E9_Gd.js.map → schema-visualization-DJPTktM6.js.map} +1 -1
- package/dist/client/chunks/{useDirtyStateTracking-MbpxH_v6.js → useDirtyStateTracking-BT6zqCFl.js} +250 -591
- package/dist/client/chunks/useDirtyStateTracking-BT6zqCFl.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-evnZkjCY.js → useExplainAI-Dq_meKNN.js} +4 -4
- package/dist/client/chunks/{useExplainAI-evnZkjCY.js.map → useExplainAI-Dq_meKNN.js.map} +1 -1
- package/dist/client/chunks/{utils-3P6z1vz5.js → utils-Cq-j5E5I.js} +2 -2
- package/dist/client/chunks/{utils-3P6z1vz5.js.map → utils-Cq-j5E5I.js.map} +1 -1
- package/dist/client/chunks/{vendor-DSpR0IW6.js → vendor-D4jADu8t.js} +2 -2
- package/dist/client/chunks/{vendor-DSpR0IW6.js.map → vendor-D4jADu8t.js.map} +1 -1
- package/dist/client/components/AIAssistant/index.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/utils/filterUtils.d.ts +4 -10
- package/dist/client/components/charts/ActivityGridChart.config.d.ts +6 -1
- package/dist/client/components/charts/AreaChart.config.d.ts +6 -1
- package/dist/client/components/charts/BarChart.config.d.ts +6 -1
- package/dist/client/components/charts/BoxPlotChart.config.d.ts +6 -1
- package/dist/client/components/charts/BubbleChart.config.d.ts +6 -1
- package/dist/client/components/charts/CandlestickChart.config.d.ts +6 -1
- package/dist/client/components/charts/DataTable.config.d.ts +6 -1
- package/dist/client/components/charts/FunnelChart.config.d.ts +5 -0
- package/dist/client/components/charts/GaugeChart.config.d.ts +6 -1
- package/dist/client/components/charts/HeatMapChart.config.d.ts +6 -1
- package/dist/client/components/charts/KpiDelta.config.d.ts +6 -1
- package/dist/client/components/charts/KpiNumber.config.d.ts +6 -1
- package/dist/client/components/charts/KpiText.config.d.ts +6 -1
- package/dist/client/components/charts/LineChart.config.d.ts +6 -1
- package/dist/client/components/charts/MarkdownChart.config.d.ts +6 -1
- package/dist/client/components/charts/MeasureProfileChart.config.d.ts +6 -1
- package/dist/client/components/charts/PieChart.config.d.ts +6 -1
- package/dist/client/components/charts/RadarChart.config.d.ts +6 -1
- package/dist/client/components/charts/RadialBarChart.config.d.ts +6 -1
- package/dist/client/components/charts/SankeyChart.config.d.ts +5 -0
- package/dist/client/components/charts/ScatterChart.config.d.ts +6 -1
- package/dist/client/components/charts/SunburstChart.config.d.ts +5 -0
- package/dist/client/components/charts/TreeMapChart.config.d.ts +6 -1
- package/dist/client/components/charts/WaterfallChart.config.d.ts +6 -1
- package/dist/client/components/shared/utils.d.ts +2 -1
- package/dist/client/components.js +3 -3
- package/dist/client/hooks/analysisQueryExecutionModes.d.ts +1 -1
- package/dist/client/hooks/useAnalysisEffects.d.ts +33 -0
- package/dist/{cjs/client/hooks/useAnalysisQueryExecution.d.ts → client/hooks/useAnalysisQuery.d.ts} +3 -3
- package/dist/client/hooks/useAnalysisState.d.ts +165 -0
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons/registry.d.ts +0 -6
- package/dist/client/icons/types.d.ts +5 -0
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +17 -17
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/filters/filterOperations.d.ts +95 -0
- package/dist/client/shared/filters/index.d.ts +10 -0
- package/dist/client/shared/filters/operators.d.ts +23 -0
- package/dist/client/shared/index.d.ts +3 -2
- package/dist/client/shared/types.d.ts +3 -10
- package/dist/client/shared/utils.d.ts +1 -59
- package/dist/client/utils/filterUtils.d.ts +2 -9
- package/dist/client/utils.js +3 -3
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +34 -34
- package/dist/server/chartConfigHelpers-CcvqrIWF.js +72 -0
- package/dist/server/chartConfigHelpers-DHQB-_v5.cjs +1 -0
- package/dist/server/index.cjs +68 -68
- package/dist/server/index.js +3899 -3823
- package/dist/server/logical-plan/logical-plan-builder.d.ts +0 -5
- package/dist/server/logical-plan/schema-builder.d.ts +19 -0
- package/dist/server/{openai-D-6l1Y8h.cjs → openai-B4kAJTSD.cjs} +1 -1
- package/dist/server/{openai-DTSTMiXL.cjs → openai-Cdf2wWZA.cjs} +1 -1
- package/dist/server/{openai-CmVRIbUg.js → openai-CmMzrs1Y.js} +1 -1
- package/dist/server/{openai-CtXqeznO.js → openai-DhzGY9R4.js} +1 -1
- package/package.json +13 -3
- package/dist/adapters/handler-OwxSBJH8.cjs +0 -25
- package/dist/adapters/hono/mcp-handler.d.ts +0 -37
- package/dist/adapters/locale-ZLUUNUxr.cjs +0 -166
- package/dist/adapters/mcp-transport-B7ddET3M.cjs +0 -40
- package/dist/adapters/mcp-transport-Dfuj4j4q.js +0 -591
- package/dist/cjs/adapters/hono/mcp-handler.d.ts +0 -37
- package/dist/cjs/client/hooks/useAnalysisAI.d.ts +0 -56
- package/dist/cjs/client/hooks/useAnalysisChartDefaults.d.ts +0 -35
- package/dist/cjs/client/hooks/useAnalysisCombinedFields.d.ts +0 -18
- package/dist/cjs/client/hooks/useAnalysisInitialization.d.ts +0 -25
- package/dist/cjs/client/hooks/useAnalysisQueryBuilder.d.ts +0 -32
- package/dist/cjs/client/hooks/useAnalysisShare.d.ts +0 -18
- package/dist/cjs/client/hooks/useAnalysisUIState.d.ts +0 -24
- package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +0 -1
- package/dist/client/chunks/analysis-builder-DB88FojM.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +0 -1
- package/dist/client/chunks/chart-config-activity-grid-D_UX4NHC.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +0 -1
- package/dist/client/chunks/chart-config-bubble-gIoqVyjZ.js.map +0 -1
- package/dist/client/chunks/chart-config-candlestick-N6DchAA3.js.map +0 -1
- package/dist/client/chunks/chart-config-data-table-d7VBY-y_.js.map +0 -1
- package/dist/client/chunks/chart-config-funnel-DEYMcxsD.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +0 -1
- package/dist/client/chunks/chart-config-heat-map-CfRnRNcw.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +0 -1
- package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +0 -1
- package/dist/client/chunks/chart-config-markdown-BtRIe8JN.js.map +0 -1
- package/dist/client/chunks/chart-config-measure-profile-DxRGa-zf.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +0 -1
- package/dist/client/chunks/chart-config-sankey-BTnWA7EW.js.map +0 -1
- package/dist/client/chunks/chart-config-scatter-DSYTjwRb.js.map +0 -1
- package/dist/client/chunks/chart-config-sunburst-Bwjtdf7X.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +0 -1
- package/dist/client/chunks/chart-data-table-CKauQXme.js.map +0 -1
- package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +0 -1
- package/dist/client/hooks/useAnalysisAI.d.ts +0 -56
- package/dist/client/hooks/useAnalysisChartDefaults.d.ts +0 -35
- package/dist/client/hooks/useAnalysisCombinedFields.d.ts +0 -18
- package/dist/client/hooks/useAnalysisInitialization.d.ts +0 -25
- package/dist/client/hooks/useAnalysisQueryBuilder.d.ts +0 -32
- package/dist/client/hooks/useAnalysisShare.d.ts +0 -18
- package/dist/client/hooks/useAnalysisUIState.d.ts +0 -24
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { SemanticLayerCompiler } from '../../server/compiler.js';
|
|
2
|
+
import { MCPOptions } from '../utils.js';
|
|
3
|
+
import { HttpPort, McpHttpPort } from './http-port.js';
|
|
4
|
+
import { BaseSecurityContextThunk } from './security-context.js';
|
|
5
|
+
import { RestHandlers } from './rest-handlers.js';
|
|
6
|
+
export type { BaseSecurityContextThunk } from './security-context.js';
|
|
7
|
+
export interface CubeHttpHandlerOptions {
|
|
8
|
+
/** The semantic layer the handlers validate and execute against. */
|
|
9
|
+
semanticLayer: SemanticLayerCompiler;
|
|
10
|
+
/** Called in the REST `/load` catch-all 500 path with the thrown error (e.g. for logging). */
|
|
11
|
+
onError: (error: unknown) => void;
|
|
12
|
+
/**
|
|
13
|
+
* MCP endpoint config. Resolved once into the MCP POST handler. When omitted,
|
|
14
|
+
* MCP defaults are used; the adapter decides whether to route the MCP path.
|
|
15
|
+
*/
|
|
16
|
+
mcp?: MCPOptions;
|
|
17
|
+
}
|
|
18
|
+
export interface CubeHttpHandler extends RestHandlers {
|
|
19
|
+
handleLoadGet<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
20
|
+
handleLoadPost<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
21
|
+
handleMcpPost<TRes>(port: McpHttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build all HTTP handlers once. Each REST entry point owns its own request
|
|
25
|
+
* extraction, then funnels into a shared validate/execute/format tail.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createCubeHttpHandler(options: CubeHttpHandlerOptions): CubeHttpHandler;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework port for the HTTP handler core.
|
|
3
|
+
*
|
|
4
|
+
* Captures the minimal transport surface a handler needs, generically over the
|
|
5
|
+
* framework's response type `TRes` so the same core works for adapters that
|
|
6
|
+
* mutate a response object (Express) and adapters that return a `Response`
|
|
7
|
+
* (Hono/Next.js). Implementations are constructed per request by each adapter.
|
|
8
|
+
*
|
|
9
|
+
* This interface is public — third parties implement it to build adapters for
|
|
10
|
+
* other frameworks. Add new capabilities as optional members or via a separate
|
|
11
|
+
* extension interface; a new required member is a breaking change.
|
|
12
|
+
*/
|
|
13
|
+
export interface HttpPort<TRes> {
|
|
14
|
+
/** Read a request header by (case-insensitive) name. Synchronous. */
|
|
15
|
+
getHeader(name: string): string | undefined;
|
|
16
|
+
/** Resolve the parsed request body. Async (Express resolves `req.body`; others await `.json()`). */
|
|
17
|
+
getBody(): Promise<unknown>;
|
|
18
|
+
/** Read a raw query-string value by name (used by GET). */
|
|
19
|
+
getQueryParam(name: string): string | undefined;
|
|
20
|
+
/** Send a response with the given status and JSON body; returns the framework's response value. */
|
|
21
|
+
send(status: number, body: unknown): TRes;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extension of {@link HttpPort} for the MCP POST handler, which needs to set
|
|
25
|
+
* response headers (WWW-Authenticate, MCP-Session-Id), emit a single-event SSE
|
|
26
|
+
* response, and send an empty-body acknowledgement (202 for notifications).
|
|
27
|
+
*
|
|
28
|
+
* Kept separate from the minimal REST port so third-party adapters only
|
|
29
|
+
* implement these when they wire up MCP. New required members on this interface
|
|
30
|
+
* are still a breaking change for MCP-capable adapters.
|
|
31
|
+
*/
|
|
32
|
+
export interface McpHttpPort<TRes> extends HttpPort<TRes> {
|
|
33
|
+
/** Set a response header. Must be called before `send`/`sendSse`/`sendEmpty`. */
|
|
34
|
+
setHeader(name: string, value: string): void;
|
|
35
|
+
/** Send a single-event SSE response (status 200): write the pre-serialized body, then end. */
|
|
36
|
+
sendSse(status: number, body: string): TRes;
|
|
37
|
+
/** Send an empty-body response (no JSON), e.g. a 202 notification acknowledgement. */
|
|
38
|
+
sendEmpty(status: number): TRes;
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core-F1pCQPde.cjs");exports.createCubeHttpHandler=e.t,exports.resolveSecurityContext=e.n,exports.withLocaleFromHeaders=e.r;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public entry point for the framework-agnostic HTTP handler core.
|
|
3
|
+
*
|
|
4
|
+
* Third parties can build adapters for other frameworks by implementing
|
|
5
|
+
* {@link HttpPort} (REST) / {@link McpHttpPort} (MCP) and driving them with
|
|
6
|
+
* {@link createCubeHttpHandler}.
|
|
7
|
+
*/
|
|
8
|
+
export type { HttpPort, McpHttpPort } from './http-port.js';
|
|
9
|
+
export { withLocaleFromHeaders, resolveSecurityContext, type HeaderReader, type BaseSecurityContextThunk } from './security-context.js';
|
|
10
|
+
export { createCubeHttpHandler, type CubeHttpHandler, type CubeHttpHandlerOptions } from './cube-http-handler.js';
|
|
11
|
+
export type { RestHandlers } from './rest-handlers.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SemanticLayerCompiler } from '../../server/compiler.js';
|
|
2
|
+
import { MCPOptions } from '../utils.js';
|
|
3
|
+
import { McpHttpPort } from './http-port.js';
|
|
4
|
+
import { BaseSecurityContextThunk } from './security-context.js';
|
|
5
|
+
export interface McpPostHandler {
|
|
6
|
+
handleMcpPost<TRes>(port: McpHttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Build the MCP POST handler once. Resolves the static resources/prompts/
|
|
10
|
+
* instructions and app config from {@link MCPOptions} at setup time, mirroring
|
|
11
|
+
* the per-request plumbing the adapters used to do inline.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createMcpPostHandler(semanticLayer: SemanticLayerCompiler, mcp: MCPOptions): McpPostHandler;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SemanticLayerCompiler } from '../../server/compiler.js';
|
|
2
|
+
import { HttpPort } from './http-port.js';
|
|
3
|
+
import { BaseSecurityContextThunk } from './security-context.js';
|
|
4
|
+
/** REST handlers keyed by endpoint; each closes over the shared semantic layer. */
|
|
5
|
+
export interface RestHandlers {
|
|
6
|
+
handleMetaGet<TRes>(port: HttpPort<TRes>): TRes;
|
|
7
|
+
handleSqlGet<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
8
|
+
handleSqlPost<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
9
|
+
handleDryRunGet<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
10
|
+
handleDryRunPost<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
11
|
+
handleBatchPost<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
12
|
+
handleExplainPost<TRes>(port: HttpPort<TRes>, getBaseSecurityContext: BaseSecurityContextThunk): Promise<TRes>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createRestHandlers(semanticLayer: SemanticLayerCompiler): RestHandlers;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SecurityContext } from '../../server/index.js';
|
|
2
|
+
/** Returns the base (pre-locale) security context for a request. */
|
|
3
|
+
export type BaseSecurityContextThunk = () => SecurityContext | Promise<SecurityContext>;
|
|
4
|
+
/** Reads a request header by (case-insensitive) name. */
|
|
5
|
+
export type HeaderReader = (name: string) => string | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* Merge the request locale (from the `X-DC-Locale` header) into a base security
|
|
8
|
+
* context. Replaces the per-adapter `extractSecurityContextWithLocale` wrappers.
|
|
9
|
+
*/
|
|
10
|
+
export declare function withLocaleFromHeaders(base: SecurityContext, readHeader: HeaderReader): SecurityContext;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the base security context and merge the request locale in one step —
|
|
13
|
+
* the standard preamble for every authenticated core handler.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveSecurityContext(getBaseSecurityContext: BaseSecurityContextThunk, readHeader: HeaderReader): Promise<SecurityContext>;
|
|
16
|
+
/** Strip CR/LF from a thrown value for single-line logging (log-injection guard). */
|
|
17
|
+
export declare function sanitizeForLog(error: unknown): string;
|
|
@@ -0,0 +1,244 @@
|
|
|
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 { C as o, S as s, _ as c, a as l, b as u, c as d, g as f, h as p, i as m, l as h, m as g, o as _, r as v, u as y, v as b, x, y as S } from "./mcp-transport-Bw_zqky2.js";
|
|
3
|
+
//#region src/adapters/locale.ts
|
|
4
|
+
var C = "x-dc-locale";
|
|
5
|
+
function w(e) {
|
|
6
|
+
if (!e) return;
|
|
7
|
+
let t = (Array.isArray(e) ? e[0] : e).split(",")[0]?.trim();
|
|
8
|
+
if (t && /^[A-Za-z0-9-]{2,35}$/.test(t)) return t;
|
|
9
|
+
}
|
|
10
|
+
function T(e) {
|
|
11
|
+
return w(e(C));
|
|
12
|
+
}
|
|
13
|
+
function E(e, t) {
|
|
14
|
+
let n = e && typeof e == "object" ? e : {}, r = typeof n.locale == "string" ? n.locale : void 0, i = t ?? r ?? "en-GB";
|
|
15
|
+
return r === i ? n : {
|
|
16
|
+
...n,
|
|
17
|
+
locale: i
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function D(e) {
|
|
21
|
+
let t = Array.isArray(e) ? [...e] : (e ?? "").split(",").map((e) => e.trim()).filter(Boolean);
|
|
22
|
+
return t.some((e) => e.toLowerCase() === "x-dc-locale") || t.push("X-DC-Locale"), t;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/adapters/core/security-context.ts
|
|
26
|
+
function O(e, t) {
|
|
27
|
+
return E(e, T(t));
|
|
28
|
+
}
|
|
29
|
+
async function k(e, t) {
|
|
30
|
+
return O(await e(), t);
|
|
31
|
+
}
|
|
32
|
+
function A(e) {
|
|
33
|
+
return String(e).replace(/\n|\r/g, "");
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/adapters/core/rest-handlers.ts
|
|
37
|
+
function j(i) {
|
|
38
|
+
async function o(e, n, a) {
|
|
39
|
+
let o = i.validateQuery(e);
|
|
40
|
+
if (!o.isValid) return a.send(400, t(`Query validation failed: ${o.errors.join(", ")}`, 400));
|
|
41
|
+
let s = e.measures?.[0] || e.dimensions?.[0];
|
|
42
|
+
if (!s) return a.send(400, t("No measures or dimensions specified", 400));
|
|
43
|
+
let c = s.split(".")[0], l = await i.generateSQL(c, e, n);
|
|
44
|
+
return a.send(200, r(e, l));
|
|
45
|
+
}
|
|
46
|
+
function s(n) {
|
|
47
|
+
try {
|
|
48
|
+
return n.send(200, e(i.getMetadata()));
|
|
49
|
+
} catch (e) {
|
|
50
|
+
return console.error("Metadata error:", e), n.send(500, t(e instanceof Error ? e.message : "Failed to fetch metadata", 500));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function c(e, n) {
|
|
54
|
+
try {
|
|
55
|
+
let t = await e.getBody();
|
|
56
|
+
return await o(t?.query || t, await k(n, (t) => e.getHeader(t)), e);
|
|
57
|
+
} catch (n) {
|
|
58
|
+
return console.error("SQL generation error:", A(n)), e.send(500, t(n instanceof Error ? n.message : "SQL generation failed", 500));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function l(e, n) {
|
|
62
|
+
try {
|
|
63
|
+
let r = e.getQueryParam("query");
|
|
64
|
+
if (!r) return e.send(400, t("Query parameter is required", 400));
|
|
65
|
+
let i;
|
|
66
|
+
try {
|
|
67
|
+
i = JSON.parse(r);
|
|
68
|
+
} catch {
|
|
69
|
+
return e.send(400, t("Invalid JSON in query parameter", 400));
|
|
70
|
+
}
|
|
71
|
+
let a = await k(n, (t) => e.getHeader(t));
|
|
72
|
+
return await o(i, a, e);
|
|
73
|
+
} catch (n) {
|
|
74
|
+
return console.error("SQL generation error:", A(n)), e.send(500, t(n instanceof Error ? n.message : "SQL generation failed", 500));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function u(e, t) {
|
|
78
|
+
try {
|
|
79
|
+
let n = await e.getBody(), r = await a(n?.query || n, await k(t, (t) => e.getHeader(t)), i);
|
|
80
|
+
return e.send(200, r);
|
|
81
|
+
} catch (t) {
|
|
82
|
+
return console.error("Dry-run error:", t), e.send(400, {
|
|
83
|
+
error: t instanceof Error ? t.message : "Dry-run validation failed",
|
|
84
|
+
valid: !1
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function d(e, t) {
|
|
89
|
+
try {
|
|
90
|
+
let n = e.getQueryParam("query");
|
|
91
|
+
if (!n) return e.send(400, {
|
|
92
|
+
error: "Query parameter is required",
|
|
93
|
+
valid: !1
|
|
94
|
+
});
|
|
95
|
+
let r = await a(JSON.parse(n), await k(t, (t) => e.getHeader(t)), i);
|
|
96
|
+
return e.send(200, r);
|
|
97
|
+
} catch (t) {
|
|
98
|
+
return console.error("Dry-run error:", t), e.send(400, {
|
|
99
|
+
error: t instanceof Error ? t.message : "Dry-run validation failed",
|
|
100
|
+
valid: !1
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function f(e, r) {
|
|
105
|
+
try {
|
|
106
|
+
let a = (await e.getBody())?.queries;
|
|
107
|
+
if (!a || !Array.isArray(a)) return e.send(400, t("Request body must contain a \"queries\" array", 400));
|
|
108
|
+
if (a.length === 0) return e.send(400, t("Queries array cannot be empty", 400));
|
|
109
|
+
let o = await n(a, await k(r, (t) => e.getHeader(t)), i, { skipCache: e.getHeader("x-cache-control") === "no-cache" });
|
|
110
|
+
return e.send(200, o);
|
|
111
|
+
} catch (n) {
|
|
112
|
+
return console.error("Batch execution error:", n), e.send(500, t(n instanceof Error ? n.message : "Batch execution failed", 500));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function p(e, t) {
|
|
116
|
+
try {
|
|
117
|
+
let n = await e.getBody(), r = n?.query || n, a = n?.options || {}, o = await k(t, (t) => e.getHeader(t)), s = i.validateQuery(r);
|
|
118
|
+
if (!s.isValid) return e.send(400, { error: `Query validation failed: ${s.errors.join(", ")}` });
|
|
119
|
+
let c = await i.explainQuery(r, o, a);
|
|
120
|
+
return e.send(200, c);
|
|
121
|
+
} catch (t) {
|
|
122
|
+
return console.error("Explain error:", t), e.send(500, { error: t instanceof Error ? t.message : "Explain query failed" });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
handleMetaGet: s,
|
|
127
|
+
handleSqlGet: l,
|
|
128
|
+
handleSqlPost: c,
|
|
129
|
+
handleDryRunGet: d,
|
|
130
|
+
handleDryRunPost: u,
|
|
131
|
+
handleBatchPost: f,
|
|
132
|
+
handleExplainPost: p
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//#endregion
|
|
136
|
+
//#region src/adapters/core/mcp-handler.ts
|
|
137
|
+
function M(e, t) {
|
|
138
|
+
let n = e?.code ?? -32603, r = e?.data, i = e.message || "MCP request failed";
|
|
139
|
+
return m(t ?? null, n, i, r);
|
|
140
|
+
}
|
|
141
|
+
function N(e, t) {
|
|
142
|
+
let n = !!t.app, r = typeof t.app == "object" ? t.app : void 0, i;
|
|
143
|
+
function a() {
|
|
144
|
+
return i ||= {
|
|
145
|
+
resources: _(e, t.resources),
|
|
146
|
+
prompts: S(t.prompts),
|
|
147
|
+
instructions: b(t.instructions)
|
|
148
|
+
}, i;
|
|
149
|
+
}
|
|
150
|
+
async function C(i, _) {
|
|
151
|
+
if (t.resourceMetadataUrl && !y(i.getHeader("authorization"))) return i.setHeader("WWW-Authenticate", d(t.resourceMetadataUrl)), i.send(401, { error: "Bearer token required" });
|
|
152
|
+
let b = s(i.getHeader("origin"), t.allowedOrigins ? { allowedOrigins: t.allowedOrigins } : {});
|
|
153
|
+
if (!b.valid) return i.send(403, m(null, -32600, b.reason));
|
|
154
|
+
let S = i.getHeader("accept");
|
|
155
|
+
if (!x(S)) return i.send(400, m(null, -32600, "Accept header must include both application/json and text/event-stream"));
|
|
156
|
+
let C = p({ "mcp-protocol-version": i.getHeader("mcp-protocol-version") });
|
|
157
|
+
if (!C.ok) return i.send(426, {
|
|
158
|
+
error: "Unsupported MCP protocol version",
|
|
159
|
+
supported: C.supported
|
|
160
|
+
});
|
|
161
|
+
let w = f(await i.getBody());
|
|
162
|
+
if (!w) return i.send(400, m(null, -32600, "Invalid JSON-RPC 2.0 request"));
|
|
163
|
+
let T = o(S), E = w.method === "initialize", { resources: D, prompts: O, instructions: j } = a();
|
|
164
|
+
try {
|
|
165
|
+
let a = await h(w.method, w.params, {
|
|
166
|
+
semanticLayer: e,
|
|
167
|
+
extractSecurityContext: () => k(_, (e) => i.getHeader(e)),
|
|
168
|
+
rawRequest: void 0,
|
|
169
|
+
rawResponse: void 0,
|
|
170
|
+
negotiatedProtocol: C.negotiated,
|
|
171
|
+
resources: D,
|
|
172
|
+
prompts: O,
|
|
173
|
+
instructions: j,
|
|
174
|
+
appEnabled: n,
|
|
175
|
+
appConfig: r,
|
|
176
|
+
serverName: t.serverName
|
|
177
|
+
});
|
|
178
|
+
if (g(w)) return i.sendEmpty(202);
|
|
179
|
+
let o = E && a && typeof a == "object" && "sessionId" in a ? a.sessionId : void 0;
|
|
180
|
+
o && i.setHeader(v, o);
|
|
181
|
+
let s = l(w.id ?? null, a);
|
|
182
|
+
if (T) {
|
|
183
|
+
let e = c();
|
|
184
|
+
return i.sendSse(200, `id: ${e}\n\n` + u(s, e));
|
|
185
|
+
}
|
|
186
|
+
return i.send(200, s);
|
|
187
|
+
} catch (e) {
|
|
188
|
+
if (g(w)) return console.error("MCP notification processing error:", A(e)), i.sendEmpty(202);
|
|
189
|
+
console.error("MCP RPC error:", A(e));
|
|
190
|
+
let t = M(e, w.id);
|
|
191
|
+
if (T) {
|
|
192
|
+
let e = c();
|
|
193
|
+
return i.sendSse(200, `id: ${e}\n\n` + u(t, e));
|
|
194
|
+
}
|
|
195
|
+
return i.send(200, t);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return { handleMcpPost: C };
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region src/adapters/core/cube-http-handler.ts
|
|
202
|
+
function P(e) {
|
|
203
|
+
let { semanticLayer: n, onError: r, mcp: a = {} } = e, o = j(n), { handleMcpPost: s } = N(n, a);
|
|
204
|
+
function c(e, n) {
|
|
205
|
+
return r(e), n.send(500, t(e instanceof Error ? e.message : "Query execution failed", 500));
|
|
206
|
+
}
|
|
207
|
+
async function l(e, r, a) {
|
|
208
|
+
let o = await k(a, (e) => r.getHeader(e)), s = n.validateQuery(e);
|
|
209
|
+
if (!s.isValid) return r.send(400, t(`Query validation failed: ${s.errors.join(", ")}`, 400));
|
|
210
|
+
let c = r.getHeader("x-cache-control") === "no-cache", l = await n.executeMultiCubeQuery(e, o, { skipCache: c });
|
|
211
|
+
return r.send(200, i(e, l, n));
|
|
212
|
+
}
|
|
213
|
+
async function u(e, t) {
|
|
214
|
+
try {
|
|
215
|
+
let n = await e.getBody();
|
|
216
|
+
return await l(n?.query || n, e, t);
|
|
217
|
+
} catch (t) {
|
|
218
|
+
return c(t, e);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async function d(e, n) {
|
|
222
|
+
try {
|
|
223
|
+
let r = e.getQueryParam("query");
|
|
224
|
+
if (!r) return e.send(400, t("Query parameter is required", 400));
|
|
225
|
+
let i;
|
|
226
|
+
try {
|
|
227
|
+
i = JSON.parse(r);
|
|
228
|
+
} catch {
|
|
229
|
+
return e.send(400, t("Invalid JSON in query parameter", 400));
|
|
230
|
+
}
|
|
231
|
+
return await l(i, e, n);
|
|
232
|
+
} catch (t) {
|
|
233
|
+
return c(t, e);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
handleLoadGet: d,
|
|
238
|
+
handleLoadPost: u,
|
|
239
|
+
handleMcpPost: s,
|
|
240
|
+
...o
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
//#endregion
|
|
244
|
+
export { T as a, D as i, k as n, E as o, O as r, P as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./utils-_whV4fXL.cjs"),t=require("./mcp-transport-CNIPoe1i.cjs");var n=`x-dc-locale`;function r(e){if(!e)return;let t=(Array.isArray(e)?e[0]:e).split(`,`)[0]?.trim();if(t&&/^[A-Za-z0-9-]{2,35}$/.test(t))return t}function i(e){return r(e(n))}function a(e,t){let n=e&&typeof e==`object`?e:{},r=typeof n.locale==`string`?n.locale:void 0,i=t??r??`en-GB`;return r===i?n:{...n,locale:i}}function o(e){let t=Array.isArray(e)?[...e]:(e??``).split(`,`).map(e=>e.trim()).filter(Boolean);return t.some(e=>e.toLowerCase()===`x-dc-locale`)||t.push(`X-DC-Locale`),t}function s(e,t){return a(e,i(t))}async function c(e,t){return s(await e(),t)}function l(e){return String(e).replace(/\n|\r/g,``)}function u(t){async function n(n,r,i){let a=t.validateQuery(n);if(!a.isValid)return i.send(400,e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=n.measures?.[0]||n.dimensions?.[0];if(!o)return i.send(400,e.i(`No measures or dimensions specified`,400));let s=o.split(`.`)[0],c=await t.generateSQL(s,n,r);return i.send(200,e.o(n,c))}function r(n){try{return n.send(200,e.a(t.getMetadata()))}catch(t){return console.error(`Metadata error:`,t),n.send(500,e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500))}}async function i(t,r){try{let e=await t.getBody();return await n(e?.query||e,await c(r,e=>t.getHeader(e)),t)}catch(n){return console.error(`SQL generation error:`,l(n)),t.send(500,e.i(n instanceof Error?n.message:`SQL generation failed`,500))}}async function a(t,r){try{let i=t.getQueryParam(`query`);if(!i)return t.send(400,e.i(`Query parameter is required`,400));let a;try{a=JSON.parse(i)}catch{return t.send(400,e.i(`Invalid JSON in query parameter`,400))}let o=await c(r,e=>t.getHeader(e));return await n(a,o,t)}catch(n){return console.error(`SQL generation error:`,l(n)),t.send(500,e.i(n instanceof Error?n.message:`SQL generation failed`,500))}}async function o(n,r){try{let i=await n.getBody(),a=await e.u(i?.query||i,await c(r,e=>n.getHeader(e)),t);return n.send(200,a)}catch(e){return console.error(`Dry-run error:`,e),n.send(400,{error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}async function s(n,r){try{let i=n.getQueryParam(`query`);if(!i)return n.send(400,{error:`Query parameter is required`,valid:!1});let a=await e.u(JSON.parse(i),await c(r,e=>n.getHeader(e)),t);return n.send(200,a)}catch(e){return console.error(`Dry-run error:`,e),n.send(400,{error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}async function u(n,r){try{let i=(await n.getBody())?.queries;if(!i||!Array.isArray(i))return n.send(400,e.i(`Request body must contain a "queries" array`,400));if(i.length===0)return n.send(400,e.i(`Queries array cannot be empty`,400));let a=await e.l(i,await c(r,e=>n.getHeader(e)),t,{skipCache:n.getHeader(`x-cache-control`)===`no-cache`});return n.send(200,a)}catch(t){return console.error(`Batch execution error:`,t),n.send(500,e.i(t instanceof Error?t.message:`Batch execution failed`,500))}}async function d(e,n){try{let r=await e.getBody(),i=r?.query||r,a=r?.options||{},o=await c(n,t=>e.getHeader(t)),s=t.validateQuery(i);if(!s.isValid)return e.send(400,{error:`Query validation failed: ${s.errors.join(`, `)}`});let l=await t.explainQuery(i,o,a);return e.send(200,l)}catch(t){return console.error(`Explain error:`,t),e.send(500,{error:t instanceof Error?t.message:`Explain query failed`})}}return{handleMetaGet:r,handleSqlGet:a,handleSqlPost:i,handleDryRunGet:s,handleDryRunPost:o,handleBatchPost:u,handleExplainPost:d}}function d(e,n){let r=e?.code??-32603,i=e?.data,a=e.message||`MCP request failed`;return t.i(n??null,r,a,i)}function f(e,n){let r=!!n.app,i=typeof n.app==`object`?n.app:void 0,a;function o(){return a||={resources:t.o(e,n.resources),prompts:t.y(n.prompts),instructions:t.v(n.instructions)},a}async function s(a,s){if(n.resourceMetadataUrl&&!t.u(a.getHeader(`authorization`)))return a.setHeader(`WWW-Authenticate`,t.c(n.resourceMetadataUrl)),a.send(401,{error:`Bearer token required`});let u=t.S(a.getHeader(`origin`),n.allowedOrigins?{allowedOrigins:n.allowedOrigins}:{});if(!u.valid)return a.send(403,t.i(null,-32600,u.reason));let f=a.getHeader(`accept`);if(!t.x(f))return a.send(400,t.i(null,-32600,`Accept header must include both application/json and text/event-stream`));let p=t.h({"mcp-protocol-version":a.getHeader(`mcp-protocol-version`)});if(!p.ok)return a.send(426,{error:`Unsupported MCP protocol version`,supported:p.supported});let m=t.g(await a.getBody());if(!m)return a.send(400,t.i(null,-32600,`Invalid JSON-RPC 2.0 request`));let h=t.C(f),g=m.method===`initialize`,{resources:_,prompts:v,instructions:y}=o();try{let o=await t.l(m.method,m.params,{semanticLayer:e,extractSecurityContext:()=>c(s,e=>a.getHeader(e)),rawRequest:void 0,rawResponse:void 0,negotiatedProtocol:p.negotiated,resources:_,prompts:v,instructions:y,appEnabled:r,appConfig:i,serverName:n.serverName});if(t.m(m))return a.sendEmpty(202);let l=g&&o&&typeof o==`object`&&`sessionId`in o?o.sessionId:void 0;l&&a.setHeader(t.r,l);let u=t.a(m.id??null,o);if(h){let e=t._();return a.sendSse(200,`id: ${e}\n\n`+t.b(u,e))}return a.send(200,u)}catch(e){if(t.m(m))return console.error(`MCP notification processing error:`,l(e)),a.sendEmpty(202);console.error(`MCP RPC error:`,l(e));let n=d(e,m.id);if(h){let e=t._();return a.sendSse(200,`id: ${e}\n\n`+t.b(n,e))}return a.send(200,n)}}return{handleMcpPost:s}}function p(t){let{semanticLayer:n,onError:r,mcp:i={}}=t,a=u(n),{handleMcpPost:o}=f(n,i);function s(t,n){return r(t),n.send(500,e.i(t instanceof Error?t.message:`Query execution failed`,500))}async function l(t,r,i){let a=await c(i,e=>r.getHeader(e)),o=n.validateQuery(t);if(!o.isValid)return r.send(400,e.i(`Query validation failed: ${o.errors.join(`, `)}`,400));let s=r.getHeader(`x-cache-control`)===`no-cache`,l=await n.executeMultiCubeQuery(t,a,{skipCache:s});return r.send(200,e.r(t,l,n))}async function d(e,t){try{let n=await e.getBody();return await l(n?.query||n,e,t)}catch(t){return s(t,e)}}async function p(t,n){try{let r=t.getQueryParam(`query`);if(!r)return t.send(400,e.i(`Query parameter is required`,400));let i;try{i=JSON.parse(r)}catch{return t.send(400,e.i(`Invalid JSON in query parameter`,400))}return await l(i,t,n)}catch(e){return s(e,t)}}return{handleLoadGet:p,handleLoadPost:d,handleMcpPost:o,...a}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return p}});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-_whV4fXL.cjs"),t=require("../
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils-_whV4fXL.cjs"),t=require("../compiler-DyyBaLry.cjs"),n=require("../mcp-transport-CNIPoe1i.cjs"),r=require("../core-F1pCQPde.cjs");let i=require("express");i=e.k(i,1);let a=require("cors");a=e.k(a,1);function o(e,t){return{getHeader:t=>e.get(t),getBody:async()=>e.body,getQueryParam:t=>e.query[t],send:(e,n)=>t.status(e).json(n),setHeader:(e,n)=>{t.setHeader(e,n)},sendEmpty:e=>t.status(e).end(),sendSse:(e,n)=>(t.status(e),t.setHeader(`Content-Type`,`text/event-stream`),t.setHeader(`Cache-Control`,`no-cache`),t.setHeader(`Connection`,`keep-alive`),t.write(n),t.end())}}function s(s){let{cubes:c,drizzle:l,schema:u,extractSecurityContext:d,engineType:f,cors:p,basePath:m=`/cubejs-api/v1`,jsonLimit:h=`10mb`,cache:g,mcp:_={enabled:!0},agent:v}=s;if(!c||c.length===0)throw Error(`At least one cube must be provided in the cubes array`);let y=(0,i.Router)();if(p){let e={...p,allowedHeaders:r.i(p.allowedHeaders)};y.use((0,a.default)(e))}y.use(i.default.json({limit:h})),y.use(i.default.urlencoded({extended:!0,limit:h}));let b=new t.t({drizzle:l,schema:u,engineType:f,cache:g,rlsSetup:s.rlsSetup});c.forEach(e=>{b.registerCube(e)});let x=r.t({semanticLayer:b,onError:e=>console.error(`Query execution error:`,e),mcp:_}),S=(e,t)=>()=>d(e,t);if(y.post(`${m}/load`,async(e,t)=>{await x.handleLoadPost(o(e,t),S(e,t))}),y.get(`${m}/load`,async(e,t)=>{await x.handleLoadGet(o(e,t),S(e,t))}),y.post(`${m}/batch`,async(e,t)=>{await x.handleBatchPost(o(e,t),S(e,t))}),y.get(`${m}/meta`,(e,t)=>{x.handleMetaGet(o(e,t))}),y.post(`${m}/sql`,async(e,t)=>{await x.handleSqlPost(o(e,t),S(e,t))}),y.get(`${m}/sql`,async(e,t)=>{await x.handleSqlGet(o(e,t),S(e,t))}),y.post(`${m}/dry-run`,async(e,t)=>{await x.handleDryRunPost(o(e,t),S(e,t))}),y.get(`${m}/dry-run`,async(e,t)=>{await x.handleDryRunGet(o(e,t),S(e,t))}),y.post(`${m}/explain`,async(e,t)=>{await x.handleExplainPost(o(e,t),S(e,t))}),v&&y.post(`${m}/agent/chat`,async(e,t)=>{try{let{handleAgentChat:n}=await Promise.resolve().then(()=>require("../handler-DRZb2ip6.cjs")),{message:i,sessionId:a,history:o}=e.body;if(!i||typeof i!=`string`)return t.status(400).json({error:`message is required and must be a string`});let s=(v.apiKey||``).trim();if(v.allowClientApiKey){let t=e.headers[`x-agent-api-key`];t&&(s=t.trim())}if(!s)return t.status(401).json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`});let c=v.allowClientApiKey?e.headers[`x-agent-provider`]:void 0,l=v.allowClientApiKey?e.headers[`x-agent-model`]:void 0,u=v.allowClientApiKey?e.headers[`x-agent-provider-endpoint`]:void 0,f=r.r(await d(e,t),t=>e.get(t)),p=v.buildSystemContext?.(f);t.writeHead(200,{"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});try{let e=n({message:i,sessionId:a,history:o,semanticLayer:b,securityContext:f,agentConfig:v,apiKey:s,systemContext:p,providerOverride:c,modelOverride:l,baseURLOverride:u});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`})}}),_.enabled!==!1){let e=_.basePath??`/mcp`;y.post(`${e}`,async(e,t)=>{await x.handleMcpPost(o(e,t),S(e,t))}),y.get(`${e}`,async(e,t)=>{if(_.resourceMetadataUrl&&!n.u(e.headers.authorization))return t.setHeader(`WWW-Authenticate`,n.c(_.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
|
-
`)},15e3);e.on(`close`,()=>{clearInterval(i)})}),
|
|
3
|
+
`)},15e3);e.on(`close`,()=>{clearInterval(i)})}),y.delete(`${e}`,(e,t)=>_.resourceMetadataUrl&&!n.u(e.headers.authorization)?(t.setHeader(`WWW-Authenticate`,n.c(_.resourceMetadataUrl)),t.status(401).json({error:`Bearer token required`})):t.status(405).json({error:`Session termination not supported`}))}return y.use((t,n,r,i)=>{console.error(`Express adapter error:`,t),r.headersSent||r.status(500).json(e.i(t,500))}),y}function c(e,t){let n=s(t);return e.use(`/`,n),e}function l(e){return c((0,i.default)(),e)}exports.createCubeApp=l,exports.createCubeRouter=s,exports.mountCubeRoutes=c;
|