New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@relaycorp/ws-mock

Package Overview
Dependencies
Maintainers
2
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@relaycorp/ws-mock - npm Package Compare versions

Comparing version 1.2.0 to 1.3.0

build/main/lib/MockServerAction.d.ts

2

build/main/index.d.ts
export { MockClient } from './lib/MockClient';
export { MockPeer } from './lib/MockPeer';
export { MockServer } from './lib/MockServer';
export * from './lib/MockServerAction';
export { CloseFrame } from './lib/CloseFrame';
export { createMockWebSocketStream } from './lib/stream';
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMockWebSocketStream = exports.MockPeer = exports.MockClient = void 0;
exports.createMockWebSocketStream = exports.MockServer = exports.MockPeer = exports.MockClient = void 0;
var MockClient_1 = require("./lib/MockClient");

@@ -8,4 +18,7 @@ Object.defineProperty(exports, "MockClient", { enumerable: true, get: function () { return MockClient_1.MockClient; } });

Object.defineProperty(exports, "MockPeer", { enumerable: true, get: function () { return MockPeer_1.MockPeer; } });
var MockServer_1 = require("./lib/MockServer");
Object.defineProperty(exports, "MockServer", { enumerable: true, get: function () { return MockServer_1.MockServer; } });
__exportStar(require("./lib/MockServerAction"), exports);
var stream_1 = require("./lib/stream");
Object.defineProperty(exports, "createMockWebSocketStream", { enumerable: true, get: function () { return stream_1.createMockWebSocketStream; } });
//# sourceMappingURL=index.js.map

9

