(config: CloudflareConfig)
| 70 | // --------------------------------------------------------------------------- |
| 71 | |
| 72 | export const cloudflareAccessMcpAuth = (config: CloudflareConfig): Layer.Layer<McpAuthProvider> => { |
| 73 | const { verify } = makeAccessVerifier(config); |
| 74 | const discoveryRoutes: ReadonlyArray<McpDiscoveryRoute> = [ |
| 75 | { |
| 76 | path: PROTECTED_RESOURCE_METADATA_PATH, |
| 77 | handler: (request) => Effect.succeed(protectedResourceMetadataResponse(request)), |
| 78 | }, |
| 79 | { |
| 80 | path: MCP_PROTECTED_RESOURCE_METADATA_PATH, |
| 81 | handler: (request) => Effect.succeed(protectedResourceMetadataResponse(request)), |
| 82 | }, |
| 83 | { |
| 84 | path: TOOLKIT_PROTECTED_RESOURCE_METADATA_PATH, |
| 85 | handler: (request) => Effect.succeed(protectedResourceMetadataResponse(request)), |
| 86 | }, |
| 87 | ]; |
| 88 | return Layer.succeed(McpAuthProvider)({ |
| 89 | discoveryRoutes, |
| 90 | resourceMetadataUrl: (request) => |
| 91 | new URL(metadataPathForRequest(request), new URL(request.url).origin).toString(), |
| 92 | authenticate: (request) => |
| 93 | verify(request).pipe( |
| 94 | Effect.map((principal) => (principal ? authenticated(principal) : unauthorized())), |
| 95 | ), |
| 96 | }); |
| 97 | }; |
no test coverage detected