diff --git a/tests/utils.ts b/tests/utils.ts index e7b7f8e..af10b0a 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,4 +1,4 @@ -import type { EventSubscriptionHandler, GenericMessage, Persona, UnionMessageReply } from '@tbd54566975/dwn-sdk-js'; +import type { GenericMessage, Persona, UnionMessageReply } from '@tbd54566975/dwn-sdk-js'; import { Cid, DataStream, RecordsWrite } from '@tbd54566975/dwn-sdk-js'; import type { ReadStream } from 'node:fs'; @@ -11,9 +11,8 @@ import type { Readable } from 'readable-stream'; import { fileURLToPath } from 'url'; import { WebSocket } from 'ws'; -import type { JsonRpcResponse, JsonRpcRequest } from '../src/lib/json-rpc.js'; +import type { JsonRpcResponse } from '../src/lib/json-rpc.js'; import { createJsonRpcRequest } from '../src/lib/json-rpc.js'; -import { JsonRpcSocket } from '../src/json-rpc-socket.js'; // __filename and __dirname are not defined in ES module scope const __filename = fileURLToPath(import.meta.url); @@ -221,49 +220,3 @@ export async function sendWsMessage( }; }); } - -export async function sendWsRequest(options: { - url?: string, - connection?: JsonRpcSocket, - request: JsonRpcRequest, - responseTimeout?: number, -}): Promise { - const { url, connection: incomingConnection , request, responseTimeout } = options; - const connection = incomingConnection ?? await JsonRpcSocket.connect(url, { responseTimeout }); - return connection.request(request); -} - -/** - * A helper method for testing JSON RPC socket subscription requests to the DWN. - * - * If a connection is not provided, creates a new connection to the url provided. - * If no subscribe options are provided, creates a subscribe id. - * Attempts to subscribe and returns the response, close function and connection. - */ -export async function subscribeToMessageEvents(options: { - /** json rpc socket connection, mutually exclusive with url */ - connection?: JsonRpcSocket, - /** url to connect to if no connection is provided */ - url?: string, - /** the request to use for subscription */ - request: JsonRpcRequest, - /** the message handler to use for incoming events */ - messageHandler: EventSubscriptionHandler, - /** optional response timeout for new connections */ - responseTimeout?: number, -}): Promise<{ close?: () => Promise, response: JsonRpcResponse, connection?: JsonRpcSocket }> { - const { url, connection: incomingConnection, request, messageHandler, responseTimeout } = options; - const connection = incomingConnection ?? await JsonRpcSocket.connect(url, { responseTimeout }); - request.subscribe ??= { - id: uuidv4(), - }; - - const { close, response } = await connection.subscribe(request, (response) => { - const { event } = response.result; - messageHandler(event); - }); - - return { - response, close, connection - } -} diff --git a/tests/ws-api.spec.ts b/tests/ws-api.spec.ts index 893a592..03ce7b7 100644 --- a/tests/ws-api.spec.ts +++ b/tests/ws-api.spec.ts @@ -18,8 +18,9 @@ import { import { config } from '../src/config.js'; import { WsApi } from '../src/ws-api.js'; import { getTestDwn } from './test-dwn.js'; -import { createRecordsWriteMessage, sendWsMessage, sendHttpMessage, subscribeToMessageEvents, sendWsRequest } from './utils.js'; +import { createRecordsWriteMessage, sendWsMessage, sendHttpMessage } from './utils.js'; import { HttpApi } from '../src/http-api.js'; +import { JsonRpcSocket } from '../src/json-rpc-socket.js'; describe('websocket api', function () { @@ -85,10 +86,9 @@ describe('websocket api', function () { encodedData, }); - const response = await sendWsRequest({ - url:'ws://127.0.0.1:9002', - request: dwnRequest, - }); + const connection = await JsonRpcSocket.connect('ws://127.0.0.1:9002'); + const response = await connection.request(dwnRequest); + expect(response.id).to.equal(requestId); expect(response.error).to.not.be.undefined; expect(response.error.code).to.equal(JsonRpcErrorCodes.InvalidParams); @@ -117,11 +117,12 @@ describe('websocket api', function () { target: alice.did, }); - const { response, close } = await subscribeToMessageEvents({ - url : 'ws://127.0.0.1:9002', - request : dwnRequest, - messageHandler : subscriptionHandler + const connection = await JsonRpcSocket.connect('ws://127.0.0.1:9002'); + const { response, close } = await connection.subscribe(dwnRequest, (response) => { + const { event } = response.result; + subscriptionHandler(event); }); + expect(response.error).to.be.undefined; expect(response.result.reply.status.code).to.equal(200); expect(close).to.not.be.undefined; @@ -181,16 +182,18 @@ describe('websocket api', function () { }; const requestId = uuidv4(); - const dwnRequest = createJsonRpcRequest(requestId, 'rpc.subscribe.dwn.processMessage', { + const subscribeId = uuidv4(); + const dwnRequest = createJsonRpcSubscribeRequest(requestId, 'rpc.subscribe.dwn.processMessage', { message: message, target: alice.did, - }); + }, subscribeId); - const { response, close } = await subscribeToMessageEvents({ - url : 'ws://127.0.0.1:9002', - request : dwnRequest, - messageHandler : subscriptionHandler + const connection = await JsonRpcSocket.connect('ws://127.0.0.1:9002'); + const { response, close } = await connection.subscribe(dwnRequest, (response) => { + const { event } = response.result; + subscriptionHandler(event); }); + expect(response.error).to.be.undefined; expect(response.result.reply.status.code).to.equal(200); expect(close).to.not.be.undefined; @@ -268,15 +271,11 @@ describe('websocket api', function () { target: alice.did }, subscribeId); - const { response, close, connection } = await subscribeToMessageEvents({ - url : 'ws://127.0.0.1:9002', - request : dwnRequest, - messageHandler : subscriptionHandler + const connection = await JsonRpcSocket.connect('ws://127.0.0.1:9002'); + const { close } = await connection.subscribe(dwnRequest, (response) => { + const { event } = response.result; + subscriptionHandler(event); }); - expect(response.error).to.be.undefined; - expect(response.result.reply.status.code).to.equal(200); - expect(close).to.not.be.undefined; - const { message: message2 } = await TestDataGenerator.generateRecordsSubscribe({ filter: { schema: 'bar/baz' }, author: alice }); @@ -287,11 +286,11 @@ describe('websocket api', function () { target: alice.did }, subscribeId); - const { response: response2 } = await subscribeToMessageEvents({ - connection, - request: dwnRequest2, - messageHandler: subscriptionHandler, + const { response: response2 } = await connection.subscribe(dwnRequest2, (response) => { + const { event } = response.result; + subscriptionHandler(event); }); + expect(response2.error.code).to.equal(JsonRpcErrorCodes.InvalidParams); expect(response2.error.message).to.contain(`${subscribeId} is in use by an active subscription`);