'use strict';

var chunkVAJG5M6V_cjs = require('../../chunk-VAJG5M6V.cjs');
var chunkBHHIBGXG_cjs = require('../../chunk-BHHIBGXG.cjs');
var chunkV2O54UNE_cjs = require('../../chunk-V2O54UNE.cjs');
var chunkQWAUEFFD_cjs = require('../../chunk-QWAUEFFD.cjs');
var chunkFGZR5URB_cjs = require('../../chunk-FGZR5URB.cjs');
var chunk4BBJXG6N_cjs = require('../../chunk-4BBJXG6N.cjs');
var chunk4X5AKMXO_cjs = require('../../chunk-4X5AKMXO.cjs');
var chunk7E2SR5PY_cjs = require('../../chunk-7E2SR5PY.cjs');
var chunk6QMHD5CE_cjs = require('../../chunk-6QMHD5CE.cjs');
var chunkP5KLRYTE_cjs = require('../../chunk-P5KLRYTE.cjs');
var chunk76XHHGX2_cjs = require('../../chunk-76XHHGX2.cjs');
var chunk6YHMRFA6_cjs = require('../../chunk-6YHMRFA6.cjs');
var chunkXJLB2KGL_cjs = require('../../chunk-XJLB2KGL.cjs');
var chunkI5B5RVRT_cjs = require('../../chunk-I5B5RVRT.cjs');
var chunkKUBIW6LY_cjs = require('../../chunk-KUBIW6LY.cjs');
var chunkYDKAQW4X_cjs = require('../../chunk-YDKAQW4X.cjs');
var chunk2L5BDBRN_cjs = require('../../chunk-2L5BDBRN.cjs');
var chunkA2K5ZL47_cjs = require('../../chunk-A2K5ZL47.cjs');
var chunkJ5O2ANKN_cjs = require('../../chunk-J5O2ANKN.cjs');
var chunkKYZZGEWA_cjs = require('../../chunk-KYZZGEWA.cjs');
var chunkK52BGIHQ_cjs = require('../../chunk-K52BGIHQ.cjs');
var requestContext = require('@mastra/core/request-context');
var server = require('@mastra/core/server');

// src/server/server-adapter/routes/a2a.ts
var A2A_ROUTES = [chunkKUBIW6LY_cjs.GET_AGENT_CARD_ROUTE, chunkKUBIW6LY_cjs.AGENT_EXECUTION_ROUTE];

// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
  chunkYDKAQW4X_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
  chunkYDKAQW4X_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
  chunkYDKAQW4X_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
  chunkYDKAQW4X_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
  chunkYDKAQW4X_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
  chunkYDKAQW4X_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
  chunkYDKAQW4X_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
  chunkYDKAQW4X_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
  chunkYDKAQW4X_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
  chunkYDKAQW4X_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
  chunkYDKAQW4X_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
  chunkYDKAQW4X_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
  chunkYDKAQW4X_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];

// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
  // ============================================================================
  // Agent Core Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.LIST_AGENTS_ROUTE,
  chunkKYZZGEWA_cjs.GET_PROVIDERS_ROUTE,
  chunkKYZZGEWA_cjs.GET_AGENT_BY_ID_ROUTE,
  // ============================================================================
  // Voice Routes
  // ============================================================================
  chunk7E2SR5PY_cjs.GET_SPEAKERS_ROUTE,
  chunk7E2SR5PY_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
  // ============================================================================
  // Agent Execution Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.GENERATE_AGENT_ROUTE,
  chunkKYZZGEWA_cjs.GENERATE_AGENT_VNEXT_ROUTE,
  chunkKYZZGEWA_cjs.STREAM_GENERATE_ROUTE,
  chunkKYZZGEWA_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
  // ============================================================================
  // Tool Routes
  // ============================================================================
  chunk4BBJXG6N_cjs.EXECUTE_AGENT_TOOL_ROUTE,
  chunkKYZZGEWA_cjs.APPROVE_TOOL_CALL_ROUTE,
  chunkKYZZGEWA_cjs.DECLINE_TOOL_CALL_ROUTE,
  chunkKYZZGEWA_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
  chunkKYZZGEWA_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
  chunkKYZZGEWA_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
  chunkKYZZGEWA_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
  // ============================================================================
  // Network Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.STREAM_NETWORK_ROUTE,
  // ============================================================================
  // Model Management Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.UPDATE_AGENT_MODEL_ROUTE,
  chunkKYZZGEWA_cjs.RESET_AGENT_MODEL_ROUTE,
  chunkKYZZGEWA_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
  chunkKYZZGEWA_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
  // ============================================================================
  // Instruction Enhancement Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
  // ============================================================================
  // Agent Tool Routes
  // ============================================================================
  chunk4BBJXG6N_cjs.GET_AGENT_TOOL_ROUTE,
  // ============================================================================
  // Agent Skill Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.GET_AGENT_SKILL_ROUTE,
  // ============================================================================
  // Voice/Speech Routes
  // ============================================================================
  chunk7E2SR5PY_cjs.GENERATE_SPEECH_ROUTE,
  chunk7E2SR5PY_cjs.GENERATE_SPEECH_DEPRECATED_ROUTE,
  chunk7E2SR5PY_cjs.TRANSCRIBE_SPEECH_ROUTE,
  chunk7E2SR5PY_cjs.TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,
  chunk7E2SR5PY_cjs.GET_LISTENER_ROUTE,
  // ============================================================================
  // Deprecated Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
  chunkKYZZGEWA_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
  chunkKYZZGEWA_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];

// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
  // ============================================================================
  // Legacy Agent Routes
  // ============================================================================
  chunkKYZZGEWA_cjs.GENERATE_LEGACY_ROUTE,
  chunkKYZZGEWA_cjs.STREAM_GENERATE_LEGACY_ROUTE,
  // ============================================================================
  // Legacy Workflow Routes
  // ============================================================================
  chunk2L5BDBRN_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,
  // ============================================================================
  // Legacy Agent Builder Routes
  // ============================================================================
  chunkYDKAQW4X_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
  chunkYDKAQW4X_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE
];

// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [
  chunk6QMHD5CE_cjs.LIST_LOG_TRANSPORTS_ROUTE,
  chunk6QMHD5CE_cjs.LIST_LOGS_ROUTE,
  chunk6QMHD5CE_cjs.LIST_LOGS_BY_RUN_ID_ROUTE
];

// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
  // ============================================================================
  // MCP Server Registry Routes
  // ============================================================================
  chunkP5KLRYTE_cjs.LIST_MCP_SERVERS_ROUTE,
  chunkP5KLRYTE_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
  // ============================================================================
  // MCP Server Tool Routes
  // ============================================================================
  chunkP5KLRYTE_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
  chunkP5KLRYTE_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
  chunkP5KLRYTE_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
  // ============================================================================
  // MCP Transport Routes (handled by adapters)
  // ============================================================================
  chunkP5KLRYTE_cjs.MCP_HTTP_TRANSPORT_ROUTE,
  chunkP5KLRYTE_cjs.MCP_SSE_TRANSPORT_ROUTE,
  chunkP5KLRYTE_cjs.MCP_SSE_MESSAGES_ROUTE
];

// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
  chunk76XHHGX2_cjs.GET_MEMORY_STATUS_ROUTE,
  chunk76XHHGX2_cjs.GET_MEMORY_CONFIG_ROUTE,
  chunk76XHHGX2_cjs.LIST_THREADS_ROUTE,
  chunk76XHHGX2_cjs.GET_THREAD_BY_ID_ROUTE,
  chunk76XHHGX2_cjs.LIST_MESSAGES_ROUTE,
  chunk76XHHGX2_cjs.GET_WORKING_MEMORY_ROUTE,
  chunk76XHHGX2_cjs.SAVE_MESSAGES_ROUTE,
  chunk76XHHGX2_cjs.CREATE_THREAD_ROUTE,
  chunk76XHHGX2_cjs.UPDATE_THREAD_ROUTE,
  chunk76XHHGX2_cjs.DELETE_THREAD_ROUTE,
  chunk76XHHGX2_cjs.CLONE_THREAD_ROUTE,
  chunk76XHHGX2_cjs.UPDATE_WORKING_MEMORY_ROUTE,
  chunk76XHHGX2_cjs.DELETE_MESSAGES_ROUTE,
  chunk76XHHGX2_cjs.SEARCH_MEMORY_ROUTE,
  chunk76XHHGX2_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.LIST_THREADS_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.LIST_MESSAGES_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.CREATE_THREAD_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.UPDATE_THREAD_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.DELETE_THREAD_NETWORK_ROUTE,
  chunk76XHHGX2_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];

// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
  chunk6YHMRFA6_cjs.LIST_TRACES_ROUTE,
  chunk6YHMRFA6_cjs.GET_TRACE_ROUTE,
  chunk6YHMRFA6_cjs.SCORE_TRACES_ROUTE,
  chunk6YHMRFA6_cjs.LIST_SCORES_BY_SPAN_ROUTE
];

// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [
  chunkFGZR5URB_cjs.LIST_PROCESSORS_ROUTE,
  chunkFGZR5URB_cjs.GET_PROCESSOR_BY_ID_ROUTE,
  chunkFGZR5URB_cjs.EXECUTE_PROCESSOR_ROUTE
];

// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
  chunkXJLB2KGL_cjs.LIST_SCORERS_ROUTE,
  chunkXJLB2KGL_cjs.GET_SCORER_ROUTE,
  chunkXJLB2KGL_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
  chunkXJLB2KGL_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
  chunkXJLB2KGL_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
  chunkXJLB2KGL_cjs.SAVE_SCORE_ROUTE
];

// src/server/server-adapter/routes/stored-agents.ts
var STORED_AGENTS_ROUTES = [
  // ============================================================================
  // Stored Agents CRUD Routes
  // ============================================================================
  chunkBHHIBGXG_cjs.LIST_STORED_AGENTS_ROUTE,
  chunkBHHIBGXG_cjs.GET_STORED_AGENT_ROUTE,
  chunkBHHIBGXG_cjs.CREATE_STORED_AGENT_ROUTE,
  chunkBHHIBGXG_cjs.UPDATE_STORED_AGENT_ROUTE,
  chunkBHHIBGXG_cjs.DELETE_STORED_AGENT_ROUTE,
  // ============================================================================
  // Agent Versions Routes
  // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
  // routes with path parameters (e.g., /:versionId) to ensure correct matching.
  // ============================================================================
  chunkJ5O2ANKN_cjs.LIST_AGENT_VERSIONS_ROUTE,
  chunkJ5O2ANKN_cjs.CREATE_AGENT_VERSION_ROUTE,
  chunkJ5O2ANKN_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
  // Must be before GET_AGENT_VERSION_ROUTE
  chunkJ5O2ANKN_cjs.GET_AGENT_VERSION_ROUTE,
  chunkJ5O2ANKN_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
  chunkJ5O2ANKN_cjs.RESTORE_AGENT_VERSION_ROUTE,
  chunkJ5O2ANKN_cjs.DELETE_AGENT_VERSION_ROUTE
];

// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunkV2O54UNE_cjs.GET_SYSTEM_PACKAGES_ROUTE];

// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunk4BBJXG6N_cjs.LIST_TOOLS_ROUTE, chunk4BBJXG6N_cjs.GET_TOOL_BY_ID_ROUTE, chunk4BBJXG6N_cjs.EXECUTE_TOOL_ROUTE];

// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
  chunk4X5AKMXO_cjs.UPSERT_VECTORS_ROUTE,
  chunk4X5AKMXO_cjs.CREATE_INDEX_ROUTE,
  chunk4X5AKMXO_cjs.QUERY_VECTORS_ROUTE,
  chunk4X5AKMXO_cjs.LIST_INDEXES_ROUTE,
  chunk4X5AKMXO_cjs.DESCRIBE_INDEX_ROUTE,
  chunk4X5AKMXO_cjs.DELETE_INDEX_ROUTE
];

// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
  chunk2L5BDBRN_cjs.LIST_WORKFLOWS_ROUTE,
  chunk2L5BDBRN_cjs.GET_WORKFLOW_BY_ID_ROUTE,
  chunk2L5BDBRN_cjs.LIST_WORKFLOW_RUNS_ROUTE,
  chunk2L5BDBRN_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
  chunk2L5BDBRN_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
  chunk2L5BDBRN_cjs.CREATE_WORKFLOW_RUN_ROUTE,
  chunk2L5BDBRN_cjs.STREAM_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.START_ASYNC_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.START_WORKFLOW_RUN_ROUTE,
  chunk2L5BDBRN_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.RESUME_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
  chunk2L5BDBRN_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.RESTART_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
  chunk2L5BDBRN_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
  chunk2L5BDBRN_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE
];

// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
  // List all workspaces route (at /api/workspaces)
  chunkVAJG5M6V_cjs.LIST_WORKSPACES_ROUTE,
  // Get workspace route (at /api/workspaces/:workspaceId)
  chunkVAJG5M6V_cjs.GET_WORKSPACE_ROUTE,
  // Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
  ...chunkVAJG5M6V_cjs.WORKSPACE_FS_ROUTES,
  // Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
  ...chunkVAJG5M6V_cjs.WORKSPACE_SEARCH_ROUTES,
  // Skills routes (search must come before parameterized routes)
  ...chunkVAJG5M6V_cjs.WORKSPACE_SKILLS_ROUTES,
  // skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
  ...chunkVAJG5M6V_cjs.WORKSPACE_SKILLS_SH_ROUTES
];

// src/server/server-adapter/routes/permissions.ts
var METHOD_TO_ACTION = {
  GET: "read",
  POST: "write",
  // Default for POST, may be overridden to 'execute'
  PUT: "write",
  PATCH: "write",
  DELETE: "delete"
};
var EXECUTE_PATTERNS = [
  "/generate",
  "/stream",
  "/execute",
  "/start",
  "/resume",
  "/restart",
  "/cancel",
  "/approve",
  "/decline",
  "/speak",
  "/listen",
  "/query",
  "/search",
  "/observe",
  "/time-travel",
  "/enhance",
  "/clone"
];
function extractResource(path) {
  const segments = path.replace(/^\//, "").split("/");
  if (segments.length === 0) {
    return null;
  }
  const firstSegment = segments[0];
  if (firstSegment === "stored" && segments[1] === "agents") {
    return "stored-agents";
  }
  if (firstSegment === ".well-known") {
    return "a2a";
  }
  return firstSegment || null;
}
function deriveAction(method, path) {
  const upperMethod = method.toUpperCase();
  if (upperMethod === "POST") {
    const isExecuteOperation = EXECUTE_PATTERNS.some((pattern) => path.includes(pattern));
    return isExecuteOperation ? "execute" : "write";
  }
  return METHOD_TO_ACTION[upperMethod] || "read";
}
function derivePermission(route) {
  if (route.method === "ALL") {
    return null;
  }
  const resource = extractResource(route.path);
  if (!resource) {
    return null;
  }
  const action = deriveAction(route.method, route.path);
  return `${resource}:${action}`;
}
function getEffectivePermission(route) {
  if (route.requiresAuth === false) {
    return null;
  }
  if (route.requiresPermission) {
    return route.requiresPermission;
  }
  return derivePermission(route);
}

// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
  ...AGENTS_ROUTES,
  ...chunkQWAUEFFD_cjs.AUTH_ROUTES,
  ...WORKFLOWS_ROUTES,
  ...TOOLS_ROUTES,
  ...PROCESSORS_ROUTES,
  ...MEMORY_ROUTES,
  ...SCORES_ROUTES,
  ...OBSERVABILITY_ROUTES,
  ...LOGS_ROUTES,
  ...VECTORS_ROUTES,
  ...A2A_ROUTES,
  ...AGENT_BUILDER_ROUTES,
  ...WORKSPACE_ROUTES,
  ...LEGACY_ROUTES,
  ...MCP_ROUTES,
  ...STORED_AGENTS_ROUTES,
  ...SYSTEM_ROUTES
];

