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"
|
"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"
|
"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/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';
|
||||||
@ -98,6 +97,7 @@ export * from './src/server/WebSocketHandler';
|
|||||||
// Server/Middleware
|
// Server/Middleware
|
||||||
export * from './src/server/middleware/CorsHandler';
|
export * from './src/server/middleware/CorsHandler';
|
||||||
export * from './src/server/middleware/HeaderHandler';
|
export * from './src/server/middleware/HeaderHandler';
|
||||||
|
export * from './src/server/middleware/WebSocketAdvertiser';
|
||||||
|
|
||||||
// Storage/Accessors
|
// Storage/Accessors
|
||||||
export * from './src/storage/accessors/DataAccessor';
|
export * from './src/storage/accessors/DataAccessor';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import type { HttpResponse } from '../../../server/HttpResponse';
|
import { addHeader } from '../../util/HeaderUtil';
|
||||||
import { addHeader } from '../../../util/HeaderUtil';
|
import { HttpHandler } from '../HttpHandler';
|
||||||
import { MetadataWriter } from './MetadataWriter';
|
import type { HttpResponse } from '../HttpResponse';
|
||||||
|
|
||||||
interface WebSocketSettings {
|
interface WebSocketSettings {
|
||||||
hostname?: string;
|
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;
|
private readonly socketUrl: string;
|
||||||
|
|
||||||
public constructor(settings: WebSocketSettings = {}) {
|
public constructor(settings: WebSocketSettings = {}) {
|
@ -2,7 +2,8 @@
|
|||||||
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
|
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
|
||||||
"import": [
|
"import": [
|
||||||
"files-scs:config/presets/http.json",
|
"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": [
|
"@graph": [
|
||||||
{
|
{
|
||||||
|
@ -22,6 +22,7 @@ describe('An Express server with middleware', (): void => {
|
|||||||
const factory = await instantiateFromConfig(
|
const factory = await instantiateFromConfig(
|
||||||
'urn:solid-server:default:ExpressHttpServerFactory', 'middleware.json', {
|
'urn:solid-server:default:ExpressHttpServerFactory', 'middleware.json', {
|
||||||
'urn:solid-server:default:LdpHandler': new SimpleHttpHandler(),
|
'urn:solid-server:default:LdpHandler': new SimpleHttpHandler(),
|
||||||
|
'urn:solid-server:default:variable:port': port,
|
||||||
},
|
},
|
||||||
) as ExpressHttpServerFactory;
|
) as ExpressHttpServerFactory;
|
||||||
server = factory.startServer(port);
|
server = factory.startServer(port);
|
||||||
|
@ -1,37 +1,37 @@
|
|||||||
import { createResponse } from 'node-mocks-http';
|
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> => {
|
it('writes a default HTTP WebSocket.', async(): Promise<void> => {
|
||||||
const writer = new WebSocketMetadataWriter();
|
const writer = new WebSocketAdvertiser();
|
||||||
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' });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('writes an HTTP WebSocket with port 80.', async(): Promise<void> => {
|
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();
|
const response = createResponse();
|
||||||
await writer.handle({ response } as any);
|
await writer.handle({ response } as any);
|
||||||
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://test.example' });
|
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://test.example' });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('writes an HTTP WebSocket with port 3000.', async(): Promise<void> => {
|
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();
|
const response = createResponse();
|
||||||
await writer.handle({ response } as any);
|
await writer.handle({ response } as any);
|
||||||
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://test.example:3000' });
|
expect(response.getHeaders()).toEqual({ 'updates-via': 'ws://test.example:3000' });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('writes an HTTPS WebSocket with port 443.', async(): Promise<void> => {
|
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();
|
const response = createResponse();
|
||||||
await writer.handle({ response } as any);
|
await writer.handle({ response } as any);
|
||||||
expect(response.getHeaders()).toEqual({ 'updates-via': 'wss://test.example' });
|
expect(response.getHeaders()).toEqual({ 'updates-via': 'wss://test.example' });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('rejects an invalid hostname.', (): void => {
|
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');
|
.toThrow('Invalid hostname: test.example/invalid');
|
||||||
});
|
});
|
||||||
});
|
});
|
Loading…
x
Reference in New Issue
Block a user