@enbox/dwn-server 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +353 -0
- package/dist/cjs/index.js +6811 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/src/config.d.ts +55 -0
- package/dist/esm/src/config.d.ts.map +1 -0
- package/dist/esm/src/config.js +60 -0
- package/dist/esm/src/config.js.map +1 -0
- package/dist/esm/src/connection/connection-manager.d.ts +25 -0
- package/dist/esm/src/connection/connection-manager.d.ts.map +1 -0
- package/dist/esm/src/connection/connection-manager.js +26 -0
- package/dist/esm/src/connection/connection-manager.js.map +1 -0
- package/dist/esm/src/connection/socket-connection.d.ts +65 -0
- package/dist/esm/src/connection/socket-connection.d.ts.map +1 -0
- package/dist/esm/src/connection/socket-connection.js +180 -0
- package/dist/esm/src/connection/socket-connection.js.map +1 -0
- package/dist/esm/src/dwn-error.d.ts +29 -0
- package/dist/esm/src/dwn-error.d.ts.map +1 -0
- package/dist/esm/src/dwn-error.js +36 -0
- package/dist/esm/src/dwn-error.js.map +1 -0
- package/dist/esm/src/dwn-server.d.ts +60 -0
- package/dist/esm/src/dwn-server.d.ts.map +1 -0
- package/dist/esm/src/dwn-server.js +130 -0
- package/dist/esm/src/dwn-server.js.map +1 -0
- package/dist/esm/src/http-api.d.ts +26 -0
- package/dist/esm/src/http-api.d.ts.map +1 -0
- package/dist/esm/src/http-api.js +474 -0
- package/dist/esm/src/http-api.js.map +1 -0
- package/dist/esm/src/index.d.ts +7 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +6 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/json-rpc-api.d.ts +3 -0
- package/dist/esm/src/json-rpc-api.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-api.js +8 -0
- package/dist/esm/src/json-rpc-api.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.d.ts +2 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.js +2 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts +3 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.js +73 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts +10 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.js +39 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts +2 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.js +2 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.js.map +1 -0
- package/dist/esm/src/json-rpc-socket.d.ts +39 -0
- package/dist/esm/src/json-rpc-socket.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-socket.js +125 -0
- package/dist/esm/src/json-rpc-socket.js.map +1 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.d.ts +10 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.d.ts.map +1 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.js +65 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.js.map +1 -0
- package/dist/esm/src/lib/json-rpc-router.d.ts +30 -0
- package/dist/esm/src/lib/json-rpc-router.d.ts.map +1 -0
- package/dist/esm/src/lib/json-rpc-router.js +14 -0
- package/dist/esm/src/lib/json-rpc-router.js.map +1 -0
- package/dist/esm/src/lib/json-rpc.d.ts +54 -0
- package/dist/esm/src/lib/json-rpc.d.ts.map +1 -0
- package/dist/esm/src/lib/json-rpc.js +60 -0
- package/dist/esm/src/lib/json-rpc.js.map +1 -0
- package/dist/esm/src/main.d.ts +3 -0
- package/dist/esm/src/main.d.ts.map +1 -0
- package/dist/esm/src/main.js +11 -0
- package/dist/esm/src/main.js.map +1 -0
- package/dist/esm/src/metrics.d.ts +4 -0
- package/dist/esm/src/metrics.d.ts.map +1 -0
- package/dist/esm/src/metrics.js +13 -0
- package/dist/esm/src/metrics.js.map +1 -0
- package/dist/esm/src/plugin-loader.d.ts +10 -0
- package/dist/esm/src/plugin-loader.d.ts.map +1 -0
- package/dist/esm/src/plugin-loader.js +19 -0
- package/dist/esm/src/plugin-loader.js.map +1 -0
- package/dist/esm/src/process-handlers.d.ts +11 -0
- package/dist/esm/src/process-handlers.d.ts.map +1 -0
- package/dist/esm/src/process-handlers.js +40 -0
- package/dist/esm/src/process-handlers.js.map +1 -0
- package/dist/esm/src/registration/proof-of-work-manager.d.ts +93 -0
- package/dist/esm/src/registration/proof-of-work-manager.d.ts.map +1 -0
- package/dist/esm/src/registration/proof-of-work-manager.js +243 -0
- package/dist/esm/src/registration/proof-of-work-manager.js.map +1 -0
- package/dist/esm/src/registration/proof-of-work-types.d.ts +8 -0
- package/dist/esm/src/registration/proof-of-work-types.d.ts.map +1 -0
- package/dist/esm/src/registration/proof-of-work-types.js +2 -0
- package/dist/esm/src/registration/proof-of-work-types.js.map +1 -0
- package/dist/esm/src/registration/proof-of-work.d.ts +41 -0
- package/dist/esm/src/registration/proof-of-work.d.ts.map +1 -0
- package/dist/esm/src/registration/proof-of-work.js +69 -0
- package/dist/esm/src/registration/proof-of-work.js.map +1 -0
- package/dist/esm/src/registration/registration-manager.d.ts +55 -0
- package/dist/esm/src/registration/registration-manager.d.ts.map +1 -0
- package/dist/esm/src/registration/registration-manager.js +121 -0
- package/dist/esm/src/registration/registration-manager.js.map +1 -0
- package/dist/esm/src/registration/registration-store.d.ts +24 -0
- package/dist/esm/src/registration/registration-store.d.ts.map +1 -0
- package/dist/esm/src/registration/registration-store.js +56 -0
- package/dist/esm/src/registration/registration-store.js.map +1 -0
- package/dist/esm/src/registration/registration-types.d.ts +18 -0
- package/dist/esm/src/registration/registration-types.d.ts.map +1 -0
- package/dist/esm/src/registration/registration-types.js +2 -0
- package/dist/esm/src/registration/registration-types.js.map +1 -0
- package/dist/esm/src/storage.d.ts +24 -0
- package/dist/esm/src/storage.d.ts.map +1 -0
- package/dist/esm/src/storage.js +146 -0
- package/dist/esm/src/storage.js.map +1 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts +39 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts.map +1 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.js +106 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -0
- package/dist/esm/src/web5-connect/web5-connect-server.d.ts +58 -0
- package/dist/esm/src/web5-connect/web5-connect-server.d.ts.map +1 -0
- package/dist/esm/src/web5-connect/web5-connect-server.js +77 -0
- package/dist/esm/src/web5-connect/web5-connect-server.js.map +1 -0
- package/dist/esm/src/ws-api.d.ts +13 -0
- package/dist/esm/src/ws-api.d.ts.map +1 -0
- package/dist/esm/src/ws-api.js +31 -0
- package/dist/esm/src/ws-api.js.map +1 -0
- package/dist/esm/tests/common-scenario-validator.d.ts +11 -0
- package/dist/esm/tests/common-scenario-validator.d.ts.map +1 -0
- package/dist/esm/tests/common-scenario-validator.js +114 -0
- package/dist/esm/tests/common-scenario-validator.js.map +1 -0
- package/dist/esm/tests/connection/connection-manager.spec.d.ts +2 -0
- package/dist/esm/tests/connection/connection-manager.spec.d.ts.map +1 -0
- package/dist/esm/tests/connection/connection-manager.spec.js +47 -0
- package/dist/esm/tests/connection/connection-manager.spec.js.map +1 -0
- package/dist/esm/tests/connection/socket-connection.spec.d.ts +2 -0
- package/dist/esm/tests/connection/socket-connection.spec.d.ts.map +1 -0
- package/dist/esm/tests/connection/socket-connection.spec.js +125 -0
- package/dist/esm/tests/connection/socket-connection.spec.js.map +1 -0
- package/dist/esm/tests/cors/http-api.browser.d.ts +2 -0
- package/dist/esm/tests/cors/http-api.browser.d.ts.map +1 -0
- package/dist/esm/tests/cors/http-api.browser.js +60 -0
- package/dist/esm/tests/cors/http-api.browser.js.map +1 -0
- package/dist/esm/tests/cors/ping.browser.d.ts +2 -0
- package/dist/esm/tests/cors/ping.browser.d.ts.map +1 -0
- package/dist/esm/tests/cors/ping.browser.js +7 -0
- package/dist/esm/tests/cors/ping.browser.js.map +1 -0
- package/dist/esm/tests/dwn-process-message.spec.d.ts +2 -0
- package/dist/esm/tests/dwn-process-message.spec.d.ts.map +1 -0
- package/dist/esm/tests/dwn-process-message.spec.js +172 -0
- package/dist/esm/tests/dwn-process-message.spec.js.map +1 -0
- package/dist/esm/tests/dwn-server.spec.d.ts +2 -0
- package/dist/esm/tests/dwn-server.spec.d.ts.map +1 -0
- package/dist/esm/tests/dwn-server.spec.js +49 -0
- package/dist/esm/tests/dwn-server.spec.js.map +1 -0
- package/dist/esm/tests/http-api.spec.d.ts +2 -0
- package/dist/esm/tests/http-api.spec.d.ts.map +1 -0
- package/dist/esm/tests/http-api.spec.js +775 -0
- package/dist/esm/tests/http-api.spec.js.map +1 -0
- package/dist/esm/tests/json-rpc-socket.spec.d.ts +2 -0
- package/dist/esm/tests/json-rpc-socket.spec.d.ts.map +1 -0
- package/dist/esm/tests/json-rpc-socket.spec.js +225 -0
- package/dist/esm/tests/json-rpc-socket.spec.js.map +1 -0
- package/dist/esm/tests/plugins/data-store-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/data-store-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/data-store-sqlite.js +23 -0
- package/dist/esm/tests/plugins/data-store-sqlite.js.map +1 -0
- package/dist/esm/tests/plugins/event-log-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/event-log-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/event-log-sqlite.js +23 -0
- package/dist/esm/tests/plugins/event-log-sqlite.js.map +1 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.d.ts +17 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.d.ts.map +1 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.js +21 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.js.map +1 -0
- package/dist/esm/tests/plugins/message-store-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/message-store-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/message-store-sqlite.js +23 -0
- package/dist/esm/tests/plugins/message-store-sqlite.js.map +1 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.js +23 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.js.map +1 -0
- package/dist/esm/tests/process-handler.spec.d.ts +2 -0
- package/dist/esm/tests/process-handler.spec.d.ts.map +1 -0
- package/dist/esm/tests/process-handler.spec.js +60 -0
- package/dist/esm/tests/process-handler.spec.js.map +1 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts +2 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts.map +1 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.js +157 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.js.map +1 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.d.ts +2 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.d.ts.map +1 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.js +81 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts +2 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts.map +1 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js +73 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/registration.spec.d.ts +2 -0
- package/dist/esm/tests/scenarios/registration.spec.d.ts.map +1 -0
- package/dist/esm/tests/scenarios/registration.spec.js +507 -0
- package/dist/esm/tests/scenarios/registration.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.d.ts +2 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.d.ts.map +1 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.js +137 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.js.map +1 -0
- package/dist/esm/tests/test-dwn.d.ts +7 -0
- package/dist/esm/tests/test-dwn.d.ts.map +1 -0
- package/dist/esm/tests/test-dwn.js +34 -0
- package/dist/esm/tests/test-dwn.js.map +1 -0
- package/dist/esm/tests/utils.d.ts +46 -0
- package/dist/esm/tests/utils.d.ts.map +1 -0
- package/dist/esm/tests/utils.js +116 -0
- package/dist/esm/tests/utils.js.map +1 -0
- package/dist/esm/tests/ws-api.spec.d.ts +2 -0
- package/dist/esm/tests/ws-api.spec.d.ts.map +1 -0
- package/dist/esm/tests/ws-api.spec.js +327 -0
- package/dist/esm/tests/ws-api.spec.js.map +1 -0
- package/package.json +119 -0
- package/src/config.ts +71 -0
- package/src/connection/connection-manager.ts +39 -0
- package/src/connection/socket-connection.ts +221 -0
- package/src/dwn-error.ts +38 -0
- package/src/dwn-server.ts +178 -0
- package/src/http-api.ts +541 -0
- package/src/index.ts +6 -0
- package/src/json-rpc-api.ts +11 -0
- package/src/json-rpc-handlers/dwn/index.ts +1 -0
- package/src/json-rpc-handlers/dwn/process-message.ts +123 -0
- package/src/json-rpc-handlers/subscription/close.ts +59 -0
- package/src/json-rpc-handlers/subscription/index.ts +1 -0
- package/src/json-rpc-socket.ts +155 -0
- package/src/lib/http-server-shutdown-handler.ts +79 -0
- package/src/lib/json-rpc-router.ts +52 -0
- package/src/lib/json-rpc.ts +126 -0
- package/src/main.ts +14 -0
- package/src/metrics.ts +14 -0
- package/src/plugin-loader.ts +17 -0
- package/src/process-handlers.ts +65 -0
- package/src/registration/proof-of-work-manager.ts +317 -0
- package/src/registration/proof-of-work-types.ts +7 -0
- package/src/registration/proof-of-work.ts +100 -0
- package/src/registration/registration-manager.ts +153 -0
- package/src/registration/registration-store.ts +79 -0
- package/src/registration/registration-types.ts +18 -0
- package/src/storage.ts +213 -0
- package/src/web5-connect/sql-ttl-cache.ts +137 -0
- package/src/web5-connect/web5-connect-server.ts +122 -0
- package/src/ws-api.ts +45 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import chaiAsPromised from 'chai-as-promised';
|
|
2
|
+
import chai, { expect } from 'chai';
|
|
3
|
+
import sinon from 'sinon';
|
|
4
|
+
import { WebSocket } from 'ws';
|
|
5
|
+
import { SocketConnection } from '../../src/connection/socket-connection.js';
|
|
6
|
+
import { getTestDwn } from '../test-dwn.js';
|
|
7
|
+
import log from 'loglevel';
|
|
8
|
+
chai.use(chaiAsPromised);
|
|
9
|
+
describe('SocketConnection', () => {
|
|
10
|
+
let dwn;
|
|
11
|
+
before(async () => {
|
|
12
|
+
dwn = await getTestDwn();
|
|
13
|
+
});
|
|
14
|
+
after(async () => {
|
|
15
|
+
await dwn.close();
|
|
16
|
+
sinon.restore();
|
|
17
|
+
});
|
|
18
|
+
it('should assign socket handlers', async () => {
|
|
19
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
20
|
+
const connection = new SocketConnection(socket, dwn);
|
|
21
|
+
expect(socket.on.callCount).to.equal(4);
|
|
22
|
+
expect(socket.on.args.map(arg => arg[0])).to.have.members(['message', 'close', 'error', 'pong']);
|
|
23
|
+
await connection.close();
|
|
24
|
+
});
|
|
25
|
+
it('should add a subscription to the subscription manager map', async () => {
|
|
26
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
27
|
+
const connection = new SocketConnection(socket, dwn);
|
|
28
|
+
const subscriptionRequest = {
|
|
29
|
+
id: 'id',
|
|
30
|
+
method: 'method',
|
|
31
|
+
params: { param1: 'param' },
|
|
32
|
+
close: async () => { }
|
|
33
|
+
};
|
|
34
|
+
await connection.addSubscription(subscriptionRequest);
|
|
35
|
+
expect(connection.subscriptions.size).to.equal(1);
|
|
36
|
+
await connection.close();
|
|
37
|
+
expect(connection.subscriptions.size).to.equal(0);
|
|
38
|
+
});
|
|
39
|
+
it('should reject a subscription with an Id of an existing subscription', async () => {
|
|
40
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
41
|
+
const connection = new SocketConnection(socket, dwn);
|
|
42
|
+
const id = 'some-id';
|
|
43
|
+
const subscriptionRequest = {
|
|
44
|
+
id,
|
|
45
|
+
method: 'method',
|
|
46
|
+
params: { param1: 'param' },
|
|
47
|
+
close: async () => { }
|
|
48
|
+
};
|
|
49
|
+
await connection.addSubscription(subscriptionRequest);
|
|
50
|
+
expect(connection.subscriptions.size).to.equal(1);
|
|
51
|
+
const addDuplicatePromise = connection.addSubscription(subscriptionRequest);
|
|
52
|
+
await expect(addDuplicatePromise).to.eventually.be.rejectedWith(`the subscription with id ${id} already exists`);
|
|
53
|
+
expect(connection.subscriptions.size).to.equal(1);
|
|
54
|
+
await connection.close();
|
|
55
|
+
expect(connection.subscriptions.size).to.equal(0);
|
|
56
|
+
});
|
|
57
|
+
it('should close a subscription and remove it from the connection manager map', async () => {
|
|
58
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
59
|
+
const connection = new SocketConnection(socket, dwn);
|
|
60
|
+
const id = 'some-id';
|
|
61
|
+
const subscriptionRequest = {
|
|
62
|
+
id,
|
|
63
|
+
method: 'method',
|
|
64
|
+
params: { param1: 'param' },
|
|
65
|
+
close: async () => { }
|
|
66
|
+
};
|
|
67
|
+
await connection.addSubscription(subscriptionRequest);
|
|
68
|
+
expect(connection.subscriptions.size).to.equal(1);
|
|
69
|
+
await connection.closeSubscription(id);
|
|
70
|
+
expect(connection.subscriptions.size).to.equal(0);
|
|
71
|
+
const closeAgainPromise = connection.closeSubscription(id);
|
|
72
|
+
await expect(closeAgainPromise).to.eventually.be.rejectedWith(`the subscription with id ${id} was not found`);
|
|
73
|
+
await connection.close();
|
|
74
|
+
});
|
|
75
|
+
it('hasSubscription returns whether a subscription with the id already exists', async () => {
|
|
76
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
77
|
+
const connection = new SocketConnection(socket, dwn);
|
|
78
|
+
const subscriptionRequest = {
|
|
79
|
+
id: 'id',
|
|
80
|
+
method: 'method',
|
|
81
|
+
params: { param1: 'param' },
|
|
82
|
+
close: async () => { }
|
|
83
|
+
};
|
|
84
|
+
await connection.addSubscription(subscriptionRequest);
|
|
85
|
+
expect(connection.subscriptions.size).to.equal(1);
|
|
86
|
+
expect(connection.hasSubscription(subscriptionRequest.id)).to.be.true;
|
|
87
|
+
expect(connection.hasSubscription('does-not-exist')).to.be.false;
|
|
88
|
+
await connection.closeSubscription(subscriptionRequest.id);
|
|
89
|
+
expect(connection.hasSubscription(subscriptionRequest.id)).to.be.false;
|
|
90
|
+
await connection.close();
|
|
91
|
+
});
|
|
92
|
+
it('should close if pong is not triggered between heartbeat intervals', async () => {
|
|
93
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
94
|
+
const clock = sinon.useFakeTimers();
|
|
95
|
+
const connection = new SocketConnection(socket, dwn);
|
|
96
|
+
const closeSpy = sinon.spy(connection, 'close');
|
|
97
|
+
clock.tick(60_100); // interval has to run twice
|
|
98
|
+
clock.restore();
|
|
99
|
+
expect(closeSpy.callCount).to.equal(1);
|
|
100
|
+
});
|
|
101
|
+
it('should not close if pong is called within the heartbeat interval', async () => {
|
|
102
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
103
|
+
const clock = sinon.useFakeTimers();
|
|
104
|
+
const connection = new SocketConnection(socket, dwn);
|
|
105
|
+
const closeSpy = sinon.spy(connection, 'close');
|
|
106
|
+
connection.pong(); // trigger a pong
|
|
107
|
+
clock.tick(30_100); // first interval
|
|
108
|
+
connection.pong(); // trigger a pong
|
|
109
|
+
clock.tick(30_100); // second interval
|
|
110
|
+
expect(closeSpy.callCount).to.equal(0);
|
|
111
|
+
clock.tick(30_100); // another interval without a ping
|
|
112
|
+
clock.restore();
|
|
113
|
+
expect(closeSpy.callCount).to.equal(1);
|
|
114
|
+
});
|
|
115
|
+
it('logs an error and closes connection if error is triggered', async () => {
|
|
116
|
+
const socket = sinon.createStubInstance(WebSocket);
|
|
117
|
+
const connection = new SocketConnection(socket, dwn);
|
|
118
|
+
const logSpy = sinon.stub(log, 'error');
|
|
119
|
+
const closeSpy = sinon.spy(connection, 'close');
|
|
120
|
+
connection.error(new Error('some error'));
|
|
121
|
+
expect(logSpy.callCount).to.equal(1);
|
|
122
|
+
expect(closeSpy.callCount).to.equal(1);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=socket-connection.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-connection.spec.js","sourceRoot":"","sources":["../../../../tests/connection/socket-connection.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api.browser.d.ts","sourceRoot":"","sources":["../../../../tests/cors/http-api.browser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { RecordsRead, RecordsWrite, Jws, TestDataGenerator, } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import { expect } from 'chai';
|
|
3
|
+
describe('http-api', () => {
|
|
4
|
+
it('sends dwn-response header', async function () {
|
|
5
|
+
// Some crypto functions used in key generation and signing,
|
|
6
|
+
// work only under secure context.
|
|
7
|
+
// Test code runs on secure context of http://dwn.localhost
|
|
8
|
+
// by cors setup.
|
|
9
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
10
|
+
const encoder = new TextEncoder();
|
|
11
|
+
const data = encoder.encode('Hello, World!');
|
|
12
|
+
const recordsWrite = (await RecordsWrite.create({
|
|
13
|
+
data,
|
|
14
|
+
dataFormat: 'text/plalin',
|
|
15
|
+
published: true,
|
|
16
|
+
signer: Jws.createSigner(alice),
|
|
17
|
+
})).toJSON();
|
|
18
|
+
const recordsRead = (await RecordsRead.create({
|
|
19
|
+
filter: {
|
|
20
|
+
recordId: recordsWrite.recordId,
|
|
21
|
+
},
|
|
22
|
+
signer: Jws.createSigner(alice),
|
|
23
|
+
})).toJSON();
|
|
24
|
+
// Records Write
|
|
25
|
+
const recordsWriteResponse = await fetch('http://dwn.localhost', {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
headers: {
|
|
28
|
+
'dwn-request': JSON.stringify({
|
|
29
|
+
method: 'dwn.processMessage',
|
|
30
|
+
params: {
|
|
31
|
+
target: alice.did,
|
|
32
|
+
message: recordsWrite,
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
body: data,
|
|
37
|
+
});
|
|
38
|
+
expect(recordsWriteResponse.status).to.equal(200);
|
|
39
|
+
const recordsWriteResponseJson = await recordsWriteResponse.json();
|
|
40
|
+
expect(recordsWriteResponseJson.result?.reply?.status?.code).to.equal(202);
|
|
41
|
+
// Records Read
|
|
42
|
+
const recordsReadResponse = await fetch('http://dwn.localhost', {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
headers: {
|
|
45
|
+
'dwn-request': JSON.stringify({
|
|
46
|
+
method: 'dwn.processMessage',
|
|
47
|
+
params: {
|
|
48
|
+
target: alice.did,
|
|
49
|
+
message: recordsRead,
|
|
50
|
+
},
|
|
51
|
+
}),
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
expect(recordsReadResponse.status).to.equal(200);
|
|
55
|
+
const recordsReadResponseJson = JSON.parse(recordsReadResponse.headers.get('dwn-response'));
|
|
56
|
+
expect(recordsReadResponseJson.result?.reply?.status?.code).to.equal(200);
|
|
57
|
+
expect(await recordsReadResponse.text()).to.equal('Hello, World!');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=http-api.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api.browser.js","sourceRoot":"","sources":["../../../../tests/cors/http-api.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,GAAG,EACH,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,2BAA2B,EAAE,KAAK;QACnC,4DAA4D;QAC5D,kCAAkC;QAClC,2DAA2D;QAC3D,iBAAiB;QACjB,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,CACnB,MAAM,YAAY,CAAC,MAAM,CAAC;YACxB,IAAI;YACJ,UAAU,EAAE,aAAa;YACzB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;SAChC,CAAC,CACH,CAAC,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,CAClB,MAAM,WAAW,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE;gBACN,QAAQ,EAAE,YAAY,CAAC,QAAQ;aAChC;YACD,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;SAChC,CAAC,CACH,CAAC,MAAM,EAAE,CAAC;QAEX,gBAAgB;QAChB,MAAM,oBAAoB,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC5B,MAAM,EAAE,oBAAoB;oBAC5B,MAAM,EAAE;wBACN,MAAM,EAAE,KAAK,CAAC,GAAG;wBACjB,OAAO,EAAE,YAAY;qBACtB;iBACF,CAAC;aACH;YACD,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,wBAAwB,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE3E,eAAe;QACf,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE;YAC9D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC5B,MAAM,EAAE,oBAAoB;oBAC5B,MAAM,EAAE;wBACN,MAAM,EAAE,KAAK,CAAC,GAAG;wBACjB,OAAO,EAAE,WAAW;qBACrB;iBACF,CAAC;aACH;SACF,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CACxC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAChD,CAAC;QACF,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping.browser.d.ts","sourceRoot":"","sources":["../../../../tests/cors/ping.browser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping.browser.js","sourceRoot":"","sources":["../../../../tests/cors/ping.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dwn-process-message.spec.d.ts","sourceRoot":"","sources":["../../../tests/dwn-process-message.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import sinon from 'sinon';
|
|
3
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
4
|
+
import { handleDwnProcessMessage } from '../src/json-rpc-handlers/dwn/process-message.js';
|
|
5
|
+
import { JsonRpcErrorCodes, createJsonRpcRequest } from '../src/lib/json-rpc.js';
|
|
6
|
+
import { getTestDwn } from './test-dwn.js';
|
|
7
|
+
import { createRecordsWriteMessage } from './utils.js';
|
|
8
|
+
import { DataStream, Jws, Message, MessagesRead, RecordsRead, TestDataGenerator } from '@enbox/dwn-sdk-js';
|
|
9
|
+
describe('handleDwnProcessMessage', function () {
|
|
10
|
+
it('returns a JSON RPC Success Response when DWN returns a 2XX status code', async function () {
|
|
11
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
12
|
+
// Construct a well-formed DWN Request that will be successfully processed.
|
|
13
|
+
const { recordsWrite, dataStream } = await createRecordsWriteMessage(alice);
|
|
14
|
+
const requestId = uuidv4();
|
|
15
|
+
const dwnRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {
|
|
16
|
+
message: recordsWrite.toJSON(),
|
|
17
|
+
target: alice.did,
|
|
18
|
+
});
|
|
19
|
+
const dwn = await getTestDwn();
|
|
20
|
+
const context = { dwn, transport: 'http', dataStream };
|
|
21
|
+
const { jsonRpcResponse } = await handleDwnProcessMessage(dwnRequest, context);
|
|
22
|
+
expect(jsonRpcResponse.error).to.not.exist;
|
|
23
|
+
const { reply } = jsonRpcResponse.result;
|
|
24
|
+
expect(reply.status.code).to.equal(202);
|
|
25
|
+
expect(reply.status.detail).to.equal('Accepted');
|
|
26
|
+
await dwn.close();
|
|
27
|
+
});
|
|
28
|
+
it('returns a JSON RPC Success Response when DWN returns a 4XX/5XX status code', async function () {
|
|
29
|
+
// Construct a DWN Request that is missing the descriptor `method` property to ensure
|
|
30
|
+
// that `dwn.processMessage()` will return an error status.
|
|
31
|
+
const requestId = uuidv4();
|
|
32
|
+
const dwnRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {
|
|
33
|
+
message: {
|
|
34
|
+
descriptor: { interface: 'Records' },
|
|
35
|
+
},
|
|
36
|
+
target: 'did:key:abc1234',
|
|
37
|
+
});
|
|
38
|
+
const dwn = await getTestDwn();
|
|
39
|
+
const context = { dwn, transport: 'http' };
|
|
40
|
+
const { jsonRpcResponse } = await handleDwnProcessMessage(dwnRequest, context);
|
|
41
|
+
expect(jsonRpcResponse.error).to.not.exist;
|
|
42
|
+
const { reply } = jsonRpcResponse.result;
|
|
43
|
+
expect(reply.status.code).to.equal(400);
|
|
44
|
+
expect(reply.status.detail).to.exist;
|
|
45
|
+
expect(reply.data).to.be.undefined;
|
|
46
|
+
expect(reply.entries).to.be.undefined;
|
|
47
|
+
await dwn.close();
|
|
48
|
+
});
|
|
49
|
+
it('should extract data stream from DWN response and return it as a separate property in the JSON RPC response for RecordsRead', async function () {
|
|
50
|
+
// scenario: Write a record with some data, and then read the record to get the data back
|
|
51
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
52
|
+
// Write a record to later read
|
|
53
|
+
const { recordsWrite, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
54
|
+
const requestId = uuidv4();
|
|
55
|
+
const dwnRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {
|
|
56
|
+
message: recordsWrite.toJSON(),
|
|
57
|
+
target: alice.did,
|
|
58
|
+
});
|
|
59
|
+
const dwn = await getTestDwn();
|
|
60
|
+
const context = { dwn, transport: 'http', dataStream };
|
|
61
|
+
const { jsonRpcResponse } = await handleDwnProcessMessage(dwnRequest, context);
|
|
62
|
+
expect(jsonRpcResponse.error).to.not.exist;
|
|
63
|
+
const { reply } = jsonRpcResponse.result;
|
|
64
|
+
expect(reply.status.code).to.equal(202);
|
|
65
|
+
// Read the record to get the data back
|
|
66
|
+
const readRequestId = uuidv4();
|
|
67
|
+
const recordsRead = await RecordsRead.create({
|
|
68
|
+
signer: Jws.createSigner(alice),
|
|
69
|
+
filter: { recordId: recordsWrite.message.recordId },
|
|
70
|
+
});
|
|
71
|
+
const readRequest = createJsonRpcRequest(readRequestId, 'dwn.processMessage', {
|
|
72
|
+
message: recordsRead.toJSON(),
|
|
73
|
+
target: alice.did,
|
|
74
|
+
});
|
|
75
|
+
const { jsonRpcResponse: recordsReadResponse, dataStream: responseDataStream } = await handleDwnProcessMessage(readRequest, { dwn, transport: 'http' });
|
|
76
|
+
expect(recordsReadResponse.error).to.not.exist;
|
|
77
|
+
const { reply: readReply } = recordsReadResponse.result;
|
|
78
|
+
expect(readReply.status.code).to.equal(200);
|
|
79
|
+
expect(responseDataStream).to.not.be.undefined;
|
|
80
|
+
// Compare the data stream bytes to ensure they are the same
|
|
81
|
+
const responseDataBytes = await DataStream.toBytes(responseDataStream);
|
|
82
|
+
expect(responseDataBytes).to.deep.equal(dataBytes);
|
|
83
|
+
await dwn.close();
|
|
84
|
+
});
|
|
85
|
+
it('should extract data stream from DWN response and return it as a separate property in the JSON RPC response for MessagesRead', async function () {
|
|
86
|
+
// scenario: Write a record with some data, and then read the message to get the data back
|
|
87
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
88
|
+
// Create a record to read
|
|
89
|
+
const { recordsWrite, dataStream, dataBytes } = await TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
90
|
+
const requestId = uuidv4();
|
|
91
|
+
const dwnRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {
|
|
92
|
+
message: recordsWrite.toJSON(),
|
|
93
|
+
target: alice.did,
|
|
94
|
+
});
|
|
95
|
+
const dwn = await getTestDwn();
|
|
96
|
+
const context = { dwn, transport: 'http', dataStream };
|
|
97
|
+
const { jsonRpcResponse } = await handleDwnProcessMessage(dwnRequest, context);
|
|
98
|
+
expect(jsonRpcResponse.error).to.not.exist;
|
|
99
|
+
const { reply } = jsonRpcResponse.result;
|
|
100
|
+
expect(reply.status.code).to.equal(202);
|
|
101
|
+
const messageCid = await Message.getCid(recordsWrite.message);
|
|
102
|
+
// read the message
|
|
103
|
+
const readRequestId = uuidv4();
|
|
104
|
+
const messageRead = await MessagesRead.create({
|
|
105
|
+
signer: Jws.createSigner(alice),
|
|
106
|
+
messageCid,
|
|
107
|
+
});
|
|
108
|
+
const readRequest = createJsonRpcRequest(readRequestId, 'dwn.processMessage', {
|
|
109
|
+
message: messageRead.toJSON(),
|
|
110
|
+
target: alice.did,
|
|
111
|
+
});
|
|
112
|
+
const { jsonRpcResponse: recordsReadResponse, dataStream: responseDataStream } = await handleDwnProcessMessage(readRequest, { dwn, transport: 'http' });
|
|
113
|
+
expect(recordsReadResponse.error).to.not.exist;
|
|
114
|
+
const { reply: readReply } = recordsReadResponse.result;
|
|
115
|
+
expect(readReply.status.code).to.equal(200);
|
|
116
|
+
expect(responseDataStream).to.not.be.undefined;
|
|
117
|
+
// Compare the data stream bytes to ensure they are the same
|
|
118
|
+
const responseDataBytes = await DataStream.toBytes(responseDataStream);
|
|
119
|
+
expect(responseDataBytes).to.deep.equal(dataBytes);
|
|
120
|
+
await dwn.close();
|
|
121
|
+
});
|
|
122
|
+
it('should fail if no subscriptionRequest context exists for a `Subscribe` message', async function () {
|
|
123
|
+
const requestId = uuidv4();
|
|
124
|
+
const dwnRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {
|
|
125
|
+
message: {
|
|
126
|
+
descriptor: { interface: 'Records', method: 'Subscribe' },
|
|
127
|
+
},
|
|
128
|
+
target: 'did:key:abc1234',
|
|
129
|
+
});
|
|
130
|
+
const dwn = await getTestDwn();
|
|
131
|
+
const context = { dwn, transport: 'ws' };
|
|
132
|
+
const { jsonRpcResponse } = await handleDwnProcessMessage(dwnRequest, context);
|
|
133
|
+
expect(jsonRpcResponse.error).to.exist;
|
|
134
|
+
expect(jsonRpcResponse.error.code).to.equal(JsonRpcErrorCodes.InvalidRequest);
|
|
135
|
+
expect(jsonRpcResponse.error.message).to.equal('subscribe methods must contain a subscriptionRequest context');
|
|
136
|
+
await dwn.close();
|
|
137
|
+
});
|
|
138
|
+
it('should fail on http requests for a `Subscribe` message', async function () {
|
|
139
|
+
const requestId = uuidv4();
|
|
140
|
+
const dwnRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {
|
|
141
|
+
message: {
|
|
142
|
+
descriptor: { interface: 'Records', method: 'Subscribe' },
|
|
143
|
+
},
|
|
144
|
+
target: 'did:key:abc1234',
|
|
145
|
+
});
|
|
146
|
+
const dwn = await getTestDwn();
|
|
147
|
+
const context = { dwn, transport: 'http', subscriptionRequest: { id: 'test', subscriptionHandler: () => { } } };
|
|
148
|
+
const { jsonRpcResponse } = await handleDwnProcessMessage(dwnRequest, context);
|
|
149
|
+
expect(jsonRpcResponse.error).to.exist;
|
|
150
|
+
expect(jsonRpcResponse.error.code).to.equal(JsonRpcErrorCodes.InvalidParams);
|
|
151
|
+
expect(jsonRpcResponse.error.message).to.equal('subscriptions are not supported via http');
|
|
152
|
+
await dwn.close();
|
|
153
|
+
});
|
|
154
|
+
it('should return a JsonRpc Internal Error for an unexpected thrown error within the handler', async function () {
|
|
155
|
+
const requestId = uuidv4();
|
|
156
|
+
const dwnRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {
|
|
157
|
+
message: {
|
|
158
|
+
descriptor: { interface: 'Records' },
|
|
159
|
+
},
|
|
160
|
+
target: 'did:key:abc1234',
|
|
161
|
+
});
|
|
162
|
+
const dwn = await getTestDwn();
|
|
163
|
+
sinon.stub(dwn, 'processMessage').throws(new Error('unexpected error'));
|
|
164
|
+
const context = { dwn, transport: 'http' };
|
|
165
|
+
const { jsonRpcResponse } = await handleDwnProcessMessage(dwnRequest, context);
|
|
166
|
+
expect(jsonRpcResponse.error).to.exist;
|
|
167
|
+
expect(jsonRpcResponse.error.code).to.equal(JsonRpcErrorCodes.InternalError);
|
|
168
|
+
expect(jsonRpcResponse.error.message).to.equal('unexpected error');
|
|
169
|
+
await dwn.close();
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=dwn-process-message.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dwn-process-message.spec.js","sourceRoot":"","sources":["../../../tests/dwn-process-message.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dwn-server.spec.d.ts","sourceRoot":"","sources":["../../../tests/dwn-server.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { config } from '../src/config.js';
|
|
3
|
+
import { DwnServer } from '../src/dwn-server.js';
|
|
4
|
+
import { getTestDwn } from './test-dwn.js';
|
|
5
|
+
describe('DwnServer', function () {
|
|
6
|
+
const dwnServerConfig = { ...config };
|
|
7
|
+
let dwn;
|
|
8
|
+
it('starts with injected dwn', async function () {
|
|
9
|
+
dwn = await getTestDwn();
|
|
10
|
+
const dwnServer = new DwnServer({ config: dwnServerConfig, dwn });
|
|
11
|
+
await dwnServer.start();
|
|
12
|
+
await dwnServer.stop();
|
|
13
|
+
expect(dwnServer.httpServer.listening).to.be.false;
|
|
14
|
+
});
|
|
15
|
+
describe('webSocketSupport config', function () {
|
|
16
|
+
it('should not return a websocket server if disabled', async function () {
|
|
17
|
+
dwn = await getTestDwn({ withEvents: true });
|
|
18
|
+
const withoutSocketServer = new DwnServer({
|
|
19
|
+
dwn,
|
|
20
|
+
config: {
|
|
21
|
+
...dwnServerConfig,
|
|
22
|
+
webSocketSupport: false,
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
await withoutSocketServer.start();
|
|
26
|
+
expect(withoutSocketServer.httpServer.listening).to.be.true;
|
|
27
|
+
expect(withoutSocketServer.wsServer).to.be.undefined;
|
|
28
|
+
await withoutSocketServer.stop();
|
|
29
|
+
console.log('server Stop');
|
|
30
|
+
expect(withoutSocketServer.httpServer.listening).to.be.false;
|
|
31
|
+
});
|
|
32
|
+
it('should return a websocket server if enabled', async function () {
|
|
33
|
+
dwn = await getTestDwn({ withEvents: true });
|
|
34
|
+
const withSocketServer = new DwnServer({
|
|
35
|
+
dwn,
|
|
36
|
+
config: {
|
|
37
|
+
...dwnServerConfig,
|
|
38
|
+
webSocketSupport: true,
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
await withSocketServer.start();
|
|
42
|
+
expect(withSocketServer.wsServer).to.not.be.undefined;
|
|
43
|
+
await withSocketServer.stop();
|
|
44
|
+
console.log('server Stop');
|
|
45
|
+
expect(withSocketServer.httpServer.listening).to.be.false;
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=dwn-server.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dwn-server.spec.js","sourceRoot":"","sources":["../../../tests/dwn-server.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,QAAQ,CAAC,WAAW,EAAE;IACpB,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IACtC,IAAI,GAAQ,CAAC;IAEb,EAAE,CAAC,0BAA0B,EAAE,KAAK;QAClC,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QAEzB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE;QAClC,EAAE,CAAC,kDAAkD,EAAE,KAAK;YAC1D,GAAG,GAAG,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,mBAAmB,GAAG,IAAI,SAAS,CAAC;gBACxC,GAAG;gBACH,MAAM,EAAE;oBACN,GAAG,eAAe;oBAClB,gBAAgB,EAAE,KAAK;iBACxB;aACF,CAAC,CAAC;YAEH,MAAM,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC5D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAErD,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK;YACrD,GAAG,GAAG,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,IAAI,SAAS,CAAC;gBACrC,GAAG;gBACH,MAAM,EAAE;oBACN,GAAG,eAAe;oBAClB,gBAAgB,EAAE,IAAI;iBACvB;aACF,CAAC,CAAC;YAEH,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YAEtD,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api.spec.d.ts","sourceRoot":"","sources":["../../../tests/http-api.spec.ts"],"names":[],"mappings":""}
|