We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/boshyxd/robloxstudio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
import { BridgeService } from '../bridge-service';
describe('BridgeService', () => {
let bridgeService: BridgeService;
beforeEach(() => {
bridgeService = new BridgeService();
jest.useFakeTimers();
});
afterEach(() => {
jest.useRealTimers();
});
describe('Request Management', () => {
test('should create and store a pending request', async () => {
const endpoint = '/api/test';
const data = { test: 'data' };
const requestPromise = bridgeService.sendRequest(endpoint, data);
const pendingRequest = bridgeService.getPendingRequest();
expect(pendingRequest).toBeTruthy();
expect(pendingRequest?.request.endpoint).toBe(endpoint);
expect(pendingRequest?.request.data).toEqual(data);
});
test('should resolve request when response is received', async () => {
const endpoint = '/api/test';
const data = { test: 'data' };
const response = { result: 'success' };
const requestPromise = bridgeService.sendRequest(endpoint, data);
const pendingRequest = bridgeService.getPendingRequest();
bridgeService.resolveRequest(pendingRequest!.requestId, response);
const result = await requestPromise;
expect(result).toEqual(response);
});
test('should reject request on error', async () => {
const endpoint = '/api/test';
const data = { test: 'data' };
const error = 'Test error';
const requestPromise = bridgeService.sendRequest(endpoint, data);
const pendingRequest = bridgeService.getPendingRequest();
bridgeService.rejectRequest(pendingRequest!.requestId, error);
await expect(requestPromise).rejects.toEqual(error);
});
test('should timeout request after 30 seconds', async () => {
const endpoint = '/api/test';
const data = { test: 'data' };
const requestPromise = bridgeService.sendRequest(endpoint, data);
jest.advanceTimersByTime(31000);
await expect(requestPromise).rejects.toThrow('Request timeout');
});
});
describe('Cleanup Operations', () => {
test('should clean up old requests', async () => {
const promises = [
bridgeService.sendRequest('/api/test1', {}),
bridgeService.sendRequest('/api/test2', {}),
bridgeService.sendRequest('/api/test3', {})
];
jest.advanceTimersByTime(31000);
bridgeService.cleanupOldRequests();
for (const promise of promises) {
await expect(promise).rejects.toThrow('Request timeout');
}
expect(bridgeService.getPendingRequest()).toBeNull();
});
test('should clear all pending requests on disconnect', async () => {
const promises = [
bridgeService.sendRequest('/api/test1', {}),
bridgeService.sendRequest('/api/test2', {}),
bridgeService.sendRequest('/api/test3', {})
];
bridgeService.clearAllPendingRequests();
for (const promise of promises) {
await expect(promise).rejects.toThrow('Connection closed');
}
expect(bridgeService.getPendingRequest()).toBeNull();
});
});
describe('Request Priority', () => {
test('should return oldest request first', async () => {
bridgeService.sendRequest('/api/test1', { order: 1 });
jest.advanceTimersByTime(10);
bridgeService.sendRequest('/api/test2', { order: 2 });
jest.advanceTimersByTime(10);
bridgeService.sendRequest('/api/test3', { order: 3 });
const firstRequest = bridgeService.getPendingRequest();
expect(firstRequest?.request.data.order).toBe(1);
bridgeService.resolveRequest(firstRequest!.requestId, {});
const secondRequest = bridgeService.getPendingRequest();
expect(secondRequest?.request.data.order).toBe(2);
bridgeService.resolveRequest(secondRequest!.requestId, {});
const thirdRequest = bridgeService.getPendingRequest();
expect(thirdRequest?.request.data.order).toBe(3);
bridgeService.resolveRequest(thirdRequest!.requestId, {});
expect(bridgeService.getPendingRequest()).toBeNull();
});
});
});