()
| 483 | private _resourceHandlersInitialized = false; |
| 484 | |
| 485 | private setResourceRequestHandlers() { |
| 486 | if (this._resourceHandlersInitialized) { |
| 487 | return; |
| 488 | } |
| 489 | |
| 490 | this.server.assertCanSetRequestHandler(getMethodValue(ListResourcesRequestSchema)); |
| 491 | this.server.assertCanSetRequestHandler(getMethodValue(ListResourceTemplatesRequestSchema)); |
| 492 | this.server.assertCanSetRequestHandler(getMethodValue(ReadResourceRequestSchema)); |
| 493 | |
| 494 | this.server.registerCapabilities({ |
| 495 | resources: { |
| 496 | listChanged: true |
| 497 | } |
| 498 | }); |
| 499 | |
| 500 | this.server.setRequestHandler(ListResourcesRequestSchema, async (request, extra) => { |
| 501 | const resources = Object.entries(this._registeredResources) |
| 502 | .filter(([_, resource]) => resource.enabled) |
| 503 | .map(([uri, resource]) => ({ |
| 504 | uri, |
| 505 | name: resource.name, |
| 506 | ...resource.metadata |
| 507 | })); |
| 508 | |
| 509 | const templateResources: Resource[] = []; |
| 510 | for (const template of Object.values(this._registeredResourceTemplates)) { |
| 511 | if (!template.resourceTemplate.listCallback) { |
| 512 | continue; |
| 513 | } |
| 514 | |
| 515 | const result = await template.resourceTemplate.listCallback(extra); |
| 516 | for (const resource of result.resources) { |
| 517 | templateResources.push({ |
| 518 | ...template.metadata, |
| 519 | // the defined resource metadata should override the template metadata if present |
| 520 | ...resource |
| 521 | }); |
| 522 | } |
| 523 | } |
| 524 | |
| 525 | return { resources: [...resources, ...templateResources] }; |
| 526 | }); |
| 527 | |
| 528 | this.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => { |
| 529 | const resourceTemplates = Object.entries(this._registeredResourceTemplates).map(([name, template]) => ({ |
| 530 | name, |
| 531 | uriTemplate: template.resourceTemplate.uriTemplate.toString(), |
| 532 | ...template.metadata |
| 533 | })); |
| 534 | |
| 535 | return { resourceTemplates }; |
| 536 | }); |
| 537 | |
| 538 | this.server.setRequestHandler(ReadResourceRequestSchema, async (request, extra) => { |
| 539 | const uri = new URL(request.params.uri); |
| 540 | |
| 541 | // First check for exact resource match |
| 542 | const resource = this._registeredResources[uri.toString()]; |
no test coverage detected