mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
change: Move WebSocketAdvertiser to middleware.
This commit is contained in:
parent
49d37dcd6c
commit
fc3942b372
@ -26,12 +26,6 @@
|
||||
"LinkRelMetadataWriter:_headerMap_value": "type"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"@type": "WebSocketMetadataWriter",
|
||||
"WebSocketMetadataWriter:_settings_port": {
|
||||
"@id": "urn:solid-server:default:variable:port"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -28,6 +28,12 @@
|
||||
"HeaderHandler:_headers_value": "Community Solid Server"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"@type": "WebSocketAdvertiser",
|
||||
"WebSocketAdvertiser:_settings_port": {
|
||||
"@id": "urn:solid-server:default:variable:port"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
2
index.ts
2
index.ts
@ -26,7 +26,6 @@ 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';
|
||||
@ -98,6 +97,7 @@ export * from './src/server/WebSocketHandler';
|
||||
// Server/Middleware
|
||||
export * from './src/server/middleware/CorsHandler';
|
||||
export * from './src/server/middleware/HeaderHandler';
|
||||
export * from './src/server/middleware/WebSocketAdvertiser';
|
||||
|
||||
// Storage/Accessors
|
||||
export * from './src/storage/accessors/DataAccessor';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import type { HttpResponse } from '../../../server/HttpResponse';
|
||||
import { addHeader } from '../../../util/HeaderUtil';
|
||||
import { MetadataWriter } from './MetadataWriter';
|
||||
import { addHeader } from '../../util/HeaderUtil';
|
||||
import { HttpHandler } from '../HttpHandler';
|
||||
import type { HttpResponse } from '../HttpResponse';
|
||||
|
||||
interface WebSocketSettings {
|
||||
hostname?: string;
|
||||
@ -9,9 +9,9 @@ interface WebSocketSettings {
|
||||
}
|
||||
|
||||
/**
|
||||
* A {@link MetadataWriter} that advertises a WebSocket through the Updates-Via header.
|
||||
* Handler that advertises a WebSocket through the Updates-Via header.
|
||||
*/
|
||||
export class WebSocketMetadataWriter extends MetadataWriter {
|
||||
export class WebSocketAdvertiser extends HttpHandler {
|
||||
private readonly socketUrl: string;
|
||||
|
||||
public constructor(settings: WebSocketSettings = {}) {
|
@ -2,7 +2,8 @@
|
||||
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
|
||||
"import": [
|
||||
"files-scs:config/presets/http.json",
|
||||
"files-scs:config/presets/middleware.json"
|
||||
"files-scs:config/presets/middleware.json",
|
||||
"files-scs:config/presets/cli-params.json"
|
||||
],
|
||||
"@graph": [
|
||||
{
|
||||
|
@ -22,6 +22,7 @@ describe('An Express server with middleware', (): void => {
|
||||
const factory = await instantiateFromConfig(
|
||||
'urn:solid-server:default:ExpressHttpServerFactory', 'middleware.json', {
|
||||
'urn:solid-server:default:LdpHandler': new SimpleHttpHandler(),
|
||||
'urn:solid-server:default:variable:port': port,
|
||||
},
|
||||
) as ExpressHttpServerFactory;
|
||||
server = factory.startServer(port);
|
||||
|
@ -1,37 +1,37 @@
|
||||
import { createResponse } from 'node-mocks-http';
|
||||
import { WebSocketMetadataWriter } from '../../../../../src/ldp/http/metadata/WebSocketMetadataWriter';
|
||||
import { WebSocketAdvertiser } from '../../../../src/server/middleware/WebSocketAdvertiser';
|
||||
|
||||
describe('A WebSocketMetadataWriter', (): void => {
|
||||
describe('A WebSocketAdvertiser', (): void => {
|
||||
it('writes a default HTTP WebSocket.', async(): Promise<void> => {
|
||||
const writer = new WebSocketMetadataWriter();
|
||||
const writer = new WebSocketAdvertiser();
|
||||
const response = createResponse();
|
||||
await writer.handle({ response } as any);
|
||||
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://localhost' });
|
||||
});
|
||||
|
||||
it('writes an HTTP WebSocket with port 80.', async(): Promise<void> => {
|
||||
const writer = new WebSocketMetadataWriter({ hostname: 'test.example', port: 80, protocol: 'http' });
|
||||
const writer = new WebSocketAdvertiser({ hostname: 'test.example', port: 80, protocol: 'http' });
|
||||
const response = createResponse();
|
||||
await writer.handle({ response } as any);
|
||||
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://test.example' });
|
||||
});
|
||||
|
||||
it('writes an HTTP WebSocket with port 3000.', async(): Promise<void> => {
|
||||
const writer = new WebSocketMetadataWriter({ hostname: 'test.example', port: 3000, protocol: 'http' });
|
||||
const writer = new WebSocketAdvertiser({ hostname: 'test.example', port: 3000, protocol: 'http' });
|
||||
const response = createResponse();
|
||||
await writer.handle({ response } as any);
|
||||
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://test.example:3000' });
|
||||
});
|
||||
|
||||
it('writes an HTTPS WebSocket with port 443.', async(): Promise<void> => {
|
||||
const writer = new WebSocketMetadataWriter({ hostname: 'test.example', port: 443, protocol: 'https' });
|
||||
const writer = new WebSocketAdvertiser({ hostname: 'test.example', port: 443, protocol: 'https' });
|
||||
const response = createResponse();
|
||||
await writer.handle({ response } as any);
|
||||
expect(response.getHeaders()).toEqual({ 'updates-via': 'wss://test.example' });
|
||||
});
|
||||
|
||||
it('rejects an invalid hostname.', (): void => {
|
||||
expect((): any => new WebSocketMetadataWriter({ hostname: 'test.example/invalid' }))
|
||||
expect((): any => new WebSocketAdvertiser({ hostname: 'test.example/invalid' }))
|
||||
.toThrow('Invalid hostname: test.example/invalid');
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user