robloxstudio-mcp 2.0.0 → 2.0.2
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.
- package/dist/__tests__/bridge-service.test.js +0 -24
- package/dist/__tests__/bridge-service.test.js.map +1 -1
- package/dist/__tests__/http-server.test.js +0 -28
- package/dist/__tests__/http-server.test.js.map +1 -1
- package/dist/__tests__/integration.test.js +1 -36
- package/dist/__tests__/integration.test.js.map +1 -1
- package/dist/__tests__/smoke.test.js +1 -13
- package/dist/__tests__/smoke.test.js.map +1 -1
- package/dist/bridge-service.d.ts.map +1 -1
- package/dist/bridge-service.js +1 -5
- package/dist/bridge-service.js.map +1 -1
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +27 -23
- package/dist/http-server.js.map +1 -1
- package/dist/index.d.ts +0 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -57
- package/dist/index.js.map +1 -1
- package/dist/tools/index.d.ts +18 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +37 -15
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
- package/studio-plugin/MCPPlugin.rbxmx +6693 -3975
- package/studio-plugin/default.project.json +11 -2
- package/studio-plugin/dev.project.json +15 -1
- package/studio-plugin/package-lock.json +706 -0
- package/studio-plugin/package.json +19 -0
- package/studio-plugin/ts-src/modules/Communication.ts +349 -0
- package/studio-plugin/ts-src/modules/State.ts +87 -0
- package/studio-plugin/ts-src/modules/UI.ts +669 -0
- package/studio-plugin/ts-src/modules/Utils.ts +318 -0
- package/studio-plugin/ts-src/modules/handlers/InstanceHandlers.ts +320 -0
- package/studio-plugin/ts-src/modules/handlers/MetadataHandlers.ts +329 -0
- package/studio-plugin/ts-src/modules/handlers/PropertyHandlers.ts +282 -0
- package/studio-plugin/ts-src/modules/handlers/QueryHandlers.ts +544 -0
- package/studio-plugin/ts-src/modules/handlers/ScriptHandlers.ts +327 -0
- package/studio-plugin/ts-src/modules/handlers/TestHandlers.ts +101 -0
- package/studio-plugin/ts-src/server/index.server.ts +35 -0
- package/studio-plugin/ts-src/types/index.d.ts +39 -0
- package/studio-plugin/tsconfig.json +20 -0
- package/studio-plugin/src/MCPPlugin.server.luau +0 -41
- package/studio-plugin/src/modules/Communication.luau +0 -388
- package/studio-plugin/src/modules/InstanceHandlers.luau +0 -419
- package/studio-plugin/src/modules/MetadataHandlers.luau +0 -428
- package/studio-plugin/src/modules/PropertyHandlers.luau +0 -430
- package/studio-plugin/src/modules/QueryHandlers.luau +0 -674
- package/studio-plugin/src/modules/ScriptHandlers.luau +0 -454
- package/studio-plugin/src/modules/State.luau +0 -78
- package/studio-plugin/src/modules/UI.luau +0 -749
- package/studio-plugin/src/modules/Utils.luau +0 -295
|
@@ -13,7 +13,6 @@ describe('BridgeService', () => {
|
|
|
13
13
|
const endpoint = '/api/test';
|
|
14
14
|
const data = { test: 'data' };
|
|
15
15
|
const requestPromise = bridgeService.sendRequest(endpoint, data);
|
|
16
|
-
// Check that request is pending
|
|
17
16
|
const pendingRequest = bridgeService.getPendingRequest();
|
|
18
17
|
expect(pendingRequest).toBeTruthy();
|
|
19
18
|
expect(pendingRequest?.request.endpoint).toBe(endpoint);
|
|
@@ -25,7 +24,6 @@ describe('BridgeService', () => {
|
|
|
25
24
|
const response = { result: 'success' };
|
|
26
25
|
const requestPromise = bridgeService.sendRequest(endpoint, data);
|
|
27
26
|
const pendingRequest = bridgeService.getPendingRequest();
|
|
28
|
-
// Resolve the request
|
|
29
27
|
bridgeService.resolveRequest(pendingRequest.requestId, response);
|
|
30
28
|
const result = await requestPromise;
|
|
31
29
|
expect(result).toEqual(response);
|
|
@@ -36,7 +34,6 @@ describe('BridgeService', () => {
|
|
|
36
34
|
const error = 'Test error';
|
|
37
35
|
const requestPromise = bridgeService.sendRequest(endpoint, data);
|
|
38
36
|
const pendingRequest = bridgeService.getPendingRequest();
|
|
39
|
-
// Reject the request
|
|
40
37
|
bridgeService.rejectRequest(pendingRequest.requestId, error);
|
|
41
38
|
await expect(requestPromise).rejects.toEqual(error);
|
|
42
39
|
});
|
|
@@ -44,74 +41,53 @@ describe('BridgeService', () => {
|
|
|
44
41
|
const endpoint = '/api/test';
|
|
45
42
|
const data = { test: 'data' };
|
|
46
43
|
const requestPromise = bridgeService.sendRequest(endpoint, data);
|
|
47
|
-
// Fast-forward time by 31 seconds
|
|
48
44
|
jest.advanceTimersByTime(31000);
|
|
49
45
|
await expect(requestPromise).rejects.toThrow('Request timeout');
|
|
50
46
|
});
|
|
51
47
|
});
|
|
52
48
|
describe('Cleanup Operations', () => {
|
|
53
49
|
test('should clean up old requests', async () => {
|
|
54
|
-
// Create multiple requests
|
|
55
50
|
const promises = [
|
|
56
51
|
bridgeService.sendRequest('/api/test1', {}),
|
|
57
52
|
bridgeService.sendRequest('/api/test2', {}),
|
|
58
53
|
bridgeService.sendRequest('/api/test3', {})
|
|
59
54
|
];
|
|
60
|
-
// Fast-forward time by 31 seconds
|
|
61
55
|
jest.advanceTimersByTime(31000);
|
|
62
|
-
// Clean up old requests
|
|
63
56
|
bridgeService.cleanupOldRequests();
|
|
64
|
-
// All requests should be rejected
|
|
65
57
|
for (const promise of promises) {
|
|
66
58
|
await expect(promise).rejects.toThrow('Request timeout');
|
|
67
59
|
}
|
|
68
|
-
// No pending requests should remain
|
|
69
60
|
expect(bridgeService.getPendingRequest()).toBeNull();
|
|
70
61
|
});
|
|
71
62
|
test('should clear all pending requests on disconnect', async () => {
|
|
72
|
-
// Create multiple requests
|
|
73
63
|
const promises = [
|
|
74
64
|
bridgeService.sendRequest('/api/test1', {}),
|
|
75
65
|
bridgeService.sendRequest('/api/test2', {}),
|
|
76
66
|
bridgeService.sendRequest('/api/test3', {})
|
|
77
67
|
];
|
|
78
|
-
// Clear all requests
|
|
79
68
|
bridgeService.clearAllPendingRequests();
|
|
80
|
-
// All requests should be rejected with connection closed error
|
|
81
69
|
for (const promise of promises) {
|
|
82
70
|
await expect(promise).rejects.toThrow('Connection closed');
|
|
83
71
|
}
|
|
84
|
-
// No pending requests should remain
|
|
85
72
|
expect(bridgeService.getPendingRequest()).toBeNull();
|
|
86
73
|
});
|
|
87
74
|
});
|
|
88
75
|
describe('Request Priority', () => {
|
|
89
76
|
test('should return oldest request first', async () => {
|
|
90
|
-
// Create requests with different timestamps using fake timers
|
|
91
77
|
bridgeService.sendRequest('/api/test1', { order: 1 });
|
|
92
|
-
// Advance time to ensure different timestamps
|
|
93
78
|
jest.advanceTimersByTime(10);
|
|
94
79
|
bridgeService.sendRequest('/api/test2', { order: 2 });
|
|
95
80
|
jest.advanceTimersByTime(10);
|
|
96
81
|
bridgeService.sendRequest('/api/test3', { order: 3 });
|
|
97
|
-
// getPendingRequest() peeks at the oldest request without removing it
|
|
98
|
-
// So we need to resolve each request to get to the next one
|
|
99
|
-
// Should get the first (oldest) request
|
|
100
82
|
const firstRequest = bridgeService.getPendingRequest();
|
|
101
83
|
expect(firstRequest?.request.data.order).toBe(1);
|
|
102
|
-
// Resolve the first request to remove it from the queue
|
|
103
84
|
bridgeService.resolveRequest(firstRequest.requestId, {});
|
|
104
|
-
// Should get the second request next
|
|
105
85
|
const secondRequest = bridgeService.getPendingRequest();
|
|
106
86
|
expect(secondRequest?.request.data.order).toBe(2);
|
|
107
|
-
// Resolve the second request
|
|
108
87
|
bridgeService.resolveRequest(secondRequest.requestId, {});
|
|
109
|
-
// Should get the third request last
|
|
110
88
|
const thirdRequest = bridgeService.getPendingRequest();
|
|
111
89
|
expect(thirdRequest?.request.data.order).toBe(3);
|
|
112
|
-
// Resolve the third request
|
|
113
90
|
bridgeService.resolveRequest(thirdRequest.requestId, {});
|
|
114
|
-
// No more pending requests
|
|
115
91
|
expect(bridgeService.getPendingRequest()).toBeNull();
|
|
116
92
|
});
|
|
117
93
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-service.test.js","sourceRoot":"","sources":["../../src/__tests__/bridge-service.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,aAA4B,CAAC;IAEjC,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC;YAC7B,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAE9B,MAAM,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEjE,
|
|
1
|
+
{"version":3,"file":"bridge-service.test.js","sourceRoot":"","sources":["../../src/__tests__/bridge-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,6 @@ describe('HTTP Server', () => {
|
|
|
12
12
|
app = createHttpServer(tools, bridge);
|
|
13
13
|
});
|
|
14
14
|
afterEach(() => {
|
|
15
|
-
// Clean up any pending requests to prevent open handles
|
|
16
15
|
bridge.clearAllPendingRequests();
|
|
17
16
|
});
|
|
18
17
|
describe('Health Check', () => {
|
|
@@ -37,10 +36,8 @@ describe('HTTP Server', () => {
|
|
|
37
36
|
expect(app.isPluginConnected()).toBe(true);
|
|
38
37
|
});
|
|
39
38
|
test('should handle plugin disconnect', async () => {
|
|
40
|
-
// First connect
|
|
41
39
|
await request(app).post('/ready').expect(200);
|
|
42
40
|
expect(app.isPluginConnected()).toBe(true);
|
|
43
|
-
// Then disconnect
|
|
44
41
|
const response = await request(app)
|
|
45
42
|
.post('/disconnect')
|
|
46
43
|
.expect(200);
|
|
@@ -48,28 +45,20 @@ describe('HTTP Server', () => {
|
|
|
48
45
|
expect(app.isPluginConnected()).toBe(false);
|
|
49
46
|
});
|
|
50
47
|
test('should clear pending requests on disconnect', async () => {
|
|
51
|
-
// Add some pending requests
|
|
52
|
-
// Attach catch handlers to prevent unhandled rejection warnings
|
|
53
48
|
const p1 = bridge.sendRequest('/api/test1', {});
|
|
54
49
|
const p2 = bridge.sendRequest('/api/test2', {});
|
|
55
50
|
p1.catch(() => { });
|
|
56
51
|
p2.catch(() => { });
|
|
57
52
|
expect(bridge.getPendingRequest()).toBeTruthy();
|
|
58
|
-
// Disconnect
|
|
59
53
|
await request(app).post('/disconnect').expect(200);
|
|
60
|
-
// All requests should be cleared
|
|
61
54
|
expect(bridge.getPendingRequest()).toBeNull();
|
|
62
55
|
});
|
|
63
56
|
test('should timeout plugin connection after inactivity', async () => {
|
|
64
|
-
// Connect plugin
|
|
65
57
|
await request(app).post('/ready').expect(200);
|
|
66
58
|
expect(app.isPluginConnected()).toBe(true);
|
|
67
|
-
// Simulate time passing (11 seconds of inactivity)
|
|
68
59
|
const originalDateNow = Date.now;
|
|
69
60
|
Date.now = jest.fn(() => originalDateNow() + 11000);
|
|
70
|
-
// Plugin should be considered disconnected
|
|
71
61
|
expect(app.isPluginConnected()).toBe(false);
|
|
72
|
-
// Restore Date.now
|
|
73
62
|
Date.now = originalDateNow;
|
|
74
63
|
});
|
|
75
64
|
});
|
|
@@ -86,10 +75,7 @@ describe('HTTP Server', () => {
|
|
|
86
75
|
});
|
|
87
76
|
});
|
|
88
77
|
test('should return pending request when MCP is active', async () => {
|
|
89
|
-
// Activate MCP server
|
|
90
78
|
app.setMCPServerActive(true);
|
|
91
|
-
// Add a pending request
|
|
92
|
-
// Attach catch handler to prevent unhandled rejection during cleanup
|
|
93
79
|
const pendingRequest = bridge.sendRequest('/api/test', { data: 'test' });
|
|
94
80
|
pendingRequest.catch(() => { });
|
|
95
81
|
const response = await request(app)
|
|
@@ -106,7 +92,6 @@ describe('HTTP Server', () => {
|
|
|
106
92
|
expect(response.body.requestId).toBeTruthy();
|
|
107
93
|
});
|
|
108
94
|
test('should return null request when no pending requests', async () => {
|
|
109
|
-
// Activate MCP server
|
|
110
95
|
app.setMCPServerActive(true);
|
|
111
96
|
const response = await request(app)
|
|
112
97
|
.get('/poll')
|
|
@@ -127,10 +112,8 @@ describe('HTTP Server', () => {
|
|
|
127
112
|
test('should handle successful response', async () => {
|
|
128
113
|
const requestId = 'test-request-id';
|
|
129
114
|
const responseData = { result: 'success' };
|
|
130
|
-
// Create a pending request
|
|
131
115
|
const requestPromise = bridge.sendRequest('/api/test', {});
|
|
132
116
|
const pendingRequest = bridge.getPendingRequest();
|
|
133
|
-
// Send response
|
|
134
117
|
const response = await request(app)
|
|
135
118
|
.post('/response')
|
|
136
119
|
.send({
|
|
@@ -139,18 +122,14 @@ describe('HTTP Server', () => {
|
|
|
139
122
|
})
|
|
140
123
|
.expect(200);
|
|
141
124
|
expect(response.body).toEqual({ success: true });
|
|
142
|
-
// Check that the request was resolved
|
|
143
125
|
const result = await requestPromise;
|
|
144
126
|
expect(result).toEqual(responseData);
|
|
145
127
|
});
|
|
146
128
|
test('should handle error response', async () => {
|
|
147
129
|
const error = 'Test error message';
|
|
148
|
-
// Create a pending request
|
|
149
|
-
// Attach catch handler to prevent unhandled rejection warning
|
|
150
130
|
const requestPromise = bridge.sendRequest('/api/test', {});
|
|
151
131
|
requestPromise.catch(() => { });
|
|
152
132
|
const pendingRequest = bridge.getPendingRequest();
|
|
153
|
-
// Send error response
|
|
154
133
|
const response = await request(app)
|
|
155
134
|
.post('/response')
|
|
156
135
|
.send({
|
|
@@ -159,7 +138,6 @@ describe('HTTP Server', () => {
|
|
|
159
138
|
})
|
|
160
139
|
.expect(200);
|
|
161
140
|
expect(response.body).toEqual({ success: true });
|
|
162
|
-
// Check that the request was rejected
|
|
163
141
|
await expect(requestPromise).rejects.toEqual(error);
|
|
164
142
|
});
|
|
165
143
|
});
|
|
@@ -167,26 +145,20 @@ describe('HTTP Server', () => {
|
|
|
167
145
|
test('should track MCP server activity', async () => {
|
|
168
146
|
app.setMCPServerActive(true);
|
|
169
147
|
expect(app.isMCPServerActive()).toBe(true);
|
|
170
|
-
// Simulate activity
|
|
171
148
|
app.trackMCPActivity();
|
|
172
|
-
// Should still be active
|
|
173
149
|
expect(app.isMCPServerActive()).toBe(true);
|
|
174
150
|
});
|
|
175
151
|
test('should timeout MCP server after inactivity', async () => {
|
|
176
152
|
app.setMCPServerActive(true);
|
|
177
153
|
expect(app.isMCPServerActive()).toBe(true);
|
|
178
|
-
// Simulate time passing (16 seconds of inactivity)
|
|
179
154
|
const originalDateNow = Date.now;
|
|
180
155
|
Date.now = jest.fn(() => originalDateNow() + 16000);
|
|
181
|
-
// MCP server should be considered inactive
|
|
182
156
|
expect(app.isMCPServerActive()).toBe(false);
|
|
183
|
-
// Restore Date.now
|
|
184
157
|
Date.now = originalDateNow;
|
|
185
158
|
});
|
|
186
159
|
});
|
|
187
160
|
describe('Status Endpoint', () => {
|
|
188
161
|
test('should return current status', async () => {
|
|
189
|
-
// Set up some state
|
|
190
162
|
await request(app).post('/ready').expect(200);
|
|
191
163
|
app.setMCPServerActive(true);
|
|
192
164
|
const response = await request(app)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.test.js","sourceRoot":"","sources":["../../src/__tests__/http-server.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,GAAsB,CAAC;IAC3B,IAAI,MAAqB,CAAC;IAC1B,IAAI,KAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"http-server.test.js","sourceRoot":"","sources":["../../src/__tests__/http-server.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,57 +12,47 @@ describe('Integration Tests', () => {
|
|
|
12
12
|
app = createHttpServer(tools, bridge);
|
|
13
13
|
});
|
|
14
14
|
afterEach(() => {
|
|
15
|
-
// Clean up any pending requests to prevent open handles
|
|
16
15
|
bridge.clearAllPendingRequests();
|
|
17
16
|
});
|
|
18
17
|
describe('Full Connection Flow', () => {
|
|
19
18
|
test('should handle complete connection lifecycle', async () => {
|
|
20
|
-
// 1. Initial state - nothing connected
|
|
21
19
|
let status = await request(app).get('/status').expect(200);
|
|
22
20
|
expect(status.body.pluginConnected).toBe(false);
|
|
23
21
|
expect(status.body.mcpServerActive).toBe(false);
|
|
24
|
-
// 2. Plugin connects
|
|
25
22
|
await request(app).post('/ready').expect(200);
|
|
26
23
|
status = await request(app).get('/status').expect(200);
|
|
27
24
|
expect(status.body.pluginConnected).toBe(true);
|
|
28
25
|
expect(status.body.mcpServerActive).toBe(false);
|
|
29
|
-
// 3. Plugin polls - should show MCP not connected
|
|
30
26
|
let pollResponse = await request(app).get('/poll').expect(503);
|
|
31
27
|
expect(pollResponse.body).toMatchObject({
|
|
32
28
|
error: 'MCP server not connected',
|
|
33
29
|
pluginConnected: true,
|
|
34
30
|
mcpConnected: false
|
|
35
31
|
});
|
|
36
|
-
// 4. MCP server activates
|
|
37
32
|
app.setMCPServerActive(true);
|
|
38
33
|
status = await request(app).get('/status').expect(200);
|
|
39
34
|
expect(status.body.pluginConnected).toBe(true);
|
|
40
35
|
expect(status.body.mcpServerActive).toBe(true);
|
|
41
|
-
// 5. Plugin polls - should show both connected
|
|
42
36
|
pollResponse = await request(app).get('/poll').expect(200);
|
|
43
37
|
expect(pollResponse.body).toMatchObject({
|
|
44
38
|
request: null,
|
|
45
39
|
mcpConnected: true,
|
|
46
40
|
pluginConnected: true
|
|
47
41
|
});
|
|
48
|
-
// 6. Plugin disconnects
|
|
49
42
|
await request(app).post('/disconnect').expect(200);
|
|
50
43
|
status = await request(app).get('/status').expect(200);
|
|
51
44
|
expect(status.body.pluginConnected).toBe(false);
|
|
52
|
-
expect(status.body.mcpServerActive).toBe(true);
|
|
45
|
+
expect(status.body.mcpServerActive).toBe(true);
|
|
53
46
|
});
|
|
54
47
|
});
|
|
55
48
|
describe('Request/Response Flow', () => {
|
|
56
49
|
test('should handle complete request/response cycle', async () => {
|
|
57
|
-
// Setup: Connect everything
|
|
58
50
|
await request(app).post('/ready').expect(200);
|
|
59
51
|
app.setMCPServerActive(true);
|
|
60
|
-
// 1. MCP sends a request through bridge
|
|
61
52
|
const mcpRequestPromise = bridge.sendRequest('/api/test-endpoint', {
|
|
62
53
|
testData: 'hello',
|
|
63
54
|
value: 123
|
|
64
55
|
});
|
|
65
|
-
// 2. Plugin polls and gets the request
|
|
66
56
|
const pollResponse = await request(app).get('/poll').expect(200);
|
|
67
57
|
expect(pollResponse.body.request).toMatchObject({
|
|
68
58
|
endpoint: '/api/test-endpoint',
|
|
@@ -72,7 +62,6 @@ describe('Integration Tests', () => {
|
|
|
72
62
|
}
|
|
73
63
|
});
|
|
74
64
|
const requestId = pollResponse.body.requestId;
|
|
75
|
-
// 3. Plugin processes and sends response
|
|
76
65
|
await request(app)
|
|
77
66
|
.post('/response')
|
|
78
67
|
.send({
|
|
@@ -84,7 +73,6 @@ describe('Integration Tests', () => {
|
|
|
84
73
|
}
|
|
85
74
|
})
|
|
86
75
|
.expect(200);
|
|
87
|
-
// 4. MCP receives the response
|
|
88
76
|
const mcpResponse = await mcpRequestPromise;
|
|
89
77
|
expect(mcpResponse).toEqual({
|
|
90
78
|
success: true,
|
|
@@ -93,17 +81,12 @@ describe('Integration Tests', () => {
|
|
|
93
81
|
});
|
|
94
82
|
});
|
|
95
83
|
test('should handle error responses', async () => {
|
|
96
|
-
// Setup
|
|
97
84
|
await request(app).post('/ready').expect(200);
|
|
98
85
|
app.setMCPServerActive(true);
|
|
99
|
-
// Send request
|
|
100
|
-
// Attach catch handler to prevent unhandled rejection warning
|
|
101
86
|
const mcpRequestPromise = bridge.sendRequest('/api/failing-endpoint', {});
|
|
102
87
|
mcpRequestPromise.catch(() => { });
|
|
103
|
-
// Poll for request
|
|
104
88
|
const pollResponse = await request(app).get('/poll').expect(200);
|
|
105
89
|
const requestId = pollResponse.body.requestId;
|
|
106
|
-
// Send error response
|
|
107
90
|
await request(app)
|
|
108
91
|
.post('/response')
|
|
109
92
|
.send({
|
|
@@ -111,36 +94,26 @@ describe('Integration Tests', () => {
|
|
|
111
94
|
error: 'Operation failed: Invalid input'
|
|
112
95
|
})
|
|
113
96
|
.expect(200);
|
|
114
|
-
// Should reject with the error
|
|
115
97
|
await expect(mcpRequestPromise).rejects.toEqual('Operation failed: Invalid input');
|
|
116
98
|
});
|
|
117
99
|
});
|
|
118
100
|
describe('Disconnect Recovery', () => {
|
|
119
101
|
test('should handle disconnect and reconnect gracefully', async () => {
|
|
120
|
-
// Initial connection
|
|
121
102
|
await request(app).post('/ready').expect(200);
|
|
122
103
|
app.setMCPServerActive(true);
|
|
123
|
-
// Create some pending requests
|
|
124
|
-
// Attach catch handlers to prevent unhandled rejection warnings
|
|
125
104
|
const request1 = bridge.sendRequest('/api/test1', {});
|
|
126
105
|
const request2 = bridge.sendRequest('/api/test2', {});
|
|
127
106
|
request1.catch(() => { });
|
|
128
107
|
request2.catch(() => { });
|
|
129
|
-
// Verify requests are pending
|
|
130
108
|
let poll = await request(app).get('/poll').expect(200);
|
|
131
109
|
expect(poll.body.request).toBeTruthy();
|
|
132
|
-
// Disconnect
|
|
133
110
|
await request(app).post('/disconnect').expect(200);
|
|
134
|
-
// Requests should be rejected
|
|
135
111
|
await expect(request1).rejects.toThrow('Connection closed');
|
|
136
112
|
await expect(request2).rejects.toThrow('Connection closed');
|
|
137
|
-
// Reconnect
|
|
138
113
|
await request(app).post('/ready').expect(200);
|
|
139
|
-
// Should be able to handle new requests
|
|
140
114
|
const newRequestPromise = bridge.sendRequest('/api/test3', {});
|
|
141
115
|
poll = await request(app).get('/poll').expect(200);
|
|
142
116
|
expect(poll.body.request?.endpoint).toBe('/api/test3');
|
|
143
|
-
// Complete the new request
|
|
144
117
|
await request(app)
|
|
145
118
|
.post('/response')
|
|
146
119
|
.send({
|
|
@@ -154,16 +127,13 @@ describe('Integration Tests', () => {
|
|
|
154
127
|
});
|
|
155
128
|
describe('Connection State Display', () => {
|
|
156
129
|
test('should show correct pending states during connection', async () => {
|
|
157
|
-
// Initially disconnected: "HTTP: X MCP: X"
|
|
158
130
|
let health = await request(app).get('/health').expect(200);
|
|
159
131
|
expect(health.body.pluginConnected).toBe(false);
|
|
160
132
|
expect(health.body.mcpServerActive).toBe(false);
|
|
161
|
-
// Plugin starts polling: "HTTP: ... MCP: ..."
|
|
162
133
|
await request(app).get('/poll').expect(503);
|
|
163
134
|
health = await request(app).get('/health').expect(200);
|
|
164
135
|
expect(health.body.pluginConnected).toBe(true);
|
|
165
136
|
expect(health.body.mcpServerActive).toBe(false);
|
|
166
|
-
// MCP connects: "HTTP: OK MCP: OK"
|
|
167
137
|
app.setMCPServerActive(true);
|
|
168
138
|
const poll = await request(app).get('/poll').expect(200);
|
|
169
139
|
expect(poll.body.mcpConnected).toBe(true);
|
|
@@ -173,16 +143,11 @@ describe('Integration Tests', () => {
|
|
|
173
143
|
describe('Timeout Handling', () => {
|
|
174
144
|
test('should handle request timeouts', async () => {
|
|
175
145
|
jest.useFakeTimers();
|
|
176
|
-
// Setup
|
|
177
146
|
await request(app).post('/ready').expect(200);
|
|
178
147
|
app.setMCPServerActive(true);
|
|
179
|
-
// Send request but don't respond
|
|
180
148
|
const timeoutPromise = bridge.sendRequest('/api/slow-endpoint', {});
|
|
181
|
-
// Plugin polls for it
|
|
182
149
|
await request(app).get('/poll').expect(200);
|
|
183
|
-
// Fast forward time past timeout
|
|
184
150
|
jest.advanceTimersByTime(31000);
|
|
185
|
-
// Request should timeout
|
|
186
151
|
await expect(timeoutPromise).rejects.toThrow('Request timeout');
|
|
187
152
|
jest.useRealTimers();
|
|
188
153
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,GAAsB,CAAC;IAC3B,IAAI,MAAqB,CAAC;IAC1B,IAAI,KAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,GAAsB,CAAC;IAC3B,IAAI,MAAqB,CAAC;IAC1B,IAAI,KAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QAEb,MAAM,CAAC,uBAAuB,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAE7D,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE9C,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhD,IAAI,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBACtC,KAAK,EAAE,0BAA0B;gBACjC,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YAEH,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/C,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBACtC,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,IAAI;gBAClB,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEnD,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAE/D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,oBAAoB,EAAE;gBACjE,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;gBAC9C,QAAQ,EAAE,oBAAoB;gBAC9B,IAAI,EAAE;oBACJ,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,GAAG;iBACX;aACF,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;YAE9C,MAAM,OAAO,CAAC,GAAG,CAAC;iBACf,IAAI,CAAC,WAAW,CAAC;iBACjB,IAAI,CAAC;gBACJ,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE;oBACR,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,WAAW;oBACnB,IAAI,EAAE,OAAO;iBACd;aACF,CAAC;iBACD,MAAM,CAAC,GAAG,CAAC,CAAC;YAEf,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;gBAC1B,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAE/C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;YAC1E,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAElC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;YAE9C,MAAM,OAAO,CAAC,GAAG,CAAC;iBACf,IAAI,CAAC,WAAW,CAAC;iBACjB,IAAI,CAAC;gBACJ,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,iCAAiC;aACzC,CAAC;iBACD,MAAM,CAAC,GAAG,CAAC,CAAC;YAEf,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YAEnE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACtD,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzB,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzB,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;YAEvC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEnD,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC5D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAE5D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE9C,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAE/D,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEvD,MAAM,OAAO,CAAC,GAAG,CAAC;iBACf,IAAI,CAAC,WAAW,CAAC;iBACjB,IAAI,CAAC;gBACJ,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;gBAC9B,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;aAC5B,CAAC;iBACD,MAAM,CAAC,GAAG,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YAEtE,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE5C,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhD,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;YAEpE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE5C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAEhC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAEhE,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -20,16 +20,11 @@ describe('Smoke Tests - Connection Fixes', () => {
|
|
|
20
20
|
});
|
|
21
21
|
test('clearAllPendingRequests should clear all requests', async () => {
|
|
22
22
|
const bridge = new BridgeService();
|
|
23
|
-
// Don't wait for these promises - they'll be rejected
|
|
24
23
|
const promise1 = bridge.sendRequest('/test1', {});
|
|
25
24
|
const promise2 = bridge.sendRequest('/test2', {});
|
|
26
|
-
// Should have pending requests
|
|
27
25
|
expect(bridge.getPendingRequest()).toBeTruthy();
|
|
28
|
-
// Clear all requests
|
|
29
26
|
bridge.clearAllPendingRequests();
|
|
30
|
-
// Should have no pending requests
|
|
31
27
|
expect(bridge.getPendingRequest()).toBeNull();
|
|
32
|
-
// Promises should reject
|
|
33
28
|
await expect(promise1).rejects.toThrow('Connection closed');
|
|
34
29
|
await expect(promise2).rejects.toThrow('Connection closed');
|
|
35
30
|
});
|
|
@@ -37,27 +32,20 @@ describe('Smoke Tests - Connection Fixes', () => {
|
|
|
37
32
|
const bridge = new BridgeService();
|
|
38
33
|
const tools = new RobloxStudioTools(bridge);
|
|
39
34
|
const app = createHttpServer(tools, bridge);
|
|
40
|
-
// Add a pending request (don't await it)
|
|
41
|
-
// Attach a no-op catch to prevent unhandled rejection warning
|
|
42
35
|
const pendingPromise = bridge.sendRequest('/test', { data: 'test' });
|
|
43
|
-
pendingPromise.catch(() => { });
|
|
44
|
-
// Disconnect should clear it
|
|
36
|
+
pendingPromise.catch(() => { });
|
|
45
37
|
await request(app)
|
|
46
38
|
.post('/disconnect')
|
|
47
39
|
.expect(200);
|
|
48
|
-
// Request should be rejected
|
|
49
40
|
await expect(pendingPromise).rejects.toThrow('Connection closed');
|
|
50
41
|
});
|
|
51
42
|
test('Connection states should update correctly', async () => {
|
|
52
43
|
const bridge = new BridgeService();
|
|
53
44
|
const tools = new RobloxStudioTools(bridge);
|
|
54
45
|
const app = createHttpServer(tools, bridge);
|
|
55
|
-
// Initially not connected
|
|
56
46
|
expect(app.isPluginConnected()).toBe(false);
|
|
57
|
-
// After ready
|
|
58
47
|
await request(app).post('/ready').expect(200);
|
|
59
48
|
expect(app.isPluginConnected()).toBe(true);
|
|
60
|
-
// After disconnect
|
|
61
49
|
await request(app).post('/disconnect').expect(200);
|
|
62
50
|
expect(app.isPluginConnected()).toBe(false);
|
|
63
51
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smoke.test.js","sourceRoot":"","sources":["../../src/__tests__/smoke.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;aAChC,GAAG,CAAC,SAAS,CAAC;aACd,MAAM,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAEnC,
|
|
1
|
+
{"version":3,"file":"smoke.test.js","sourceRoot":"","sources":["../../src/__tests__/smoke.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-service.d.ts","sourceRoot":"","sources":["../src/bridge-service.ts"],"names":[],"mappings":"AAYA,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,cAAc,CAAS;IAEzB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA0B5D,iBAAiB,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI;IAuB3F,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG;IAS/C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"bridge-service.d.ts","sourceRoot":"","sources":["../src/bridge-service.ts"],"names":[],"mappings":"AAYA,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,cAAc,CAAS;IAEzB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA0B5D,iBAAiB,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI;IAuB3F,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG;IAS/C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAS3C,kBAAkB;IAWlB,uBAAuB;CAOxB"}
|
package/dist/bridge-service.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
2
|
export class BridgeService {
|
|
3
3
|
pendingRequests = new Map();
|
|
4
|
-
requestTimeout = 30000;
|
|
4
|
+
requestTimeout = 30000;
|
|
5
5
|
async sendRequest(endpoint, data) {
|
|
6
6
|
const requestId = uuidv4();
|
|
7
7
|
return new Promise((resolve, reject) => {
|
|
8
|
-
// Set timeout and store the ID so we can clear it later
|
|
9
8
|
const timeoutId = setTimeout(() => {
|
|
10
9
|
if (this.pendingRequests.has(requestId)) {
|
|
11
10
|
this.pendingRequests.delete(requestId);
|
|
@@ -25,7 +24,6 @@ export class BridgeService {
|
|
|
25
24
|
});
|
|
26
25
|
}
|
|
27
26
|
getPendingRequest() {
|
|
28
|
-
// Get oldest pending request
|
|
29
27
|
let oldestRequest = null;
|
|
30
28
|
for (const request of this.pendingRequests.values()) {
|
|
31
29
|
if (!oldestRequest || request.timestamp < oldestRequest.timestamp) {
|
|
@@ -59,7 +57,6 @@ export class BridgeService {
|
|
|
59
57
|
request.reject(error);
|
|
60
58
|
}
|
|
61
59
|
}
|
|
62
|
-
// Clean up old requests
|
|
63
60
|
cleanupOldRequests() {
|
|
64
61
|
const now = Date.now();
|
|
65
62
|
for (const [id, request] of this.pendingRequests.entries()) {
|
|
@@ -70,7 +67,6 @@ export class BridgeService {
|
|
|
70
67
|
}
|
|
71
68
|
}
|
|
72
69
|
}
|
|
73
|
-
// Force cleanup all pending requests (used on disconnect)
|
|
74
70
|
clearAllPendingRequests() {
|
|
75
71
|
for (const [, request] of this.pendingRequests.entries()) {
|
|
76
72
|
clearTimeout(request.timeoutId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-service.js","sourceRoot":"","sources":["../src/bridge-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAYpC,MAAM,OAAO,aAAa;IAChB,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;IACzD,cAAc,GAAG,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"bridge-service.js","sourceRoot":"","sources":["../src/bridge-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAYpC,MAAM,OAAO,aAAa;IAChB,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;IACzD,cAAc,GAAG,KAAK,CAAC;IAE/B,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,IAAS;QAC3C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;QAE3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAErC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAExB,MAAM,OAAO,GAAmB;gBAC9B,EAAE,EAAE,SAAS;gBACb,QAAQ;gBACR,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,OAAO;gBACP,MAAM;gBACN,SAAS;aACV,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;QAEf,IAAI,aAAa,GAA0B,IAAI,CAAC;QAEhD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;gBAClE,aAAa,GAAG,OAAO,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;gBACL,SAAS,EAAE,aAAa,CAAC,EAAE;gBAC3B,OAAO,EAAE;oBACP,QAAQ,EAAE,aAAa,CAAC,QAAQ;oBAChC,IAAI,EAAE,aAAa,CAAC,IAAI;iBACzB;aACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,QAAa;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,KAAU;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3D,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClD,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;QACrB,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,+
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,+CAmgB/E"}
|