drizzle-cube 0.5.1 → 0.5.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/README.md +4 -0
- package/dist/adapters/express/index.cjs +2 -2
- package/dist/adapters/express/index.js +105 -104
- package/dist/adapters/fastify/index.cjs +2 -2
- package/dist/adapters/fastify/index.js +107 -106
- package/dist/adapters/{google-CBfBGU4F.js → google-CT4kgmBf.js} +1 -1
- package/dist/adapters/{google-BOAwi9Ib.cjs → google-Dgo9-Kb5.cjs} +1 -1
- package/dist/adapters/{handler-BzzbVpcl.cjs → handler-CNn3q29F.cjs} +13 -13
- package/dist/adapters/{handler-3LGcjLtr.js → handler-_TKfigrZ.js} +33 -34
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +99 -98
- package/dist/adapters/{locale-DTnJrxm1.js → locale-BQQrZYhz.js} +442 -404
- package/dist/adapters/locale-Dl_3R6hP.cjs +198 -0
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +2 -2
- package/dist/adapters/mcp-transport-CkyawtUT.cjs +40 -0
- package/dist/adapters/mcp-transport-DSbd6M_u.js +586 -0
- package/dist/adapters/mcp-transport.d.ts +22 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +136 -135
- package/dist/adapters/openai-Bgri5TJc.cjs +16 -0
- package/dist/adapters/{openai-C4BD8xnN.cjs → openai-BjLV_Wjx.cjs} +1 -1
- package/dist/{server/openai-CqZg6zYL.js → adapters/openai-CuUGrKaK.js} +824 -720
- package/dist/adapters/{openai-CaSQEduB.js → openai-DQawCWQb.js} +1 -1
- package/dist/adapters/{utils-DOg9oGdt.js → utils-DG8ti3FT.js} +1121 -687
- package/dist/adapters/utils-DrWvXf0G.cjs +128 -0
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.d.ts +46 -4
- package/dist/adapters/utils.js +1 -1
- package/dist/cli/index.cjs +2 -2
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/{DashboardEditModal-cSSIAZGy.js → DashboardEditModal-BBcB0E2g.js} +14 -14
- package/dist/client/chunks/{DashboardEditModal-cSSIAZGy.js.map → DashboardEditModal-BBcB0E2g.js.map} +1 -1
- package/dist/client/chunks/{FieldSearchModal-CZNo4pNK.js → FieldSearchModal-CisOov-_.js} +5 -5
- package/dist/client/chunks/{FieldSearchModal-CZNo4pNK.js.map → FieldSearchModal-CisOov-_.js.map} +1 -1
- package/dist/client/chunks/KpiDelta-D09hA_UJ.js +2 -0
- package/dist/client/chunks/KpiNumber-B7F9F9fC.js +2 -0
- package/dist/client/chunks/KpiText-C3ZXOF8b.js +2 -0
- package/dist/client/chunks/{RetentionCombinedChart-BD8tGeM_.js → RetentionCombinedChart-DiyZwiPv.js} +3 -3
- package/dist/client/chunks/{RetentionCombinedChart-BD8tGeM_.js.map → RetentionCombinedChart-DiyZwiPv.js.map} +1 -1
- package/dist/client/chunks/{RetentionHeatmap-B_5sewwi.js → RetentionHeatmap-usGF7BCo.js} +2 -2
- package/dist/client/chunks/{RetentionHeatmap-B_5sewwi.js.map → RetentionHeatmap-usGF7BCo.js.map} +1 -1
- package/dist/client/chunks/SchemaVisualization-DP4k1fPp.js +2 -0
- package/dist/client/chunks/SchemaVisualizationLazy-Brqv_PY9.js +2 -0
- package/dist/client/chunks/{analysis-builder-BeVZhiQ5.js → analysis-builder-0o1W-k3K.js} +8 -8
- package/dist/client/chunks/{analysis-builder-BeVZhiQ5.js.map → analysis-builder-0o1W-k3K.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-shared-BWc7ZZnG.js → analysis-builder-shared-Cz4KAlIC.js} +9 -9
- package/dist/client/chunks/{analysis-builder-shared-BWc7ZZnG.js.map → analysis-builder-shared-Cz4KAlIC.js.map} +1 -1
- package/dist/client/chunks/{chart-activity-grid-CWT0gLv4.js → chart-activity-grid-VFFm85hC.js} +18 -3
- package/dist/client/chunks/{chart-activity-grid-CWT0gLv4.js.map → chart-activity-grid-VFFm85hC.js.map} +1 -1
- package/dist/client/chunks/{chart-area-D63kG8OT.js → chart-area-CwwIHTmK.js} +3 -3
- package/dist/client/chunks/{chart-area-D63kG8OT.js.map → chart-area-CwwIHTmK.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-BEfsCLjl.js → chart-bar-Bmny922L.js} +3 -3
- package/dist/client/chunks/{chart-bar-BEfsCLjl.js.map → chart-bar-Bmny922L.js.map} +1 -1
- package/dist/client/chunks/{chart-box-plot-o-h9MRX5.js → chart-box-plot-DM7GwtCV.js} +2 -2
- package/dist/client/chunks/{chart-box-plot-o-h9MRX5.js.map → chart-box-plot-DM7GwtCV.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-CMDp4Pfm.js → chart-bubble-DJOq4IpT.js} +2 -2
- package/dist/client/chunks/{chart-bubble-CMDp4Pfm.js.map → chart-bubble-DJOq4IpT.js.map} +1 -1
- package/dist/client/chunks/{chart-candlestick-WyANJ0Ky.js → chart-candlestick-C2nzVCv1.js} +2 -2
- package/dist/client/chunks/{chart-candlestick-WyANJ0Ky.js.map → chart-candlestick-C2nzVCv1.js.map} +1 -1
- package/dist/client/chunks/{chart-data-table-C3Xh9jwL.js → chart-data-table-zZtwLf55.js} +31 -31
- package/dist/client/chunks/chart-data-table-zZtwLf55.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-C7pgktN5.js → chart-funnel-COTJy8BP.js} +2 -2
- package/dist/client/chunks/{chart-funnel-C7pgktN5.js.map → chart-funnel-COTJy8BP.js.map} +1 -1
- package/dist/client/chunks/{chart-gauge-D2r2B_AR.js → chart-gauge-C8lIneI0.js} +2 -2
- package/dist/client/chunks/{chart-gauge-D2r2B_AR.js.map → chart-gauge-C8lIneI0.js.map} +1 -1
- package/dist/client/chunks/{chart-heat-map-Dw2yjwfO.js → chart-heat-map-BJXt3RMt.js} +2 -2
- package/dist/client/chunks/{chart-heat-map-Dw2yjwfO.js.map → chart-heat-map-BJXt3RMt.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-delta-CYE0S1x_.js → chart-kpi-delta-DHkNqufb.js} +4 -4
- package/dist/client/chunks/{chart-kpi-delta-CYE0S1x_.js.map → chart-kpi-delta-DHkNqufb.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-BlZ79xHW.js → chart-kpi-number-BrXw7m-S.js} +6 -6
- package/dist/client/chunks/{chart-kpi-number-BlZ79xHW.js.map → chart-kpi-number-BrXw7m-S.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-DY1BnxPe.js → chart-kpi-text-D0plngLV.js} +3 -3
- package/dist/client/chunks/{chart-kpi-text-DY1BnxPe.js.map → chart-kpi-text-D0plngLV.js.map} +1 -1
- package/dist/client/chunks/{chart-line-CBsTThTv.js → chart-line-DKvW32U-.js} +3 -3
- package/dist/client/chunks/{chart-line-CBsTThTv.js.map → chart-line-DKvW32U-.js.map} +1 -1
- package/dist/client/chunks/{chart-markdown-BWaWVkuz.js → chart-markdown-CJU2hUq3.js} +1204 -1140
- package/dist/client/chunks/chart-markdown-CJU2hUq3.js.map +1 -0
- package/dist/client/chunks/{chart-measure-profile-B41qCTBG.js → chart-measure-profile-DNT_tbh4.js} +3 -3
- package/dist/client/chunks/{chart-measure-profile-B41qCTBG.js.map → chart-measure-profile-DNT_tbh4.js.map} +1 -1
- package/dist/client/chunks/{chart-pie-Djbu8x2v.js → chart-pie-CzYnncO-.js} +3 -3
- package/dist/client/chunks/{chart-pie-Djbu8x2v.js.map → chart-pie-CzYnncO-.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-BsTcKV0K.js → chart-radar-8iAt3QZl.js} +3 -3
- package/dist/client/chunks/{chart-radar-BsTcKV0K.js.map → chart-radar-8iAt3QZl.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-Du7XNnwE.js → chart-radial-bar-CJbG7RIe.js} +3 -3
- package/dist/client/chunks/{chart-radial-bar-Du7XNnwE.js.map → chart-radial-bar-CJbG7RIe.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-WwkZAhLy.js → chart-sankey-C-wLBUmb.js} +2 -2
- package/dist/client/chunks/{chart-sankey-WwkZAhLy.js.map → chart-sankey-C-wLBUmb.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-D8krEYsA.js → chart-scatter-NMjD1lbW.js} +3 -3
- package/dist/client/chunks/{chart-scatter-D8krEYsA.js.map → chart-scatter-NMjD1lbW.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-CIDB_pTl.js → chart-sunburst-HtJ-LJ7n.js} +3 -3
- package/dist/client/chunks/{chart-sunburst-CIDB_pTl.js.map → chart-sunburst-HtJ-LJ7n.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-C5C2iaWM.js → chart-tree-map-CetaLMt8.js} +3 -3
- package/dist/client/chunks/{chart-tree-map-C5C2iaWM.js.map → chart-tree-map-CetaLMt8.js.map} +1 -1
- package/dist/client/chunks/{chart-waterfall-BGdPrJ5Y.js → chart-waterfall-ontNp1Sd.js} +3 -3
- package/dist/client/chunks/{chart-waterfall-BGdPrJ5Y.js.map → chart-waterfall-ontNp1Sd.js.map} +1 -1
- package/dist/client/chunks/{charts-core-BXOqaYFn.js → charts-core-B5UXUg6_.js} +2 -2
- package/dist/client/chunks/{charts-core-BXOqaYFn.js.map → charts-core-B5UXUg6_.js.map} +1 -1
- package/dist/client/chunks/{core-DcfMGTVa.js → core-Dk6z6kC0.js} +2 -2
- package/dist/client/chunks/{core-DcfMGTVa.js.map → core-Dk6z6kC0.js.map} +1 -1
- package/dist/client/chunks/{exceljs.min-CcjgM-qg.js → exceljs.min-DaJsLlWM.js} +24 -24
- package/dist/client/chunks/{exceljs.min-CcjgM-qg.js.map → exceljs.min-DaJsLlWM.js.map} +1 -1
- package/dist/client/chunks/{nl-NL-vCifBijs.js → nl-NL-DDf0OdfW.js} +17 -2
- package/dist/client/chunks/{nl-NL-vCifBijs.js.map → nl-NL-DDf0OdfW.js.map} +1 -1
- package/dist/client/chunks/{schema-visualization-Xp60Ff2W.js → schema-visualization-cnB2xZxn.js} +9 -9
- package/dist/client/chunks/{schema-visualization-Xp60Ff2W.js.map → schema-visualization-cnB2xZxn.js.map} +1 -1
- package/dist/client/chunks/{syntaxHighlighting-CnDujqwg.js → syntaxHighlighting-D8J6Yt9j.js} +2 -2
- package/dist/client/chunks/{syntaxHighlighting-CnDujqwg.js.map → syntaxHighlighting-D8J6Yt9j.js.map} +1 -1
- package/dist/client/chunks/{useDebounce-CfmUMFau.js → useDebounce-BOBSvhHy.js} +4 -4
- package/dist/client/chunks/{useDebounce-CfmUMFau.js.map → useDebounce-BOBSvhHy.js.map} +1 -1
- package/dist/client/chunks/{useExplainAI-BKGmejIj.js → useExplainAI-B_Pi4eXW.js} +4 -4
- package/dist/client/chunks/{useExplainAI-BKGmejIj.js.map → useExplainAI-B_Pi4eXW.js.map} +1 -1
- package/dist/client/chunks/{utils-BldkcRHv.js → utils-BIuqPQuJ.js} +2 -2
- package/dist/client/chunks/{utils-BldkcRHv.js.map → utils-BIuqPQuJ.js.map} +1 -1
- package/dist/client/chunks/{vendor-ClXpIiea.js → vendor-BxLCTfvm.js} +8 -8
- package/dist/client/chunks/{vendor-ClXpIiea.js.map → vendor-BxLCTfvm.js.map} +1 -1
- package/dist/client/components.js +3 -3
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +15 -15
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/utils.js +6 -6
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +27 -27
- package/dist/server/index.cjs +145 -144
- package/dist/server/index.js +1960 -1868
- package/dist/server/{openai-D9Zjuby1.cjs → openai-BfiZU0rG.cjs} +1 -1
- package/dist/server/openai-BwsBio1K.cjs +16 -0
- package/dist/server/{openai-rwauPzCT.js → openai-CLWSwD-D.js} +1 -1
- package/dist/{adapters/openai-BAnEZgKZ.js → server/openai-zpXlGbbF.js} +824 -720
- package/package.json +2 -2
- package/dist/adapters/locale-DueXjqMh.cjs +0 -198
- package/dist/adapters/mcp-prompts-BUFyQLHQ.js +0 -377
- package/dist/adapters/mcp-prompts-B_NvEJT_.cjs +0 -111
- package/dist/adapters/mcp-transport-C7VLf4T5.js +0 -579
- package/dist/adapters/mcp-transport-poPHl_2j.cjs +0 -39
- package/dist/adapters/openai-4JP2B6pB.cjs +0 -16
- package/dist/adapters/utils-DNrj-ryp.cjs +0 -17
- package/dist/client/chunks/KpiDelta-Dll_eCV1.js +0 -2
- package/dist/client/chunks/KpiNumber-BPlR92hI.js +0 -2
- package/dist/client/chunks/KpiText-BIxq7Jso.js +0 -2
- package/dist/client/chunks/SchemaVisualization-CCICjhvv.js +0 -2
- package/dist/client/chunks/SchemaVisualizationLazy-DraGsMx6.js +0 -2
- package/dist/client/chunks/chart-data-table-C3Xh9jwL.js.map +0 -1
- package/dist/client/chunks/chart-markdown-BWaWVkuz.js.map +0 -1
- package/dist/server/openai-DmuEbFd6.cjs +0 -16
- /package/dist/adapters/{anthropic-Cto4Jxqt.cjs → anthropic-BIva8k1r.cjs} +0 -0
- /package/dist/adapters/{anthropic-DpEbCVvF.js → anthropic-B_rg0BhK.js} +0 -0
- /package/dist/adapters/{dist-BnyV9wfA.cjs → dist-Boc63-1q.cjs} +0 -0
- /package/dist/adapters/{dist-DjVh2RFz.js → dist-De5fzUEM.js} +0 -0
|
@@ -32,6 +32,13 @@ export interface McpDispatchContext {
|
|
|
32
32
|
negotiatedProtocol?: string | null;
|
|
33
33
|
resources?: MCPResource[];
|
|
34
34
|
prompts?: MCPPrompt[];
|
|
35
|
+
/**
|
|
36
|
+
* Pre-resolved instructions string returned in the `initialize` result
|
|
37
|
+
* (`InitializeResult.instructions` per MCP spec). When omitted, falls
|
|
38
|
+
* back to `getDefaultMcpInstructions()`. Adapters resolve this from the
|
|
39
|
+
* `MCPOptions.instructions` resolver before calling `dispatchMcpMethod`.
|
|
40
|
+
*/
|
|
41
|
+
instructions?: string;
|
|
35
42
|
/** Enable MCP App visualization for load tool */
|
|
36
43
|
appEnabled?: boolean;
|
|
37
44
|
/** Locale configuration for the MCP App (only used when appEnabled is true) */
|
|
@@ -48,6 +55,7 @@ export interface MCPResource {
|
|
|
48
55
|
}
|
|
49
56
|
export type MCPPromptResolver = MCPPrompt[] | ((defaults: MCPPrompt[]) => MCPPrompt[]);
|
|
50
57
|
export type MCPResourceResolver = MCPResource[] | ((defaults: MCPResource[]) => MCPResource[]);
|
|
58
|
+
export type MCPInstructionsResolver = string | ((defaults: string) => string);
|
|
51
59
|
export interface ProtocolNegotiation {
|
|
52
60
|
ok: boolean;
|
|
53
61
|
negotiated: string | null;
|
|
@@ -130,7 +138,21 @@ export declare function buildToolList(options?: {
|
|
|
130
138
|
}[];
|
|
131
139
|
export declare function getDefaultResources(): MCPResource[];
|
|
132
140
|
export declare function getDefaultPrompts(): MCPPrompt[];
|
|
141
|
+
/**
|
|
142
|
+
* Default instructions string returned in `InitializeResult.instructions`.
|
|
143
|
+
* Re-exported here so adapter consumers don't need to reach into `server/ai`.
|
|
144
|
+
*/
|
|
145
|
+
export declare function getDefaultInstructions(): string;
|
|
133
146
|
export declare function resolveMcpPrompts(prompts?: MCPPromptResolver): MCPPrompt[];
|
|
134
147
|
export declare function resolveMcpResources(resources?: MCPResourceResolver): MCPResource[];
|
|
148
|
+
/**
|
|
149
|
+
* Resolve the MCP instructions string for the `initialize` response.
|
|
150
|
+
*
|
|
151
|
+
* - `undefined` → returns the built-in defaults.
|
|
152
|
+
* - `string` → replaces the defaults entirely.
|
|
153
|
+
* - `(defaults) => string` → derive from / extend the defaults (e.g. append
|
|
154
|
+
* project-specific guidance like custom cube semantics).
|
|
155
|
+
*/
|
|
156
|
+
export declare function resolveMcpInstructions(instructions?: MCPInstructionsResolver): string;
|
|
135
157
|
export declare function buildMcpSchemaResource(semanticLayer: SemanticLayerCompiler): MCPResource;
|
|
136
158
|
export declare function buildMcpResources(semanticLayer: SemanticLayerCompiler, resources?: MCPResourceResolver): MCPResource[];
|
|
@@ -1 +1 @@
|
|
|
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
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../utils-DrWvXf0G.cjs`),t=require(`../locale-Dl_3R6hP.cjs`),n=require(`../mcp-transport-CkyawtUT.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.y(l.prompts),p=n.v(l.instructions);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.b({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.S(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.x(a))return r.NextResponse.json(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`),{status:400});let m=n.h(Object.fromEntries(t.headers.entries()));if(!m.ok)return r.NextResponse.json({error:`Unsupported MCP protocol version`,supported:m.supported},{status:426});let h;try{h=await t.json()}catch{h=null}let g=n.g(h);if(!g)return r.NextResponse.json(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`),{status:400});let _=n.C(a),v=g.method===`initialize`,y=(e,n=200,i={})=>r.NextResponse.json(e,{status:n,headers:{...c?o(t,c):{},...i}});try{let e=await n.l(g.method,g.params,{semanticLayer:u,extractSecurityContext:e=>s(e),rawRequest:t,rawResponse:null,resources:d,prompts:f,instructions:p,appEnabled:!!l.app,appConfig:typeof l.app==`object`?l.app:void 0,serverName:l.serverName});if(n.m(g))return new r.NextResponse(null,{status:202});let i=v&&e&&typeof e==`object`&&`sessionId`in e?e.sessionId:void 0,a={};i&&(a[n.r]=i);let m=n.a(g.id??null,e);if(_){let e=new TextEncoder,i=n._(),s=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.b(m,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 y(m,200,a)}catch(e){if(n.m(g))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(g.id??null,i,s,a);if(_){let e=new TextEncoder,i=n._(),a=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n.b(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 y(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-CNn3q29F.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 { i as u, n as d, r as f, t as p } from "../locale-
|
|
3
|
-
import {
|
|
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-DG8ti3FT.js";
|
|
2
|
+
import { i as u, n as d, r as f, t as p } from "../locale-BQQrZYhz.js";
|
|
3
|
+
import { C as m, S as h, _ as g, a as _, b as v, c as y, g as b, h as x, i as S, l as C, m as w, o as T, r as E, u as D, v as O, x as k, y as A } from "../mcp-transport-DSbd6M_u.js";
|
|
4
|
+
import { NextResponse as j } from "next/server";
|
|
5
5
|
//#region src/adapters/nextjs/index.ts
|
|
6
|
-
function
|
|
6
|
+
function M(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,7 +17,7 @@ function j(e) {
|
|
|
17
17
|
s.registerCube(e);
|
|
18
18
|
}), s;
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function N(e) {
|
|
21
21
|
return {
|
|
22
22
|
extractSecurityContext: async (t, n) => f(await e.extractSecurityContext(t, n), d((e) => t.headers.get(e))),
|
|
23
23
|
cors: e.cors ? {
|
|
@@ -26,13 +26,13 @@ function M(e) {
|
|
|
26
26
|
} : void 0
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
function
|
|
29
|
+
function P(e, t) {
|
|
30
30
|
let n = e.headers.get("origin"), r = {};
|
|
31
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;
|
|
32
32
|
}
|
|
33
|
-
function
|
|
33
|
+
function F(e) {
|
|
34
34
|
return async function(t) {
|
|
35
|
-
let n =
|
|
35
|
+
let n = P(t, {
|
|
36
36
|
...e,
|
|
37
37
|
allowedHeaders: p(e.allowedHeaders)
|
|
38
38
|
});
|
|
@@ -42,8 +42,8 @@ function P(e) {
|
|
|
42
42
|
});
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
function
|
|
46
|
-
let { extractSecurityContext: t, cors: n } =
|
|
45
|
+
function I(e) {
|
|
46
|
+
let { extractSecurityContext: t, cors: n } = N(e), r = M(e);
|
|
47
47
|
return async function(e, a) {
|
|
48
48
|
try {
|
|
49
49
|
let o;
|
|
@@ -52,35 +52,35 @@ function F(e) {
|
|
|
52
52
|
o = t.query || t;
|
|
53
53
|
} else if (e.method === "GET") {
|
|
54
54
|
let t = e.nextUrl.searchParams.get("query");
|
|
55
|
-
if (!t) return
|
|
55
|
+
if (!t) return j.json(i("Query parameter is required", 400), { status: 400 });
|
|
56
56
|
try {
|
|
57
57
|
o = JSON.parse(t);
|
|
58
58
|
} catch {
|
|
59
|
-
return
|
|
59
|
+
return j.json(i("Invalid JSON in query parameter", 400), { status: 400 });
|
|
60
60
|
}
|
|
61
|
-
} else return
|
|
61
|
+
} else return j.json(i("Method not allowed", 405), { status: 405 });
|
|
62
62
|
let s = await t(e, a), l = r.validateQuery(o);
|
|
63
|
-
if (!l.isValid) return
|
|
63
|
+
if (!l.isValid) return j.json(i(`Query validation failed: ${l.errors.join(", ")}`, 400), { status: 400 });
|
|
64
64
|
let u = e.headers.get("x-cache-control") === "no-cache", d = await r.executeMultiCubeQuery(o, s, { skipCache: u }), f = c(o, d, r);
|
|
65
|
-
return
|
|
65
|
+
return j.json(f, { headers: n ? P(e, n) : {} });
|
|
66
66
|
} catch (e) {
|
|
67
|
-
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), j.json(i(e instanceof Error ? e.message : "Query execution failed", 500), { status: 500 });
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
-
function
|
|
72
|
-
let { cors: n } =
|
|
71
|
+
function L(t) {
|
|
72
|
+
let { cors: n } = N(t), r = M(t);
|
|
73
73
|
return async function(t, a) {
|
|
74
74
|
try {
|
|
75
75
|
let i = e(r.getMetadata());
|
|
76
|
-
return
|
|
76
|
+
return j.json(i, { headers: n ? P(t, n) : {} });
|
|
77
77
|
} catch (e) {
|
|
78
|
-
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), j.json(i(e instanceof Error ? e.message : "Failed to fetch metadata", 500), { status: 500 });
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
|
-
function
|
|
83
|
-
let { extractSecurityContext: t, cors: n } =
|
|
82
|
+
function R(e) {
|
|
83
|
+
let { extractSecurityContext: t, cors: n } = N(e), r = M(e);
|
|
84
84
|
return async function(e, a) {
|
|
85
85
|
try {
|
|
86
86
|
let s;
|
|
@@ -89,26 +89,26 @@ function L(e) {
|
|
|
89
89
|
s = t.query || t;
|
|
90
90
|
} else if (e.method === "GET") {
|
|
91
91
|
let t = e.nextUrl.searchParams.get("query");
|
|
92
|
-
if (!t) return
|
|
92
|
+
if (!t) return j.json(i("Query parameter is required", 400), { status: 400 });
|
|
93
93
|
try {
|
|
94
94
|
s = JSON.parse(t);
|
|
95
95
|
} catch {
|
|
96
|
-
return
|
|
96
|
+
return j.json(i("Invalid JSON in query parameter", 400), { status: 400 });
|
|
97
97
|
}
|
|
98
|
-
} else return
|
|
98
|
+
} else return j.json(i("Method not allowed", 405), { status: 405 });
|
|
99
99
|
let c = await t(e, a), l = r.validateQuery(s);
|
|
100
|
-
if (!l.isValid) return
|
|
100
|
+
if (!l.isValid) return j.json(i(`Query validation failed: ${l.errors.join(", ")}`, 400), { status: 400 });
|
|
101
101
|
let u = s.measures?.[0] || s.dimensions?.[0];
|
|
102
|
-
if (!u) return
|
|
102
|
+
if (!u) return j.json(i("No measures or dimensions specified", 400), { status: 400 });
|
|
103
103
|
let d = u.split(".")[0], f = await r.generateSQL(d, s, c), p = o(s, f);
|
|
104
|
-
return
|
|
104
|
+
return j.json(p, { headers: n ? P(e, n) : {} });
|
|
105
105
|
} catch (e) {
|
|
106
|
-
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), j.json(i(e instanceof Error ? e.message : "SQL generation failed", 500), { status: 500 });
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
|
-
function
|
|
111
|
-
let { extractSecurityContext: t, cors: r } =
|
|
110
|
+
function z(e) {
|
|
111
|
+
let { extractSecurityContext: t, cors: r } = N(e), i = M(e);
|
|
112
112
|
return async function(e, a) {
|
|
113
113
|
try {
|
|
114
114
|
let o;
|
|
@@ -117,126 +117,126 @@ function R(e) {
|
|
|
117
117
|
o = t.query || t;
|
|
118
118
|
} else if (e.method === "GET") {
|
|
119
119
|
let t = e.nextUrl.searchParams.get("query");
|
|
120
|
-
if (!t) return
|
|
120
|
+
if (!t) return j.json({
|
|
121
121
|
error: "Query parameter is required",
|
|
122
122
|
valid: !1
|
|
123
123
|
}, { status: 400 });
|
|
124
124
|
try {
|
|
125
125
|
o = JSON.parse(t);
|
|
126
126
|
} catch {
|
|
127
|
-
return
|
|
127
|
+
return j.json({
|
|
128
128
|
error: "Invalid JSON in query parameter",
|
|
129
129
|
valid: !1
|
|
130
130
|
}, { status: 400 });
|
|
131
131
|
}
|
|
132
|
-
} else return
|
|
132
|
+
} else return j.json({
|
|
133
133
|
error: "Method not allowed",
|
|
134
134
|
valid: !1
|
|
135
135
|
}, { status: 405 });
|
|
136
136
|
let s = await t(e, a), c = await n(o, s, i);
|
|
137
|
-
return
|
|
137
|
+
return j.json(c, { headers: r ? P(e, r) : {} });
|
|
138
138
|
} catch (e) {
|
|
139
|
-
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), j.json({
|
|
140
140
|
error: e instanceof Error ? e.message : "Dry-run validation failed",
|
|
141
141
|
valid: !1
|
|
142
142
|
}, { status: 400 });
|
|
143
143
|
}
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
|
-
function
|
|
147
|
-
let { extractSecurityContext: t, cors: n } =
|
|
146
|
+
function B(e) {
|
|
147
|
+
let { extractSecurityContext: t, cors: n } = N(e), r = M(e);
|
|
148
148
|
return async function(e, a) {
|
|
149
149
|
try {
|
|
150
|
-
if (e.method !== "POST") return
|
|
150
|
+
if (e.method !== "POST") return j.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
151
151
|
let { queries: o } = await e.json();
|
|
152
|
-
if (!o || !Array.isArray(o)) return
|
|
153
|
-
if (o.length === 0) return
|
|
152
|
+
if (!o || !Array.isArray(o)) return j.json(i("Request body must contain a \"queries\" array", 400), { status: 400 });
|
|
153
|
+
if (o.length === 0) return j.json(i("Queries array cannot be empty", 400), { status: 400 });
|
|
154
154
|
let s = await l(o, await t(e, a), r, { skipCache: e.headers.get("x-cache-control") === "no-cache" });
|
|
155
|
-
return
|
|
155
|
+
return j.json(s, { headers: n ? P(e, n) : {} });
|
|
156
156
|
} catch (e) {
|
|
157
|
-
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), j.json(i(e instanceof Error ? e.message : "Batch execution failed", 500), { status: 500 });
|
|
158
158
|
}
|
|
159
159
|
};
|
|
160
160
|
}
|
|
161
|
-
function
|
|
162
|
-
let { extractSecurityContext: t, cors: n } =
|
|
161
|
+
function V(e) {
|
|
162
|
+
let { extractSecurityContext: t, cors: n } = N(e), r = M(e);
|
|
163
163
|
return async function(e, i) {
|
|
164
164
|
try {
|
|
165
|
-
if (e.method !== "POST") return
|
|
165
|
+
if (e.method !== "POST") return j.json({ error: "Method not allowed" }, { status: 405 });
|
|
166
166
|
let a = await e.json(), o = a.query || a, s = a.options || {}, c = await t(e, i), l = r.validateQuery(o);
|
|
167
|
-
if (!l.isValid) return
|
|
167
|
+
if (!l.isValid) return j.json({ error: `Query validation failed: ${l.errors.join(", ")}` }, { status: 400 });
|
|
168
168
|
let u = await r.explainQuery(o, c, s);
|
|
169
|
-
return
|
|
169
|
+
return j.json(u, { headers: n ? P(e, n) : {} });
|
|
170
170
|
} catch (e) {
|
|
171
|
-
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), j.json({ error: e instanceof Error ? e.message : "Explain query failed" }, { status: 500 });
|
|
172
172
|
}
|
|
173
173
|
};
|
|
174
174
|
}
|
|
175
|
-
function
|
|
176
|
-
let { cors: n } =
|
|
175
|
+
function H(e) {
|
|
176
|
+
let { cors: n } = N(e), r = M(e);
|
|
177
177
|
return async function(e, a) {
|
|
178
178
|
try {
|
|
179
|
-
if (e.method !== "POST") return
|
|
179
|
+
if (e.method !== "POST") return j.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
180
180
|
let a = await t(r, await e.json());
|
|
181
|
-
return
|
|
181
|
+
return j.json(a, { headers: n ? P(e, n) : {} });
|
|
182
182
|
} catch (e) {
|
|
183
|
-
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), j.json(i(e instanceof Error ? e.message : "Discovery failed", 500), { status: 500 });
|
|
184
184
|
}
|
|
185
185
|
};
|
|
186
186
|
}
|
|
187
|
-
function
|
|
188
|
-
let { cors: t } =
|
|
187
|
+
function U(e) {
|
|
188
|
+
let { cors: t } = N(e), n = M(e);
|
|
189
189
|
return async function(e, r) {
|
|
190
190
|
try {
|
|
191
|
-
if (e.method !== "POST") return
|
|
191
|
+
if (e.method !== "POST") return j.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
192
192
|
let r = await e.json();
|
|
193
|
-
if (!r.naturalLanguage) return
|
|
193
|
+
if (!r.naturalLanguage) return j.json(i("naturalLanguage field is required", 400), { status: 400 });
|
|
194
194
|
let o = await a(n, r);
|
|
195
|
-
return
|
|
195
|
+
return j.json(o, { headers: t ? P(e, t) : {} });
|
|
196
196
|
} catch (e) {
|
|
197
|
-
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), j.json(i(e instanceof Error ? e.message : "Query suggestion failed", 500), { status: 500 });
|
|
198
198
|
}
|
|
199
199
|
};
|
|
200
200
|
}
|
|
201
|
-
function
|
|
202
|
-
let { cors: t } =
|
|
201
|
+
function W(e) {
|
|
202
|
+
let { cors: t } = N(e), n = M(e);
|
|
203
203
|
return async function(e, a) {
|
|
204
204
|
try {
|
|
205
|
-
if (e.method !== "POST") return
|
|
205
|
+
if (e.method !== "POST") return j.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
206
206
|
let a = await e.json();
|
|
207
|
-
if (!a.query) return
|
|
207
|
+
if (!a.query) return j.json(i("query field is required", 400), { status: 400 });
|
|
208
208
|
let o = await r(n, a);
|
|
209
|
-
return
|
|
209
|
+
return j.json(o, { headers: t ? P(e, t) : {} });
|
|
210
210
|
} catch (e) {
|
|
211
|
-
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), j.json(i(e instanceof Error ? e.message : "Query validation failed", 500), { status: 500 });
|
|
212
212
|
}
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
|
-
function
|
|
216
|
-
let { extractSecurityContext: t, cors: n } =
|
|
215
|
+
function G(e) {
|
|
216
|
+
let { extractSecurityContext: t, cors: n } = N(e), r = M(e);
|
|
217
217
|
return async function(e, a) {
|
|
218
218
|
try {
|
|
219
|
-
if (e.method !== "POST") return
|
|
219
|
+
if (e.method !== "POST") return j.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
220
220
|
let o = await e.json();
|
|
221
|
-
if (!o.query) return
|
|
221
|
+
if (!o.query) return j.json(i("query field is required", 400), { status: 400 });
|
|
222
222
|
let c = await s(r, await t(e, a), o);
|
|
223
|
-
return
|
|
223
|
+
return j.json(c, { headers: n ? P(e, n) : {} });
|
|
224
224
|
} catch (e) {
|
|
225
|
-
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), j.json(i(e instanceof Error ? e.message : "Query execution failed", 500), { status: 500 });
|
|
226
226
|
}
|
|
227
227
|
};
|
|
228
228
|
}
|
|
229
|
-
function
|
|
230
|
-
let { extractSecurityContext: t, cors: n } =
|
|
229
|
+
function K(e) {
|
|
230
|
+
let { extractSecurityContext: t, cors: n } = N(e), { mcp: r = { enabled: !0 } } = e, a = M(e), o = T(a, r.resources), s = A(r.prompts), c = O(r.instructions);
|
|
231
231
|
return async function(e) {
|
|
232
|
-
if (r.resourceMetadataUrl && !
|
|
232
|
+
if (r.resourceMetadataUrl && !D(e.headers.get("authorization"))) return j.json({ error: "Bearer token required" }, {
|
|
233
233
|
status: 401,
|
|
234
|
-
headers: { "WWW-Authenticate":
|
|
234
|
+
headers: { "WWW-Authenticate": y(r.resourceMetadataUrl) }
|
|
235
235
|
});
|
|
236
|
-
if (e.method === "DELETE") return
|
|
236
|
+
if (e.method === "DELETE") return j.json({ error: "Session termination not supported" }, { status: 405 });
|
|
237
237
|
if (e.method === "GET") {
|
|
238
|
-
let t = new TextEncoder(), r =
|
|
239
|
-
e.enqueue(t.encode(
|
|
238
|
+
let t = new TextEncoder(), r = g(), i = new ReadableStream({ start(e) {
|
|
239
|
+
e.enqueue(t.encode(v({
|
|
240
240
|
jsonrpc: "2.0",
|
|
241
241
|
method: "mcp/ready",
|
|
242
242
|
params: { protocol: "streamable-http" }
|
|
@@ -247,114 +247,115 @@ function G(e) {
|
|
|
247
247
|
Connection: "keep-alive"
|
|
248
248
|
});
|
|
249
249
|
if (n) {
|
|
250
|
-
let t =
|
|
250
|
+
let t = P(e, n);
|
|
251
251
|
Object.entries(t).forEach(([e, t]) => a.set(e, t));
|
|
252
252
|
}
|
|
253
|
-
return new
|
|
253
|
+
return new j(i, {
|
|
254
254
|
status: 200,
|
|
255
255
|
headers: a
|
|
256
256
|
});
|
|
257
257
|
}
|
|
258
|
-
if (e.method !== "POST") return
|
|
259
|
-
let
|
|
260
|
-
if (!
|
|
261
|
-
let
|
|
262
|
-
if (!
|
|
263
|
-
let
|
|
264
|
-
if (!
|
|
258
|
+
if (e.method !== "POST") return j.json(i("Method not allowed - use POST", 405), { status: 405 });
|
|
259
|
+
let l = h(e.headers.get("origin"), r.allowedOrigins ? { allowedOrigins: r.allowedOrigins } : {});
|
|
260
|
+
if (!l.valid) return j.json(S(null, -32600, l.reason), { status: 403 });
|
|
261
|
+
let u = e.headers.get("accept");
|
|
262
|
+
if (!k(u)) return j.json(S(null, -32600, "Accept header must include both application/json and text/event-stream"), { status: 400 });
|
|
263
|
+
let d = x(Object.fromEntries(e.headers.entries()));
|
|
264
|
+
if (!d.ok) return j.json({
|
|
265
265
|
error: "Unsupported MCP protocol version",
|
|
266
|
-
supported:
|
|
266
|
+
supported: d.supported
|
|
267
267
|
}, { status: 426 });
|
|
268
|
-
let
|
|
268
|
+
let f;
|
|
269
269
|
try {
|
|
270
|
-
|
|
270
|
+
f = await e.json();
|
|
271
271
|
} catch {
|
|
272
|
-
|
|
272
|
+
f = null;
|
|
273
273
|
}
|
|
274
|
-
let
|
|
275
|
-
if (!
|
|
276
|
-
let
|
|
274
|
+
let p = b(f);
|
|
275
|
+
if (!p) return j.json(S(null, -32600, "Invalid JSON-RPC 2.0 request"), { status: 400 });
|
|
276
|
+
let T = m(u), O = p.method === "initialize", A = (t, r = 200, i = {}) => j.json(t, {
|
|
277
277
|
status: r,
|
|
278
278
|
headers: {
|
|
279
|
-
...n ?
|
|
279
|
+
...n ? P(e, n) : {},
|
|
280
280
|
...i
|
|
281
281
|
}
|
|
282
282
|
});
|
|
283
283
|
try {
|
|
284
|
-
let i = await
|
|
284
|
+
let i = await C(p.method, p.params, {
|
|
285
285
|
semanticLayer: a,
|
|
286
286
|
extractSecurityContext: (e) => t(e),
|
|
287
287
|
rawRequest: e,
|
|
288
288
|
rawResponse: null,
|
|
289
289
|
resources: o,
|
|
290
290
|
prompts: s,
|
|
291
|
+
instructions: c,
|
|
291
292
|
appEnabled: !!r.app,
|
|
292
293
|
appConfig: typeof r.app == "object" ? r.app : void 0,
|
|
293
294
|
serverName: r.serverName
|
|
294
295
|
});
|
|
295
|
-
if (
|
|
296
|
-
let
|
|
297
|
-
|
|
298
|
-
let
|
|
299
|
-
if (
|
|
300
|
-
let t = new TextEncoder(), r =
|
|
301
|
-
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(
|
|
296
|
+
if (w(p)) return new j(null, { status: 202 });
|
|
297
|
+
let l = O && i && typeof i == "object" && "sessionId" in i ? i.sessionId : void 0, u = {};
|
|
298
|
+
l && (u[E] = l);
|
|
299
|
+
let d = _(p.id ?? null, i);
|
|
300
|
+
if (T) {
|
|
301
|
+
let t = new TextEncoder(), r = g(), i = new ReadableStream({ start(e) {
|
|
302
|
+
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(v(d, r))), e.close();
|
|
302
303
|
} }), a = new Headers({
|
|
303
304
|
"Content-Type": "text/event-stream",
|
|
304
305
|
"Cache-Control": "no-cache",
|
|
305
306
|
Connection: "keep-alive",
|
|
306
|
-
...
|
|
307
|
+
...u
|
|
307
308
|
});
|
|
308
309
|
if (n) {
|
|
309
|
-
let t =
|
|
310
|
+
let t = P(e, n);
|
|
310
311
|
Object.entries(t).forEach(([e, t]) => a.set(e, t));
|
|
311
312
|
}
|
|
312
|
-
return new
|
|
313
|
+
return new j(i, {
|
|
313
314
|
status: 200,
|
|
314
315
|
headers: a
|
|
315
316
|
});
|
|
316
317
|
}
|
|
317
|
-
return
|
|
318
|
+
return A(d, 200, u);
|
|
318
319
|
} catch (t) {
|
|
319
|
-
if (
|
|
320
|
+
if (w(p)) return process.env.NODE_ENV !== "test" && console.error("Next.js MCP notification processing error:", t), new j(null, { status: 202 });
|
|
320
321
|
process.env.NODE_ENV !== "test" && console.error("Next.js MCP RPC handler error:", t);
|
|
321
|
-
let r = t?.code ?? -32603, i = t?.data, a = t.message || "MCP request failed", o =
|
|
322
|
-
if (
|
|
323
|
-
let t = new TextEncoder(), r =
|
|
324
|
-
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(
|
|
322
|
+
let r = t?.code ?? -32603, i = t?.data, a = t.message || "MCP request failed", o = S(p.id ?? null, r, a, i);
|
|
323
|
+
if (T) {
|
|
324
|
+
let t = new TextEncoder(), r = g(), i = new ReadableStream({ start(e) {
|
|
325
|
+
e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(v(o, r))), e.close();
|
|
325
326
|
} }), a = new Headers({
|
|
326
327
|
"Content-Type": "text/event-stream",
|
|
327
328
|
"Cache-Control": "no-cache",
|
|
328
329
|
Connection: "keep-alive"
|
|
329
330
|
});
|
|
330
331
|
if (n) {
|
|
331
|
-
let t =
|
|
332
|
+
let t = P(e, n);
|
|
332
333
|
Object.entries(t).forEach(([e, t]) => a.set(e, t));
|
|
333
334
|
}
|
|
334
|
-
return new
|
|
335
|
+
return new j(i, {
|
|
335
336
|
status: 200,
|
|
336
337
|
headers: a
|
|
337
338
|
});
|
|
338
339
|
}
|
|
339
|
-
return
|
|
340
|
+
return A(o, 200);
|
|
340
341
|
}
|
|
341
342
|
};
|
|
342
343
|
}
|
|
343
|
-
function
|
|
344
|
-
let { extractSecurityContext: t, cors: n } =
|
|
344
|
+
function q(e) {
|
|
345
|
+
let { extractSecurityContext: t, cors: n } = N(e), { agent: r } = e;
|
|
345
346
|
if (!r) throw Error("agent config is required for createAgentChatHandler");
|
|
346
|
-
let i =
|
|
347
|
+
let i = M(e);
|
|
347
348
|
return async function(e, a) {
|
|
348
349
|
try {
|
|
349
|
-
if (e.method !== "POST") return
|
|
350
|
-
let { handleAgentChat: o } = await import("../handler-
|
|
351
|
-
if (!s || typeof s != "string") return
|
|
350
|
+
if (e.method !== "POST") return j.json({ error: "Method not allowed - use POST" }, { status: 405 });
|
|
351
|
+
let { handleAgentChat: o } = await import("../handler-_TKfigrZ.js"), { message: s, sessionId: c, history: l } = await e.json();
|
|
352
|
+
if (!s || typeof s != "string") return j.json({ error: "message is required and must be a string" }, { status: 400 });
|
|
352
353
|
let u = (r.apiKey || "").trim();
|
|
353
354
|
if (r.allowClientApiKey) {
|
|
354
355
|
let t = e.headers.get("x-agent-api-key");
|
|
355
356
|
t && (u = t.trim());
|
|
356
357
|
}
|
|
357
|
-
if (!u) return
|
|
358
|
+
if (!u) return j.json({ error: "No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header." }, { status: 401 });
|
|
358
359
|
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) {
|
|
359
360
|
try {
|
|
360
361
|
let t = o({
|
|
@@ -389,7 +390,7 @@ function K(e) {
|
|
|
389
390
|
Connection: "keep-alive"
|
|
390
391
|
});
|
|
391
392
|
if (n) {
|
|
392
|
-
let t =
|
|
393
|
+
let t = P(e, n);
|
|
393
394
|
Object.entries(t).forEach(([e, t]) => v.set(e, t));
|
|
394
395
|
}
|
|
395
396
|
return new Response(_, {
|
|
@@ -397,20 +398,20 @@ function K(e) {
|
|
|
397
398
|
headers: v
|
|
398
399
|
});
|
|
399
400
|
} catch (e) {
|
|
400
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js agent chat handler error:", e),
|
|
401
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js agent chat handler error:", e), j.json({ error: e instanceof Error ? e.message : "Agent chat failed" }, { status: 500 });
|
|
401
402
|
}
|
|
402
403
|
};
|
|
403
404
|
}
|
|
404
|
-
function
|
|
405
|
+
function J(e) {
|
|
405
406
|
let { mcp: t = { enabled: !0 } } = e, n = {
|
|
406
|
-
load:
|
|
407
|
-
meta:
|
|
408
|
-
sql:
|
|
409
|
-
dryRun:
|
|
410
|
-
batch:
|
|
411
|
-
explain:
|
|
407
|
+
load: I(e),
|
|
408
|
+
meta: L(e),
|
|
409
|
+
sql: R(e),
|
|
410
|
+
dryRun: z(e),
|
|
411
|
+
batch: B(e),
|
|
412
|
+
explain: V(e)
|
|
412
413
|
};
|
|
413
|
-
return t.enabled !== !1 && (n.mcpRpc =
|
|
414
|
+
return t.enabled !== !1 && (n.mcpRpc = K(e)), e.agent && (n.agentChat = q(e)), n;
|
|
414
415
|
}
|
|
415
416
|
//#endregion
|
|
416
|
-
export {
|
|
417
|
+
export { q as createAgentChatHandler, B as createBatchHandler, J as createCubeHandlers, H as createDiscoverHandler, z as createDryRunHandler, V as createExplainHandler, I as createLoadHandler, G as createMcpLoadHandler, K as createMcpRpcHandler, L as createMetaHandler, F as createOptionsHandler, R as createSqlHandler, U as createSuggestHandler, W as createValidateHandler };
|