// src/server/server-adapter/redact.ts
function redactV2Payload(payload) {
  const redactedPayload = { ...payload };
  if (redactedPayload.metadata && typeof redactedPayload.metadata === "object") {
    const { request, ...metadataRest } = redactedPayload.metadata;
    redactedPayload.metadata = metadataRest;
  }
  if (redactedPayload.output && typeof redactedPayload.output === "object") {
    const output = { ...redactedPayload.output };
    if (Array.isArray(output.steps)) {
      output.steps = output.steps.map((step) => {
        if (step && typeof step === "object") {
          const { request, ...stepRest } = step;
          return stepRest;
        }
        return step;
      });
    }
    redactedPayload.output = output;
  }
  return redactedPayload;
}
function redactStreamChunk(chunk) {
  if (!chunk || typeof chunk !== "object") {
    return chunk;
  }
  const typedChunk = chunk;
  switch (chunk.type) {
    case "step-start": {
      if ("payload" in typedChunk && typedChunk.payload && typeof typedChunk.payload === "object") {
        const { payload, ...rest } = typedChunk;
        const { request, ...payloadRest } = payload;
        return {
          ...rest,
          type: "step-start",
          payload: {
            ...payloadRest,
            // Keep an empty request object to maintain structure but remove body
            request: {}
          }
        };
      } else if ("request" in typedChunk) {
        const { request, ...rest } = typedChunk;
        return {
          ...rest,
          type: "step-start",
          // Keep an empty request object to maintain structure
          request: {}
        };
      }
      return chunk;
    }
    case "step-finish": {
      if ("payload" in typedChunk && typedChunk.payload && typeof typedChunk.payload === "object") {
        const { payload, ...rest } = typedChunk;
        return {
          ...rest,
          type: "step-finish",
          payload: redactV2Payload(payload)
        };
      } else if ("request" in typedChunk) {
        const { request, ...rest } = typedChunk;
        return {
          ...rest,
          type: "step-finish"
        };
      }
      return chunk;
    }
    case "finish": {
      if ("payload" in typedChunk && typedChunk.payload && typeof typedChunk.payload === "object") {
        const { payload, ...rest } = typedChunk;
        return {
          ...rest,
          type: "finish",
          payload: redactV2Payload(payload)
        };
      } else if ("request" in typedChunk) {
        const { request, ...rest } = typedChunk;
        return {
          ...rest,
          type: "finish"
        };
      }
      return chunk;
    }
    default:
      return chunk;
  }
}

