drizzle-cube 0.5.0 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +4 -0
  2. package/dist/adapters/express/index.cjs +2 -2
  3. package/dist/adapters/express/index.js +106 -102
  4. package/dist/adapters/fastify/index.cjs +2 -2
  5. package/dist/adapters/fastify/index.js +109 -105
  6. package/dist/adapters/{handler-3LGcjLtr.js → handler-BC3nFNxV.js} +2 -2
  7. package/dist/adapters/{handler-BzzbVpcl.cjs → handler-Cqf-CqAS.cjs} +2 -2
  8. package/dist/adapters/hono/index.cjs +1 -1
  9. package/dist/adapters/hono/index.js +41 -45
  10. package/dist/adapters/locale-BoiA6WiV.cjs +198 -0
  11. package/dist/adapters/{locale-DTnJrxm1.js → locale-D9VQkLXt.js} +442 -404
  12. package/dist/adapters/mcp-tools.cjs +1 -1
  13. package/dist/adapters/mcp-tools.d.ts +7 -3
  14. package/dist/adapters/mcp-tools.js +28 -28
  15. package/dist/adapters/mcp-transport-B0mgxRnJ.js +579 -0
  16. package/dist/adapters/mcp-transport-irsahKmD.cjs +39 -0
  17. package/dist/adapters/mcp-transport.d.ts +14 -2
  18. package/dist/adapters/nextjs/index.cjs +1 -1
  19. package/dist/adapters/nextjs/index.js +140 -136
  20. package/dist/adapters/{openai-C4BD8xnN.cjs → openai-B4N3KfTG.cjs} +1 -1
  21. package/dist/adapters/{openai-CaSQEduB.js → openai-BWdm0JvG.js} +1 -1
  22. package/dist/adapters/openai-CoqT_FM5.cjs +16 -0
  23. package/dist/{server/openai-CqZg6zYL.js → adapters/openai-D0Nsvc9L.js} +824 -720
  24. package/dist/adapters/{utils-DOg9oGdt.js → utils-CTYvfZ3I.js} +711 -713
  25. package/dist/adapters/{utils-DNrj-ryp.cjs → utils-XPOzzMdY.cjs} +5 -5
  26. package/dist/adapters/utils.cjs +1 -1
  27. package/dist/adapters/utils.d.ts +38 -2
  28. package/dist/adapters/utils.js +1 -1
  29. package/dist/cli/index.cjs +2 -2
  30. package/dist/client/charts.js +10 -10
  31. package/dist/client/chunks/{DashboardEditModal-cSSIAZGy.js → DashboardEditModal-IU_0dgfC.js} +12 -12
  32. package/dist/client/chunks/{DashboardEditModal-cSSIAZGy.js.map → DashboardEditModal-IU_0dgfC.js.map} +1 -1
  33. package/dist/client/chunks/{FieldSearchModal-CZNo4pNK.js → FieldSearchModal-BCWanpPX.js} +3 -3
  34. package/dist/client/chunks/{FieldSearchModal-CZNo4pNK.js.map → FieldSearchModal-BCWanpPX.js.map} +1 -1
  35. package/dist/client/chunks/KpiDelta-_igN6cJa.js +2 -0
  36. package/dist/client/chunks/KpiNumber-t5n8PtRU.js +2 -0
  37. package/dist/client/chunks/KpiText-BCZJJ6a0.js +2 -0
  38. package/dist/client/chunks/{RetentionCombinedChart-BD8tGeM_.js → RetentionCombinedChart-CQMBODsK.js} +2 -2
  39. package/dist/client/chunks/{RetentionCombinedChart-BD8tGeM_.js.map → RetentionCombinedChart-CQMBODsK.js.map} +1 -1
  40. package/dist/client/chunks/SchemaVisualization-BUUhlOvG.js +2 -0
  41. package/dist/client/chunks/SchemaVisualizationLazy-CwaPCUL0.js +2 -0
  42. package/dist/client/chunks/{analysis-builder-BeVZhiQ5.js → analysis-builder-Dm6eD_AX.js} +6 -6
  43. package/dist/client/chunks/{analysis-builder-BeVZhiQ5.js.map → analysis-builder-Dm6eD_AX.js.map} +1 -1
  44. package/dist/client/chunks/{analysis-builder-shared-BWc7ZZnG.js → analysis-builder-shared-DT5bXwCA.js} +6 -6
  45. package/dist/client/chunks/{analysis-builder-shared-BWc7ZZnG.js.map → analysis-builder-shared-DT5bXwCA.js.map} +1 -1
  46. package/dist/client/chunks/{chart-area-D63kG8OT.js → chart-area-DDti9Qtp.js} +2 -2
  47. package/dist/client/chunks/{chart-area-D63kG8OT.js.map → chart-area-DDti9Qtp.js.map} +1 -1
  48. package/dist/client/chunks/{chart-bar-BEfsCLjl.js → chart-bar-B3s9qDlh.js} +2 -2
  49. package/dist/client/chunks/{chart-bar-BEfsCLjl.js.map → chart-bar-B3s9qDlh.js.map} +1 -1
  50. package/dist/client/chunks/{chart-data-table-C3Xh9jwL.js → chart-data-table-Qrt6EAno.js} +17 -17
  51. package/dist/client/chunks/{chart-data-table-C3Xh9jwL.js.map → chart-data-table-Qrt6EAno.js.map} +1 -1
  52. package/dist/client/chunks/{chart-kpi-delta-CYE0S1x_.js → chart-kpi-delta-CgldZ7zO.js} +3 -3
  53. package/dist/client/chunks/{chart-kpi-delta-CYE0S1x_.js.map → chart-kpi-delta-CgldZ7zO.js.map} +1 -1
  54. package/dist/client/chunks/{chart-kpi-number-BlZ79xHW.js → chart-kpi-number-ByfuX1ki.js} +5 -5
  55. package/dist/client/chunks/{chart-kpi-number-BlZ79xHW.js.map → chart-kpi-number-ByfuX1ki.js.map} +1 -1
  56. package/dist/client/chunks/{chart-kpi-text-DY1BnxPe.js → chart-kpi-text-DeNuDraJ.js} +2 -2
  57. package/dist/client/chunks/{chart-kpi-text-DY1BnxPe.js.map → chart-kpi-text-DeNuDraJ.js.map} +1 -1
  58. package/dist/client/chunks/{chart-line-CBsTThTv.js → chart-line-RdZwtk27.js} +2 -2
  59. package/dist/client/chunks/{chart-line-CBsTThTv.js.map → chart-line-RdZwtk27.js.map} +1 -1
  60. package/dist/client/chunks/{chart-markdown-BWaWVkuz.js → chart-markdown-CiGRZdJj.js} +1203 -1139
  61. package/dist/client/chunks/chart-markdown-CiGRZdJj.js.map +1 -0
  62. package/dist/client/chunks/{chart-measure-profile-B41qCTBG.js → chart-measure-profile-Ckjw9bX6.js} +2 -2
  63. package/dist/client/chunks/{chart-measure-profile-B41qCTBG.js.map → chart-measure-profile-Ckjw9bX6.js.map} +1 -1
  64. package/dist/client/chunks/{chart-pie-Djbu8x2v.js → chart-pie-BvY4FY__.js} +2 -2
  65. package/dist/client/chunks/{chart-pie-Djbu8x2v.js.map → chart-pie-BvY4FY__.js.map} +1 -1
  66. package/dist/client/chunks/{chart-radar-BsTcKV0K.js → chart-radar-DjiiEAmc.js} +2 -2
  67. package/dist/client/chunks/{chart-radar-BsTcKV0K.js.map → chart-radar-DjiiEAmc.js.map} +1 -1
  68. package/dist/client/chunks/{chart-radial-bar-Du7XNnwE.js → chart-radial-bar-lla_JEYu.js} +2 -2
  69. package/dist/client/chunks/{chart-radial-bar-Du7XNnwE.js.map → chart-radial-bar-lla_JEYu.js.map} +1 -1
  70. package/dist/client/chunks/{chart-scatter-D8krEYsA.js → chart-scatter-DwXnI0rr.js} +2 -2
  71. package/dist/client/chunks/{chart-scatter-D8krEYsA.js.map → chart-scatter-DwXnI0rr.js.map} +1 -1
  72. package/dist/client/chunks/{chart-tree-map-C5C2iaWM.js → chart-tree-map-DJHoA26f.js} +2 -2
  73. package/dist/client/chunks/{chart-tree-map-C5C2iaWM.js.map → chart-tree-map-DJHoA26f.js.map} +1 -1
  74. package/dist/client/chunks/{chart-waterfall-BGdPrJ5Y.js → chart-waterfall-Y7c8csO5.js} +2 -2
  75. package/dist/client/chunks/{chart-waterfall-BGdPrJ5Y.js.map → chart-waterfall-Y7c8csO5.js.map} +1 -1
  76. package/dist/client/chunks/{core-DcfMGTVa.js → core-Dk6z6kC0.js} +2 -2
  77. package/dist/client/chunks/{core-DcfMGTVa.js.map → core-Dk6z6kC0.js.map} +1 -1
  78. package/dist/client/chunks/{exceljs.min-CcjgM-qg.js → exceljs.min-DaJsLlWM.js} +24 -24
  79. package/dist/client/chunks/{exceljs.min-CcjgM-qg.js.map → exceljs.min-DaJsLlWM.js.map} +1 -1
  80. package/dist/client/chunks/{schema-visualization-Xp60Ff2W.js → schema-visualization-DWwJukK7.js} +8 -8
  81. package/dist/client/chunks/{schema-visualization-Xp60Ff2W.js.map → schema-visualization-DWwJukK7.js.map} +1 -1
  82. package/dist/client/chunks/{syntaxHighlighting-CnDujqwg.js → syntaxHighlighting-D8J6Yt9j.js} +2 -2
  83. package/dist/client/chunks/{syntaxHighlighting-CnDujqwg.js.map → syntaxHighlighting-D8J6Yt9j.js.map} +1 -1
  84. package/dist/client/chunks/{useDebounce-CfmUMFau.js → useDebounce-DyJVREop.js} +2 -2
  85. package/dist/client/chunks/{useDebounce-CfmUMFau.js.map → useDebounce-DyJVREop.js.map} +1 -1
  86. package/dist/client/chunks/{useExplainAI-BKGmejIj.js → useExplainAI-CxSkjocM.js} +4 -4
  87. package/dist/client/chunks/{useExplainAI-BKGmejIj.js.map → useExplainAI-CxSkjocM.js.map} +1 -1
  88. package/dist/client/chunks/{utils-BldkcRHv.js → utils-BHZdKxua.js} +2 -2
  89. package/dist/client/chunks/{utils-BldkcRHv.js.map → utils-BHZdKxua.js.map} +1 -1
  90. package/dist/client/chunks/{vendor-ClXpIiea.js → vendor-CBD_Olr0.js} +8 -8
  91. package/dist/client/chunks/{vendor-ClXpIiea.js.map → vendor-CBD_Olr0.js.map} +1 -1
  92. package/dist/client/components.js +3 -3
  93. package/dist/client/hooks.js +3 -3
  94. package/dist/client/icons.js +1 -1
  95. package/dist/client/index.js +11 -11
  96. package/dist/client/providers.js +1 -1
  97. package/dist/client/schema.js +1 -1
  98. package/dist/client/utils.js +5 -5
  99. package/dist/client-bundle-stats.html +1 -1
  100. package/dist/mcp-app/mcp-app.html +39 -37
  101. package/dist/server/index.cjs +42 -42
  102. package/dist/server/index.js +1009 -971
  103. package/dist/server/{openai-D9Zjuby1.cjs → openai-BfiZU0rG.cjs} +1 -1
  104. package/dist/server/openai-BwsBio1K.cjs +16 -0
  105. package/dist/server/{openai-rwauPzCT.js → openai-CLWSwD-D.js} +1 -1
  106. package/dist/{adapters/openai-BAnEZgKZ.js → server/openai-zpXlGbbF.js} +824 -720
  107. package/package.json +2 -2
  108. package/dist/adapters/locale-DueXjqMh.cjs +0 -198
  109. package/dist/adapters/mcp-transport-45SiFcCH.cjs +0 -39
  110. package/dist/adapters/mcp-transport-Bxpc4mRy.js +0 -553
  111. package/dist/adapters/openai-4JP2B6pB.cjs +0 -16
  112. package/dist/client/chunks/KpiDelta-Dll_eCV1.js +0 -2
  113. package/dist/client/chunks/KpiNumber-BPlR92hI.js +0 -2
  114. package/dist/client/chunks/KpiText-BIxq7Jso.js +0 -2
  115. package/dist/client/chunks/SchemaVisualization-CCICjhvv.js +0 -2
  116. package/dist/client/chunks/SchemaVisualizationLazy-DraGsMx6.js +0 -2
  117. package/dist/client/chunks/chart-markdown-BWaWVkuz.js.map +0 -1
  118. package/dist/server/openai-DmuEbFd6.cjs +0 -16
