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

View File

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

View File

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