build/main/lib/MockPeer.d.ts
/// <reference types="node" />
import { EventEmitter } from 'events';
import { Data as WSData } from 'ws';
import { CloseFrame } from './CloseFrame';
import { MockWebSocket } from './MockWebSocket';
export declare abstract class MockPeer extends EventEmitter {
export declare abstract class MockPeer {
protected readonly peerWebSocket: MockWebSocket;
get wasConnectionClosed(): boolean;
disconnect(code?: number, reason?: string): void;
close(code?: number, reason?: string): void;
abort(error: Error): void;
send(message: Buffer | string): Promise<void>;
send(message: WSData): Promise<void>;
receive(): Promise<WSData>;
popLastPeerMessage(): WSData | undefined;
waitForPeerClosure(): Promise<CloseFrame>;
get peerCloseFrame(): CloseFrame | null;
protected convertBinaryType(message: Buffer | ArrayBuffer | readonly Buffer[]): Buffer | ArrayBuffer | readonly Buffer[];
private requireConnectionStillOpen;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockPeer = void 0;
const events_1 = require("events");
const MockWebSocket_1 = require("./MockWebSocket");
class MockPeer extends events_1.EventEmitter {
class MockPeer {
constructor() {
super(...arguments);
this.peerWebSocket = new MockWebSocket_1.MockWebSocket();

@@ -14,3 +12,3 @@ }

}
disconnect(code, reason) {
close(code, reason) {
this.peerWebSocket.emit('close', code, reason);

@@ -23,5 +21,6 @@ }

this.requireConnectionStillOpen();
const messageSerialized = typeof message === 'string' ? message : this.convertBinaryType(message);
return new Promise((resolve) => {
this.peerWebSocket.once('message', resolve);
this.peerWebSocket.emit('message', message);
this.peerWebSocket.emit('message', messageSerialized);
});

@@ -43,2 +42,12 @@ }

}
get peerCloseFrame() {
return this.peerWebSocket.closeFrame;
}
convertBinaryType(message) {
const binaryType = this.peerWebSocket.binaryType;
if (binaryType === 'nodebuffer') {
return Buffer.isBuffer(message) ? message : Buffer.from(message);
}
throw new Error(`Unsupported WebSocket.binaryType (${binaryType}); feel free to open a PR`);
}
requireConnectionStillOpen() {

@@ -45,0 +54,0 @@ if (this.wasConnectionClosed) {

@@ -0,3 +1,8 @@

import WebSocket from 'ws';
import { MockPeer } from './MockPeer';
import { MockServerAction } from './MockServerAction';
export declare class MockServer extends MockPeer {
get mockClientWebSocket(): WebSocket;
runActions(...actions: readonly MockServerAction[]): Promise<void>;
acceptConnection(): Promise<void>;
}

@@ -6,4 +6,18 @@ "use strict";

class MockServer extends MockPeer_1.MockPeer {
get mockClientWebSocket() {
return this.peerWebSocket;
}
async runActions(...actions) {
for (const action of actions) {
await action.run(this);
}
}
async acceptConnection() {
await new Promise((resolve) => {
this.peerWebSocket.once('open', resolve);
this.peerWebSocket.emit('open');
});
}
}
exports.MockServer = MockServer;
//# sourceMappingURL=MockServer.js.map

@@ -7,2 +7,3 @@ /// <reference types="node" />

export declare class MockWebSocket extends EventEmitter {
binaryType: 'nodebuffer' | 'arraybuffer';
protected ownCloseFrame: CloseFrame | null;

@@ -9,0 +10,0 @@ protected readonly messagesSent: WSData[];

@@ -10,2 +10,4 @@ "use strict";

// tslint:disable-next-line:readonly-keyword
this.binaryType = 'nodebuffer';
// tslint:disable-next-line:readonly-keyword
this.ownCloseFrame = null;

@@ -12,0 +14,0 @@ // tslint:disable-next-line:readonly-array

export { MockClient } from './lib/MockClient';
export { MockPeer } from './lib/MockPeer';
export { MockServer } from './lib/MockServer';
export * from './lib/MockServerAction';
export { CloseFrame } from './lib/CloseFrame';
export { createMockWebSocketStream } from './lib/stream';
export { MockClient } from './lib/MockClient';
export { MockPeer } from './lib/MockPeer';
export { MockServer } from './lib/MockServer';
export * from './lib/MockServerAction';
export { createMockWebSocketStream } from './lib/stream';
//# sourceMappingURL=index.js.map
/// <reference types="node" />
import { EventEmitter } from 'events';
import { Data as WSData } from 'ws';
import { CloseFrame } from './CloseFrame';
import { MockWebSocket } from './MockWebSocket';
export declare abstract class MockPeer extends EventEmitter {
export declare abstract class MockPeer {
protected readonly peerWebSocket: MockWebSocket;
get wasConnectionClosed(): boolean;
disconnect(code?: number, reason?: string): void;
close(code?: number, reason?: string): void;
abort(error: Error): void;
send(message: Buffer | string): Promise<void>;
send(message: WSData): Promise<void>;
receive(): Promise<WSData>;
popLastPeerMessage(): WSData | undefined;
waitForPeerClosure(): Promise<CloseFrame>;
get peerCloseFrame(): CloseFrame | null;
protected convertBinaryType(message: Buffer | ArrayBuffer | readonly Buffer[]): Buffer | ArrayBuffer | readonly Buffer[];
private requireConnectionStillOpen;
}

@@ -1,6 +0,4 @@

import { EventEmitter } from 'events';
import { MockWebSocket } from './MockWebSocket';
export class MockPeer extends EventEmitter {
export class MockPeer {
constructor() {
super(...arguments);
this.peerWebSocket = new MockWebSocket();

@@ -11,3 +9,3 @@ }

}
disconnect(code, reason) {
close(code, reason) {
this.peerWebSocket.emit('close', code, reason);

@@ -20,5 +18,6 @@ }

this.requireConnectionStillOpen();
const messageSerialized = typeof message === 'string' ? message : this.convertBinaryType(message);
return new Promise((resolve) => {
this.peerWebSocket.once('message', resolve);
this.peerWebSocket.emit('message', message);
this.peerWebSocket.emit('message', messageSerialized);
});

@@ -40,2 +39,12 @@ }

}
get peerCloseFrame() {
return this.peerWebSocket.closeFrame;
}
convertBinaryType(message) {
const binaryType = this.peerWebSocket.binaryType;
if (binaryType === 'nodebuffer') {
return Buffer.isBuffer(message) ? message : Buffer.from(message);
}
throw new Error(`Unsupported WebSocket.binaryType (${binaryType}); feel free to open a PR`);
}
requireConnectionStillOpen() {

@@ -42,0 +51,0 @@ if (this.wasConnectionClosed) {

@@ -0,3 +1,8 @@

import WebSocket from 'ws';
import { MockPeer } from './MockPeer';
import { MockServerAction } from './MockServerAction';
export declare class MockServer extends MockPeer {
get mockClientWebSocket(): WebSocket;
runActions(...actions: readonly MockServerAction[]): Promise<void>;
acceptConnection(): Promise<void>;
}
import { MockPeer } from './MockPeer';
export class MockServer extends MockPeer {
get mockClientWebSocket() {
return this.peerWebSocket;
}
async runActions(...actions) {
for (const action of actions) {
await action.run(this);
}
}
async acceptConnection() {
await new Promise((resolve) => {
this.peerWebSocket.once('open', resolve);
this.peerWebSocket.emit('open');
});
}
}
//# sourceMappingURL=MockServer.js.map

@@ -7,2 +7,3 @@ /// <reference types="node" />

export declare class MockWebSocket extends EventEmitter {
binaryType: 'nodebuffer' | 'arraybuffer';
protected ownCloseFrame: CloseFrame | null;

@@ -9,0 +10,0 @@ protected readonly messagesSent: WSData[];

@@ -7,2 +7,4 @@ import { EventEmitter } from 'events';

// tslint:disable-next-line:readonly-keyword
this.binaryType = 'nodebuffer';
// tslint:disable-next-line:readonly-keyword
this.ownCloseFrame = null;

@@ -9,0 +11,0 @@ // tslint:disable-next-line:readonly-array

{
"name": "@relaycorp/ws-mock",
"version": "1.2.0",
"version": "1.3.0",
"author": {

@@ -5,0 +5,0 @@ "email": "no-reply@relaycorp.tech",

@@ -16,9 +16,9 @@ # @relaycorp/ws-mock

```javascript
test('Challenge should be sent as soon as client connects', async () => {
const client = new MockClient(wsServer);
await client.connect();
test('Challenge should be sent as soon as client connects', async () => {
const client = new MockClient(wsServer);
await client.connect();
const challengeSerialized = await client.receive();
expect(challengeSerialized).toBeInstanceOf(ArrayBuffer);
});
const challengeSerialized = await client.receive();
expect(challengeSerialized).toBeInstanceOf(ArrayBuffer);
});
```

@@ -30,16 +30,31 @@

Simply initialise `MockServer` with the `ws` client connection you wish to test. For example:
You basically need to initialise `MockServer` and replace the default export from `ws` with a mock WebSocket. Here's an example with Jest:
```javascript
test('Server message should be played back', async () => {
const mockConnection = new MockConnection();
const mockServer = new MockServer(mockConnection);
const clientUnderTest = new ClientUnderTest(mockConnection);
let mockServer: MockServer;
beforeEach(() => {
mockServer = new MockServer();
});
jest.mock('ws', () => ({
__esModule: true,
default: jest.fn().mockImplementation(() => mockServer.mockClientWebSocket),
}));
clientUnderTest.connectToServer();
mockServer.send('foo');
test('Server message should be played back', async () => {
const clientUnderTest = new ClientUnderTest();
const messageToEcho = 'foo';
const clientResponse = await mockServer.receive();
expect(clientResponse).toEqual('foo');
});
await Promise.all([
clientUnderTest.connectToServerAndInteractWithIt(),
// Configure the mock server to accept the incoming connection and return a message straightaway
mockServer.runActions(
new AcceptConnectionAction(),
new SendMessageAction(messageToEcho),
),
]);
// Check that the client sent the message back to the server:
const clientResponse = await mockServer.receive();
expect(clientResponse).toEqual(messageToEcho);
});
```

@@ -57,3 +72,5 @@

jest.spyOn(WebSocket, 'createWebSocketStream').mockImplementation(createMockWebSocketStream);
jest
.spyOn(WebSocket, 'createWebSocketStream')
.mockImplementation(createMockWebSocketStream);
```

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc