@decocms/runtime 0.24.0

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 (61) hide show
  1. package/dist/admin.d.ts +5 -0
  2. package/dist/admin.js +21 -0
  3. package/dist/admin.js.map +1 -0
  4. package/dist/bindings/deconfig/index.d.ts +10 -0
  5. package/dist/bindings/deconfig/index.js +10 -0
  6. package/dist/bindings/deconfig/index.js.map +1 -0
  7. package/dist/bindings/index.d.ts +1054 -0
  8. package/dist/bindings/index.js +133 -0
  9. package/dist/bindings/index.js.map +1 -0
  10. package/dist/chunk-377XXI4J.js +764 -0
  11. package/dist/chunk-377XXI4J.js.map +1 -0
  12. package/dist/chunk-4UQ5U73Y.js +129 -0
  13. package/dist/chunk-4UQ5U73Y.js.map +1 -0
  14. package/dist/chunk-4XSQKJLU.js +105 -0
  15. package/dist/chunk-4XSQKJLU.js.map +1 -0
  16. package/dist/chunk-73FIKR3X.js +128 -0
  17. package/dist/chunk-73FIKR3X.js.map +1 -0
  18. package/dist/chunk-AOFOWQXY.js +27 -0
  19. package/dist/chunk-AOFOWQXY.js.map +1 -0
  20. package/dist/chunk-G3NWZG2F.js +155 -0
  21. package/dist/chunk-G3NWZG2F.js.map +1 -0
  22. package/dist/chunk-I7BWSAN6.js +49 -0
  23. package/dist/chunk-I7BWSAN6.js.map +1 -0
  24. package/dist/chunk-UHR3BLMF.js +92 -0
  25. package/dist/chunk-UHR3BLMF.js.map +1 -0
  26. package/dist/chunk-ZPUT6RN6.js +32 -0
  27. package/dist/chunk-ZPUT6RN6.js.map +1 -0
  28. package/dist/chunk-ZRJ5SGAO.js +494 -0
  29. package/dist/chunk-ZRJ5SGAO.js.map +1 -0
  30. package/dist/client.d.ts +28 -0
  31. package/dist/client.js +5 -0
  32. package/dist/client.js.map +1 -0
  33. package/dist/connection-DDtQYrea.d.ts +30 -0
  34. package/dist/d1-store.d.ts +9 -0
  35. package/dist/d1-store.js +4 -0
  36. package/dist/d1-store.js.map +1 -0
  37. package/dist/drizzle.d.ts +48 -0
  38. package/dist/drizzle.js +121 -0
  39. package/dist/drizzle.js.map +1 -0
  40. package/dist/index-BBAR4TQu.d.ts +530 -0
  41. package/dist/index-D_J_044C.d.ts +461 -0
  42. package/dist/index.d.ts +9 -0
  43. package/dist/index.js +634 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/mastra.d.ts +9 -0
  46. package/dist/mastra.js +6 -0
  47. package/dist/mastra.js.map +1 -0
  48. package/dist/mcp-Bv7IAgWX.d.ts +109 -0
  49. package/dist/mcp-client.d.ts +236 -0
  50. package/dist/mcp-client.js +4 -0
  51. package/dist/mcp-client.js.map +1 -0
  52. package/dist/proxy.d.ts +10 -0
  53. package/dist/proxy.js +5 -0
  54. package/dist/proxy.js.map +1 -0
  55. package/dist/resources.d.ts +393 -0
  56. package/dist/resources.js +4 -0
  57. package/dist/resources.js.map +1 -0
  58. package/dist/views.d.ts +72 -0
  59. package/dist/views.js +4 -0
  60. package/dist/views.js.map +1 -0
  61. package/package.json +91 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mcp.ts","../src/bindings/channels.ts","../src/bindings/views.ts","../src/bindings/binder.ts","../src/bindings/resources/schemas.ts","../src/bindings/resources/bindings.ts","../src/bindings/deconfig/resources.ts"],"names":["z","impl","env"],"mappings":"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","file":"chunk-377XXI4J.js","sourcesContent":["/* oxlint-disable no-explicit-any */\nimport { env } from \"cloudflare:workers\";\nimport { z } from \"zod\";\nimport type { MCPConnection } from \"./connection.ts\";\nimport type { DefaultEnv } from \"./index.ts\";\nimport { createMCPClientProxy } from \"./proxy.ts\";\n\nexport interface FetchOptions extends RequestInit {\n path?: string;\n segments?: string[];\n}\n\nconst Timings = z.object({\n sql_duration_ms: z.number().optional(),\n});\n\nconst Meta = z.object({\n changed_db: z.boolean().optional(),\n changes: z.number().optional(),\n duration: z.number().optional(),\n last_row_id: z.number().optional(),\n rows_read: z.number().optional(),\n rows_written: z.number().optional(),\n served_by_primary: z.boolean().optional(),\n served_by_region: z\n .enum([\"WNAM\", \"ENAM\", \"WEUR\", \"EEUR\", \"APAC\", \"OC\"])\n .optional(),\n size_after: z.number().optional(),\n timings: Timings.optional(),\n});\n\nconst QueryResult = z.object({\n meta: Meta.optional(),\n results: z.array(z.unknown()).optional(),\n success: z.boolean().optional(),\n});\n\nexport type QueryResult = z.infer<typeof QueryResult>;\n\nconst workspaceTools = [\n {\n name: \"INTEGRATIONS_GET\" as const,\n inputSchema: z.object({\n id: z.string(),\n }),\n outputSchema: z.object({\n connection: z.object({}),\n }),\n },\n {\n name: \"DATABASES_RUN_SQL\" as const,\n inputSchema: z.object({\n sql: z.string().describe(\"The SQL query to run\"),\n params: z\n .array(z.string())\n .describe(\"The parameters to pass to the SQL query\"),\n }),\n outputSchema: z.object({\n result: z.array(QueryResult),\n }),\n },\n] satisfies ToolBinder<string, unknown, object>[];\n\n// Default fetcher instance with API_SERVER_URL and API_HEADERS\nconst global = createMCPFetchStub<[]>({});\nexport const MCPClient = new Proxy(\n {} as typeof global & {\n forWorkspace: (\n workspace: string,\n token?: string,\n ) => MCPClientFetchStub<typeof workspaceTools>;\n forConnection: <TDefinition extends readonly ToolBinder[]>(\n connection: MCPConnectionProvider,\n ) => MCPClientFetchStub<TDefinition>;\n },\n {\n get(_, name) {\n if (name === \"toJSON\") {\n return null;\n }\n\n if (name === \"forWorkspace\") {\n return (workspace: string, token?: string) =>\n createMCPFetchStub<[]>({\n workspace,\n token,\n decoCmsApiUrl: (env as DefaultEnv).DECO_API_URL,\n });\n }\n if (name === \"forConnection\") {\n return <TDefinition extends readonly ToolBinder[]>(\n connection: MCPConnectionProvider,\n ) =>\n createMCPFetchStub<TDefinition>({\n connection,\n decoCmsApiUrl: (env as DefaultEnv).DECO_API_URL,\n });\n }\n return global[name as keyof typeof global];\n },\n },\n);\n\nexport interface ToolBinder<\n TName extends string = string,\n TInput = any,\n TReturn extends object | null | boolean = object,\n> {\n name: TName;\n inputSchema: z.ZodType<TInput>;\n outputSchema?: z.ZodType<TReturn>;\n opt?: true;\n}\nexport type MCPClientStub<TDefinition extends readonly ToolBinder[]> = {\n [K in TDefinition[number] as K[\"name\"]]: K extends ToolBinder<\n string,\n infer TInput,\n infer TReturn\n >\n ? (params: TInput, init?: RequestInit) => Promise<TReturn>\n : never;\n};\n\nexport type MCPClientFetchStub<TDefinition extends readonly ToolBinder[]> = {\n [K in TDefinition[number] as K[\"name\"]]: K extends ToolBinder<\n string,\n infer TInput,\n infer TReturn\n >\n ? (params: TInput, init?: RequestInit) => Promise<Awaited<TReturn>>\n : never;\n};\n\nexport type MCPConnectionProvider = MCPConnection;\n\nexport interface MCPClientRaw {\n callTool: (tool: string, args: unknown) => Promise<unknown>;\n listTools: () => Promise<\n {\n name: string;\n inputSchema: any;\n outputSchema?: any;\n description: string;\n }[]\n >;\n}\nexport type JSONSchemaToZodConverter = (jsonSchema: any) => z.ZodTypeAny;\nexport interface CreateStubAPIOptions {\n mcpPath?: string;\n decoCmsApiUrl?: string;\n workspace?: string;\n token?: string;\n connection?: MCPConnectionProvider;\n debugId?: () => string;\n getErrorByStatusCode?: (\n statusCode: number,\n message?: string,\n traceId?: string,\n errorObject?: unknown,\n ) => Error;\n supportsToolName?: boolean;\n}\n\nexport function createMCPFetchStub<TDefinition extends readonly ToolBinder[]>(\n options?: CreateStubAPIOptions,\n): MCPClientFetchStub<TDefinition> {\n return createMCPClientProxy<MCPClientFetchStub<TDefinition>>({\n ...(options ?? {}),\n });\n}\n","import { z } from \"zod\";\nimport type { ToolBinder } from \"../mcp.ts\";\n\nconst callbacksSchema = z.object({\n stream: z.string(),\n generate: z.string(),\n generateObject: z.string(),\n});\n\nconst channelIdSchema = z.object({\n workspace: z.string(),\n discriminator: z.string(),\n});\n\nconst channelBindingSchema = channelIdSchema.extend({\n agentId: z.string(),\n agentName: z.string(),\n agentLink: z.string(),\n});\n\nconst joinChannelSchema = channelBindingSchema.extend({\n callbacks: callbacksSchema,\n});\n\nconst listChannelsSchema = z.object({\n channels: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n});\n\nexport type Callbacks = z.infer<typeof callbacksSchema>;\nexport type JoinedChannelPayload = z.infer<typeof joinChannelSchema>;\nexport type ListChannelsSchema = z.infer<typeof listChannelsSchema>;\nexport const CHANNEL_BINDING_SCHEMA = [\n {\n name: \"DECO_CHAT_CHANNELS_JOIN\" as const,\n inputSchema: joinChannelSchema,\n outputSchema: z.any(),\n },\n {\n name: \"DECO_CHAT_CHANNELS_LEAVE\" as const,\n inputSchema: channelIdSchema,\n outputSchema: z.any(),\n },\n {\n name: \"DECO_CHAT_CHANNELS_LIST\" as const,\n inputSchema: z.any(),\n outputSchema: listChannelsSchema,\n opt: true,\n },\n] as const satisfies readonly ToolBinder[];\n","import { ViewsListOutputSchema } from \"../views.ts\";\nimport { z } from \"zod\";\nimport type { ToolBinder } from \"../mcp.ts\";\n\nexport const VIEW_BINDING_SCHEMA = [\n {\n name: \"DECO_CHAT_VIEWS_LIST\" as const,\n inputSchema: z.any(),\n outputSchema: ViewsListOutputSchema,\n },\n] as const satisfies readonly ToolBinder[];\n\n// Re-export for existing imports expecting listViewsSchema\nexport const listViewsSchema = ViewsListOutputSchema;\n","/* oxlint-disable no-explicit-any */\nimport { z } from \"zod\";\nimport type { MCPConnection } from \"../connection.ts\";\nimport { createPrivateTool } from \"../mastra.ts\";\nimport {\n createMCPFetchStub,\n type MCPClientFetchStub,\n type ToolBinder,\n} from \"../mcp.ts\";\nimport { CHANNEL_BINDING_SCHEMA } from \"./channels.ts\";\nimport { VIEW_BINDING_SCHEMA } from \"./views.ts\";\n\n// ToolLike is a simplified version of the Tool interface that matches what we need for bindings\nexport interface ToolLike<\n TName extends string = string,\n TInput = any,\n TReturn extends object | null | boolean = object,\n> {\n name: TName;\n description: string;\n inputSchema: z.ZodType<TInput>;\n outputSchema?: z.ZodType<TReturn>;\n handler: (props: TInput) => Promise<TReturn> | TReturn;\n}\n\nexport type Binder<\n TDefinition extends readonly ToolBinder[] = readonly ToolBinder[],\n> = TDefinition;\n\nexport type BinderImplementation<\n TBinder extends Binder<any>,\n TContext = any,\n> = TBinder extends Binder<infer TDefinition>\n ? {\n [K in keyof TDefinition]: Omit<\n ToolLike<\n TDefinition[K][\"name\"],\n z.infer<TDefinition[K][\"inputSchema\"]>,\n TDefinition[K] extends { outputSchema: infer Schema }\n ? Schema extends z.ZodType\n ? z.infer<Schema>\n : never\n : never\n >,\n \"name\" | \"inputSchema\" | \"outputSchema\" | \"handler\"\n > & {\n handler: (\n props: z.infer<TDefinition[K][\"inputSchema\"]>,\n c?: TContext,\n ) => ReturnType<\n ToolLike<\n TDefinition[K][\"name\"],\n z.infer<TDefinition[K][\"inputSchema\"]>,\n TDefinition[K] extends { outputSchema: infer Schema }\n ? Schema extends z.ZodType\n ? z.infer<Schema>\n : never\n : never\n >[\"handler\"]\n >;\n };\n }\n : never;\n\nexport const bindingClient = <TDefinition extends readonly ToolBinder[]>(\n binder: TDefinition,\n) => {\n return {\n implements: (tools: ToolBinder[]) => {\n return binder.every(\n (tool) =>\n tool.opt === true || (tools ?? []).some((t) => t.name === tool.name),\n );\n },\n forConnection: (\n mcpConnection: MCPConnection,\n ): MCPClientFetchStub<TDefinition> => {\n const stub = createMCPFetchStub<TDefinition>({\n connection: mcpConnection,\n });\n return new Proxy<MCPClientFetchStub<TDefinition>>(\n {} as MCPClientFetchStub<TDefinition>,\n {\n get(_, name) {\n if (typeof name !== \"string\") {\n throw new Error(\"Name must be a string\");\n }\n\n return (args: Record<string, unknown>) => {\n return (\n stub[name as keyof MCPClientFetchStub<TDefinition>] as (\n args: Record<string, unknown>,\n ) => Promise<unknown>\n )(args);\n };\n },\n },\n );\n },\n };\n};\n\nexport type MCPBindingClient<T extends ReturnType<typeof bindingClient>> =\n ReturnType<T[\"forConnection\"]>;\n\nexport const ChannelBinding = bindingClient(CHANNEL_BINDING_SCHEMA);\n\nexport const ViewBinding = bindingClient(VIEW_BINDING_SCHEMA);\n\nexport type { Callbacks } from \"./channels.ts\";\n\nexport const impl = <TBinder extends Binder>(\n schema: TBinder,\n implementation: BinderImplementation<TBinder>,\n createToolFn = createPrivateTool,\n) => {\n const impl: ReturnType<typeof createToolFn>[] = [];\n for (const key in schema) {\n const toolSchema = schema[key];\n const toolImplementation = implementation[key];\n\n if (toolSchema.opt && !toolImplementation) {\n continue;\n }\n\n if (!toolImplementation) {\n throw new Error(`Implementation for ${key} is required`);\n }\n\n const { name, handler, ...toolLike }: ToolLike = {\n ...toolSchema,\n ...toolImplementation,\n };\n impl.push(\n createToolFn({\n ...toolLike,\n id: name,\n execute: ({ context }) => Promise.resolve(handler(context)),\n }),\n );\n }\n return impl;\n};\n","import { z } from \"zod\";\n\n/**\n * Resources 2.0 Schemas\n *\n * This module provides standardized schemas for Resources 2.0, a major version upgrade\n * that introduces standardized resource management with `rsc://` URI format and\n * consistent CRUD operations across all resource types.\n *\n * Key Features:\n * - Standardized `rsc://` URI format for all resources\n * - Generic CRUD operation schemas that work with any resource type\n * - Type-safe factory functions for creating resource-specific schemas\n * - Comprehensive validation and error handling\n * - Full TypeScript support with Zod validation\n */\n\n// Common URI format validation for Resources 2.0\nexport const ResourceUriSchema = z\n .string()\n .regex(\n /^rsc:\\/\\/[^/]+\\/[^/]+\\/.+$/,\n \"Invalid resource URI format. Expected format: rsc://workspace/project/resource-id\",\n );\n\nexport const DescribeInputSchema = z.object({});\nexport const DescribeOutputSchema = z.object({\n uriTemplate: ResourceUriSchema.describe(\"URI template for the resource\"),\n features: z.object({\n watch: z.object({\n pathname: z.string().describe(\"Pathname to watch\"),\n }),\n }),\n});\n\n/**\n * Search input schema for resource queries\n * Supports pagination, filtering, sorting, and search terms\n */\nexport const SearchInputSchema = z.object({\n term: z.string().optional().describe(\"Search term to filter resources\"),\n page: z.number().int().min(1).default(1).describe(\"Page number (1-based)\"),\n pageSize: z\n .number()\n .int()\n .min(1)\n .max(100)\n .default(20)\n .describe(\"Number of items per page\"),\n filters: z.record(z.any()).optional().describe(\"Additional filters to apply\"),\n sortBy: z.string().optional().describe(\"Field to sort by\"),\n sortOrder: z\n .enum([\"asc\", \"desc\"])\n .optional()\n .default(\"asc\")\n .describe(\"Sort order\"),\n});\n\n/**\n * Factory function to create search output schema for a specific resource type\n * @param itemSchema - The schema for individual resource items\n * @returns Zod schema for search results with pagination metadata\n */\nexport function createSearchOutputSchema<T extends z.ZodTypeAny>(\n itemSchema: T,\n) {\n return z.object({\n items: z.array(itemSchema).describe(\"Array of matching resources\"),\n totalCount: z\n .number()\n .int()\n .min(0)\n .describe(\"Total number of matching resources\"),\n page: z.number().int().min(1).describe(\"Current page number\"),\n pageSize: z.number().int().min(1).describe(\"Number of items per page\"),\n totalPages: z.number().int().min(0).describe(\"Total number of pages\"),\n hasNextPage: z.boolean().describe(\"Whether there are more pages available\"),\n hasPreviousPage: z\n .boolean()\n .describe(\"Whether there are previous pages available\"),\n });\n}\n\n/**\n * Read input schema for retrieving a single resource\n */\nexport const ReadInputSchema = z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource to read\"),\n});\n\n/**\n * Factory function to create read output schema for a specific resource type\n * @param dataSchema - The schema for the resource data\n * @returns Zod schema for read operation results\n */\nexport function createReadOutputSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource\"),\n data: dataSchema.describe(\"Resource data\"),\n created_at: z.string().datetime().optional().describe(\"Creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z.string().optional().describe(\"User who created the resource\"),\n updated_by: z\n .string()\n .optional()\n .describe(\"User who last updated the resource\"),\n });\n}\n\n/**\n * Factory function to create create input schema for a specific resource type\n * @param dataSchema - The schema for the resource data to create\n * @returns Zod schema for create operation input\n */\nexport function createCreateInputSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n data: dataSchema.describe(\"Resource data to create\"),\n });\n}\n\n/**\n * Factory function to create create output schema for a specific resource type\n * @param dataSchema - The schema for the created resource data\n * @returns Zod schema for create operation results\n */\nexport function createCreateOutputSchema<T extends z.ZodTypeAny>(\n dataSchema: T,\n) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the created resource\"),\n data: dataSchema.describe(\"Created resource data\"),\n created_at: z.string().datetime().optional().describe(\"Creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z.string().optional().describe(\"User who created the resource\"),\n });\n}\n\n/**\n * Factory function to create update input schema for a specific resource type\n * @param dataSchema - The schema for the resource data to update\n * @returns Zod schema for update operation input\n */\nexport function createUpdateInputSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource to update\"),\n data: dataSchema.describe(\"Updated resource data\"),\n });\n}\n\n/**\n * Factory function to create update output schema for a specific resource type\n * @param dataSchema - The schema for the updated resource data\n * @returns Zod schema for update operation results\n */\nexport function createUpdateOutputSchema<T extends z.ZodTypeAny>(\n dataSchema: T,\n) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the updated resource\"),\n data: dataSchema.describe(\"Updated resource data\"),\n created_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Original creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z\n .string()\n .optional()\n .describe(\"User who originally created the resource\"),\n updated_by: z\n .string()\n .optional()\n .describe(\"User who last updated the resource\"),\n });\n}\n\n/**\n * Delete input schema for removing a resource\n */\nexport const DeleteInputSchema = z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource to delete\"),\n});\n\n/**\n * Delete output schema for delete operation results\n */\nexport const DeleteOutputSchema = z.object({\n success: z.boolean().describe(\"Whether the deletion was successful\"),\n uri: ResourceUriSchema.describe(\"URI of the deleted resource\"),\n});\n\n/**\n * Factory function to create item schema for a specific resource type\n * This schema is used in search results and lists\n * @param dataSchema - The schema for the resource data\n * @returns Zod schema for resource items with metadata\n */\nexport function createItemSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource\"),\n data: z\n .object({\n name: z.string().min(1, \"Name is required\"),\n description: z\n .string()\n .optional()\n .describe(\"Description of the resource\"),\n icon: z.string().url().optional().describe(\"URL to the resource icon\"),\n })\n .and(dataSchema)\n .describe(\"Resource data with required name\"),\n created_at: z.string().datetime().optional().describe(\"Creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z.string().optional().describe(\"User who created the resource\"),\n updated_by: z\n .string()\n .optional()\n .describe(\"User who last updated the resource\"),\n });\n}\n\n// Export types for TypeScript usage\nexport type ResourceUri = z.infer<typeof ResourceUriSchema>;\nexport type SearchInput = z.infer<typeof SearchInputSchema>;\nexport type SearchOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createSearchOutputSchema<T>>\n>;\nexport type ReadInput = z.infer<typeof ReadInputSchema>;\nexport type ReadOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createReadOutputSchema<T>>\n>;\nexport type CreateInput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createCreateInputSchema<T>>\n>;\nexport type CreateOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createCreateOutputSchema<T>>\n>;\nexport type UpdateInput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createUpdateInputSchema<T>>\n>;\nexport type UpdateOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createUpdateOutputSchema<T>>\n>;\nexport type DeleteInput = z.infer<typeof DeleteInputSchema>;\nexport type DeleteOutput = z.infer<typeof DeleteOutputSchema>;\nexport type ResourceItem<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createItemSchema<T>>\n>;\n","import { z } from \"zod\";\nimport type { ToolBinder } from \"../../mcp.ts\";\nimport {\n createCreateInputSchema,\n createCreateOutputSchema,\n createItemSchema,\n createReadOutputSchema,\n createSearchOutputSchema,\n createUpdateInputSchema,\n createUpdateOutputSchema,\n DeleteInputSchema,\n DeleteOutputSchema,\n DescribeInputSchema,\n DescribeOutputSchema,\n ReadInputSchema,\n SearchInputSchema,\n} from \"./schemas.ts\";\nexport type BaseResourceDataSchema = z.ZodObject<{\n name: z.ZodString;\n description: z.ZodString;\n}>;\n\n/**\n * Resources 2.0 Bindings\n *\n * This module provides standardized tool bindings for Resources 2.0, a major version upgrade\n * that introduces standardized resource management with `rsc://` URI format and\n * consistent CRUD operations across all resource types.\n *\n * Key Features:\n * - Generic resource bindings that work with any resource type\n * - Standardized tool naming: `deco_resource_*`\n * - Full TypeScript support with proper type constraints\n * - Integration with existing binding system\n */\n\n/**\n * Creates generic resource bindings for Resources 2.0\n *\n * This function generates standardized tool bindings that work with any resource type\n * by accepting a custom data schema and resource name. The bindings provide the standard CRUD operations:\n * - DECO_RESOURCE_{RESOURCE}_SEARCH - Search resources with pagination and filtering\n * - DECO_RESOURCE_{RESOURCE}_READ - Read a single resource by URI\n * - DECO_RESOURCE_{RESOURCE}_CREATE - Create new resources (optional)\n * - DECO_RESOURCE_{RESOURCE}_UPDATE - Update existing resources (optional)\n * - DECO_RESOURCE_{RESOURCE}_DELETE - Delete resources (optional)\n *\n * @param resourceName - The name of the resource type (e.g., \"workflow\", \"document\", \"user\")\n * @param dataSchema - The Zod schema for the resource data type\n * @returns Array of tool bindings for Resources 2.0 CRUD operations\n */\nexport function createResourceBindings<\n TDataSchema extends BaseResourceDataSchema,\n>(resourceName: string, dataSchema: TDataSchema) {\n const readOutputSchema = createReadOutputSchema(dataSchema);\n return [\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_SEARCH` as const,\n inputSchema: SearchInputSchema,\n outputSchema: createSearchOutputSchema(\n createItemSchema(dataSchema.pick({ name: true, description: true })),\n ),\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_READ` as const,\n inputSchema: ReadInputSchema,\n outputSchema: readOutputSchema,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_CREATE` as const,\n inputSchema: createCreateInputSchema(dataSchema),\n outputSchema: createCreateOutputSchema(dataSchema),\n opt: true,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_UPDATE` as const,\n inputSchema: createUpdateInputSchema(dataSchema),\n outputSchema: createUpdateOutputSchema(dataSchema),\n opt: true,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_DELETE` as const,\n inputSchema: DeleteInputSchema,\n outputSchema: DeleteOutputSchema,\n opt: true,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_DESCRIBE` as const,\n inputSchema: DescribeInputSchema,\n outputSchema: DescribeOutputSchema,\n opt: true,\n },\n ] as const satisfies readonly ToolBinder[];\n}\n\n// Export types for TypeScript usage\nexport type ResourceBinding<TDataSchema extends BaseResourceDataSchema> =\n ReturnType<typeof createResourceBindings<TDataSchema>>;\nexport type ResourceBindingsFunction = typeof createResourceBindings;\n","/**\n * DeconfigResources 2.0\n *\n * This module provides file-based resource management using the Resources 2.0 system\n * with standardized `rsc://` URI format and consistent CRUD operations.\n *\n * Key Features:\n * - File-based resource storage in DECONFIG directories\n * - Resources 2.0 standardized schemas and URI format\n * - Type-safe resource definitions with Zod validation\n * - Full CRUD operations with proper error handling\n * - Integration with existing deconfig file system\n * - Support for custom resource schemas and enhancements\n */\n\nimport { DefaultEnv } from \"../../index.ts\";\nimport { impl } from \"../binder.ts\";\nimport type { BaseResourceDataSchema } from \"../resources/bindings.ts\";\nimport { createResourceBindings } from \"../resources/bindings.ts\";\nimport { ResourceUriSchema } from \"../resources/schemas.ts\";\nimport {\n ResourcePath,\n ResourceUri,\n getMetadataString,\n normalizeDirectory,\n toAsyncIterator,\n} from \"./helpers.ts\";\nimport type { DeconfigClient, DeconfigResourceOptions } from \"./types.ts\";\nimport { WELL_KNOWN_ORIGINS } from \"../../well-known.ts\";\n\nexport type {\n EnhancedResourcesTools,\n ResourcesBinding,\n ResourcesTools,\n} from \"./types.ts\";\nexport type { DeconfigClient, DeconfigResourceOptions };\n\n// Error classes - these will be imported from SDK when used there\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NotFoundError\";\n }\n}\n\nexport class UserInputError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UserInputError\";\n }\n}\n\nconst dirOf = (\n options: Pick<\n DeconfigResourceOptions<BaseResourceDataSchema>,\n \"directory\" | \"resourceName\"\n >,\n) => {\n return options.directory\n ? options.directory\n : `/resources/${options.resourceName}`;\n};\nexport const createDeconfigResource = <\n TDataSchema extends BaseResourceDataSchema,\n>(\n options: DeconfigResourceOptions<TDataSchema>,\n) => {\n const {\n resourceName,\n dataSchema,\n enhancements,\n env,\n validate: semanticValidate,\n } = options;\n const deconfig = env.DECONFIG;\n const directory = dirOf(options);\n\n // Create resource-specific bindings using the provided data schema\n const resourceBindings = createResourceBindings(resourceName, dataSchema);\n\n const tools = impl(resourceBindings, [\n // deco_resource_search\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_SEARCH` as keyof typeof enhancements\n ]?.description ||\n `Search ${resourceName} resources in the DECONFIG directory ${directory}`,\n handler: async ({\n term,\n page = 1,\n pageSize = 10,\n filters,\n sortBy,\n sortOrder,\n }) => {\n const normalizedDir = normalizeDirectory(directory);\n const offset = pageSize !== Infinity ? (page - 1) * pageSize : 0;\n\n // List all files in the directory\n const filesList = await deconfig.LIST_FILES({\n prefix: normalizedDir,\n });\n\n // Filter files that end with .json\n const allFiles = Object.entries(filesList.files)\n .filter(([path]) => path.endsWith(\".json\"))\n .map(([path, metadata]) => ({\n path,\n resourceId: path\n .replace(`${normalizedDir}/`, \"\")\n .replace(\".json\", \"\"),\n metadata,\n }));\n\n // Simple search - filter by resource ID, path, title, description, created_by, or updated_by\n let filteredFiles = allFiles;\n if (term) {\n filteredFiles = allFiles.filter(({ resourceId, path, metadata }) => {\n const searchTerm = term.toLowerCase();\n return (\n resourceId.toLowerCase().includes(searchTerm) ||\n path.toLowerCase().includes(searchTerm) ||\n (\n getMetadataString(metadata, \"name\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm) ||\n (\n getMetadataString(metadata, \"description\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm) ||\n (\n getMetadataString(metadata, \"createdBy\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm) ||\n (\n getMetadataString(metadata, \"updatedBy\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm)\n );\n });\n }\n\n // Apply additional filters if provided\n if (filters) {\n const createdByFilter = filters.created_by as\n | string\n | string[]\n | undefined;\n const updatedByFilter = filters.updated_by as\n | string\n | string[]\n | undefined;\n\n if (createdByFilter) {\n const createdBySet = new Set(\n Array.isArray(createdByFilter)\n ? createdByFilter.map((v: unknown) => String(v))\n : [String(createdByFilter)],\n );\n filteredFiles = filteredFiles.filter(({ metadata }) => {\n const value = getMetadataString(metadata, \"createdBy\");\n return value ? createdBySet.has(value) : false;\n });\n }\n\n if (updatedByFilter) {\n const updatedBySet = new Set(\n Array.isArray(updatedByFilter)\n ? updatedByFilter.map((v: unknown) => String(v))\n : [String(updatedByFilter)],\n );\n filteredFiles = filteredFiles.filter(({ metadata }) => {\n const value = getMetadataString(metadata, \"updatedBy\");\n return value ? updatedBySet.has(value) : false;\n });\n }\n }\n\n // Sort if specified\n if (sortBy) {\n filteredFiles.sort((a, b) => {\n let aValue: string | number;\n let bValue: string | number;\n\n if (sortBy === \"resourceId\") {\n aValue = a.resourceId;\n bValue = b.resourceId;\n } else if (sortBy === \"name\") {\n aValue = getMetadataString(a.metadata, \"name\") || a.resourceId;\n bValue = getMetadataString(b.metadata, \"name\") || b.resourceId;\n } else if (sortBy === \"description\") {\n aValue = getMetadataString(a.metadata, \"description\") || \"\";\n bValue = getMetadataString(b.metadata, \"description\") || \"\";\n } else {\n aValue = a.metadata.mtime;\n bValue = b.metadata.mtime;\n }\n\n if (sortOrder === \"desc\") {\n return aValue < bValue ? 1 : aValue > bValue ? -1 : 0;\n } else {\n return aValue > bValue ? 1 : aValue < bValue ? -1 : 0;\n }\n });\n }\n\n // Apply pagination\n const totalCount = filteredFiles.length;\n const totalPages = Math.ceil(totalCount / pageSize);\n const hasNextPage = offset + pageSize < totalCount;\n const hasPreviousPage = page > 1;\n const items = filteredFiles.slice(offset, offset + pageSize);\n\n return {\n items: items.map(({ resourceId, metadata }) => {\n // Construct Resources 2.0 URI\n const uri = ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n resourceId,\n );\n\n // Extract title and description from metadata, with fallbacks\n const name = getMetadataString(metadata, \"name\") || resourceId;\n const description =\n getMetadataString(metadata, \"description\") || \"\";\n\n return {\n uri,\n data: { name, description },\n created_at:\n \"ctime\" in metadata && typeof metadata.ctime === \"number\"\n ? new Date(metadata.ctime).toISOString()\n : undefined,\n updated_at:\n \"mtime\" in metadata && typeof metadata.mtime === \"number\"\n ? new Date(metadata.mtime).toISOString()\n : undefined,\n created_by: getMetadataString(metadata, \"createdBy\"),\n updated_by:\n getMetadataString(metadata, \"updatedBy\") ||\n getMetadataString(metadata, \"createdBy\"),\n };\n }),\n totalCount,\n page,\n pageSize,\n totalPages,\n hasNextPage,\n hasPreviousPage,\n };\n },\n },\n\n // deco_resource_read\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_READ` as keyof typeof enhancements\n ]?.description ||\n `Read a ${resourceName} resource from the DECONFIG directory ${directory}`,\n handler: async ({ uri }) => {\n // Validate URI format\n ResourceUriSchema.parse(uri);\n\n const resourceId = ResourceUri.unwind(uri).resourceId;\n const filePath = ResourcePath.build(directory, resourceId);\n\n try {\n const fileData = await deconfig.READ_FILE({\n path: filePath,\n format: \"plainString\",\n });\n\n const content = fileData.content as string;\n\n // Parse the JSON content\n let parsedData: Record<string, unknown> = {};\n try {\n parsedData = JSON.parse(content);\n } catch {\n throw new UserInputError(\"Invalid JSON content in resource file\");\n }\n\n // Validate against schema\n const validatedData = dataSchema.parse(parsedData);\n\n return {\n uri,\n data: validatedData,\n created_at: new Date(fileData.ctime).toISOString(),\n updated_at: new Date(fileData.mtime).toISOString(),\n created_by:\n parsedData &&\n \"created_by\" in parsedData &&\n typeof parsedData.created_by === \"string\"\n ? parsedData.created_by\n : undefined,\n updated_by:\n parsedData &&\n \"updated_by\" in parsedData &&\n typeof parsedData.updated_by === \"string\"\n ? parsedData.updated_by\n : undefined,\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"not found\")) {\n throw new NotFoundError(`Resource not found: ${uri}`);\n }\n throw error;\n }\n },\n },\n\n // deco_resource_create (optional)\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_CREATE` as keyof typeof enhancements\n ]?.description ||\n `Create a new ${resourceName} resource in the DECONFIG directory ${directory}`,\n handler: async ({ data }) => {\n // Validate data against schema\n const validatedData = dataSchema.parse(data);\n\n // Run semantic validation if provided\n if (semanticValidate) {\n await semanticValidate(validatedData);\n }\n\n // Extract resource ID from name or generate one\n const resourceId =\n (validatedData.name as string)?.replace(/[^a-zA-Z0-9-_]/g, \"-\") ||\n crypto.randomUUID();\n const uri = ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n resourceId,\n );\n const filePath = ResourcePath.build(directory, resourceId);\n const user = env.DECO_REQUEST_CONTEXT.ensureAuthenticated();\n // Prepare resource data with metadata\n const resourceData = {\n ...validatedData,\n id: resourceId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n created_by: user?.id ? String(user.id) : undefined,\n updated_by: user?.id ? String(user.id) : undefined,\n };\n\n const fileContent = JSON.stringify(resourceData, null, 2);\n const putResult = await deconfig.PUT_FILE({\n path: filePath,\n content: fileContent,\n metadata: {\n resourceType: resourceName,\n resourceId,\n createdBy: user?.id,\n name: validatedData.name || resourceId,\n description: validatedData.description || \"\",\n },\n });\n\n if (putResult.conflict) {\n throw new UserInputError(\n \"Resource write conflicted. Please refresh and retry.\",\n );\n }\n\n return {\n uri,\n data: validatedData,\n created_at: resourceData.created_at,\n updated_at: resourceData.updated_at,\n created_by: user?.id ? String(user.id) : undefined,\n updated_by: user?.id ? String(user.id) : undefined,\n };\n },\n },\n\n // deco_resource_update (optional)\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_UPDATE` as keyof typeof enhancements\n ]?.description ||\n `Update a ${resourceName} resource in the DECONFIG directory ${directory}`,\n handler: async ({ uri, data }) => {\n // Validate URI format\n ResourceUriSchema.parse(uri);\n\n const resourceId = ResourceUri.unwind(uri).resourceId;\n const filePath = ResourcePath.build(directory, resourceId);\n\n // Read existing file to get current data\n let existingData: Record<string, unknown> = {};\n try {\n const fileData = await deconfig.READ_FILE({\n path: filePath,\n format: \"plainString\",\n });\n existingData = JSON.parse(fileData.content as string);\n } catch {\n throw new NotFoundError(`Resource not found: ${uri}`);\n }\n\n // Validate new data against schema\n const validatedData = dataSchema.parse(data);\n\n // Run semantic validation if provided\n if (semanticValidate) {\n await semanticValidate(validatedData);\n }\n\n const user = env.DECO_REQUEST_CONTEXT.ensureAuthenticated();\n\n const previousCreatedBy =\n typeof existingData[\"created_by\"] === \"string\"\n ? (existingData[\"created_by\"] as string)\n : undefined;\n\n // Merge existing data with updates\n const updatedData = {\n ...existingData,\n ...validatedData,\n id: resourceId,\n createdBy: previousCreatedBy,\n updated_at: new Date().toISOString(),\n updated_by: user?.id ? String(user.id) : undefined,\n };\n\n const fileContent = JSON.stringify(updatedData, null, 2);\n\n const putResult = await deconfig.PUT_FILE({\n path: filePath,\n content: fileContent,\n metadata: {\n resourceType: resourceName,\n resourceId,\n updatedBy: user?.id,\n name: validatedData.name || resourceId,\n description: validatedData.description || \"\",\n },\n });\n\n if (putResult.conflict) {\n throw new UserInputError(\n \"Resource write conflicted. Please refresh and retry.\",\n );\n }\n\n return {\n uri,\n data: validatedData,\n created_at: existingData.created_at as string,\n updated_at: updatedData.updated_at,\n created_by: existingData.created_by as string,\n updated_by: user?.id ? String(user.id) : undefined,\n };\n },\n },\n // deco_resource_delete (optional)\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_DELETE` as keyof typeof enhancements\n ]?.description ||\n `Delete a ${resourceName} resource from the DECONFIG directory ${directory}`,\n handler: async ({ uri }) => {\n // Validate URI format\n ResourceUriSchema.parse(uri);\n\n const resourceId = ResourceUri.unwind(uri).resourceId;\n const filePath = ResourcePath.build(directory, resourceId);\n\n try {\n await deconfig.DELETE_FILE({\n path: filePath,\n });\n\n return {\n success: true,\n uri,\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"not found\")) {\n throw new NotFoundError(`Resource not found: ${uri}`);\n }\n throw error;\n }\n },\n },\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_DESCRIBE` as keyof typeof enhancements\n ]?.description ||\n `Describe the ${resourceName} resource in the DECONFIG directory ${directory}`,\n handler: () => {\n return {\n uriTemplate: ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n \"*\",\n ),\n features: {\n watch: {\n pathname: `${RESOURCE_WATCH_BASE_PATHNAME}${directory}`,\n },\n },\n };\n },\n },\n ]);\n\n return tools;\n};\n\nconst removeLeadingSlash = (url: string) => {\n return url.startsWith(\"/\") ? url.slice(1) : url;\n};\n\nexport interface WatchOptions {\n watcherId?: string;\n pathFilter: string;\n resourceName: string;\n env: DefaultEnv & { DECONFIG: DeconfigClient };\n}\nconst watcher = ({\n env,\n pathFilter,\n resourceName,\n ...options\n}: WatchOptions): AsyncIterableIterator<{ uri: string }> => {\n const url = new URL(\n `/${removeLeadingSlash(env.DECO_REQUEST_CONTEXT.workspace)}/deconfig/watch`,\n `${env.DECO_API_URL ?? \"https://api.decocms.com\"}`,\n );\n if (options.watcherId) {\n url.searchParams.set(\"watcher-id\", options.watcherId);\n }\n url.searchParams.set(\"path-filter\", pathFilter);\n url.searchParams.set(\"branch\", env.DECO_REQUEST_CONTEXT.branch ?? \"main\");\n url.searchParams.set(\"auth-token\", env.DECO_REQUEST_CONTEXT.token);\n url.searchParams.set(\"from-ctime\", \"1\");\n\n const eventSource = new EventSource(url);\n const it = toAsyncIterator<{\n path: string;\n metadata: { address: string };\n }>(eventSource, \"change\");\n const iterator = async function* () {\n for await (const event of it) {\n const { path } = event;\n try {\n const { resourceId } = ResourcePath.extract(path);\n const uri = ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n resourceId,\n );\n yield { uri };\n } catch {\n // ignore\n }\n }\n };\n const mIterator = iterator();\n const retn = mIterator.return;\n mIterator.return = function (val) {\n eventSource.close();\n return retn?.call(mIterator, val) ?? val;\n };\n return mIterator;\n};\n\nconst hasDeconfigBinding = (\n env: unknown,\n): env is DefaultEnv & { DECONFIG: DeconfigClient } => {\n return (\n env !== undefined &&\n typeof env === \"object\" &&\n env !== null &&\n \"DECONFIG\" in env\n );\n};\nexport const RESOURCE_WATCH_BASE_PATHNAME = \"/resources/watch\";\nexport const DeconfigResource = {\n WatchPathNameBase: RESOURCE_WATCH_BASE_PATHNAME,\n watchAPI: (req: Request, env: DefaultEnv) => {\n if (!hasDeconfigBinding(env)) {\n return new Response(\"DECONFIG:@deco/deconfig binding is required\", {\n status: 400,\n });\n }\n\n const url = new URL(req.url);\n const uri = url.searchParams.get(\"uri\");\n if (!uri) {\n return new Response(\"URI is required\", { status: 400 });\n }\n const pathname = url.pathname;\n let pathFilter = pathname.slice(RESOURCE_WATCH_BASE_PATHNAME.length); // removes `${RESOURCE_WATCH_BASE_PATHNAME}`\n const { resourceName, resourceId } = ResourceUri.unwind(uri);\n pathFilter =\n resourceId === \"*\"\n ? pathFilter\n : ResourcePath.build(pathFilter, resourceId);\n const watch = watcher({\n env,\n resourceName,\n pathFilter,\n });\n\n // Create SSE-compatible ReadableStream\n const sseStream = new ReadableStream({\n async start(controller) {\n const encoder = new TextEncoder();\n\n try {\n for await (const event of watch) {\n // Format as SSE: data: {json}\\n\\n\n const sseData = `data: ${JSON.stringify(event)}\\n\\n`;\n controller.enqueue(encoder.encode(sseData));\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n cancel() {\n watch.return?.();\n // Clean up the async iterator if needed\n },\n });\n\n return new Response(sseStream, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Access-Control-Allow-Origin\": WELL_KNOWN_ORIGINS.join(\",\"),\n \"Access-Control-Allow-Headers\": \"Cache-Control\",\n },\n });\n },\n define: <TDataSchema extends BaseResourceDataSchema>(\n options: Omit<DeconfigResourceOptions<TDataSchema>, \"env\">,\n ) => {\n return {\n watcher,\n create: (env: DefaultEnv & { DECONFIG: DeconfigClient }) => {\n return createDeconfigResource({\n env,\n ...options,\n });\n },\n };\n },\n};\n"]}
