drizzle-cube 0.4.53 → 0.5.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/dist/adapters/express/index.cjs +2 -2
- package/dist/adapters/express/index.js +109 -96
- package/dist/adapters/fastify/index.cjs +2 -2
- package/dist/adapters/fastify/index.js +148 -134
- package/dist/adapters/{handler-RItnSaEl.js → handler-3LGcjLtr.js} +617 -612
- package/dist/adapters/handler-BzzbVpcl.cjs +25 -0
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +103 -99
- package/dist/adapters/{compiler-S6KHiOY6.js → locale-DTnJrxm1.js} +1700 -1563
- package/dist/adapters/locale-DueXjqMh.cjs +198 -0
- package/dist/adapters/locale.d.ts +8 -0
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.d.ts +7 -3
- package/dist/adapters/mcp-tools.js +27 -27
- package/dist/adapters/mcp-transport-C7VLf4T5.js +579 -0
- package/dist/adapters/mcp-transport-poPHl_2j.cjs +39 -0
- package/dist/adapters/mcp-transport.d.ts +25 -2
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +152 -132
- package/dist/adapters/utils-DNrj-ryp.cjs +17 -0
- package/dist/adapters/{utils-IH1ePsBd.js → utils-DOg9oGdt.js} +2341 -819
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.d.ts +45 -2
- package/dist/adapters/utils.js +1 -1
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/{DashboardEditModal-BTdV528l.js → DashboardEditModal-cSSIAZGy.js} +1968 -1973
- package/dist/client/chunks/DashboardEditModal-cSSIAZGy.js.map +1 -0
- package/dist/client/chunks/{FieldSearchModal-D75vy4Wb.js → FieldSearchModal-CZNo4pNK.js} +550 -536
- package/dist/client/chunks/FieldSearchModal-CZNo4pNK.js.map +1 -0
- package/dist/client/chunks/KpiDelta-Dll_eCV1.js +2 -0
- package/dist/client/chunks/KpiNumber-BPlR92hI.js +2 -0
- package/dist/client/chunks/KpiText-BIxq7Jso.js +2 -0
- package/dist/client/chunks/{RetentionCombinedChart-DIhK5pD8.js → RetentionCombinedChart-BD8tGeM_.js} +96 -96
- package/dist/client/chunks/RetentionCombinedChart-BD8tGeM_.js.map +1 -0
- package/dist/client/chunks/{RetentionHeatmap-CyREolyP.js → RetentionHeatmap-B_5sewwi.js} +77 -77
- package/dist/client/chunks/RetentionHeatmap-B_5sewwi.js.map +1 -0
- package/dist/client/chunks/SchemaVisualization-CCICjhvv.js +2 -0
- package/dist/client/chunks/SchemaVisualizationLazy-DraGsMx6.js +2 -0
- package/dist/client/chunks/af-ZA-xDmO5F0s.js +1431 -0
- package/dist/client/chunks/af-ZA-xDmO5F0s.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-C1CJ0c7L.js → analysis-builder-BeVZhiQ5.js} +1519 -1507
- package/dist/client/chunks/analysis-builder-BeVZhiQ5.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-rkjJfWLT.js → analysis-builder-shared-BWc7ZZnG.js} +925 -954
- package/dist/client/chunks/analysis-builder-shared-BWc7ZZnG.js.map +1 -0
- package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js +2376 -0
- package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js.map +1 -0
- package/dist/client/chunks/{chart-area-BwYaflNk.js → chart-area-D63kG8OT.js} +157 -157
- package/dist/client/chunks/chart-area-D63kG8OT.js.map +1 -0
- package/dist/client/chunks/{chart-bar-BiENfFgE.js → chart-bar-BEfsCLjl.js} +78 -78
- package/dist/client/chunks/chart-bar-BEfsCLjl.js.map +1 -0
- package/dist/client/chunks/{chart-box-plot-BJF1tBXC.js → chart-box-plot-o-h9MRX5.js} +111 -114
- package/dist/client/chunks/chart-box-plot-o-h9MRX5.js.map +1 -0
- package/dist/client/chunks/{chart-bubble-DQQhGVDJ.js → chart-bubble-CMDp4Pfm.js} +121 -121
- package/dist/client/chunks/chart-bubble-CMDp4Pfm.js.map +1 -0
- package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js +303 -0
- package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js.map +1 -0
- package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js +51 -0
- package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js.map +1 -0
- package/dist/client/chunks/chart-config-area-CMZpbIah.js +93 -0
- package/dist/client/chunks/chart-config-area-CMZpbIah.js.map +1 -0
- package/dist/client/chunks/chart-config-bar-B8_V4YLg.js +87 -0
- package/dist/client/chunks/chart-config-bar-B8_V4YLg.js.map +1 -0
- package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js +35 -0
- package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js.map +1 -0
- package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js +82 -0
- package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js.map +1 -0
- package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js +72 -0
- package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js.map +1 -0
- package/dist/client/chunks/{chart-config-data-table-Bhdx5Hem.js → chart-config-data-table-BQXSn4b_.js} +9 -9
- package/dist/client/chunks/chart-config-data-table-BQXSn4b_.js.map +1 -0
- package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js +93 -0
- package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js.map +1 -0
- package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js +64 -0
- package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js.map +1 -0
- package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js +91 -0
- package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js.map +1 -0
- package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js +94 -0
- package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js.map +1 -0
- package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js +75 -0
- package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js.map +1 -0
- package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js +47 -0
- package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js.map +1 -0
- package/dist/client/chunks/chart-config-line-BVKapAQK.js +104 -0
- package/dist/client/chunks/chart-config-line-BVKapAQK.js.map +1 -0
- package/dist/client/chunks/chart-config-markdown-C-_g_8te.js +117 -0
- package/dist/client/chunks/chart-config-markdown-C-_g_8te.js.map +1 -0
- package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js +82 -0
- package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js.map +1 -0
- package/dist/client/chunks/chart-config-pie-BZxVl25X.js +68 -0
- package/dist/client/chunks/chart-config-pie-BZxVl25X.js.map +1 -0
- package/dist/client/chunks/chart-config-radar-B7FByX3t.js +49 -0
- package/dist/client/chunks/chart-config-radar-B7FByX3t.js.map +1 -0
- package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js +38 -0
- package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js.map +1 -0
- package/dist/client/chunks/chart-config-sankey-DGAThN9i.js +66 -0
- package/dist/client/chunks/chart-config-sankey-DGAThN9i.js.map +1 -0
- package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js +61 -0
- package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js.map +1 -0
- package/dist/client/chunks/chart-config-sunburst-utejM2YS.js +45 -0
- package/dist/client/chunks/chart-config-sunburst-utejM2YS.js.map +1 -0
- package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js +51 -0
- package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js.map +1 -0
- package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js +59 -0
- package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-2iCsn0CF.js → chart-data-table-C3Xh9jwL.js} +1083 -1086
- package/dist/client/chunks/chart-data-table-C3Xh9jwL.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-poyOf7-e.js → chart-funnel-C7pgktN5.js} +132 -132
- package/dist/client/chunks/chart-funnel-C7pgktN5.js.map +1 -0
- package/dist/client/chunks/{chart-gauge-D5J4gRky.js → chart-gauge-D2r2B_AR.js} +150 -150
- package/dist/client/chunks/chart-gauge-D2r2B_AR.js.map +1 -0
- package/dist/client/chunks/{chart-heat-map-BAMVhLGG.js → chart-heat-map-Dw2yjwfO.js} +75 -80
- package/dist/client/chunks/chart-heat-map-Dw2yjwfO.js.map +1 -0
- package/dist/client/chunks/{chart-kpi-delta-KQjUIeal.js → chart-kpi-delta-CYE0S1x_.js} +117 -117
- package/dist/client/chunks/chart-kpi-delta-CYE0S1x_.js.map +1 -0
- package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js +321 -0
- package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js.map +1 -0
- package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js +148 -0
- package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js.map +1 -0
- package/dist/client/chunks/{chart-line-B5_WntY5.js → chart-line-CBsTThTv.js} +123 -123
- package/dist/client/chunks/chart-line-CBsTThTv.js.map +1 -0
- package/dist/client/chunks/chart-markdown-BWaWVkuz.js +3474 -0
- package/dist/client/chunks/chart-markdown-BWaWVkuz.js.map +1 -0
- package/dist/client/chunks/chart-measure-profile-B41qCTBG.js +179 -0
- package/dist/client/chunks/chart-measure-profile-B41qCTBG.js.map +1 -0
- package/dist/client/chunks/chart-pie-Djbu8x2v.js +172 -0
- package/dist/client/chunks/chart-pie-Djbu8x2v.js.map +1 -0
- package/dist/client/chunks/chart-radar-BsTcKV0K.js +154 -0
- package/dist/client/chunks/chart-radar-BsTcKV0K.js.map +1 -0
- package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js +148 -0
- package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js.map +1 -0
- package/dist/client/chunks/{chart-sankey-BOyxfG1Q.js → chart-sankey-WwkZAhLy.js} +73 -73
- package/dist/client/chunks/chart-sankey-WwkZAhLy.js.map +1 -0
- package/dist/client/chunks/chart-scatter-D8krEYsA.js +255 -0
- package/dist/client/chunks/chart-scatter-D8krEYsA.js.map +1 -0
- package/dist/client/chunks/{chart-sunburst-D9lGEOCc.js → chart-sunburst-CIDB_pTl.js} +66 -66
- package/dist/client/chunks/chart-sunburst-CIDB_pTl.js.map +1 -0
- package/dist/client/chunks/chart-tree-map-C5C2iaWM.js +298 -0
- package/dist/client/chunks/chart-tree-map-C5C2iaWM.js.map +1 -0
- package/dist/client/chunks/{chart-waterfall-BCdUx4DC.js → chart-waterfall-BGdPrJ5Y.js} +80 -80
- package/dist/client/chunks/chart-waterfall-BGdPrJ5Y.js.map +1 -0
- package/dist/client/chunks/{charts-core-C5Yokk-x.js → charts-core-BXOqaYFn.js} +92 -92
- package/dist/client/chunks/charts-core-BXOqaYFn.js.map +1 -0
- package/dist/client/chunks/en-US-5xPTdCXg.js +35 -0
- package/dist/client/chunks/en-US-5xPTdCXg.js.map +1 -0
- package/dist/client/chunks/nl-NL-vCifBijs.js +1491 -0
- package/dist/client/chunks/nl-NL-vCifBijs.js.map +1 -0
- package/dist/client/chunks/{schema-visualization-t1KiOORo.js → schema-visualization-Xp60Ff2W.js} +352 -364
- package/dist/client/chunks/schema-visualization-Xp60Ff2W.js.map +1 -0
- package/dist/client/chunks/{useDebounce-CKqkM42n.js → useDebounce-CfmUMFau.js} +85 -85
- package/dist/client/chunks/useDebounce-CfmUMFau.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-DBIfYwz-.js → useExplainAI-BKGmejIj.js} +4 -4
- package/dist/client/chunks/{useExplainAI-DBIfYwz-.js.map → useExplainAI-BKGmejIj.js.map} +1 -1
- package/dist/client/chunks/{utils--qCr8Yn5.js → utils-BldkcRHv.js} +2 -2
- package/dist/client/chunks/{utils--qCr8Yn5.js.map → utils-BldkcRHv.js.map} +1 -1
- package/dist/client/chunks/{vendor-BRlsCGnK.js → vendor-ClXpIiea.js} +2 -2
- package/dist/client/chunks/{vendor-BRlsCGnK.js.map → vendor-ClXpIiea.js.map} +1 -1
- package/dist/client/components/AnalysisBuilder/types.d.ts +6 -6
- package/dist/client/components.js +3 -3
- package/dist/client/hooks/useTranslation.d.ts +21 -0
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +493 -488
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers/CubeApiProvider.d.ts +2 -1
- package/dist/client/providers/CubeProvider.d.ts +7 -1
- package/dist/client/providers/I18nProvider.d.ts +18 -0
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/types.d.ts +5 -20
- package/dist/client/styles.css +1 -1
- package/dist/client/utils.js +5 -5
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +40 -36
- package/dist/server/index.cjs +42 -40
- package/dist/server/index.js +3311 -1672
- package/package.json +5 -2
- package/dist/adapters/compiler-CRgLzmSn.cjs +0 -198
- package/dist/adapters/handler-DumFgnNM.cjs +0 -25
- package/dist/adapters/mcp-transport-C6bsIOSV.js +0 -545
- package/dist/adapters/mcp-transport-DMhuYmFp.cjs +0 -39
- package/dist/adapters/utils-CyBt-as9.cjs +0 -15
- package/dist/client/chunks/DashboardEditModal-BTdV528l.js.map +0 -1
- package/dist/client/chunks/FieldSearchModal-D75vy4Wb.js.map +0 -1
- package/dist/client/chunks/KpiDelta-Bk8bzKYM.js +0 -2
- package/dist/client/chunks/KpiNumber-CKF-8e_T.js +0 -2
- package/dist/client/chunks/KpiText-Iz1vIvu_.js +0 -2
- package/dist/client/chunks/RetentionCombinedChart-DIhK5pD8.js.map +0 -1
- package/dist/client/chunks/RetentionHeatmap-CyREolyP.js.map +0 -1
- package/dist/client/chunks/SchemaVisualization-B1GUT-FM.js +0 -2
- package/dist/client/chunks/SchemaVisualizationLazy-DymwT34e.js +0 -2
- package/dist/client/chunks/analysis-builder-C1CJ0c7L.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-rkjJfWLT.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-DLktOINm.js +0 -806
- package/dist/client/chunks/chart-activity-grid-DLktOINm.js.map +0 -1
- package/dist/client/chunks/chart-area-BwYaflNk.js.map +0 -1
- package/dist/client/chunks/chart-bar-BiENfFgE.js.map +0 -1
- package/dist/client/chunks/chart-box-plot-BJF1tBXC.js.map +0 -1
- package/dist/client/chunks/chart-bubble-DQQhGVDJ.js.map +0 -1
- package/dist/client/chunks/chart-candlestick-C2UuXbLe.js +0 -306
- package/dist/client/chunks/chart-candlestick-C2UuXbLe.js.map +0 -1
- package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js +0 -51
- package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js.map +0 -1
- package/dist/client/chunks/chart-config-area-CWnWVT6a.js +0 -93
- package/dist/client/chunks/chart-config-area-CWnWVT6a.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js +0 -87
- package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js +0 -35
- package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js.map +0 -1
- package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js +0 -82
- package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js.map +0 -1
- package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js +0 -72
- package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js.map +0 -1
- package/dist/client/chunks/chart-config-data-table-Bhdx5Hem.js.map +0 -1
- package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js +0 -93
- package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js +0 -64
- package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js.map +0 -1
- package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js +0 -91
- package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js +0 -94
- package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js +0 -75
- package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js +0 -47
- package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js.map +0 -1
- package/dist/client/chunks/chart-config-line-Bl9VDAdz.js +0 -104
- package/dist/client/chunks/chart-config-line-Bl9VDAdz.js.map +0 -1
- package/dist/client/chunks/chart-config-markdown-BX26b94i.js +0 -117
- package/dist/client/chunks/chart-config-markdown-BX26b94i.js.map +0 -1
- package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js +0 -82
- package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js +0 -68
- package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-6ZOgt__z.js +0 -49
- package/dist/client/chunks/chart-config-radar-6ZOgt__z.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js +0 -38
- package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js.map +0 -1
- package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js +0 -66
- package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js.map +0 -1
- package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js +0 -61
- package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js.map +0 -1
- package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js +0 -45
- package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js +0 -51
- package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js +0 -59
- package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js.map +0 -1
- package/dist/client/chunks/chart-data-table-2iCsn0CF.js.map +0 -1
- package/dist/client/chunks/chart-funnel-poyOf7-e.js.map +0 -1
- package/dist/client/chunks/chart-gauge-D5J4gRky.js.map +0 -1
- package/dist/client/chunks/chart-heat-map-BAMVhLGG.js.map +0 -1
- package/dist/client/chunks/chart-kpi-delta-KQjUIeal.js.map +0 -1
- package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js +0 -325
- package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js.map +0 -1
- package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js +0 -148
- package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js.map +0 -1
- package/dist/client/chunks/chart-line-B5_WntY5.js.map +0 -1
- package/dist/client/chunks/chart-markdown-B6bENbel.js +0 -3473
- package/dist/client/chunks/chart-markdown-B6bENbel.js.map +0 -1
- package/dist/client/chunks/chart-measure-profile-yWk-obNb.js +0 -179
- package/dist/client/chunks/chart-measure-profile-yWk-obNb.js.map +0 -1
- package/dist/client/chunks/chart-pie-BodrUoHv.js +0 -172
- package/dist/client/chunks/chart-pie-BodrUoHv.js.map +0 -1
- package/dist/client/chunks/chart-radar-gG3zfLud.js +0 -154
- package/dist/client/chunks/chart-radar-gG3zfLud.js.map +0 -1
- package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js +0 -148
- package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js.map +0 -1
- package/dist/client/chunks/chart-sankey-BOyxfG1Q.js.map +0 -1
- package/dist/client/chunks/chart-scatter-B8OwlsAX.js +0 -255
- package/dist/client/chunks/chart-scatter-B8OwlsAX.js.map +0 -1
- package/dist/client/chunks/chart-sunburst-D9lGEOCc.js.map +0 -1
- package/dist/client/chunks/chart-tree-map-DZaKy9he.js +0 -298
- package/dist/client/chunks/chart-tree-map-DZaKy9he.js.map +0 -1
- package/dist/client/chunks/chart-waterfall-BCdUx4DC.js.map +0 -1
- package/dist/client/chunks/charts-core-C5Yokk-x.js.map +0 -1
- package/dist/client/chunks/schema-visualization-t1KiOORo.js.map +0 -1
- package/dist/client/chunks/useDebounce-CKqkM42n.js.map +0 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { SemanticLayerCompiler, SecurityContext } from '../server';
|
|
2
2
|
import { MCPPrompt } from '../server/ai/mcp-prompts';
|
|
3
|
+
import { McpAppConfig } from './utils';
|
|
4
|
+
export type { McpAppConfig };
|
|
3
5
|
export { type MCPPrompt };
|
|
4
6
|
export declare const MCP_APP_RESOURCE_URI = "ui://drizzle-cube/visualization.html";
|
|
5
7
|
export declare const MCP_APP_MIME_TYPE = "text/html;profile=mcp-app";
|
|
6
|
-
/** Get the bundled MCP App HTML. Returns empty string if not yet built. */
|
|
7
|
-
export declare function getMcpAppHtml(): string;
|
|
8
|
+
/** Get the bundled MCP App HTML, optionally with locale config injected. Returns empty string if not yet built. */
|
|
9
|
+
export declare function getMcpAppHtml(config?: McpAppConfig): string;
|
|
8
10
|
export type JsonRpcId = string | number | null | undefined;
|
|
9
11
|
export interface JsonRpcRequest {
|
|
10
12
|
jsonrpc: '2.0';
|
|
@@ -32,6 +34,10 @@ export interface McpDispatchContext {
|
|
|
32
34
|
prompts?: MCPPrompt[];
|
|
33
35
|
/** Enable MCP App visualization for load tool */
|
|
34
36
|
appEnabled?: boolean;
|
|
37
|
+
/** Locale configuration for the MCP App (only used when appEnabled is true) */
|
|
38
|
+
appConfig?: McpAppConfig;
|
|
39
|
+
/** Optional name for the MCP serverInfo.name field. Defaults to 'drizzle-cube'. */
|
|
40
|
+
serverName?: string;
|
|
35
41
|
}
|
|
36
42
|
export interface MCPResource {
|
|
37
43
|
uri: string;
|
|
@@ -40,6 +46,8 @@ export interface MCPResource {
|
|
|
40
46
|
mimeType: string;
|
|
41
47
|
text: string;
|
|
42
48
|
}
|
|
49
|
+
export type MCPPromptResolver = MCPPrompt[] | ((defaults: MCPPrompt[]) => MCPPrompt[]);
|
|
50
|
+
export type MCPResourceResolver = MCPResource[] | ((defaults: MCPResource[]) => MCPResource[]);
|
|
43
51
|
export interface ProtocolNegotiation {
|
|
44
52
|
ok: boolean;
|
|
45
53
|
negotiated: string | null;
|
|
@@ -89,6 +97,17 @@ export declare function validateOriginHeader(origin: string | null | undefined,
|
|
|
89
97
|
valid: false;
|
|
90
98
|
reason: string;
|
|
91
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* Extract a Bearer token from an Authorization header.
|
|
102
|
+
* Returns the token string if present and well-formed, or null otherwise.
|
|
103
|
+
*/
|
|
104
|
+
export declare function extractBearerToken(authHeader: string | null | undefined): string | null;
|
|
105
|
+
/**
|
|
106
|
+
* Build a WWW-Authenticate challenge header value per MCP / RFC 9728.
|
|
107
|
+
* Points the client to the Protected Resource Metadata document so it can
|
|
108
|
+
* discover the authorization server and begin the OAuth 2.1 flow.
|
|
109
|
+
*/
|
|
110
|
+
export declare function buildWwwAuthenticateChallenge(resourceMetadataUrl: string): string;
|
|
92
111
|
export declare function serializeSseEvent(payload: unknown, eventId?: string, retryMs?: number): string;
|
|
93
112
|
export declare function buildJsonRpcError(id: JsonRpcId, code: number, message: string, data?: unknown): JsonRpcResponse;
|
|
94
113
|
export declare function buildJsonRpcResult(id: JsonRpcId, result: unknown): JsonRpcResponse;
|
|
@@ -111,3 +130,7 @@ export declare function buildToolList(options?: {
|
|
|
111
130
|
}[];
|
|
112
131
|
export declare function getDefaultResources(): MCPResource[];
|
|
113
132
|
export declare function getDefaultPrompts(): MCPPrompt[];
|
|
133
|
+
export declare function resolveMcpPrompts(prompts?: MCPPromptResolver): MCPPrompt[];
|
|
134
|
+
export declare function resolveMcpResources(resources?: MCPResourceResolver): MCPResource[];
|
|
135
|
+
export declare function buildMcpSchemaResource(semanticLayer: SemanticLayerCompiler): MCPResource;
|
|
136
|
+
export declare function buildMcpResources(semanticLayer: SemanticLayerCompiler, resources?: MCPResourceResolver): MCPResource[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-CyBt-as9.cjs`),t=require(`../compiler-CRgLzmSn.cjs`),n=require(`../mcp-transport-DMhuYmFp.cjs`);let r=require(`next/server`);function i(e){let{cubes:n,drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s}=e;if(!n||n.length===0)throw Error(`At least one cube must be provided in the cubes array`);let c=new t.t({drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s});return n.forEach(e=>{c.registerCube(e)}),c}function a(e,t){let n=e.headers.get(`origin`),r={};return t.origin&&(typeof t.origin==`string`?r[`Access-Control-Allow-Origin`]=t.origin:Array.isArray(t.origin)?n&&t.origin.includes(n)&&(r[`Access-Control-Allow-Origin`]=n):typeof t.origin==`function`&&n&&t.origin(n)&&(r[`Access-Control-Allow-Origin`]=n)),t.methods&&(r[`Access-Control-Allow-Methods`]=t.methods.join(`, `)),t.allowedHeaders&&(r[`Access-Control-Allow-Headers`]=t.allowedHeaders.join(`, `)),t.credentials&&(r[`Access-Control-Allow-Credentials`]=`true`),r}function o(e){return async function(t){let n=a(t,e);return new Response(null,{status:200,headers:n})}}function s(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let n=t.nextUrl.searchParams.get(`query`);if(!n)return r.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{c=JSON.parse(n)}catch{return r.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return r.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await n(t,i),u=s.validateQuery(c);if(!u.isValid)return r.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=t.headers.get(`x-cache-control`)===`no-cache`,f=await s.executeMultiCubeQuery(c,l,{skipCache:d}),p=e.r(c,f,s);return r.NextResponse.json(p,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js load handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function c(t){let{cors:n}=t,o=i(t);return async function(t,i){try{let i=e.a(o.getMetadata());return r.NextResponse.json(i,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js meta handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500),{status:500})}}}function l(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let n=t.nextUrl.searchParams.get(`query`);if(!n)return r.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{c=JSON.parse(n)}catch{return r.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return r.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await n(t,i),u=s.validateQuery(c);if(!u.isValid)return r.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=c.measures?.[0]||c.dimensions?.[0];if(!d)return r.NextResponse.json(e.i(`No measures or dimensions specified`,400),{status:400});let f=d.split(`.`)[0],p=await s.generateSQL(f,c,l),m=e.o(c,p);return r.NextResponse.json(m,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js SQL handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`SQL generation failed`,500),{status:500})}}}function u(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{let c;if(t.method===`POST`){let e=await t.json();c=e.query||e}else if(t.method===`GET`){let e=t.nextUrl.searchParams.get(`query`);if(!e)return r.NextResponse.json({error:`Query parameter is required`,valid:!1},{status:400});try{c=JSON.parse(e)}catch{return r.NextResponse.json({error:`Invalid JSON in query parameter`,valid:!1},{status:400})}}else return r.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405});let l=await n(t,i),u=await e.f(c,l,s);return r.NextResponse.json(u,{headers:o?a(t,o):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js dry-run handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1},{status:400})}}}function d(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let{queries:c}=await t.json();if(!c||!Array.isArray(c))return r.NextResponse.json(e.i(`Request body must contain a "queries" array`,400),{status:400});if(c.length===0)return r.NextResponse.json(e.i(`Queries array cannot be empty`,400),{status:400});let l=await e.u(c,await n(t,i),s,{skipCache:t.headers.get(`x-cache-control`)===`no-cache`});return r.NextResponse.json(l,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js batch handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Batch execution failed`,500),{status:500})}}}function f(e){let{extractSecurityContext:t,cors:n}=e,o=i(e);return async function(e,i){try{if(e.method!==`POST`)return r.NextResponse.json({error:`Method not allowed`},{status:405});let s=await e.json(),c=s.query||s,l=s.options||{},u=await t(e,i),d=o.validateQuery(c);if(!d.isValid)return r.NextResponse.json({error:`Query validation failed: ${d.errors.join(`, `)}`},{status:400});let f=await o.explainQuery(c,u,l);return r.NextResponse.json(f,{headers:n?a(e,n):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js explain handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Explain query failed`},{status:500})}}}function p(t){let{cors:n}=t,o=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await e.d(o,await t.json());return r.NextResponse.json(i,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function m(t){let{cors:n}=t,o=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await t.json();if(!i.naturalLanguage)return r.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let s=await e.m(o,i);return r.NextResponse.json(s,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function h(t){let{cors:n}=t,o=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await t.json();if(!i.query)return r.NextResponse.json(e.i(`query field is required`,400),{status:400});let s=await e.h(o,i);return r.NextResponse.json(s,{headers:n?a(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function g(t){let{extractSecurityContext:n,cors:o}=t,s=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let c=await t.json();if(!c.query)return r.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await e.p(s,await n(t,i),c);return r.NextResponse.json(l,{headers:o?a(t,o):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function _(t){let{extractSecurityContext:o,cors:s,mcp:c={enabled:!0}}=t,l=i(t);return async function(t){if(t.method===`DELETE`)return r.NextResponse.json({error:`Session termination not supported`},{status:405});if(t.method===`GET`){let e=new TextEncoder,i=n.m(),o=new ReadableStream({start(t){t.enqueue(e.encode(n.h({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},i,15e3)))}}),c=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(s){let e=a(t,s);Object.entries(e).forEach(([e,t])=>c.set(e,t))}return new r.NextResponse(o,{status:200,headers:c})}if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=n._(t.headers.get(`origin`),c.allowedOrigins?{allowedOrigins:c.allowedOrigins}:{});if(!i.valid)return r.NextResponse.json(n.i(null,-32600,i.reason),{status:403});let u=t.headers.get(`accept`);if(!n.g(u))return r.NextResponse.json(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`),{status:400});let d=n.f(Object.fromEntries(t.headers.entries()));if(!d.ok)return r.NextResponse.json({error:`Unsupported MCP protocol version`,supported:d.supported},{status:426});let f;try{f=await t.json()}catch{f=null}let p=n.p(f);if(!p)return r.NextResponse.json(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`),{status:400});let m=n.v(u),h=p.method===`initialize`,g=(e,n=200,i={})=>r.NextResponse.json(e,{status:n,headers:{...s?a(t,s):{},...i}});try{let e=await n.s(p.method,p.params,{semanticLayer:l,extractSecurityContext:e=>o(e),rawRequest:t,rawResponse:null,appEnabled:!!c.app});if(n.d(p))return new r.NextResponse(null,{status:202});let i=h&&e&&typeof e==`object`&&`sessionId`in e?e.sessionId:void 0,u={};i&&(u[n.r]=i);let d=n.a(p.id??null,e);if(m){let e=new TextEncoder,i=n.m(),o=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.h(d,i))),t.close()}}),c=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...u});if(s){let e=a(t,s);Object.entries(e).forEach(([e,t])=>c.set(e,t))}return new r.NextResponse(o,{status:200,headers:c})}return g(d,200,u)}catch(e){if(n.d(p))return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP notification processing error:`,e),new r.NextResponse(null,{status:202});process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP RPC handler error:`,e);let i=e?.code??-32603,o=e?.data,c=e.message||`MCP request failed`,l=n.i(p.id??null,i,c,o);if(m){let e=new TextEncoder,i=n.m(),o=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.h(l,i))),t.close()}}),c=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(s){let e=a(t,s);Object.entries(e).forEach(([e,t])=>c.set(e,t))}return new r.NextResponse(o,{status:200,headers:c})}return g(l,200)}}}function v(e){let{extractSecurityContext:t,cors:n,agent:o}=e;if(!o)throw Error(`agent config is required for createAgentChatHandler`);let s=i(e);return async function(e,i){try{if(e.method!==`POST`)return r.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:c}=await Promise.resolve().then(()=>require(`../handler-DumFgnNM.cjs`)),{message:l,sessionId:u,history:d}=await e.json();if(!l||typeof l!=`string`)return r.NextResponse.json({error:`message is required and must be a string`},{status:400});let f=(o.apiKey||``).trim();if(o.allowClientApiKey){let t=e.headers.get(`x-agent-api-key`);t&&(f=t.trim())}if(!f)return r.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let p=o.allowClientApiKey&&e.headers.get(`x-agent-provider`)||void 0,m=o.allowClientApiKey&&e.headers.get(`x-agent-model`)||void 0,h=o.allowClientApiKey&&e.headers.get(`x-agent-provider-endpoint`)||void 0,g=await t(e,i),_=o.buildSystemContext?.(g),v=new TextEncoder,y=new ReadableStream({async start(e){try{let t=c({message:l,sessionId:u,history:d,semanticLayer:s,securityContext:g,agentConfig:o,apiKey:f,systemContext:_,providerOverride:p,modelOverride:m,baseURLOverride:h});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(v.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(v.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),b=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(n){let t=a(e,n);Object.entries(t).forEach(([e,t])=>b.set(e,t))}return new Response(y,{status:200,headers:b})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function y(e){let{mcp:t={enabled:!0}}=e,n={load:s(e),meta:c(e),sql:l(e),dryRun:u(e),batch:d(e),explain:f(e)};return t.enabled!==!1&&(n.mcpRpc=_(e)),e.agent&&(n.agentChat=v(e)),n}exports.createAgentChatHandler=v,exports.createBatchHandler=d,exports.createCubeHandlers=y,exports.createDiscoverHandler=p,exports.createDryRunHandler=u,exports.createExplainHandler=f,exports.createLoadHandler=s,exports.createMcpLoadHandler=g,exports.createMcpRpcHandler=_,exports.createMetaHandler=c,exports.createOptionsHandler=o,exports.createSqlHandler=l,exports.createSuggestHandler=m,exports.createValidateHandler=h;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-DNrj-ryp.cjs`),t=require(`../locale-DueXjqMh.cjs`),n=require(`../mcp-transport-poPHl_2j.cjs`);let r=require(`next/server`);function i(e){let{cubes:n,drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s}=e;if(!n||n.length===0)throw Error(`At least one cube must be provided in the cubes array`);let c=new t.i({drizzle:r,schema:i,engineType:a,cache:o,rlsSetup:s});return n.forEach(e=>{c.registerCube(e)}),c}function a(e){return{extractSecurityContext:async(n,r)=>t.r(await e.extractSecurityContext(n,r),t.n(e=>n.headers.get(e))),cors:e.cors?{...e.cors,allowedHeaders:t.t(e.cors.allowedHeaders)}:void 0}}function o(e,t){let n=e.headers.get(`origin`),r={};return t.origin&&(typeof t.origin==`string`?r[`Access-Control-Allow-Origin`]=t.origin:Array.isArray(t.origin)?n&&t.origin.includes(n)&&(r[`Access-Control-Allow-Origin`]=n):typeof t.origin==`function`&&n&&t.origin(n)&&(r[`Access-Control-Allow-Origin`]=n)),t.methods&&(r[`Access-Control-Allow-Methods`]=t.methods.join(`, `)),t.allowedHeaders&&(r[`Access-Control-Allow-Headers`]=t.allowedHeaders.join(`, `)),t.credentials&&(r[`Access-Control-Allow-Credentials`]=`true`),r}function s(e){return async function(n){let r=o(n,{...e,allowedHeaders:t.t(e.allowedHeaders)});return new Response(null,{status:200,headers:r})}}function c(t){let{extractSecurityContext:n,cors:s}=a(t),c=i(t);return async function(t,i){try{let a;if(t.method===`POST`){let e=await t.json();a=e.query||e}else if(t.method===`GET`){let n=t.nextUrl.searchParams.get(`query`);if(!n)return r.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{a=JSON.parse(n)}catch{return r.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return r.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await n(t,i),u=c.validateQuery(a);if(!u.isValid)return r.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=t.headers.get(`x-cache-control`)===`no-cache`,f=await c.executeMultiCubeQuery(a,l,{skipCache:d}),p=e.r(a,f,c);return r.NextResponse.json(p,{headers:s?o(t,s):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js load handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function l(t){let{cors:n}=a(t),s=i(t);return async function(t,i){try{let i=e.a(s.getMetadata());return r.NextResponse.json(i,{headers:n?o(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js meta handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500),{status:500})}}}function u(t){let{extractSecurityContext:n,cors:s}=a(t),c=i(t);return async function(t,i){try{let a;if(t.method===`POST`){let e=await t.json();a=e.query||e}else if(t.method===`GET`){let n=t.nextUrl.searchParams.get(`query`);if(!n)return r.NextResponse.json(e.i(`Query parameter is required`,400),{status:400});try{a=JSON.parse(n)}catch{return r.NextResponse.json(e.i(`Invalid JSON in query parameter`,400),{status:400})}}else return r.NextResponse.json(e.i(`Method not allowed`,405),{status:405});let l=await n(t,i),u=c.validateQuery(a);if(!u.isValid)return r.NextResponse.json(e.i(`Query validation failed: ${u.errors.join(`, `)}`,400),{status:400});let d=a.measures?.[0]||a.dimensions?.[0];if(!d)return r.NextResponse.json(e.i(`No measures or dimensions specified`,400),{status:400});let f=d.split(`.`)[0],p=await c.generateSQL(f,a,l),m=e.o(a,p);return r.NextResponse.json(m,{headers:s?o(t,s):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js SQL handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`SQL generation failed`,500),{status:500})}}}function d(t){let{extractSecurityContext:n,cors:s}=a(t),c=i(t);return async function(t,i){try{let a;if(t.method===`POST`){let e=await t.json();a=e.query||e}else if(t.method===`GET`){let e=t.nextUrl.searchParams.get(`query`);if(!e)return r.NextResponse.json({error:`Query parameter is required`,valid:!1},{status:400});try{a=JSON.parse(e)}catch{return r.NextResponse.json({error:`Invalid JSON in query parameter`,valid:!1},{status:400})}}else return r.NextResponse.json({error:`Method not allowed`,valid:!1},{status:405});let l=await n(t,i),u=await e.f(a,l,c);return r.NextResponse.json(u,{headers:s?o(t,s):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js dry-run handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1},{status:400})}}}function f(t){let{extractSecurityContext:n,cors:s}=a(t),c=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let{queries:a}=await t.json();if(!a||!Array.isArray(a))return r.NextResponse.json(e.i(`Request body must contain a "queries" array`,400),{status:400});if(a.length===0)return r.NextResponse.json(e.i(`Queries array cannot be empty`,400),{status:400});let l=await e.u(a,await n(t,i),c,{skipCache:t.headers.get(`x-cache-control`)===`no-cache`});return r.NextResponse.json(l,{headers:s?o(t,s):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js batch handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Batch execution failed`,500),{status:500})}}}function p(e){let{extractSecurityContext:t,cors:n}=a(e),s=i(e);return async function(e,i){try{if(e.method!==`POST`)return r.NextResponse.json({error:`Method not allowed`},{status:405});let a=await e.json(),c=a.query||a,l=a.options||{},u=await t(e,i),d=s.validateQuery(c);if(!d.isValid)return r.NextResponse.json({error:`Query validation failed: ${d.errors.join(`, `)}`},{status:400});let f=await s.explainQuery(c,u,l);return r.NextResponse.json(f,{headers:n?o(e,n):{}})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js explain handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Explain query failed`},{status:500})}}}function m(t){let{cors:n}=a(t),s=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await e.d(s,await t.json());return r.NextResponse.json(i,{headers:n?o(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js discover handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Discovery failed`,500),{status:500})}}}function h(t){let{cors:n}=a(t),s=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await t.json();if(!i.naturalLanguage)return r.NextResponse.json(e.i(`naturalLanguage field is required`,400),{status:400});let a=await e.m(s,i);return r.NextResponse.json(a,{headers:n?o(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js suggest handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query suggestion failed`,500),{status:500})}}}function g(t){let{cors:n}=a(t),s=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=await t.json();if(!i.query)return r.NextResponse.json(e.i(`query field is required`,400),{status:400});let a=await e.h(s,i);return r.NextResponse.json(a,{headers:n?o(t,n):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js validate handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query validation failed`,500),{status:500})}}}function _(t){let{extractSecurityContext:n,cors:s}=a(t),c=i(t);return async function(t,i){try{if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let a=await t.json();if(!a.query)return r.NextResponse.json(e.i(`query field is required`,400),{status:400});let l=await e.p(c,await n(t,i),a);return r.NextResponse.json(l,{headers:s?o(t,s):{}})}catch(t){return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP load handler error:`,t),r.NextResponse.json(e.i(t instanceof Error?t.message:`Query execution failed`,500),{status:500})}}}function v(t){let{extractSecurityContext:s,cors:c}=a(t),{mcp:l={enabled:!0}}=t,u=i(t),d=n.o(u,l.resources),f=n.v(l.prompts);return async function(t){if(l.resourceMetadataUrl&&!n.u(t.headers.get(`authorization`)))return r.NextResponse.json({error:`Bearer token required`},{status:401,headers:{"WWW-Authenticate":n.c(l.resourceMetadataUrl)}});if(t.method===`DELETE`)return r.NextResponse.json({error:`Session termination not supported`},{status:405});if(t.method===`GET`){let e=new TextEncoder,i=n._(),a=new ReadableStream({start(t){t.enqueue(e.encode(n.y({jsonrpc:`2.0`,method:`mcp/ready`,params:{protocol:`streamable-http`}},i,15e3)))}}),s=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(c){let e=o(t,c);Object.entries(e).forEach(([e,t])=>s.set(e,t))}return new r.NextResponse(a,{status:200,headers:s})}if(t.method!==`POST`)return r.NextResponse.json(e.i(`Method not allowed - use POST`,405),{status:405});let i=n.x(t.headers.get(`origin`),l.allowedOrigins?{allowedOrigins:l.allowedOrigins}:{});if(!i.valid)return r.NextResponse.json(n.i(null,-32600,i.reason),{status:403});let a=t.headers.get(`accept`);if(!n.b(a))return r.NextResponse.json(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`),{status:400});let p=n.h(Object.fromEntries(t.headers.entries()));if(!p.ok)return r.NextResponse.json({error:`Unsupported MCP protocol version`,supported:p.supported},{status:426});let m;try{m=await t.json()}catch{m=null}let h=n.g(m);if(!h)return r.NextResponse.json(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`),{status:400});let g=n.S(a),_=h.method===`initialize`,v=(e,n=200,i={})=>r.NextResponse.json(e,{status:n,headers:{...c?o(t,c):{},...i}});try{let e=await n.l(h.method,h.params,{semanticLayer:u,extractSecurityContext:e=>s(e),rawRequest:t,rawResponse:null,resources:d,prompts:f,appEnabled:!!l.app,appConfig:typeof l.app==`object`?l.app:void 0,serverName:l.serverName});if(n.m(h))return new r.NextResponse(null,{status:202});let i=_&&e&&typeof e==`object`&&`sessionId`in e?e.sessionId:void 0,a={};i&&(a[n.r]=i);let p=n.a(h.id??null,e);if(g){let e=new TextEncoder,i=n._(),s=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.y(p,i))),t.close()}}),l=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`,...a});if(c){let e=o(t,c);Object.entries(e).forEach(([e,t])=>l.set(e,t))}return new r.NextResponse(s,{status:200,headers:l})}return v(p,200,a)}catch(e){if(n.m(h))return process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP notification processing error:`,e),new r.NextResponse(null,{status:202});process.env.NODE_ENV!==`test`&&console.error(`Next.js MCP RPC handler error:`,e);let i=e?.code??-32603,a=e?.data,s=e.message||`MCP request failed`,l=n.i(h.id??null,i,s,a);if(g){let e=new TextEncoder,i=n._(),a=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.y(l,i))),t.close()}}),s=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(c){let e=o(t,c);Object.entries(e).forEach(([e,t])=>s.set(e,t))}return new r.NextResponse(a,{status:200,headers:s})}return v(l,200)}}}function y(e){let{extractSecurityContext:t,cors:n}=a(e),{agent:s}=e;if(!s)throw Error(`agent config is required for createAgentChatHandler`);let c=i(e);return async function(e,i){try{if(e.method!==`POST`)return r.NextResponse.json({error:`Method not allowed - use POST`},{status:405});let{handleAgentChat:a}=await Promise.resolve().then(()=>require(`../handler-BzzbVpcl.cjs`)),{message:l,sessionId:u,history:d}=await e.json();if(!l||typeof l!=`string`)return r.NextResponse.json({error:`message is required and must be a string`},{status:400});let f=(s.apiKey||``).trim();if(s.allowClientApiKey){let t=e.headers.get(`x-agent-api-key`);t&&(f=t.trim())}if(!f)return r.NextResponse.json({error:`No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header.`},{status:401});let p=s.allowClientApiKey&&e.headers.get(`x-agent-provider`)||void 0,m=s.allowClientApiKey&&e.headers.get(`x-agent-model`)||void 0,h=s.allowClientApiKey&&e.headers.get(`x-agent-provider-endpoint`)||void 0,g=await t(e,i),_=s.buildSystemContext?.(g),v=new TextEncoder,y=new ReadableStream({async start(e){try{let t=a({message:l,sessionId:u,history:d,semanticLayer:c,securityContext:g,agentConfig:s,apiKey:f,systemContext:_,providerOverride:p,modelOverride:m,baseURLOverride:h});for await(let n of t){let t=`data: ${JSON.stringify(n)}\n\n`;e.enqueue(v.encode(t))}}catch(t){let n={type:`error`,data:{message:t instanceof Error?t.message:`Stream failed`}};e.enqueue(v.encode(`data: ${JSON.stringify(n)}\n\n`))}finally{e.close()}}}),b=new Headers({"Content-Type":`text/event-stream`,"Cache-Control":`no-cache`,Connection:`keep-alive`});if(n){let t=o(e,n);Object.entries(t).forEach(([e,t])=>b.set(e,t))}return new Response(y,{status:200,headers:b})}catch(e){return process.env.NODE_ENV!==`test`&&console.error(`Next.js agent chat handler error:`,e),r.NextResponse.json({error:e instanceof Error?e.message:`Agent chat failed`},{status:500})}}}function b(e){let{mcp:t={enabled:!0}}=e,n={load:c(e),meta:l(e),sql:u(e),dryRun:d(e),batch:f(e),explain:p(e)};return t.enabled!==!1&&(n.mcpRpc=v(e)),e.agent&&(n.agentChat=y(e)),n}exports.createAgentChatHandler=y,exports.createBatchHandler=f,exports.createCubeHandlers=b,exports.createDiscoverHandler=m,exports.createDryRunHandler=d,exports.createExplainHandler=p,exports.createLoadHandler=c,exports.createMcpLoadHandler=_,exports.createMcpRpcHandler=v,exports.createMetaHandler=l,exports.createOptionsHandler=s,exports.createSqlHandler=u,exports.createSuggestHandler=h,exports.createValidateHandler=g;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { a as e, d as t, f as n, h as r, i, m as a, o, p as s, r as c, u as l } from "../utils-
|
|
2
|
-
import {
|
|
3
|
-
import { _ as
|
|
4
|
-
import { NextResponse as
|
|
1
|
+
import { a as e, d as t, f as n, h as r, i, m as a, o, p as s, r as c, u as l } from "../utils-DOg9oGdt.js";
|
|
2
|
+
import { i as u, n as d, r as f, t as p } from "../locale-DTnJrxm1.js";
|
|
3
|
+
import { S as m, _ as h, a as g, b as _, c as v, g as y, h as b, i as x, l as S, m as C, o as w, r as T, u as E, v as D, x as O, y as k } from "../mcp-transport-C7VLf4T5.js";
|
|
4
|
+
import { NextResponse as A } from "next/server";
|
|
5
5
|
//#region src/adapters/nextjs/index.ts
|
|
6
|
-
function
|
|
6
|
+
function j(e) {
|
|
7
7
|
let { cubes: t, drizzle: n, schema: r, engineType: i, cache: a, rlsSetup: o } = e;
|
|
8
8
|
if (!t || t.length === 0) throw Error("At least one cube must be provided in the cubes array");
|
|
9
9
|
let s = new u({
|
|
@@ -17,21 +17,33 @@ function w(e) {
|
|
|
17
17
|
s.registerCube(e);
|
|
18
18
|
}), s;
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function M(e) {
|
|
21
|
+
return {
|
|
22
|
+
extractSecurityContext: async (t, n) => f(await e.extractSecurityContext(t, n), d((e) => t.headers.get(e))),
|
|
23
|
+
cors: e.cors ? {
|
|
24
|
+
...e.cors,
|
|
25
|
+
allowedHeaders: p(e.cors.allowedHeaders)
|
|
26
|
+
} : void 0
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function N(e, t) {
|
|
21
30
|
let n = e.headers.get("origin"), r = {};
|
|
22
31
|
return t.origin && (typeof t.origin == "string" ? r["Access-Control-Allow-Origin"] = t.origin : Array.isArray(t.origin) ? n && t.origin.includes(n) && (r["Access-Control-Allow-Origin"] = n) : typeof t.origin == "function" && n && t.origin(n) && (r["Access-Control-Allow-Origin"] = n)), t.methods && (r["Access-Control-Allow-Methods"] = t.methods.join(", ")), t.allowedHeaders && (r["Access-Control-Allow-Headers"] = t.allowedHeaders.join(", ")), t.credentials && (r["Access-Control-Allow-Credentials"] = "true"), r;
|
|
23
32
|
}
|
|
24
|
-
function
|
|
33
|
+
function P(e) {
|
|
25
34
|
return async function(t) {
|
|
26
|
-
let n =
|
|
35
|
+
let n = N(t, {
|
|
36
|
+
...e,
|
|
37
|
+
allowedHeaders: p(e.allowedHeaders)
|
|
38
|
+
});
|
|
27
39
|
return new Response(null, {
|
|
28
40
|
status: 200,
|
|
29
41
|
headers: n
|
|
30
42
|
});
|
|
31
43
|
};
|
|
32
44
|
}
|
|
33
|
-
function
|
|
34
|
-
let { extractSecurityContext: t, cors: n } = e, r =
|
|
45
|
+
function F(e) {
|
|
46
|
+
let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
|
|
35
47
|
return async function(e, a) {
|
|
36
48
|
try {
|
|
37
49
|
let o;
|
|
@@ -40,35 +52,35 @@ function D(e) {
|
|
|
40
52
|
o = t.query || t;
|
|
41
53
|
} else if (e.method === "GET") {
|
|
42
54
|
let t = e.nextUrl.searchParams.get("query");
|
|
43
|
-
if (!t) return
|
|
55
|
+
if (!t) return A.json(i("Query parameter is required", 400), { status: 400 });
|
|
44
56
|
try {
|
|
45
57
|
o = JSON.parse(t);
|
|
46
58
|
} catch {
|
|
47
|
-
return
|
|
59
|
+
return A.json(i("Invalid JSON in query parameter", 400), { status: 400 });
|
|
48
60
|
}
|
|
49
|
-
} else return
|
|
61
|
+
} else return A.json(i("Method not allowed", 405), { status: 405 });
|
|
50
62
|
let s = await t(e, a), l = r.validateQuery(o);
|
|
51
|
-
if (!l.isValid) return
|
|
63
|
+
if (!l.isValid) return A.json(i(`Query validation failed: ${l.errors.join(", ")}`, 400), { status: 400 });
|
|
52
64
|
let u = e.headers.get("x-cache-control") === "no-cache", d = await r.executeMultiCubeQuery(o, s, { skipCache: u }), f = c(o, d, r);
|
|
53
|
-
return
|
|
65
|
+
return A.json(f, { headers: n ? N(e, n) : {} });
|
|
54
66
|
} catch (e) {
|
|
55
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js load handler error:", e),
|
|
67
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js load handler error:", e), A.json(i(e instanceof Error ? e.message : "Query execution failed", 500), { status: 500 });
|
|
56
68
|
}
|
|
57
69
|
};
|
|
58
70
|
}
|
|
59
|
-
function
|
|
60
|
-
let { cors: n } = t, r =
|
|
71
|
+
function I(t) {
|
|
72
|
+
let { cors: n } = M(t), r = j(t);
|
|
61
73
|
return async function(t, a) {
|
|
62
74
|
try {
|
|
63
75
|
let i = e(r.getMetadata());
|
|
64
|
-
return
|
|
76
|
+
return A.json(i, { headers: n ? N(t, n) : {} });
|
|
65
77
|
} catch (e) {
|
|
66
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js meta handler error:", e),
|
|
78
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js meta handler error:", e), A.json(i(e instanceof Error ? e.message : "Failed to fetch metadata", 500), { status: 500 });
|
|
67
79
|
}
|
|
68
80
|
};
|
|
69
81
|
}
|
|
70
|
-
function
|
|
71
|
-
let { extractSecurityContext: t, cors: n } = e, r =
|
|
82
|
+
function L(e) {
|
|
83
|
+
let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
|
|
72
84
|
return async function(e, a) {
|
|
73
85
|
try {
|
|
74
86
|
let s;
|
|
@@ -77,26 +89,26 @@ function k(e) {
|
|
|
77
89
|
s = t.query || t;
|
|
78
90
|
} else if (e.method === "GET") {
|
|
79
91
|
let t = e.nextUrl.searchParams.get("query");
|
|
80
|
-
if (!t) return
|
|
92
|
+
if (!t) return A.json(i("Query parameter is required", 400), { status: 400 });
|
|
81
93
|
try {
|
|
82
94
|
s = JSON.parse(t);
|
|
83
95
|
} catch {
|
|
84
|
-
return
|
|
96
|
+
return A.json(i("Invalid JSON in query parameter", 400), { status: 400 });
|
|
85
97
|
}
|
|
86
|
-
} else return
|
|
98
|
+
} else return A.json(i("Method not allowed", 405), { status: 405 });
|
|
87
99
|
let c = await t(e, a), l = r.validateQuery(s);
|
|
88
|
-
if (!l.isValid) return
|
|
100
|
+
if (!l.isValid) return A.json(i(`Query validation failed: ${l.errors.join(", ")}`, 400), { status: 400 });
|
|
89
101
|
let u = s.measures?.[0] || s.dimensions?.[0];
|
|
90
|
-
if (!u) return
|
|
102
|
+
if (!u) return A.json(i("No measures or dimensions specified", 400), { status: 400 });
|
|
91
103
|
let d = u.split(".")[0], f = await r.generateSQL(d, s, c), p = o(s, f);
|
|
92
|
-
return
|
|
104
|
+
return A.json(p, { headers: n ? N(e, n) : {} });
|
|
93
105
|
} catch (e) {
|
|
94
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js SQL handler error:", e),
|
|
106
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js SQL handler error:", e), A.json(i(e instanceof Error ? e.message : "SQL generation failed", 500), { status: 500 });
|
|
95
107
|
}
|
|
96
108
|
};
|
|
97
109
|
}
|
|
98
|
-
function
|
|
99
|
-
let { extractSecurityContext: t, cors: r } = e, i =
|
|
110
|
+
function R(e) {
|
|
111
|
+
let { extractSecurityContext: t, cors: r } = M(e), i = j(e);
|
|
100
112
|
return async function(e, a) {
|
|
101
113
|
try {
|
|
102
114
|
let o;
|
|
@@ -105,122 +117,126 @@ function A(e) {
|
|
|
105
117
|
o = t.query || t;
|
|
106
118
|
} else if (e.method === "GET") {
|
|
107
119
|
let t = e.nextUrl.searchParams.get("query");
|
|
108
|
-
if (!t) return
|
|
120
|
+
if (!t) return A.json({
|
|
109
121
|
error: "Query parameter is required",
|
|
110
122
|
valid: !1
|
|
111
123
|
}, { status: 400 });
|
|
112
124
|
try {
|
|
113
125
|
o = JSON.parse(t);
|
|
114
126
|
} catch {
|
|
115
|
-
return
|
|
127
|
+
return A.json({
|
|
116
128
|
error: "Invalid JSON in query parameter",
|
|
117
129
|
valid: !1
|
|
118
130
|
}, { status: 400 });
|
|
119
131
|
}
|
|
120
|
-
} else return
|
|
132
|
+
} else return A.json({
|
|
121
133
|
error: "Method not allowed",
|
|
122
134
|
valid: !1
|
|
123
135
|
}, { status: 405 });
|
|
124
136
|
let s = await t(e, a), c = await n(o, s, i);
|
|
125
|
-
return
|
|
137
|
+
return A.json(c, { headers: r ? N(e, r) : {} });
|
|
126
138
|
} catch (e) {
|
|
127
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js dry-run handler error:", e),
|
|
139
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js dry-run handler error:", e), A.json({
|
|
128
140
|
error: e instanceof Error ? e.message : "Dry-run validation failed",
|
|
129
141
|
valid: !1
|
|
130
142
|
}, { status: 400 });
|
|
131
143
|
}
|
|
132
144
|
};
|
|
133
145
|
}
|
|
134
|
-
function
|
|
135
|
-
let { extractSecurityContext: t, cors: n } = e, r =
|
|
146
|
+
function z(e) {
|
|
147
|
+
let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
|
|
136
148
|
return async function(e, a) {
|
|
137
149
|
try {
|
|
138
|
-
if (e.method !== "POST") return
|
|
150
|
+
if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
139
151
|
let { queries: o } = await e.json();
|
|
140
|
-
if (!o || !Array.isArray(o)) return
|
|
141
|
-
if (o.length === 0) return
|
|
152
|
+
if (!o || !Array.isArray(o)) return A.json(i("Request body must contain a \"queries\" array", 400), { status: 400 });
|
|
153
|
+
if (o.length === 0) return A.json(i("Queries array cannot be empty", 400), { status: 400 });
|
|
142
154
|
let s = await l(o, await t(e, a), r, { skipCache: e.headers.get("x-cache-control") === "no-cache" });
|
|
143
|
-
return
|
|
155
|
+
return A.json(s, { headers: n ? N(e, n) : {} });
|
|
144
156
|
} catch (e) {
|
|
145
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js batch handler error:", e),
|
|
157
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js batch handler error:", e), A.json(i(e instanceof Error ? e.message : "Batch execution failed", 500), { status: 500 });
|
|
146
158
|
}
|
|
147
159
|
};
|
|
148
160
|
}
|
|
149
|
-
function
|
|
150
|
-
let { extractSecurityContext: t, cors: n } = e, r =
|
|
161
|
+
function B(e) {
|
|
162
|
+
let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
|
|
151
163
|
return async function(e, i) {
|
|
152
164
|
try {
|
|
153
|
-
if (e.method !== "POST") return
|
|
165
|
+
if (e.method !== "POST") return A.json({ error: "Method not allowed" }, { status: 405 });
|
|
154
166
|
let a = await e.json(), o = a.query || a, s = a.options || {}, c = await t(e, i), l = r.validateQuery(o);
|
|
155
|
-
if (!l.isValid) return
|
|
167
|
+
if (!l.isValid) return A.json({ error: `Query validation failed: ${l.errors.join(", ")}` }, { status: 400 });
|
|
156
168
|
let u = await r.explainQuery(o, c, s);
|
|
157
|
-
return
|
|
169
|
+
return A.json(u, { headers: n ? N(e, n) : {} });
|
|
158
170
|
} catch (e) {
|
|
159
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js explain handler error:", e),
|
|
171
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js explain handler error:", e), A.json({ error: e instanceof Error ? e.message : "Explain query failed" }, { status: 500 });
|
|
160
172
|
}
|
|
161
173
|
};
|
|
162
174
|
}
|
|
163
|
-
function
|
|
164
|
-
let { cors: n } = e, r =
|
|
175
|
+
function V(e) {
|
|
176
|
+
let { cors: n } = M(e), r = j(e);
|
|
165
177
|
return async function(e, a) {
|
|
166
178
|
try {
|
|
167
|
-
if (e.method !== "POST") return
|
|
179
|
+
if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
168
180
|
let a = await t(r, await e.json());
|
|
169
|
-
return
|
|
181
|
+
return A.json(a, { headers: n ? N(e, n) : {} });
|
|
170
182
|
} catch (e) {
|
|
171
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js discover handler error:", e),
|
|
183
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js discover handler error:", e), A.json(i(e instanceof Error ? e.message : "Discovery failed", 500), { status: 500 });
|
|
172
184
|
}
|
|
173
185
|
};
|
|
174
186
|
}
|
|
175
|
-
function
|
|
176
|
-
let { cors: t } = e, n =
|
|
187
|
+
function H(e) {
|
|
188
|
+
let { cors: t } = M(e), n = j(e);
|
|
177
189
|
return async function(e, r) {
|
|
178
190
|
try {
|
|
179
|
-
if (e.method !== "POST") return
|
|
191
|
+
if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
180
192
|
let r = await e.json();
|
|
181
|
-
if (!r.naturalLanguage) return
|
|
193
|
+
if (!r.naturalLanguage) return A.json(i("naturalLanguage field is required", 400), { status: 400 });
|
|
182
194
|
let o = await a(n, r);
|
|
183
|
-
return
|
|
195
|
+
return A.json(o, { headers: t ? N(e, t) : {} });
|
|
184
196
|
} catch (e) {
|
|
185
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js suggest handler error:", e),
|
|
197
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js suggest handler error:", e), A.json(i(e instanceof Error ? e.message : "Query suggestion failed", 500), { status: 500 });
|
|
186
198
|
}
|
|
187
199
|
};
|
|
188
200
|
}
|
|
189
|
-
function
|
|
190
|
-
let { cors: t } = e, n =
|
|
201
|
+
function U(e) {
|
|
202
|
+
let { cors: t } = M(e), n = j(e);
|
|
191
203
|
return async function(e, a) {
|
|
192
204
|
try {
|
|
193
|
-
if (e.method !== "POST") return
|
|
205
|
+
if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
194
206
|
let a = await e.json();
|
|
195
|
-
if (!a.query) return
|
|
207
|
+
if (!a.query) return A.json(i("query field is required", 400), { status: 400 });
|
|
196
208
|
let o = await r(n, a);
|
|
197
|
-
return
|
|
209
|
+
return A.json(o, { headers: t ? N(e, t) : {} });
|
|
198
210
|
} catch (e) {
|
|
199
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js validate handler error:", e),
|
|
211
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js validate handler error:", e), A.json(i(e instanceof Error ? e.message : "Query validation failed", 500), { status: 500 });
|
|
200
212
|
}
|
|
201
213
|
};
|
|
202
214
|
}
|
|
203
|
-
function
|
|
204
|
-
let { extractSecurityContext: t, cors: n } = e, r =
|
|
215
|
+
function W(e) {
|
|
216
|
+
let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
|
|
205
217
|
return async function(e, a) {
|
|
206
218
|
try {
|
|
207
|
-
if (e.method !== "POST") return
|
|
219
|
+
if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
208
220
|
let o = await e.json();
|
|
209
|
-
if (!o.query) return
|
|
221
|
+
if (!o.query) return A.json(i("query field is required", 400), { status: 400 });
|
|
210
222
|
let c = await s(r, await t(e, a), o);
|
|
211
|
-
return
|
|
223
|
+
return A.json(c, { headers: n ? N(e, n) : {} });
|
|
212
224
|
} catch (e) {
|
|
213
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js MCP load handler error:", e),
|
|
225
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js MCP load handler error:", e), A.json(i(e instanceof Error ? e.message : "Query execution failed", 500), { status: 500 });
|
|
214
226
|
}
|
|
215
227
|
};
|
|
216
228
|
}
|
|
217
|
-
function
|
|
218
|
-
let { extractSecurityContext: t, cors: n, mcp: r = { enabled: !0 } } = e, a =
|
|
229
|
+
function G(e) {
|
|
230
|
+
let { extractSecurityContext: t, cors: n } = M(e), { mcp: r = { enabled: !0 } } = e, a = j(e), o = w(a, r.resources), s = D(r.prompts);
|
|
219
231
|
return async function(e) {
|
|
220
|
-
if (
|
|
232
|
+
if (r.resourceMetadataUrl && !E(e.headers.get("authorization"))) return A.json({ error: "Bearer token required" }, {
|
|
233
|
+
status: 401,
|
|
234
|
+
headers: { "WWW-Authenticate": v(r.resourceMetadataUrl) }
|
|
235
|
+
});
|
|
236
|
+
if (e.method === "DELETE") return A.json({ error: "Session termination not supported" }, { status: 405 });
|
|
221
237
|
if (e.method === "GET") {
|
|
222
|
-
let t = new TextEncoder(), r =
|
|
223
|
-
e.enqueue(t.encode(
|
|
238
|
+
let t = new TextEncoder(), r = h(), i = new ReadableStream({ start(e) {
|
|
239
|
+
e.enqueue(t.encode(k({
|
|
224
240
|
jsonrpc: "2.0",
|
|
225
241
|
method: "mcp/ready",
|
|
226
242
|
params: { protocol: "streamable-http" }
|
|
@@ -231,87 +247,91 @@ function L(e) {
|
|
|
231
247
|
Connection: "keep-alive"
|
|
232
248
|
});
|
|
233
249
|
if (n) {
|
|
234
|
-
let t =
|
|
250
|
+
let t = N(e, n);
|
|
235
251
|
Object.entries(t).forEach(([e, t]) => a.set(e, t));
|
|
236
252
|
}
|
|
237
|
-
return new
|
|
253
|
+
return new A(i, {
|
|
238
254
|
status: 200,
|
|
239
255
|
headers: a
|
|
240
256
|
});
|
|
241
257
|
}
|
|
242
|
-
if (e.method !== "POST") return
|
|
243
|
-
let
|
|
244
|
-
if (!
|
|
245
|
-
let
|
|
246
|
-
if (!
|
|
247
|
-
let
|
|
248
|
-
if (!
|
|
258
|
+
if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
259
|
+
let c = O(e.headers.get("origin"), r.allowedOrigins ? { allowedOrigins: r.allowedOrigins } : {});
|
|
260
|
+
if (!c.valid) return A.json(x(null, -32600, c.reason), { status: 403 });
|
|
261
|
+
let l = e.headers.get("accept");
|
|
262
|
+
if (!_(l)) return A.json(x(null, -32600, "Accept header must include both application/json and text/event-stream"), { status: 400 });
|
|
263
|
+
let u = b(Object.fromEntries(e.headers.entries()));
|
|
264
|
+
if (!u.ok) return A.json({
|
|
249
265
|
error: "Unsupported MCP protocol version",
|
|
250
|
-
supported:
|
|
266
|
+
supported: u.supported
|
|
251
267
|
}, { status: 426 });
|
|
252
|
-
let
|
|
268
|
+
let d;
|
|
253
269
|
try {
|
|
254
|
-
|
|
270
|
+
d = await e.json();
|
|
255
271
|
} catch {
|
|
256
|
-
|
|
272
|
+
d = null;
|
|
257
273
|
}
|
|
258
|
-
let
|
|
259
|
-
if (!
|
|
260
|
-
let
|
|
274
|
+
let f = y(d);
|
|
275
|
+
if (!f) return A.json(x(null, -32600, "Invalid JSON-RPC 2.0 request"), { status: 400 });
|
|
276
|
+
let p = m(l), w = f.method === "initialize", D = (t, r = 200, i = {}) => A.json(t, {
|
|
261
277
|
status: r,
|
|
262
278
|
headers: {
|
|
263
|
-
...n ?
|
|
279
|
+
...n ? N(e, n) : {},
|
|
264
280
|
...i
|
|
265
281
|
}
|
|
266
282
|
});
|
|
267
283
|
try {
|
|
268
|
-
let i = await
|
|
284
|
+
let i = await S(f.method, f.params, {
|
|
269
285
|
semanticLayer: a,
|
|
270
286
|
extractSecurityContext: (e) => t(e),
|
|
271
287
|
rawRequest: e,
|
|
272
288
|
rawResponse: null,
|
|
273
|
-
|
|
289
|
+
resources: o,
|
|
290
|
+
prompts: s,
|
|
291
|
+
appEnabled: !!r.app,
|
|
292
|
+
appConfig: typeof r.app == "object" ? r.app : void 0,
|
|
293
|
+
serverName: r.serverName
|
|
274
294
|
});
|
|
275
|
-
if (
|
|
276
|
-
let
|
|
277
|
-
|
|
278
|
-
let
|
|
279
|
-
if (
|
|
280
|
-
let t = new TextEncoder(), r =
|
|
281
|
-
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(
|
|
295
|
+
if (C(f)) return new A(null, { status: 202 });
|
|
296
|
+
let c = w && i && typeof i == "object" && "sessionId" in i ? i.sessionId : void 0, l = {};
|
|
297
|
+
c && (l[T] = c);
|
|
298
|
+
let u = g(f.id ?? null, i);
|
|
299
|
+
if (p) {
|
|
300
|
+
let t = new TextEncoder(), r = h(), i = new ReadableStream({ start(e) {
|
|
301
|
+
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(k(u, r))), e.close();
|
|
282
302
|
} }), a = new Headers({
|
|
283
303
|
"Content-Type": "text/event-stream",
|
|
284
304
|
"Cache-Control": "no-cache",
|
|
285
305
|
Connection: "keep-alive",
|
|
286
|
-
...
|
|
306
|
+
...l
|
|
287
307
|
});
|
|
288
308
|
if (n) {
|
|
289
|
-
let t =
|
|
309
|
+
let t = N(e, n);
|
|
290
310
|
Object.entries(t).forEach(([e, t]) => a.set(e, t));
|
|
291
311
|
}
|
|
292
|
-
return new
|
|
312
|
+
return new A(i, {
|
|
293
313
|
status: 200,
|
|
294
314
|
headers: a
|
|
295
315
|
});
|
|
296
316
|
}
|
|
297
|
-
return D(
|
|
317
|
+
return D(u, 200, l);
|
|
298
318
|
} catch (t) {
|
|
299
|
-
if (
|
|
319
|
+
if (C(f)) return process.env.NODE_ENV !== "test" && console.error("Next.js MCP notification processing error:", t), new A(null, { status: 202 });
|
|
300
320
|
process.env.NODE_ENV !== "test" && console.error("Next.js MCP RPC handler error:", t);
|
|
301
|
-
let r = t?.code ?? -32603, i = t?.data, a = t.message || "MCP request failed", o =
|
|
302
|
-
if (
|
|
303
|
-
let t = new TextEncoder(), r =
|
|
304
|
-
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(
|
|
321
|
+
let r = t?.code ?? -32603, i = t?.data, a = t.message || "MCP request failed", o = x(f.id ?? null, r, a, i);
|
|
322
|
+
if (p) {
|
|
323
|
+
let t = new TextEncoder(), r = h(), i = new ReadableStream({ start(e) {
|
|
324
|
+
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(k(o, r))), e.close();
|
|
305
325
|
} }), a = new Headers({
|
|
306
326
|
"Content-Type": "text/event-stream",
|
|
307
327
|
"Cache-Control": "no-cache",
|
|
308
328
|
Connection: "keep-alive"
|
|
309
329
|
});
|
|
310
330
|
if (n) {
|
|
311
|
-
let t =
|
|
331
|
+
let t = N(e, n);
|
|
312
332
|
Object.entries(t).forEach(([e, t]) => a.set(e, t));
|
|
313
333
|
}
|
|
314
|
-
return new
|
|
334
|
+
return new A(i, {
|
|
315
335
|
status: 200,
|
|
316
336
|
headers: a
|
|
317
337
|
});
|
|
@@ -320,21 +340,21 @@ function L(e) {
|
|
|
320
340
|
}
|
|
321
341
|
};
|
|
322
342
|
}
|
|
323
|
-
function
|
|
324
|
-
let { extractSecurityContext: t, cors: n, agent: r } = e;
|
|
343
|
+
function K(e) {
|
|
344
|
+
let { extractSecurityContext: t, cors: n } = M(e), { agent: r } = e;
|
|
325
345
|
if (!r) throw Error("agent config is required for createAgentChatHandler");
|
|
326
|
-
let i =
|
|
346
|
+
let i = j(e);
|
|
327
347
|
return async function(e, a) {
|
|
328
348
|
try {
|
|
329
|
-
if (e.method !== "POST") return
|
|
330
|
-
let { handleAgentChat: o } = await import("../handler-
|
|
331
|
-
if (!s || typeof s != "string") return
|
|
349
|
+
if (e.method !== "POST") return A.json({ error: "Method not allowed - use POST" }, { status: 405 });
|
|
350
|
+
let { handleAgentChat: o } = await import("../handler-3LGcjLtr.js"), { message: s, sessionId: c, history: l } = await e.json();
|
|
351
|
+
if (!s || typeof s != "string") return A.json({ error: "message is required and must be a string" }, { status: 400 });
|
|
332
352
|
let u = (r.apiKey || "").trim();
|
|
333
353
|
if (r.allowClientApiKey) {
|
|
334
354
|
let t = e.headers.get("x-agent-api-key");
|
|
335
355
|
t && (u = t.trim());
|
|
336
356
|
}
|
|
337
|
-
if (!u) return
|
|
357
|
+
if (!u) return A.json({ error: "No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header." }, { status: 401 });
|
|
338
358
|
let d = r.allowClientApiKey && e.headers.get("x-agent-provider") || void 0, f = r.allowClientApiKey && e.headers.get("x-agent-model") || void 0, p = r.allowClientApiKey && e.headers.get("x-agent-provider-endpoint") || void 0, m = await t(e, a), h = r.buildSystemContext?.(m), g = new TextEncoder(), _ = new ReadableStream({ async start(e) {
|
|
339
359
|
try {
|
|
340
360
|
let t = o({
|
|
@@ -369,7 +389,7 @@ function R(e) {
|
|
|
369
389
|
Connection: "keep-alive"
|
|
370
390
|
});
|
|
371
391
|
if (n) {
|
|
372
|
-
let t =
|
|
392
|
+
let t = N(e, n);
|
|
373
393
|
Object.entries(t).forEach(([e, t]) => v.set(e, t));
|
|
374
394
|
}
|
|
375
395
|
return new Response(_, {
|
|
@@ -377,20 +397,20 @@ function R(e) {
|
|
|
377
397
|
headers: v
|
|
378
398
|
});
|
|
379
399
|
} catch (e) {
|
|
380
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js agent chat handler error:", e),
|
|
400
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js agent chat handler error:", e), A.json({ error: e instanceof Error ? e.message : "Agent chat failed" }, { status: 500 });
|
|
381
401
|
}
|
|
382
402
|
};
|
|
383
403
|
}
|
|
384
|
-
function
|
|
404
|
+
function q(e) {
|
|
385
405
|
let { mcp: t = { enabled: !0 } } = e, n = {
|
|
386
|
-
load:
|
|
387
|
-
meta:
|
|
388
|
-
sql:
|
|
389
|
-
dryRun:
|
|
390
|
-
batch:
|
|
391
|
-
explain:
|
|
406
|
+
load: F(e),
|
|
407
|
+
meta: I(e),
|
|
408
|
+
sql: L(e),
|
|
409
|
+
dryRun: R(e),
|
|
410
|
+
batch: z(e),
|
|
411
|
+
explain: B(e)
|
|
392
412
|
};
|
|
393
|
-
return t.enabled !== !1 && (n.mcpRpc =
|
|
413
|
+
return t.enabled !== !1 && (n.mcpRpc = G(e)), e.agent && (n.agentChat = K(e)), n;
|
|
394
414
|
}
|
|
395
415
|
//#endregion
|
|
396
|
-
export {
|
|
416
|
+
export { K as createAgentChatHandler, z as createBatchHandler, q as createCubeHandlers, V as createDiscoverHandler, R as createDryRunHandler, B as createExplainHandler, F as createLoadHandler, W as createMcpLoadHandler, G as createMcpRpcHandler, I as createMetaHandler, P as createOptionsHandler, L as createSqlHandler, H as createSuggestHandler, U as createValidateHandler };
|