feat(transport): implement WebSocket-based isotransport client and server API with typed events and end-to-end tests

This commit is contained in:
2026-05-02 10:25:22 +00:00
parent 364b5b61f1
commit 370d079d52
13 changed files with 8192 additions and 3945 deletions
+38
View File
@@ -0,0 +1,38 @@
import { expect, tap } from '@git.zone/tstest/tapbundle';
import * as isotransport from '../ts/index.js';
tap.test('should exchange messages over a WebSocket transport', async () => {
const port = 32000 + Math.floor(Math.random() * 10000);
const server = new isotransport.IsotransportServer({ port, host: '127.0.0.1' });
const serverMessagePromise = new Promise<isotransport.TIsotransportMessage>((resolve) => {
server.on('connection', (connectionArg) => {
connectionArg.on('message', (messageArg) => {
resolve(messageArg);
connectionArg.send('pong');
});
});
});
await server.listen();
const client = new isotransport.IsotransportClient({
url: `ws://127.0.0.1:${port}`,
});
try {
const clientMessagePromise = new Promise<isotransport.TIsotransportMessage>((resolve) => {
client.on('message', resolve);
});
await client.connect();
client.send('ping');
expect(await serverMessagePromise).toEqual('ping');
expect(await clientMessagePromise).toEqual('pong');
} finally {
client.close();
await server.close();
}
});
export default tap.start();