@@ -0,0 +1,129 @@
1
+ import { Client as Client$1 } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
3
+ import { WebSocketClientTransport } from '@modelcontextprotocol/sdk/client/websocket.js';
4
+ import { ListToolsResultSchema } from '@modelcontextprotocol/sdk/types.js';
5
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
6
+
7
+ // src/mcp-client.ts
8
+ var HTTPClientTransport = class extends StreamableHTTPClientTransport {
9
+ constructor(url, opts) {
10
+ super(url, opts);
11
+ }
12
+ send(message, options) {
13
+ const mockAction = getMockActionFor(message);
14
+ if (mockAction?.type === "emit") {
15
+ this.onmessage?.(mockAction.message);
16
+ return Promise.resolve();
17
+ }
18
+ if (mockAction?.type === "suppress") {
19
+ return Promise.resolve();
20
+ }
21
+ return super.send(message, options);
22
+ }
23
+ };
24
+ function getMockActionFor(message) {
25
+ const m = message;
26
+ if (!m || typeof m !== "object" || !("method" in m)) return null;
27
+ switch (m.method) {
28
+ case "initialize": {
29
+ const protocolVersion = m?.params?.protocolVersion;
30
+ if (!protocolVersion) return null;
31
+ return {
32
+ type: "emit",
33
+ message: {
34
+ result: {
35
+ protocolVersion,
36
+ capabilities: { tools: {} },
37
+ serverInfo: { name: "deco-chat-server", version: "1.0.0" }
38
+ },
39
+ jsonrpc: m.jsonrpc ?? "2.0",
40
+ // @ts-expect-error - id is not typed
41
+ id: m.id
42
+ }
43
+ };
44
+ }
45
+ case "notifications/roots/list_changed":
46
+ case "notifications/initialized":
47
+ case "notifications/cancelled":
48
+ case "notifications/progress": {
49
+ return { type: "suppress" };
50
+ }
51
+ default:
52
+ return null;
53
+ }
54
+ }
55
+
56
+ // src/mcp-client.ts
57
+ var Client = class extends Client$1 {
58
+ constructor(_clientInfo, options) {
59
+ super(_clientInfo, options);
60
+ }
61
+ async listTools(params, options) {
62
+ const result = await this.request(
63
+ { method: "tools/list", params },
64
+ ListToolsResultSchema,
65
+ options
66
+ );
67
+ return result;
68
+ }
69
+ };
70
+ var createServerClient = async (mcpServer, signal, extraHeaders) => {
71
+ const transport = createTransport(mcpServer.connection, signal, extraHeaders);
72
+ if (!transport) {
73
+ throw new Error("Unknown MCP connection type");
74
+ }
75
+ const client = new Client({
76
+ name: mcpServer?.name ?? "MCP Client",
77
+ version: "1.0.0",
78
+ timeout: 18e4
79
+ // 3 minutes
80
+ });
81
+ await client.connect(transport);
82
+ return client;
83
+ };
84
+ var createTransport = (connection, signal, extraHeaders) => {
85
+ if (connection.type === "Websocket") {
86
+ return new WebSocketClientTransport(new URL(connection.url));
87
+ }
88
+ if (connection.type !== "SSE" && connection.type !== "HTTP") {
89
+ return null;
90
+ }
91
+ const authHeaders = connection.token ? { authorization: `Bearer ${connection.token}` } : {};
92
+ const headers = {
93
+ ...authHeaders,
94
+ ...extraHeaders ?? {},
95
+ ..."headers" in connection ? connection.headers || {} : {}
96
+ };
97
+ if (connection.type === "SSE") {
98
+ const config = {
99
+ requestInit: { headers, signal }
100
+ };
101
+ if (connection.token) {
102
+ config.eventSourceInit = {
103
+ fetch: (req, init) => {
104
+ return fetch(req, {
105
+ ...init,
106
+ headers: {
107
+ ...headers,
108
+ Accept: "text/event-stream"
109
+ },
110
+ signal
111
+ });
112
+ }
113
+ };
114
+ }
115
+ return new SSEClientTransport(new URL(connection.url), config);
116
+ }
117
+ return new HTTPClientTransport(new URL(connection.url), {
118
+ requestInit: {
119
+ headers,
120
+ signal,
121
+ // @ts-ignore - this is a valid option for fetch
122
+ credentials: "include"
123
+ }
124
+ });
125
+ };
126
+
127
+ export { createServerClient, createTransport };
128
+ //# sourceMappingURL=chunk-4UQ5U73Y.js.map
129
+ //# sourceMappingURL=chunk-4UQ5U73Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/http-client-transport.ts","../src/mcp-client.ts"],"names":["BaseClient"],"mappings":"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","file":"chunk-4UQ5U73Y.js","sourcesContent":["import type { JSONRPCMessage } from \"@modelcontextprotocol/sdk/types.js\";\nimport {\n StreamableHTTPClientTransport,\n type StreamableHTTPClientTransportOptions,\n} from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\n\nexport class HTTPClientTransport extends StreamableHTTPClientTransport {\n constructor(url: URL, opts?: StreamableHTTPClientTransportOptions) {\n super(url, opts);\n }\n\n override send(\n message: JSONRPCMessage,\n options?: {\n resumptionToken?: string;\n onresumptiontoken?: (token: string) => void;\n },\n ): Promise<void> {\n const mockAction = getMockActionFor(message);\n if (mockAction?.type === \"emit\") {\n this.onmessage?.(mockAction.message);\n return Promise.resolve();\n }\n if (mockAction?.type === \"suppress\") {\n return Promise.resolve();\n }\n return super.send(message, options);\n }\n}\n\ntype MockAction =\n | { type: \"emit\"; message: JSONRPCMessage }\n | { type: \"suppress\" };\n\nfunction getMockActionFor(message: JSONRPCMessage): MockAction | null {\n const m = message;\n if (!m || typeof m !== \"object\" || !(\"method\" in m)) return null;\n\n switch (m.method) {\n case \"initialize\": {\n const protocolVersion = m?.params?.protocolVersion;\n if (!protocolVersion) return null;\n return {\n type: \"emit\",\n message: {\n result: {\n protocolVersion,\n capabilities: { tools: {} },\n serverInfo: { name: \"deco-chat-server\", version: \"1.0.0\" },\n },\n jsonrpc: m.jsonrpc ?? \"2.0\",\n // @ts-expect-error - id is not typed\n id: m.id,\n } as JSONRPCMessage,\n };\n }\n case \"notifications/roots/list_changed\":\n case \"notifications/initialized\":\n case \"notifications/cancelled\":\n case \"notifications/progress\": {\n return { type: \"suppress\" };\n }\n default:\n return null;\n }\n}\n","import {\n Client as BaseClient,\n ClientOptions,\n} from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n SSEClientTransport,\n SSEClientTransportOptions,\n} from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { WebSocketClientTransport } from \"@modelcontextprotocol/sdk/client/websocket.js\";\nimport { RequestOptions } from \"@modelcontextprotocol/sdk/shared/protocol.js\";\nimport {\n Implementation,\n ListToolsRequest,\n ListToolsResultSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { MCPConnection } from \"./connection.ts\";\nimport { HTTPClientTransport } from \"./http-client-transport.ts\";\n\n/**\n * WARNNING: This is a hack to prevent schema compilation errors.\n * More info at: https://github.com/modelcontextprotocol/typescript-sdk/issues/923\n *\n * Make sure to keep this updated with the right version of the SDK.\n * https://github.com/modelcontextprotocol/typescript-sdk/blob/bf817939917277a4c59f2e19e7b44b8dd7ff140c/src/client/index.ts#L480\n */\nclass Client extends BaseClient {\n constructor(_clientInfo: Implementation, options?: ClientOptions) {\n super(_clientInfo, options);\n }\n\n override async listTools(\n params?: ListToolsRequest[\"params\"],\n options?: RequestOptions,\n ) {\n const result = await this.request(\n { method: \"tools/list\", params },\n ListToolsResultSchema,\n options,\n );\n\n return result;\n }\n}\n\nexport const createServerClient = async (\n mcpServer: { connection: MCPConnection; name?: string },\n signal?: AbortSignal,\n extraHeaders?: Record<string, string>,\n): Promise<Client> => {\n const transport = createTransport(mcpServer.connection, signal, extraHeaders);\n\n if (!transport) {\n throw new Error(\"Unknown MCP connection type\");\n }\n\n const client = new Client({\n name: mcpServer?.name ?? \"MCP Client\",\n version: \"1.0.0\",\n timeout: 180000, // 3 minutes\n });\n\n await client.connect(transport);\n\n return client;\n};\n\nexport const createTransport = (\n connection: MCPConnection,\n signal?: AbortSignal,\n extraHeaders?: Record<string, string>,\n) => {\n if (connection.type === \"Websocket\") {\n return new WebSocketClientTransport(new URL(connection.url));\n }\n\n if (connection.type !== \"SSE\" && connection.type !== \"HTTP\") {\n return null;\n }\n\n const authHeaders: Record<string, string> = connection.token\n ? { authorization: `Bearer ${connection.token}` }\n : {};\n\n const headers: Record<string, string> = {\n ...authHeaders,\n ...(extraHeaders ?? {}),\n ...(\"headers\" in connection ? connection.headers || {} : {}),\n };\n\n if (connection.type === \"SSE\") {\n const config: SSEClientTransportOptions = {\n requestInit: { headers, signal },\n };\n\n if (connection.token) {\n config.eventSourceInit = {\n fetch: (req, init) => {\n return fetch(req, {\n ...init,\n headers: {\n ...headers,\n Accept: \"text/event-stream\",\n },\n signal,\n });\n },\n };\n }\n\n return new SSEClientTransport(new URL(connection.url), config);\n }\n return new HTTPClientTransport(new URL(connection.url), {\n requestInit: {\n headers,\n signal,\n // @ts-ignore - this is a valid option for fetch\n credentials: \"include\",\n },\n });\n};\n"]}
@@ -0,0 +1,105 @@
1
+ import { toAsyncIterator } from './chunk-UHR3BLMF.js';
2
+
3
+ // src/client.ts
4
+ var DECO_MCP_CLIENT_HEADER = "X-Deco-MCP-Client";
5
+ var DEFAULT_INIT = {
6
+ credentials: "include",
7
+ headers: {
8
+ [DECO_MCP_CLIENT_HEADER]: "true"
9
+ }
10
+ };
11
+ async function callMCPTool(methodName, args, init) {
12
+ const mergedInit = {
13
+ ...init,
14
+ headers: {
15
+ ...DEFAULT_INIT.headers,
16
+ ...init?.headers
17
+ }
18
+ };
19
+ const response = await fetch(`/mcp/call-tool/${methodName}`, {
20
+ method: "POST",
21
+ body: JSON.stringify(args),
22
+ credentials: "include",
23
+ ...mergedInit
24
+ });
25
+ if (!response.ok) {
26
+ throw new Error(`Failed to call ${methodName}: ${response.statusText}`);
27
+ }
28
+ return response.json();
29
+ }
30
+ function createSubscribeMethod(resourceName, init) {
31
+ return async function* (args) {
32
+ const describeMethodName = `DECO_RESOURCE_${resourceName}_DESCRIBE`;
33
+ const readMethodName = `DECO_RESOURCE_${resourceName}_READ`;
34
+ const describeData = await callMCPTool(describeMethodName, {}, init);
35
+ const watchPathname = describeData?.features?.watch?.pathname;
36
+ const uriTemplate = describeData?.uriTemplate;
37
+ if (!watchPathname) {
38
+ throw new Error(
39
+ `Resource ${resourceName} does not support watch functionality`
40
+ );
41
+ }
42
+ if (!uriTemplate) {
43
+ throw new Error(`Resource ${resourceName} does not provide uriTemplate`);
44
+ }
45
+ const resourceUri = "uri" in args ? args.uri : uriTemplate.replace("*", args.id);
46
+ const watchUrl = new URL(watchPathname, globalThis.location.origin);
47
+ watchUrl.searchParams.set("uri", resourceUri);
48
+ const eventSource = new EventSource(watchUrl.href);
49
+ const eventStream = toAsyncIterator(
50
+ eventSource,
51
+ "message"
52
+ );
53
+ for await (const event of eventStream) {
54
+ const uri = event.uri;
55
+ if (uri) {
56
+ const readData = await callMCPTool(
57
+ readMethodName,
58
+ { uri },
59
+ init
60
+ );
61
+ yield { uri, data: readData.data };
62
+ }
63
+ }
64
+ };
65
+ }
66
+ var createClient = (init) => {
67
+ return new Proxy(
68
+ {},
69
+ {
70
+ get: (_, prop) => {
71
+ const propStr = String(prop);
72
+ const subscribeMatch = propStr.match(/^DECO_RESOURCE_(.+)_SUBSCRIBE$/);
73
+ if (subscribeMatch) {
74
+ const resourceName = subscribeMatch[1];
75
+ return createSubscribeMethod(resourceName, init);
76
+ }
77
+ return async (args, innerInit) => {
78
+ const mergedInit = {
79
+ ...init,
80
+ ...innerInit,
81
+ headers: {
82
+ ...DEFAULT_INIT.headers,
83
+ ...init?.headers,
84
+ ...innerInit?.headers
85
+ }
86
+ };
87
+ const response = await fetch(`/mcp/call-tool/${String(prop)}`, {
88
+ method: "POST",
89
+ body: JSON.stringify(args),
90
+ credentials: "include",
91
+ ...mergedInit
92
+ });
93
+ if (typeof mergedInit.handleResponse === "function") {
94
+ return mergedInit.handleResponse(response);
95
+ }
96
+ return response.json();
97
+ };
98
+ }
99
+ }
100
+ );
101
+ };
102
+
103
+ export { DECO_MCP_CLIENT_HEADER, DEFAULT_INIT, createClient };
104
+ //# sourceMappingURL=chunk-4XSQKJLU.js.map
105
+ //# sourceMappingURL=chunk-4XSQKJLU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts"],"names":[],"mappings":"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","file":"chunk-4XSQKJLU.js","sourcesContent":["import { toAsyncIterator } from \"./bindings/deconfig/helpers.ts\";\n// Extract resource name from DECO_RESOURCE_${NAME}_READ pattern\ntype ExtractResourceName<K> = K extends `DECO_RESOURCE_${infer Name}_READ`\n ? Name\n : never;\n\n// Generate SUBSCRIBE method name from resource name\ntype SubscribeMethodName<Name extends string> =\n `DECO_RESOURCE_${Name}_SUBSCRIBE`;\n\n// Extract data type from READ method return type\ntype ExtractReadData<T> = T extends Promise<{ data: infer D }>\n ? D\n : T extends { data: infer D }\n ? D\n : never;\n\n// Generate all SUBSCRIBE method names for a given type\ntype SubscribeMethods<T> = {\n [K in keyof T as K extends `DECO_RESOURCE_${string}_READ`\n ? SubscribeMethodName<ExtractResourceName<K>>\n : never]: K extends `DECO_RESOURCE_${string}_READ`\n ? // oxlint-disable-next-line no-explicit-any\n T[K] extends (...args: any) => any\n ? (args: { id: string } | { uri: string }) => AsyncIterableIterator<{\n uri: string;\n data: ExtractReadData<Awaited<ReturnType<T[K]>>>;\n }>\n : never\n : never;\n};\n\nexport type MCPClient<T> = {\n // oxlint-disable-next-line no-explicit-any\n [K in keyof T]: T[K] extends (...args: any) => any\n ? (\n args: Parameters<T[K]>[0],\n init?: CustomInit,\n ) => Promise<Awaited<ReturnType<T[K]>>>\n : never;\n} & SubscribeMethods<T>;\n\nexport type CustomInit = RequestInit & {\n handleResponse?: (response: Response) => Promise<unknown>;\n};\n\nexport const DECO_MCP_CLIENT_HEADER = \"X-Deco-MCP-Client\";\n\nexport const DEFAULT_INIT: CustomInit = {\n credentials: \"include\",\n headers: {\n [DECO_MCP_CLIENT_HEADER]: \"true\",\n },\n};\n\n/**\n * Helper function to call an MCP tool via fetch\n */\nasync function callMCPTool<T = unknown>(\n methodName: string,\n args: unknown,\n init?: CustomInit,\n): Promise<T> {\n const mergedInit: CustomInit = {\n ...init,\n headers: {\n ...DEFAULT_INIT.headers,\n ...init?.headers,\n },\n };\n\n const response = await fetch(`/mcp/call-tool/${methodName}`, {\n method: \"POST\",\n body: JSON.stringify(args),\n credentials: \"include\",\n ...mergedInit,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to call ${methodName}: ${response.statusText}`);\n }\n\n return response.json() as Promise<T>;\n}\n\n/**\n * Creates a subscribe method for a resource that returns an async iterator\n * yielding {uri, data} objects as resources are updated.\n */\nfunction createSubscribeMethod(\n resourceName: string,\n init?: CustomInit,\n): (args: { id: string }) => AsyncIterableIterator<{\n uri: string;\n data: unknown;\n}> {\n return async function* (args: { id: string } | { uri: string }) {\n // Step 1: Call DESCRIBE to get watch endpoint configuration and URI template\n const describeMethodName = `DECO_RESOURCE_${resourceName}_DESCRIBE`;\n const readMethodName = `DECO_RESOURCE_${resourceName}_READ`;\n\n // Get describe information\n const describeData = await callMCPTool<{\n uriTemplate?: string;\n features?: {\n watch?: {\n pathname?: string;\n };\n };\n }>(describeMethodName, {}, init);\n\n const watchPathname = describeData?.features?.watch?.pathname;\n const uriTemplate = describeData?.uriTemplate;\n\n if (!watchPathname) {\n throw new Error(\n `Resource ${resourceName} does not support watch functionality`,\n );\n }\n\n if (!uriTemplate) {\n throw new Error(`Resource ${resourceName} does not provide uriTemplate`);\n }\n\n // Step 2: Construct URI from template by replacing * with id\n const resourceUri =\n \"uri\" in args ? args.uri : uriTemplate.replace(\"*\", args.id);\n\n // Step 3: Construct watch URL and create EventSource\n const watchUrl = new URL(watchPathname, globalThis.location.origin);\n watchUrl.searchParams.set(\"uri\", resourceUri);\n\n const eventSource = new EventSource(watchUrl.href);\n\n // Step 4: Use toAsyncIterator to consume SSE events and enrich with READ data\n const eventStream = toAsyncIterator<{ uri: string }>(\n eventSource,\n \"message\",\n );\n\n // Iterate over SSE events and enrich with full data\n for await (const event of eventStream) {\n const uri = event.uri;\n\n if (uri) {\n // Call READ to get full resource data\n const readData = await callMCPTool<{ data: unknown }>(\n readMethodName,\n { uri },\n init,\n );\n\n yield { uri, data: readData.data };\n }\n }\n };\n}\n\nexport const createClient = <T>(init?: CustomInit): MCPClient<T> => {\n return new Proxy(\n {},\n {\n get: (_, prop) => {\n const propStr = String(prop);\n\n // Check if this is a SUBSCRIBE method call\n const subscribeMatch = propStr.match(/^DECO_RESOURCE_(.+)_SUBSCRIBE$/);\n if (subscribeMatch) {\n const resourceName = subscribeMatch[1];\n return createSubscribeMethod(resourceName, init);\n }\n\n // Regular method call\n return async (args: unknown, innerInit?: CustomInit) => {\n const mergedInit: CustomInit = {\n ...init,\n ...innerInit,\n headers: {\n ...DEFAULT_INIT.headers,\n ...init?.headers,\n ...innerInit?.headers,\n },\n };\n\n const response = await fetch(`/mcp/call-tool/${String(prop)}`, {\n method: \"POST\",\n body: JSON.stringify(args),\n credentials: \"include\",\n ...mergedInit,\n });\n\n if (typeof mergedInit.handleResponse === \"function\") {\n return mergedInit.handleResponse(response);\n }\n\n return response.json();\n };\n },\n },\n ) as MCPClient<T>;\n};\n"]}
@@ -0,0 +1,128 @@
1
+ import { z } from 'zod';
2
+ import mimeDb from 'mime-db';
3
+
4
+ // src/resources.ts
5
+ var EXTENSION_TO_MIME = (() => {
6
+ const map = /* @__PURE__ */ new Map();
7
+ Object.entries(mimeDb).forEach(([type, meta]) => {
8
+ meta.extensions?.forEach((ext) => {
9
+ if (!map.has(ext)) {
10
+ map.set(ext, type);
11
+ }
12
+ });
13
+ });
14
+ return map;
15
+ })();
16
+ function extractExtension(value) {
17
+ if (!value) return void 0;
18
+ const trimmed = value.trim();
19
+ if (!trimmed) return void 0;
20
+ const sanitized = trimmed.replace(/^[^?#]*/g, (match) => match);
21
+ const withoutQuery = sanitized.split(/[?#]/)[0];
22
+ if (withoutQuery.startsWith(".")) {
23
+ return withoutQuery.slice(1).toLowerCase();
24
+ }
25
+ if (!withoutQuery.includes(".")) {
26
+ if (!withoutQuery.includes("/") && !withoutQuery.includes("\\")) {
27
+ return withoutQuery.toLowerCase();
28
+ }
29
+ return void 0;
30
+ }
31
+ const lastDot = withoutQuery.lastIndexOf(".");
32
+ if (lastDot === -1 || lastDot === withoutQuery.length - 1) return void 0;
33
+ return withoutQuery.slice(lastDot + 1).toLowerCase();
34
+ }
35
+ var ResourceSchema = z.object({
36
+ name: z.string(),
37
+ title: z.string().optional(),
38
+ description: z.string().optional(),
39
+ uri: z.string().url(),
40
+ mimeType: z.string().optional(),
41
+ thumbnail: z.string().url().optional(),
42
+ timestamp: z.string().datetime().optional(),
43
+ size: z.number().positive().optional(),
44
+ annotations: z.record(z.string(), z.string()).optional()
45
+ });
46
+ var ResourcesReadInputSchema = z.object({
47
+ name: z.string().describe("Resource type name (e.g., 'Page', 'GoogleDrive')"),
48
+ uri: z.string().url().describe(
49
+ "The URI of the resource to read. It's important to add the url scheme. Use file:// for files. Use https:// or http:// for remote files"
50
+ )
51
+ });
52
+ var ResourcesReadOutputSchema = ResourceSchema.extend({
53
+ data: z.string().describe("The resource content as a string"),
54
+ type: z.enum(["text", "blob"]).describe(
55
+ "Type of data: 'text' for plain text, 'blob' for base64-encoded binary"
56
+ )
57
+ });
58
+ var ResourceSearchInputSchema = z.object({
59
+ name: z.string().describe("Resource type name (e.g., 'Page', 'GoogleDrive')"),
60
+ term: z.string().describe("The term to search for"),
61
+ cursor: z.string().optional(),
62
+ limit: z.number().positive().optional()
63
+ });
64
+ var ResourceSearchOutputSchema = z.object({
65
+ items: z.array(ResourceSchema),
66
+ hasMore: z.boolean(),
67
+ nextCursor: z.string().optional()
68
+ });
69
+ var ResourceCreateInputSchema = z.object({
70
+ name: z.string().describe("Resource type name (e.g., 'Page', 'GoogleDrive')"),
71
+ resourceName: z.string().describe(
72
+ "Name of the specific resource instance. DO NOT ADD EXTENSIONS TO THE NAME"
73
+ ),
74
+ title: z.string().optional(),
75
+ description: z.string().optional(),
76
+ content: z.object({
77
+ data: z.string(),
78
+ type: z.enum(["text", "blob"]),
79
+ mimeType: z.string().optional()
80
+ }).describe("Content to create the resource with"),
81
+ metadata: z.record(z.string(), z.any()).optional()
82
+ });
83
+ var ResourceCreateOutputSchema = ResourceSchema;
84
+ var ResourceUpdateInputSchema = z.object({
85
+ name: z.string().describe("Resource type name (e.g., 'Page', 'GoogleDrive')"),
86
+ uri: z.string().url().describe("URI of the resource to update"),
87
+ resourceName: z.string().optional(),
88
+ title: z.string().optional(),
89
+ description: z.string().optional(),
90
+ content: z.object({
91
+ data: z.string(),
92
+ type: z.enum(["text", "blob"]),
93
+ mimeType: z.string().optional()
94
+ }).optional(),
95
+ metadata: z.record(z.string(), z.any()).optional()
96
+ });
97
+ var ResourceUpdateOutputSchema = ResourceSchema;
98
+ var ResourceDeleteInputSchema = z.object({
99
+ name: z.string().describe("Resource type name (e.g., 'Page', 'GoogleDrive')"),
100
+ uri: z.string().url().describe("URI of the resource to delete"),
101
+ force: z.boolean().optional()
102
+ });
103
+ var ResourceDeleteOutputSchema = z.object({
104
+ deletedUri: z.string().url()
105
+ });
106
+ var ResourcesListInputSchema = z.object({});
107
+ var ResourcesListOutputSchema = z.object({
108
+ resources: z.array(
109
+ z.object({
110
+ name: z.string(),
111
+ icon: z.string(),
112
+ title: z.string(),
113
+ description: z.string(),
114
+ hasCreate: z.boolean().optional(),
115
+ hasUpdate: z.boolean().optional(),
116
+ hasDelete: z.boolean().optional()
117
+ })
118
+ )
119
+ });
120
+ var mimeType = (filePathOrExtension) => {
121
+ const ext = extractExtension(filePathOrExtension);
122
+ if (!ext) return "text/plain";
123
+ return EXTENSION_TO_MIME.get(ext) ?? "text/plain";
124
+ };
125
+
126
+ export { ResourceCreateInputSchema, ResourceCreateOutputSchema, ResourceDeleteInputSchema, ResourceDeleteOutputSchema, ResourceSchema, ResourceSearchInputSchema, ResourceSearchOutputSchema, ResourceUpdateInputSchema, ResourceUpdateOutputSchema, ResourcesListInputSchema, ResourcesListOutputSchema, ResourcesReadInputSchema, ResourcesReadOutputSchema, mimeType };
127
+ //# sourceMappingURL=chunk-73FIKR3X.js.map
128
+ //# sourceMappingURL=chunk-73FIKR3X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resources.ts"],"names":[],"mappings":"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","file":"chunk-73FIKR3X.js","sourcesContent":["import { z } from \"zod\";\nimport mimeDb from \"mime-db\";\n\ntype MimeDb = Record<string, { extensions?: string[] }>;\n\nconst EXTENSION_TO_MIME = (() => {\n const map = new Map<string, string>();\n Object.entries(mimeDb as MimeDb).forEach(([type, meta]) => {\n meta.extensions?.forEach((ext) => {\n if (!map.has(ext)) {\n map.set(ext, type);\n }\n });\n });\n return map;\n})();\n\nfunction extractExtension(value: string): string | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n\n const sanitized = trimmed.replace(/^[^?#]*/g, (match) => match);\n const withoutQuery = sanitized.split(/[?#]/)[0];\n\n if (withoutQuery.startsWith(\".\")) {\n return withoutQuery.slice(1).toLowerCase();\n }\n\n if (!withoutQuery.includes(\".\")) {\n if (!withoutQuery.includes(\"/\") && !withoutQuery.includes(\"\\\\\")) {\n return withoutQuery.toLowerCase();\n }\n return undefined;\n }\n\n const lastDot = withoutQuery.lastIndexOf(\".\");\n if (lastDot === -1 || lastDot === withoutQuery.length - 1) return undefined;\n return withoutQuery.slice(lastDot + 1).toLowerCase();\n}\n\n// Base Resource Schema (enhanced)\nexport const ResourceSchema = z.object({\n name: z.string(),\n title: z.string().optional(),\n description: z.string().optional(),\n uri: z.string().url(),\n mimeType: z.string().optional(),\n thumbnail: z.string().url().optional(),\n timestamp: z.string().datetime().optional(),\n size: z.number().positive().optional(),\n annotations: z.record(z.string(), z.string()).optional(),\n});\n\n// Tool Input/Output Schemas (unified)\nexport const ResourcesReadInputSchema = z.object({\n name: z.string().describe(\"Resource type name (e.g., 'Page', 'GoogleDrive')\"),\n uri: z\n .string()\n .url()\n .describe(\n \"The URI of the resource to read. It's important to add the url scheme. Use file:// for files. Use https:// or http:// for remote files\",\n ),\n});\n\nexport const ResourcesReadOutputSchema = ResourceSchema.extend({\n data: z.string().describe(\"The resource content as a string\"),\n type: z\n .enum([\"text\", \"blob\"])\n .describe(\n \"Type of data: 'text' for plain text, 'blob' for base64-encoded binary\",\n ),\n});\n\nexport const ResourceSearchInputSchema = z.object({\n name: z.string().describe(\"Resource type name (e.g., 'Page', 'GoogleDrive')\"),\n term: z.string().describe(\"The term to search for\"),\n cursor: z.string().optional(),\n limit: z.number().positive().optional(),\n});\n\nexport const ResourceSearchOutputSchema = z.object({\n items: z.array(ResourceSchema),\n hasMore: z.boolean(),\n nextCursor: z.string().optional(),\n});\n\nexport const ResourceCreateInputSchema = z.object({\n name: z.string().describe(\"Resource type name (e.g., 'Page', 'GoogleDrive')\"),\n resourceName: z\n .string()\n .describe(\n \"Name of the specific resource instance. DO NOT ADD EXTENSIONS TO THE NAME\",\n ),\n title: z.string().optional(),\n description: z.string().optional(),\n content: z\n .object({\n data: z.string(),\n type: z.enum([\"text\", \"blob\"]),\n mimeType: z.string().optional(),\n })\n .describe(\"Content to create the resource with\"),\n metadata: z.record(z.string(), z.any()).optional(),\n});\nexport const ResourceCreateOutputSchema = ResourceSchema;\n\nexport const ResourceUpdateInputSchema = z.object({\n name: z.string().describe(\"Resource type name (e.g., 'Page', 'GoogleDrive')\"),\n uri: z.string().url().describe(\"URI of the resource to update\"),\n resourceName: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n content: z\n .object({\n data: z.string(),\n type: z.enum([\"text\", \"blob\"]),\n mimeType: z.string().optional(),\n })\n .optional(),\n metadata: z.record(z.string(), z.any()).optional(),\n});\nexport const ResourceUpdateOutputSchema = ResourceSchema;\n\nexport const ResourceDeleteInputSchema = z.object({\n name: z.string().describe(\"Resource type name (e.g., 'Page', 'GoogleDrive')\"),\n uri: z.string().url().describe(\"URI of the resource to delete\"),\n force: z.boolean().optional(),\n});\nexport const ResourceDeleteOutputSchema = z.object({\n deletedUri: z.string().url(),\n});\n\nexport const ResourcesListInputSchema = z.object({});\nexport const ResourcesListOutputSchema = z.object({\n resources: z.array(\n z.object({\n name: z.string(),\n icon: z.string(),\n title: z.string(),\n description: z.string(),\n hasCreate: z.boolean().optional(),\n hasUpdate: z.boolean().optional(),\n hasDelete: z.boolean().optional(),\n }),\n ),\n});\n\n// Export Types\nexport type Resource = z.infer<typeof ResourceSchema>;\nexport type ResourcesReadInput = z.infer<typeof ResourcesReadInputSchema>;\nexport type ResourcesReadOutput = z.infer<typeof ResourcesReadOutputSchema>;\nexport type ResourcesSearchInput = z.infer<typeof ResourceSearchInputSchema>;\nexport type ResourcesSearchOutput = z.infer<typeof ResourceSearchOutputSchema>;\nexport type ResourceCreateInput = z.infer<typeof ResourceCreateInputSchema>;\nexport type ResourceCreateOutput = z.infer<typeof ResourceCreateOutputSchema>;\nexport type ResourceUpdateInput = z.infer<typeof ResourceUpdateInputSchema>;\nexport type ResourceUpdateOutput = z.infer<typeof ResourceUpdateOutputSchema>;\nexport type ResourceDeleteInput = z.infer<typeof ResourceDeleteInputSchema>;\nexport type ResourceDeleteOutput = z.infer<typeof ResourceDeleteOutputSchema>;\nexport type ResourcesListInput = z.infer<typeof ResourcesListInputSchema>;\nexport type ResourcesListOutput = z.infer<typeof ResourcesListOutputSchema>;\n\nexport const mimeType = (filePathOrExtension: string) => {\n const ext = extractExtension(filePathOrExtension);\n if (!ext) return \"text/plain\";\n return EXTENSION_TO_MIME.get(ext) ?? \"text/plain\";\n};\n"]}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/views.ts
4
+ var installBehavior = z.enum(["none", "open", "autoPin"]);
5
+ var ViewsListOutputSchema = z.object({
6
+ views: z.array(
7
+ z.object({
8
+ id: z.string().optional(),
9
+ name: z.string().optional(),
10
+ title: z.string(),
11
+ description: z.string().optional(),
12
+ icon: z.string(),
13
+ url: z.string().optional(),
14
+ // New acceptance rules
15
+ mimeTypePattern: z.string().optional(),
16
+ resourceName: z.string().optional(),
17
+ // Legacy/compat fields
18
+ tools: z.array(z.string()).optional().default([]),
19
+ prompt: z.string().optional(),
20
+ installBehavior: installBehavior.optional()
21
+ })
22
+ )
23
+ });
24
+
25
+ export { ViewsListOutputSchema };
26
+ //# sourceMappingURL=chunk-AOFOWQXY.js.map
27
+ //# sourceMappingURL=chunk-AOFOWQXY.js.map