// src/server/server-adapter/index.ts
function normalizeQueryParams(rawQuery) {
  const queryParams = {};
  for (const [key, value] of Object.entries(rawQuery)) {
    if (typeof value === "string") {
      queryParams[key] = value;
    } else if (Array.isArray(value)) {
      const stringValues = value.filter((v) => typeof v === "string");
      queryParams[key] = stringValues.length === 1 ? stringValues[0] : stringValues;
    }
  }
  return queryParams;
}
var MastraServer = class extends server.MastraServerBase {
  mastra;
  bodyLimitOptions;
  tools;
  prefix;
  openapiPath;
  taskStore;
  customRouteAuthConfig;
  streamOptions;
  customApiRoutes;
  mcpOptions;
  constructor({
    app,
    mastra,
    bodyLimitOptions,
    tools,
    prefix = "/api",
    openapiPath = "",
    taskStore,
    customRouteAuthConfig,
    streamOptions,
    customApiRoutes,
    mcpOptions
  }) {
    super({ app, name: "MastraServer" });
    this.mastra = mastra;
    this.bodyLimitOptions = bodyLimitOptions;
    this.tools = tools;
    this.prefix = chunkA2K5ZL47_cjs.normalizeRoutePath(prefix);
    this.openapiPath = openapiPath;
    this.taskStore = taskStore;
    this.customRouteAuthConfig = customRouteAuthConfig;
    this.streamOptions = { redact: true, ...streamOptions };
    this.customApiRoutes = customApiRoutes;
    this.mcpOptions = mcpOptions;
    mastra.setMastraServer(this);
  }
  mergeRequestContext({
    paramsRequestContext,
    bodyRequestContext
  }) {
    const requestContext$1 = new requestContext.RequestContext();
    if (bodyRequestContext) {
      for (const [key, value] of Object.entries(bodyRequestContext)) {
        requestContext$1.set(key, value);
      }
    }
    if (paramsRequestContext) {
      for (const [key, value] of Object.entries(paramsRequestContext)) {
        requestContext$1.set(key, value);
      }
    }
    return requestContext$1;
  }
  /**
   * Check if the current request should be authenticated/authorized.
   * Returns null if auth passes, or an error response if it fails.
   *
   * This method encapsulates the complete auth flow:
   * 1. Check if route requires auth (route.requiresAuth)
   * 2. Check if it's a dev playground request
   * 3. Check if path is publicly accessible
   * 4. Perform authentication (verify token)
   * 5. Perform authorization (check rules, authorizeUser, authorize)
   */
  async checkRouteAuth(route, context) {
    const authConfig = this.mastra.getServer()?.auth;
    if (!authConfig) {
      return null;
    }
    if (route.requiresAuth === false) {
      return null;
    }
    if (chunkI5B5RVRT_cjs.isDevPlaygroundRequest(context.path, context.method, context.getHeader, authConfig)) {
      return null;
    }
    if (chunkI5B5RVRT_cjs.canAccessPublicly(context.path, context.method, authConfig)) {
      return null;
    }
    const authHeader = context.getHeader("authorization");
    let token = authHeader ? authHeader.replace("Bearer ", "") : null;
    if (!token) {
      token = context.getQuery("apiKey") || null;
    }
    let user;
    try {
      if (typeof authConfig.authenticateToken === "function") {
        user = await authConfig.authenticateToken(token ?? "", context.request);
      } else {
        return { status: 401, error: "No token verification method configured" };
      }
      if (!user) {
        return { status: 401, error: "Authentication required" };
      }
      context.requestContext.set("user", user);
    } catch (err) {
      console.error(err);
      return { status: 401, error: "Invalid or expired token" };
    }
    if ("authorizeUser" in authConfig && typeof authConfig.authorizeUser === "function") {
      try {
        const isAuthorized = await authConfig.authorizeUser(user, null);
        if (!isAuthorized) {
          return { status: 403, error: "Access denied" };
        }
        return null;
      } catch (err) {
        console.error(err);
        return { status: 500, error: "Authorization error" };
      }
    }
    if ("authorize" in authConfig && typeof authConfig.authorize === "function") {
      try {
        const isAuthorized = await authConfig.authorize(context.path, context.method, user, null);
        if (!isAuthorized) {
          return { status: 403, error: "Access denied" };
        }
        return null;
      } catch (err) {
        console.error(err);
        return { status: 500, error: "Authorization error" };
      }
    }
    if ("rules" in authConfig && authConfig.rules && authConfig.rules.length > 0) {
      const isAuthorized = await chunkI5B5RVRT_cjs.checkRules(authConfig.rules, context.path, context.method, user);
      if (isAuthorized) {
        return null;
      }
      return { status: 403, error: "Access denied" };
    }
    if (chunkI5B5RVRT_cjs.defaultAuthConfig.rules && chunkI5B5RVRT_cjs.defaultAuthConfig.rules.length > 0) {
      const isAuthorized = await chunkI5B5RVRT_cjs.checkRules(chunkI5B5RVRT_cjs.defaultAuthConfig.rules, context.path, context.method, user);
      if (isAuthorized) {
        return null;
      }
    }
    return { status: 403, error: "Access denied" };
  }
  /**
   * Check if the user has the required permission for a route.
   *
   * Uses convention-based permission derivation:
   * 1. If route has explicit `requiresPermission`, use that
   * 2. Otherwise, derive permission from path/method (e.g., GET /agents → agents:read)
   * 3. Routes with `requiresAuth: false` skip permission checks
   *
   * @param route - The route being accessed
   * @param userPermissions - The user's permissions from the request context
   * @returns Error response if permission denied, null if allowed
   */
  checkRoutePermission(route, userPermissions, hasPermissionFn) {
    const requiredPermission = getEffectivePermission(route);
    if (!requiredPermission) {
      return null;
    }
    if (!userPermissions || !hasPermissionFn(userPermissions, requiredPermission)) {
      return {
        status: 403,
        error: "Forbidden",
        message: `Missing required permission: ${requiredPermission}`
      };
    }
    return null;
  }
  async init() {
    this.registerContextMiddleware();
    this.registerAuthMiddleware();
    await this.registerRoutes();
  }
  async registerOpenAPIRoute(app, config = {}, { prefix }) {
    const {
      title = "Mastra API",
      version = "1.0.0",
      description = "Mastra Server API",
      path = "/openapi.json"
    } = config;
    const openApiSpec = chunkK52BGIHQ_cjs.generateOpenAPIDocument(SERVER_ROUTES, {
      title,
      version,
      description
    });
    if (this.customApiRoutes && this.customApiRoutes.length > 0) {
      const customPaths = chunkK52BGIHQ_cjs.convertCustomRoutesToOpenAPIPaths(this.customApiRoutes);
      openApiSpec.paths = { ...openApiSpec.paths, ...customPaths };
    }
    const openApiRoute = {
      method: "GET",
      path,
      responseType: "json",
      handler: async () => openApiSpec
    };
    await this.registerRoute(app, openApiRoute, { prefix });
  }
  async registerRoutes() {
    for (const route of SERVER_ROUTES) {
      await this.registerRoute(this.app, route, { prefix: this.prefix });
    }
    if (this.openapiPath) {
      await this.registerOpenAPIRoute(
        this.app,
        {
          title: "Mastra API",
          version: "1.0.0",
          description: "Mastra Server API",
          path: this.openapiPath
        },
        { prefix: this.prefix }
      );
    }
  }
  async parsePathParams(route, params) {
    const pathParamSchema = route.pathParamSchema;
    if (!pathParamSchema) {
      return params;
    }
    return pathParamSchema.parseAsync(params);
  }
  async parseQueryParams(route, params) {
    const queryParamSchema = route.queryParamSchema;
    if (!queryParamSchema) {
      return params;
    }
    return queryParamSchema.parseAsync(params);
  }
  async parseBody(route, body) {
    const bodySchema = route.bodySchema;
    if (!bodySchema) {
      return body;
    }
    return bodySchema.parseAsync(body);
  }
};

