feat: Export WebSocket classes.

This commit is contained in:
Ruben Verborgh 2020-11-24 12:53:39 +01:00 committed by Joachim Van Herwegen
parent 29b659b55f
commit 4a7ea4ad46
3 changed files with 14 additions and 3 deletions

View File

@ -24,6 +24,7 @@ export * from './src/ldp/http/metadata/MetadataExtractor';
export * from './src/ldp/http/metadata/MetadataParser';
export * from './src/ldp/http/metadata/MetadataWriter';
export * from './src/ldp/http/metadata/SlugParser';
export * from './src/ldp/http/metadata/WebSocketMetadataWriter';
// LDP/HTTP/Response
export * from './src/ldp/http/response/CreatedResponseDescription';
@ -72,6 +73,7 @@ export * from './src/ldp/representation/ResourceIdentifier';
// LDP
export * from './src/ldp/AuthenticatedLdpHandler';
export * from './src/ldp/UnsecureWebSocketsProtocol';
// Logging
export * from './src/logging/LazyLogger';
@ -88,6 +90,8 @@ export * from './src/server/ExpressHttpServerFactory';
export * from './src/server/HttpHandler';
export * from './src/server/HttpRequest';
export * from './src/server/HttpResponse';
export * from './src/server/WebSocketServerFactory';
export * from './src/server/WebSocketHandler';
// Storage/Accessors
export * from './src/storage/accessors/DataAccessor';
@ -122,6 +126,7 @@ export * from './src/storage/Conditions';
export * from './src/storage/DataAccessorBasedStore';
export * from './src/storage/FileIdentifierMapper';
export * from './src/storage/LockingResourceStore';
export * from './src/storage/MonitoringStore';
export * from './src/storage/PassthroughStore';
export * from './src/storage/PatchingStore';
export * from './src/storage/RepresentationConvertingStore';

View File

@ -2,15 +2,21 @@ import type { HttpResponse } from '../../../server/HttpResponse';
import { addHeader } from '../../../util/HeaderUtil';
import { MetadataWriter } from './MetadataWriter';
interface WebSocketSettings {
hostname?: string;
port?: number;
protocol?: string;
}
/**
* A {@link MetadataWriter} that advertises a WebSocket through the Updates-Via header.
*/
export class WebSocketMetadataWriter extends MetadataWriter {
private readonly socketUrl: string;
public constructor({ hostname = 'localhost', port = 80, protocol = 'ws:' }:
{ hostname?: string; port?: number; protocol?: string }) {
public constructor(settings: WebSocketSettings = {}) {
super();
const { hostname = 'localhost', port = 80, protocol = 'ws:' } = settings;
const secure = /^(?:https|wss)/u.test(protocol);
const socketUrl = new URL(`${secure ? 'wss' : 'ws'}://${hostname}:${port}/`);
if (socketUrl.hostname !== hostname) {

View File

@ -3,7 +3,7 @@ import { WebSocketMetadataWriter } from '../../../../../src/ldp/http/metadata/We
describe('A WebSocketMetadataWriter', (): void => {
it('writes a default HTTP WebSocket.', async(): Promise<void> => {
const writer = new WebSocketMetadataWriter({});
const writer = new WebSocketMetadataWriter();
const response = createResponse();
await writer.handle({ response } as any);
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://localhost' });