OpenCTI MCP Server

  • test
import { setupServer } from "msw/node"; import { http, HttpResponse } from "msw"; // Define handlers export const handlers = [ // List spaces http.get("https://api.contentful.com/spaces", () => { return HttpResponse.json({ items: [ { sys: { id: "test-space-id" }, name: "Test Space", }, ], }); }), // Get specific space http.get("https://api.contentful.com/spaces/:spaceId", ({ params }) => { const { spaceId } = params; if (spaceId === "test-space-id") { return HttpResponse.json({ sys: { id: "test-space-id" }, name: "Test Space", }); } return new HttpResponse(null, { status: 404 }); }), // List environments http.get( "https://api.contentful.com/spaces/:spaceId/environments", ({ params }) => { const { spaceId } = params; if (spaceId === "test-space-id") { return HttpResponse.json({ items: [ { sys: { id: "master" }, name: "master", }, ], }); } return new HttpResponse(null, { status: 404 }); }, ), // Create environment http.post( "https://api.contentful.com/spaces/:spaceId/environments", async ({ params, request }) => { const { spaceId } = params; if (spaceId === "test-space-id") { const envId = await request.text(); return HttpResponse.json({ sys: { id: envId }, name: envId, }); } return new HttpResponse(null, { status: 404 }); }, ), // Delete environment http.delete( "https://api.contentful.com/spaces/:spaceId/environments/:envId", ({ params }) => { const { spaceId, envId } = params; if (spaceId === "test-space-id" && envId !== "non-existent-env") { return new HttpResponse(null, { status: 204 }); } return new HttpResponse(null, { status: 404 }); }, ), ]; const assetHandlers = [ // Upload asset http.post( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/assets", async ({ request, params }) => { console.log("MSW: Handling asset creation request"); const { spaceId } = params; if (spaceId === "test-space-id") { const body = (await request.json()) as { fields: { title: { "en-US": string }; description?: { "en-US": string }; file: { "en-US": { fileName: string; contentType: string; upload: string; }; }; }; }; return HttpResponse.json({ sys: { id: "test-asset-id", version: 1, type: "Asset", }, fields: body.fields, }); } return new HttpResponse(null, { status: 404 }); }, ), // Process asset http.put( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/assets/:assetId/files/en-US/process", ({ params }) => { console.log("MSW: Handling asset processing request"); const { spaceId, assetId } = params; if (spaceId === "test-space-id" && assetId === "test-asset-id") { return HttpResponse.json({ sys: { id: "test-asset-id", version: 2, publishedVersion: 1, }, fields: { title: { "en-US": "Test Asset" }, description: { "en-US": "Test Description" }, file: { "en-US": { fileName: "test.jpg", contentType: "image/jpeg", url: "https://example.com/test.jpg", }, }, }, }); } return new HttpResponse(null, { status: 404 }); }, ), // Get asset http.get( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/assets/:assetId", ({ params }) => { console.log("MSW: Handling get processed asset request"); const { spaceId, assetId } = params; if (spaceId === "test-space-id" && assetId === "test-asset-id") { return HttpResponse.json({ sys: { id: "test-asset-id", version: 2, type: "Asset", publishedVersion: 1, }, fields: { title: { "en-US": "Test Asset" }, description: { "en-US": "Test Description" }, file: { "en-US": { fileName: "test.jpg", contentType: "image/jpeg", url: "https://example.com/test.jpg", }, }, }, }); } return new HttpResponse(null, { status: 404 }); }, ), // Update asset http.put( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/assets/:assetId", ({ params }) => { const { spaceId, assetId } = params; if (spaceId === "test-space-id" && assetId === "test-asset-id") { return HttpResponse.json({ sys: { id: "test-asset-id" }, fields: { title: { "en-US": "Updated Asset" }, description: { "en-US": "Updated Description" }, }, }); } return new HttpResponse(null, { status: 404 }); }, ), // Delete asset http.delete( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/assets/:assetId", ({ params }) => { const { spaceId, assetId } = params; if (spaceId === "test-space-id" && assetId === "test-asset-id") { return new HttpResponse(null, { status: 204 }); } return new HttpResponse(null, { status: 404 }); }, ), // Publish asset http.put( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/assets/:assetId/published", ({ params }) => { const { spaceId, assetId } = params; if (spaceId === "test-space-id" && assetId === "test-asset-id") { return HttpResponse.json({ sys: { id: "test-asset-id", publishedVersion: 1, }, }); } return new HttpResponse(null, { status: 404 }); }, ), // Unpublish asset http.delete( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/assets/:assetId/published", ({ params }) => { const { spaceId, assetId } = params; if (spaceId === "test-space-id" && assetId === "test-asset-id") { return HttpResponse.json({ sys: { id: "test-asset-id", }, }); } return new HttpResponse(null, { status: 404 }); }, ), ]; const entryHandlers = [ // Search entries http.get( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/entries", ({ params, request }) => { const { spaceId } = params; if (spaceId === "test-space-id") { return HttpResponse.json({ items: [ { sys: { id: "test-entry-id", contentType: { sys: { id: "test-content-type-id" } }, }, fields: { title: { "en-US": "Test Entry" }, description: { "en-US": "Test Description" }, }, }, ], }); } return new HttpResponse(null, { status: 404 }); }, ), // Get specific entry http.get( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/entries/:entryId", ({ params }) => { const { spaceId, entryId } = params; if (spaceId === "test-space-id" && entryId === "test-entry-id") { return HttpResponse.json({ sys: { id: "test-entry-id", contentType: { sys: { id: "test-content-type-id" } }, }, fields: { title: { "en-US": "Test Entry" }, description: { "en-US": "Test Description" }, }, }); } return new HttpResponse(null, { status: 404 }); }, ), // Create entry http.post( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/entries", async ({ params, request }) => { const { spaceId } = params; if (spaceId === "test-space-id") { const contentType = request.headers.get("X-Contentful-Content-Type"); const body = (await request.json()) as { fields: Record<string, any>; }; return HttpResponse.json({ sys: { id: "new-entry-id", type: "Entry", contentType: { sys: { type: "Link", linkType: "ContentType", id: contentType, }, }, }, fields: body.fields, }); } return new HttpResponse(null, { status: 404 }); }, ), // Update entry http.put( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/entries/:entryId", async ({ params, request }) => { const { spaceId, entryId } = params; if (spaceId === "test-space-id" && entryId === "test-entry-id") { const body = (await request.json()) as { fields: Record<string, any>; }; return HttpResponse.json({ sys: { id: entryId, contentType: { sys: { id: "test-content-type-id" } }, }, fields: body.fields, }); } return new HttpResponse(null, { status: 404 }); }, ), // Delete entry http.delete( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/entries/:entryId", ({ params }) => { const { spaceId, entryId } = params; if (spaceId === "test-space-id" && entryId === "test-entry-id") { return new HttpResponse(null, { status: 204 }); } return new HttpResponse(null, { status: 404 }); }, ), // Publish entry http.put( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/entries/:entryId/published", ({ params }) => { const { spaceId, entryId } = params; if (spaceId === "test-space-id" && entryId === "test-entry-id") { return HttpResponse.json({ sys: { id: entryId, publishedVersion: 1, }, }); } return new HttpResponse(null, { status: 404 }); }, ), // Unpublish entry http.delete( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/entries/:entryId/published", ({ params }) => { const { spaceId, entryId } = params; if (spaceId === "test-space-id" && entryId === "test-entry-id") { return HttpResponse.json({ sys: { id: entryId }, }); } return new HttpResponse(null, { status: 404 }); }, ), ]; const contentTypeHandlers = [ // List content types http.get( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/content_types", ({ params }) => { const { spaceId } = params; if (spaceId === "test-space-id") { return HttpResponse.json({ items: [ { sys: { id: "test-content-type-id" }, name: "Test Content Type", fields: [ { id: "title", name: "Title", type: "Text", required: true, }, ], }, ], }); } return new HttpResponse(null, { status: 404 }); }, ), // Get specific content type http.get( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/content_types/:contentTypeId", ({ params }) => { const { spaceId, contentTypeId } = params; if ( spaceId === "test-space-id" && contentTypeId === "test-content-type-id" ) { return HttpResponse.json({ sys: { id: "test-content-type-id" }, name: "Test Content Type", fields: [ { id: "title", name: "Title", type: "Text", required: true, }, ], }); } return new HttpResponse(null, { status: 404 }); }, ), // Create content type http.post( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/content_types", async ({ params, request }) => { const { spaceId } = params; if (spaceId === "test-space-id") { const body = (await request.json()) as { name: string; fields: Array<{ id: string; name: string; type: string; required?: boolean; }>; description?: string; displayField?: string; }; return HttpResponse.json({ sys: { id: "new-content-type-id" }, name: body.name, fields: body.fields, description: body.description, displayField: body.displayField, }); } return new HttpResponse(null, { status: 404 }); }, ), // Publish content type http.put( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/content_types/:contentTypeId/published", ({ params }) => { const { spaceId, contentTypeId } = params; if ( spaceId === "test-space-id" && contentTypeId === "test-content-type-id" ) { return HttpResponse.json({ sys: { id: contentTypeId, version: 1, publishedVersion: 1, }, name: "Test Content Type", fields: [ { id: "title", name: "Title", type: "Text", required: true, }, ], }); } return new HttpResponse(null, { status: 404 }); }, ), // Update content type http.put( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/content_types/:contentTypeId", async ({ params, request }) => { const { spaceId, contentTypeId } = params; if ( spaceId === "test-space-id" && contentTypeId === "test-content-type-id" ) { const body = (await request.json()) as { name: string; fields: Array<{ id: string; name: string; type: string; required?: boolean; }>; description?: string; displayField?: string; }; return HttpResponse.json({ sys: { id: contentTypeId }, name: body.name, fields: body.fields, description: body.description, displayField: body.displayField, }); } return new HttpResponse(null, { status: 404 }); }, ), // Delete content type http.delete( "https://api.contentful.com/spaces/:spaceId/environments/:environmentId/content_types/:contentTypeId", ({ params }) => { const { spaceId, contentTypeId } = params; if ( spaceId === "test-space-id" && contentTypeId === "test-content-type-id" ) { return new HttpResponse(null, { status: 204 }); } return new HttpResponse(null, { status: 404 }); }, ), ]; // Setup MSW Server export const server = setupServer( ...handlers, ...assetHandlers, ...contentTypeHandlers, ...entryHandlers, );