Object.defineProperty(exports, "WorkflowRegistry", {
  enumerable: true,
  get: function () { return chunkA2K5ZL47_cjs.WorkflowRegistry; }
});
Object.defineProperty(exports, "normalizeRoutePath", {
  enumerable: true,
  get: function () { return chunkA2K5ZL47_cjs.normalizeRoutePath; }
});
Object.defineProperty(exports, "createPublicRoute", {
  enumerable: true,
  get: function () { return chunkK52BGIHQ_cjs.createPublicRoute; }
});
Object.defineProperty(exports, "createRoute", {
  enumerable: true,
  get: function () { return chunkK52BGIHQ_cjs.createRoute; }
});
Object.defineProperty(exports, "generateOpenAPIDocument", {
  enumerable: true,
  get: function () { return chunkK52BGIHQ_cjs.generateOpenAPIDocument; }
});
Object.defineProperty(exports, "jsonQueryParam", {
  enumerable: true,
  get: function () { return chunkK52BGIHQ_cjs.jsonQueryParam; }
});
Object.defineProperty(exports, "pickParams", {
  enumerable: true,
  get: function () { return chunkK52BGIHQ_cjs.pickParams; }
});
Object.defineProperty(exports, "wrapSchemaForQueryParams", {
  enumerable: true,
  get: function () { return chunkK52BGIHQ_cjs.wrapSchemaForQueryParams; }
});
exports.MastraServer = MastraServer;
exports.SERVER_ROUTES = SERVER_ROUTES;
exports.deriveAction = deriveAction;
exports.derivePermission = derivePermission;
exports.extractResource = extractResource;
exports.getEffectivePermission = getEffectivePermission;
exports.normalizeQueryParams = normalizeQueryParams;
exports.redactStreamChunk = redactStreamChunk;
//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map