@@ -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;
@@ -122,3 +130,7 @@ export declare function buildToolList(options?: {
122
130
  }[];
123
131
  export declare function getDefaultResources(): MCPResource[];
124
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-DNrj-ryp.cjs`),t=require(`../locale-DueXjqMh.cjs`),n=require(`../mcp-transport-45SiFcCH.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);return async function(t){if(l.resourceMetadataUrl&&!n.l(t.headers.get(`authorization`)))return r.NextResponse.json({error:`Bearer token required`},{status:401,headers:{"WWW-Authenticate":n.s(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.g(),a=new ReadableStream({start(t){t.enqueue(e.encode(n._({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.y(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.v(a))return r.NextResponse.json(n.i(null,-32600,`Accept header must include both application/json and text/event-stream`),{status:400});let d=n.m(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.h(f);if(!p)return r.NextResponse.json(n.i(null,-32600,`Invalid JSON-RPC 2.0 request`),{status:400});let m=n.b(a),h=p.method===`initialize`,g=(e,n=200,i={})=>r.NextResponse.json(e,{status:n,headers:{...c?o(t,c):{},...i}});try{let e=await n.c(p.method,p.params,{semanticLayer:u,extractSecurityContext:e=>s(e),rawRequest:t,rawResponse:null,appEnabled:!!l.app});if(n.p(p))return new r.NextResponse(null,{status:202});let i=h&&e&&typeof e==`object`&&`sessionId`in e?e.sessionId:void 0,a={};i&&(a[n.r]=i);let d=n.a(p.id??null,e);if(m){let e=new TextEncoder,i=n.g(),s=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n._(d,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 g(d,200,a)}catch(e){if(n.p(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,a=e?.data,s=e.message||`MCP request failed`,l=n.i(p.id??null,i,s,a);if(m){let e=new TextEncoder,i=n.g(),a=new ReadableStream({start(t){t.enqueue(e.encode(`id: ${i}\n\n`)),t.enqueue(e.encode(n._(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 g(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-XPOzzMdY.cjs`),t=require(`../locale-BoiA6WiV.cjs`),n=require(`../mcp-transport-irsahKmD.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-Cqf-CqAS.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-DOg9oGdt.js";
2
- import { i as u, n as d, r as f, t as p } from "../locale-DTnJrxm1.js";
3
- import { _ as m, a as h, b as g, c as _, g as v, h as y, i as b, l as x, m as S, p as C, r as w, s as T, v as E, y as D } from "../mcp-transport-Bxpc4mRy.js";
4
- import { NextResponse as O } from "next/server";
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-CTYvfZ3I.js";
2
+ import { i as u, n as d, r as f, t as p } from "../locale-D9VQkLXt.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-B0mgxRnJ.js";
4
+ import { NextResponse as A } from "next/server";
5
5
  //#region src/adapters/nextjs/index.ts
6
- function k(e) {
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,7 +17,7 @@ function k(e) {
17
17
  s.registerCube(e);
18
18
  }), s;
19
19
  }
20
- function A(e) {
20
+ function M(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 A(e) {
26
26
  } : void 0
27
27
  };
28
28
  }
29
- function j(e, t) {
29
+ function N(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 M(e) {
33
+ function P(e) {
34
34
  return async function(t) {
35
- let n = j(t, {
35
+ let n = N(t, {
36
36
  ...e,
37
37
  allowedHeaders: p(e.allowedHeaders)
38
38
  });
@@ -42,8 +42,8 @@ function M(e) {
42
42
  });
43
43
  };
44
44
  }
45
- function N(e) {
46
- let { extractSecurityContext: t, cors: n } = A(e), r = k(e);
45
+ function F(e) {
46
+ let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
47
47
  return async function(e, a) {
48
48
  try {
49
49
  let o;
@@ -52,35 +52,35 @@ function N(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 O.json(i("Query parameter is required", 400), { status: 400 });
55
+ if (!t) return A.json(i("Query parameter is required", 400), { status: 400 });
56
56
  try {
57
57
  o = JSON.parse(t);
58
58
  } catch {
59
- return O.json(i("Invalid JSON in query parameter", 400), { status: 400 });
59
+ return A.json(i("Invalid JSON in query parameter", 400), { status: 400 });
60
60
  }
61
- } else return O.json(i("Method not allowed", 405), { status: 405 });
61
+ } else return A.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 O.json(i(`Query validation failed: ${l.errors.join(", ")}`, 400), { status: 400 });
63
+ if (!l.isValid) return A.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 O.json(f, { headers: n ? j(e, n) : {} });
65
+ return A.json(f, { headers: n ? N(e, n) : {} });
66
66
  } catch (e) {
67
- return process.env.NODE_ENV !== "test" && console.error("Next.js load handler error:", e), O.json(i(e instanceof Error ? e.message : "Query execution failed", 500), { status: 500 });
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 });
68
68
  }
69
69
  };
70
70
  }
71
- function P(t) {
72
- let { cors: n } = A(t), r = k(t);
71
+ function I(t) {
72
+ let { cors: n } = M(t), r = j(t);
73
73
  return async function(t, a) {
74
74
  try {
75
75
  let i = e(r.getMetadata());
76
- return O.json(i, { headers: n ? j(t, n) : {} });
76
+ return A.json(i, { headers: n ? N(t, n) : {} });
77
77
  } catch (e) {
78
- return process.env.NODE_ENV !== "test" && console.error("Next.js meta handler error:", e), O.json(i(e instanceof Error ? e.message : "Failed to fetch metadata", 500), { status: 500 });
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 });
79
79
  }
80
80
  };
81
81
  }
82
- function F(e) {
83
- let { extractSecurityContext: t, cors: n } = A(e), r = k(e);
82
+ function L(e) {
83
+ let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
84
84
  return async function(e, a) {
85
85
  try {
86
86
  let s;
@@ -89,26 +89,26 @@ function F(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 O.json(i("Query parameter is required", 400), { status: 400 });
92
+ if (!t) return A.json(i("Query parameter is required", 400), { status: 400 });
93
93
  try {
94
94
  s = JSON.parse(t);
95
95
  } catch {
96
- return O.json(i("Invalid JSON in query parameter", 400), { status: 400 });
96
+ return A.json(i("Invalid JSON in query parameter", 400), { status: 400 });
97
97
  }
98
- } else return O.json(i("Method not allowed", 405), { status: 405 });
98
+ } else return A.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 O.json(i(`Query validation failed: ${l.errors.join(", ")}`, 400), { status: 400 });
100
+ if (!l.isValid) return A.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 O.json(i("No measures or dimensions specified", 400), { status: 400 });
102
+ if (!u) return A.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 O.json(p, { headers: n ? j(e, n) : {} });
104
+ return A.json(p, { headers: n ? N(e, n) : {} });
105
105
  } catch (e) {
106
- return process.env.NODE_ENV !== "test" && console.error("Next.js SQL handler error:", e), O.json(i(e instanceof Error ? e.message : "SQL generation failed", 500), { status: 500 });
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 });
107
107
  }
108
108
  };
109
109
  }
110
- function I(e) {
111
- let { extractSecurityContext: t, cors: r } = A(e), i = k(e);
110
+ function R(e) {
111
+ let { extractSecurityContext: t, cors: r } = M(e), i = j(e);
112
112
  return async function(e, a) {
113
113
  try {
114
114
  let o;
@@ -117,126 +117,126 @@ function I(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 O.json({
120
+ if (!t) return A.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 O.json({
127
+ return A.json({
128
128
  error: "Invalid JSON in query parameter",
129
129
  valid: !1
130
130
  }, { status: 400 });
131
131
  }
132
- } else return O.json({
132
+ } else return A.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 O.json(c, { headers: r ? j(e, r) : {} });
137
+ return A.json(c, { headers: r ? N(e, r) : {} });
138
138
  } catch (e) {
139
- return process.env.NODE_ENV !== "test" && console.error("Next.js dry-run handler error:", e), O.json({
139
+ return process.env.NODE_ENV !== "test" && console.error("Next.js dry-run handler error:", e), A.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 L(e) {
147
- let { extractSecurityContext: t, cors: n } = A(e), r = k(e);
146
+ function z(e) {
147
+ let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
148
148
  return async function(e, a) {
149
149
  try {
150
- if (e.method !== "POST") return O.json(i("Method not allowed - use POST", 405), { status: 405 });
150
+ if (e.method !== "POST") return A.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 O.json(i("Request body must contain a \"queries\" array", 400), { status: 400 });
153
- if (o.length === 0) return O.json(i("Queries array cannot be empty", 400), { status: 400 });
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 });
154
154
  let s = await l(o, await t(e, a), r, { skipCache: e.headers.get("x-cache-control") === "no-cache" });
155
- return O.json(s, { headers: n ? j(e, n) : {} });
155
+ return A.json(s, { headers: n ? N(e, n) : {} });
156
156
  } catch (e) {
157
- return process.env.NODE_ENV !== "test" && console.error("Next.js batch handler error:", e), O.json(i(e instanceof Error ? e.message : "Batch execution failed", 500), { status: 500 });
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 });
158
158
  }
159
159
  };
160
160
  }
161
- function R(e) {
162
- let { extractSecurityContext: t, cors: n } = A(e), r = k(e);
161
+ function B(e) {
162
+ let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
163
163
  return async function(e, i) {
164
164
  try {
165
- if (e.method !== "POST") return O.json({ error: "Method not allowed" }, { status: 405 });
165
+ if (e.method !== "POST") return A.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 O.json({ error: `Query validation failed: ${l.errors.join(", ")}` }, { status: 400 });
167
+ if (!l.isValid) return A.json({ error: `Query validation failed: ${l.errors.join(", ")}` }, { status: 400 });
168
168
  let u = await r.explainQuery(o, c, s);
169
- return O.json(u, { headers: n ? j(e, n) : {} });
169
+ return A.json(u, { headers: n ? N(e, n) : {} });
170
170
  } catch (e) {
171
- return process.env.NODE_ENV !== "test" && console.error("Next.js explain handler error:", e), O.json({ error: e instanceof Error ? e.message : "Explain query failed" }, { status: 500 });
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 });
172
172
  }
173
173
  };
174
174
  }
175
- function z(e) {
176
- let { cors: n } = A(e), r = k(e);
175
+ function V(e) {
176
+ let { cors: n } = M(e), r = j(e);
177
177
  return async function(e, a) {
178
178
  try {
179
- if (e.method !== "POST") return O.json(i("Method not allowed - use POST", 405), { status: 405 });
179
+ if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
180
180
  let a = await t(r, await e.json());
181
- return O.json(a, { headers: n ? j(e, n) : {} });
181
+ return A.json(a, { headers: n ? N(e, n) : {} });
182
182
  } catch (e) {
183
- return process.env.NODE_ENV !== "test" && console.error("Next.js discover handler error:", e), O.json(i(e instanceof Error ? e.message : "Discovery failed", 500), { status: 500 });
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 });
184
184
  }
185
185
  };
186
186
  }
187
- function B(e) {
188
- let { cors: t } = A(e), n = k(e);
187
+ function H(e) {
188
+ let { cors: t } = M(e), n = j(e);
189
189
  return async function(e, r) {
190
190
  try {
191
- if (e.method !== "POST") return O.json(i("Method not allowed - use POST", 405), { status: 405 });
191
+ if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
192
192
  let r = await e.json();
193
- if (!r.naturalLanguage) return O.json(i("naturalLanguage field is required", 400), { status: 400 });
193
+ if (!r.naturalLanguage) return A.json(i("naturalLanguage field is required", 400), { status: 400 });
194
194
  let o = await a(n, r);
195
- return O.json(o, { headers: t ? j(e, t) : {} });
195
+ return A.json(o, { headers: t ? N(e, t) : {} });
196
196
  } catch (e) {
197
- return process.env.NODE_ENV !== "test" && console.error("Next.js suggest handler error:", e), O.json(i(e instanceof Error ? e.message : "Query suggestion failed", 500), { status: 500 });
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 });
198
198
  }
199
199
  };
200
200
  }
201
- function V(e) {
202
- let { cors: t } = A(e), n = k(e);
201
+ function U(e) {
202
+ let { cors: t } = M(e), n = j(e);
203
203
  return async function(e, a) {
204
204
  try {
205
- if (e.method !== "POST") return O.json(i("Method not allowed - use POST", 405), { status: 405 });
205
+ if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
206
206
  let a = await e.json();
207
- if (!a.query) return O.json(i("query field is required", 400), { status: 400 });
207
+ if (!a.query) return A.json(i("query field is required", 400), { status: 400 });
208
208
  let o = await r(n, a);
209
- return O.json(o, { headers: t ? j(e, t) : {} });
209
+ return A.json(o, { headers: t ? N(e, t) : {} });
210
210
  } catch (e) {
211
- return process.env.NODE_ENV !== "test" && console.error("Next.js validate handler error:", e), O.json(i(e instanceof Error ? e.message : "Query validation failed", 500), { status: 500 });
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 });
212
212
  }
213
213
  };
214
214
  }
215
- function H(e) {
216
- let { extractSecurityContext: t, cors: n } = A(e), r = k(e);
215
+ function W(e) {
216
+ let { extractSecurityContext: t, cors: n } = M(e), r = j(e);
217
217
  return async function(e, a) {
218
218
  try {
219
- if (e.method !== "POST") return O.json(i("Method not allowed - use POST", 405), { status: 405 });
219
+ if (e.method !== "POST") return A.json(i("Method not allowed - use POST", 405), { status: 405 });
220
220
  let o = await e.json();
221
- if (!o.query) return O.json(i("query field is required", 400), { status: 400 });
221
+ if (!o.query) return A.json(i("query field is required", 400), { status: 400 });
222
222
  let c = await s(r, await t(e, a), o);
223
- return O.json(c, { headers: n ? j(e, n) : {} });
223
+ return A.json(c, { headers: n ? N(e, n) : {} });
224
224
  } catch (e) {
225
- return process.env.NODE_ENV !== "test" && console.error("Next.js MCP load handler error:", e), O.json(i(e instanceof Error ? e.message : "Query execution failed", 500), { status: 500 });
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 });
226
226
  }
227
227
  };
228
228
  }
229
- function U(e) {
230
- let { extractSecurityContext: t, cors: n } = A(e), { mcp: r = { enabled: !0 } } = e, a = k(e);
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);
231
231
  return async function(e) {
232
- if (r.resourceMetadataUrl && !x(e.headers.get("authorization"))) return O.json({ error: "Bearer token required" }, {
232
+ if (r.resourceMetadataUrl && !E(e.headers.get("authorization"))) return A.json({ error: "Bearer token required" }, {
233
233
  status: 401,
234
- headers: { "WWW-Authenticate": T(r.resourceMetadataUrl) }
234
+ headers: { "WWW-Authenticate": v(r.resourceMetadataUrl) }
235
235
  });
236
- if (e.method === "DELETE") return O.json({ error: "Session termination not supported" }, { status: 405 });
236
+ if (e.method === "DELETE") return A.json({ error: "Session termination not supported" }, { status: 405 });
237
237
  if (e.method === "GET") {
238
- let t = new TextEncoder(), r = v(), i = new ReadableStream({ start(e) {
239
- e.enqueue(t.encode(m({
238
+ let t = new TextEncoder(), r = h(), i = new ReadableStream({ start(e) {
239
+ e.enqueue(t.encode(k({
240
240
  jsonrpc: "2.0",
241
241
  method: "mcp/ready",
242
242
  params: { protocol: "streamable-http" }
@@ -247,110 +247,114 @@ function U(e) {
247
247
  Connection: "keep-alive"
248
248
  });
249
249
  if (n) {
250
- let t = j(e, n);
250
+ let t = N(e, n);
251
251
  Object.entries(t).forEach(([e, t]) => a.set(e, t));
252
252
  }
253
- return new O(i, {
253
+ return new A(i, {
254
254
  status: 200,
255
255
  headers: a
256
256
  });
257
257
  }
258
- if (e.method !== "POST") return O.json(i("Method not allowed - use POST", 405), { status: 405 });
259
- let o = D(e.headers.get("origin"), r.allowedOrigins ? { allowedOrigins: r.allowedOrigins } : {});
260
- if (!o.valid) return O.json(b(null, -32600, o.reason), { status: 403 });
261
- let s = e.headers.get("accept");
262
- if (!E(s)) return O.json(b(null, -32600, "Accept header must include both application/json and text/event-stream"), { status: 400 });
263
- let c = S(Object.fromEntries(e.headers.entries()));
264
- if (!c.ok) return O.json({
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({
265
265
  error: "Unsupported MCP protocol version",
266
- supported: c.supported
266
+ supported: u.supported
267
267
  }, { status: 426 });
268
- let l;
268
+ let d;
269
269
  try {
270
- l = await e.json();
270
+ d = await e.json();
271
271
  } catch {
272
- l = null;
272
+ d = null;
273
273
  }
274
- let u = y(l);
275
- if (!u) return O.json(b(null, -32600, "Invalid JSON-RPC 2.0 request"), { status: 400 });
276
- let d = g(s), f = u.method === "initialize", p = (t, r = 200, i = {}) => O.json(t, {
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, {
277
277
  status: r,
278
278
  headers: {
279
- ...n ? j(e, n) : {},
279
+ ...n ? N(e, n) : {},
280
280
  ...i
281
281
  }
282
282
  });
283
283
  try {
284
- let i = await _(u.method, u.params, {
284
+ let i = await S(f.method, f.params, {
285
285
  semanticLayer: a,
286
286
  extractSecurityContext: (e) => t(e),
287
287
  rawRequest: e,
288
288
  rawResponse: null,
289
- appEnabled: !!r.app
289
+ resources: o,
290
+ prompts: s,
291
+ appEnabled: !!r.app,
292
+ appConfig: typeof r.app == "object" ? r.app : void 0,
293
+ serverName: r.serverName
290
294
  });
291
- if (C(u)) return new O(null, { status: 202 });
292
- let o = f && i && typeof i == "object" && "sessionId" in i ? i.sessionId : void 0, s = {};
293
- o && (s[w] = o);
294
- let c = h(u.id ?? null, i);
295
- if (d) {
296
- let t = new TextEncoder(), r = v(), i = new ReadableStream({ start(e) {
297
- e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(m(c, r))), e.close();
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();
298
302
  } }), a = new Headers({
299
303
  "Content-Type": "text/event-stream",
300
304
  "Cache-Control": "no-cache",
301
305
  Connection: "keep-alive",
302
- ...s
306
+ ...l
303
307
  });
304
308
  if (n) {
305
- let t = j(e, n);
309
+ let t = N(e, n);
306
310
  Object.entries(t).forEach(([e, t]) => a.set(e, t));
307
311
  }
308
- return new O(i, {
312
+ return new A(i, {
309
313
  status: 200,
310
314
  headers: a
311
315
  });
312
316
  }
313
- return p(c, 200, s);
317
+ return D(u, 200, l);
314
318
  } catch (t) {
315
- if (C(u)) return process.env.NODE_ENV !== "test" && console.error("Next.js MCP notification processing error:", t), new O(null, { status: 202 });
319
+ if (C(f)) return process.env.NODE_ENV !== "test" && console.error("Next.js MCP notification processing error:", t), new A(null, { status: 202 });
316
320
  process.env.NODE_ENV !== "test" && console.error("Next.js MCP RPC handler error:", t);
317
- let r = t?.code ?? -32603, i = t?.data, a = t.message || "MCP request failed", o = b(u.id ?? null, r, a, i);
318
- if (d) {
319
- let t = new TextEncoder(), r = v(), i = new ReadableStream({ start(e) {
320
- e.enqueue(t.encode(`id: ${r}\n\n`)), e.enqueue(t.encode(m(o, r))), e.close();
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();
321
325
  } }), a = new Headers({
322
326
  "Content-Type": "text/event-stream",
323
327
  "Cache-Control": "no-cache",
324
328
  Connection: "keep-alive"
325
329
  });
326
330
  if (n) {
327
- let t = j(e, n);
331
+ let t = N(e, n);
328
332
  Object.entries(t).forEach(([e, t]) => a.set(e, t));
329
333
  }
330
- return new O(i, {
334
+ return new A(i, {
331
335
  status: 200,
332
336
  headers: a
333
337
  });
334
338
  }
335
- return p(o, 200);
339
+ return D(o, 200);
336
340
  }
337
341
  };
338
342
  }
339
- function W(e) {
340
- let { extractSecurityContext: t, cors: n } = A(e), { agent: r } = e;
343
+ function K(e) {
344
+ let { extractSecurityContext: t, cors: n } = M(e), { agent: r } = e;
341
345
  if (!r) throw Error("agent config is required for createAgentChatHandler");
342
- let i = k(e);
346
+ let i = j(e);
343
347
  return async function(e, a) {
344
348
  try {
345
- if (e.method !== "POST") return O.json({ error: "Method not allowed - use POST" }, { status: 405 });
346
- let { handleAgentChat: o } = await import("../handler-3LGcjLtr.js"), { message: s, sessionId: c, history: l } = await e.json();
347
- if (!s || typeof s != "string") return O.json({ error: "message is required and must be a string" }, { status: 400 });
349
+ if (e.method !== "POST") return A.json({ error: "Method not allowed - use POST" }, { status: 405 });
350
+ let { handleAgentChat: o } = await import("../handler-BC3nFNxV.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 });
348
352
  let u = (r.apiKey || "").trim();
349
353
  if (r.allowClientApiKey) {
350
354
  let t = e.headers.get("x-agent-api-key");
351
355
  t && (u = t.trim());
352
356
  }
353
- if (!u) return O.json({ error: "No API key configured. Set agent.apiKey in server config or send X-Agent-Api-Key header." }, { status: 401 });
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 });
354
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) {
355
359
  try {
356
360
  let t = o({
@@ -385,7 +389,7 @@ function W(e) {
385
389
  Connection: "keep-alive"
386
390
  });
387
391
  if (n) {
388
- let t = j(e, n);
392
+ let t = N(e, n);
389
393
  Object.entries(t).forEach(([e, t]) => v.set(e, t));
390
394
  }
391
395
  return new Response(_, {
@@ -393,20 +397,20 @@ function W(e) {
393
397
  headers: v
394
398
  });
395
399
  } catch (e) {
396
- return process.env.NODE_ENV !== "test" && console.error("Next.js agent chat handler error:", e), O.json({ error: e instanceof Error ? e.message : "Agent chat failed" }, { status: 500 });
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 });
397
401
  }
398
402
  };
399
403
  }
400
- function G(e) {
404
+ function q(e) {
401
405
  let { mcp: t = { enabled: !0 } } = e, n = {
402
- load: N(e),
403
- meta: P(e),
404
- sql: F(e),
405
- dryRun: I(e),
406
- batch: L(e),
407
- explain: R(e)
406
+ load: F(e),
407
+ meta: I(e),
408
+ sql: L(e),
409
+ dryRun: R(e),
410
+ batch: z(e),
411
+ explain: B(e)
408
412
  };
409
- return t.enabled !== !1 && (n.mcpRpc = U(e)), e.agent && (n.agentChat = W(e)), n;
413
+ return t.enabled !== !1 && (n.mcpRpc = G(e)), e.agent && (n.agentChat = K(e)), n;
410
414
  }
411
415
  //#endregion
412
- export { W as createAgentChatHandler, L as createBatchHandler, G as createCubeHandlers, z as createDiscoverHandler, I as createDryRunHandler, R as createExplainHandler, N as createLoadHandler, H as createMcpLoadHandler, U as createMcpRpcHandler, P as createMetaHandler, M as createOptionsHandler, F as createSqlHandler, B as createSuggestHandler, V as createValidateHandler };
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 };