@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.
Files changed (247) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +353 -0
  3. package/dist/cjs/index.js +6811 -0
  4. package/dist/cjs/package.json +1 -0
  5. package/dist/esm/src/config.d.ts +55 -0
  6. package/dist/esm/src/config.d.ts.map +1 -0
  7. package/dist/esm/src/config.js +60 -0
  8. package/dist/esm/src/config.js.map +1 -0
  9. package/dist/esm/src/connection/connection-manager.d.ts +25 -0
  10. package/dist/esm/src/connection/connection-manager.d.ts.map +1 -0
  11. package/dist/esm/src/connection/connection-manager.js +26 -0
  12. package/dist/esm/src/connection/connection-manager.js.map +1 -0
  13. package/dist/esm/src/connection/socket-connection.d.ts +65 -0
  14. package/dist/esm/src/connection/socket-connection.d.ts.map +1 -0
  15. package/dist/esm/src/connection/socket-connection.js +180 -0
  16. package/dist/esm/src/connection/socket-connection.js.map +1 -0
  17. package/dist/esm/src/dwn-error.d.ts +29 -0
  18. package/dist/esm/src/dwn-error.d.ts.map +1 -0
  19. package/dist/esm/src/dwn-error.js +36 -0
  20. package/dist/esm/src/dwn-error.js.map +1 -0
  21. package/dist/esm/src/dwn-server.d.ts +60 -0
  22. package/dist/esm/src/dwn-server.d.ts.map +1 -0
  23. package/dist/esm/src/dwn-server.js +130 -0
  24. package/dist/esm/src/dwn-server.js.map +1 -0
  25. package/dist/esm/src/http-api.d.ts +26 -0
  26. package/dist/esm/src/http-api.d.ts.map +1 -0
  27. package/dist/esm/src/http-api.js +474 -0
  28. package/dist/esm/src/http-api.js.map +1 -0
  29. package/dist/esm/src/index.d.ts +7 -0
  30. package/dist/esm/src/index.d.ts.map +1 -0
  31. package/dist/esm/src/index.js +6 -0
  32. package/dist/esm/src/index.js.map +1 -0
  33. package/dist/esm/src/json-rpc-api.d.ts +3 -0
  34. package/dist/esm/src/json-rpc-api.d.ts.map +1 -0
  35. package/dist/esm/src/json-rpc-api.js +8 -0
  36. package/dist/esm/src/json-rpc-api.js.map +1 -0
  37. package/dist/esm/src/json-rpc-handlers/dwn/index.d.ts +2 -0
  38. package/dist/esm/src/json-rpc-handlers/dwn/index.d.ts.map +1 -0
  39. package/dist/esm/src/json-rpc-handlers/dwn/index.js +2 -0
  40. package/dist/esm/src/json-rpc-handlers/dwn/index.js.map +1 -0
  41. package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts +3 -0
  42. package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts.map +1 -0
  43. package/dist/esm/src/json-rpc-handlers/dwn/process-message.js +73 -0
  44. package/dist/esm/src/json-rpc-handlers/dwn/process-message.js.map +1 -0
  45. package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts +10 -0
  46. package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts.map +1 -0
  47. package/dist/esm/src/json-rpc-handlers/subscription/close.js +39 -0
  48. package/dist/esm/src/json-rpc-handlers/subscription/close.js.map +1 -0
  49. package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts +2 -0
  50. package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts.map +1 -0
  51. package/dist/esm/src/json-rpc-handlers/subscription/index.js +2 -0
  52. package/dist/esm/src/json-rpc-handlers/subscription/index.js.map +1 -0
  53. package/dist/esm/src/json-rpc-socket.d.ts +39 -0
  54. package/dist/esm/src/json-rpc-socket.d.ts.map +1 -0
  55. package/dist/esm/src/json-rpc-socket.js +125 -0
  56. package/dist/esm/src/json-rpc-socket.js.map +1 -0
  57. package/dist/esm/src/lib/http-server-shutdown-handler.d.ts +10 -0
  58. package/dist/esm/src/lib/http-server-shutdown-handler.d.ts.map +1 -0
  59. package/dist/esm/src/lib/http-server-shutdown-handler.js +65 -0
  60. package/dist/esm/src/lib/http-server-shutdown-handler.js.map +1 -0
  61. package/dist/esm/src/lib/json-rpc-router.d.ts +30 -0
  62. package/dist/esm/src/lib/json-rpc-router.d.ts.map +1 -0
  63. package/dist/esm/src/lib/json-rpc-router.js +14 -0
  64. package/dist/esm/src/lib/json-rpc-router.js.map +1 -0
  65. package/dist/esm/src/lib/json-rpc.d.ts +54 -0
  66. package/dist/esm/src/lib/json-rpc.d.ts.map +1 -0
  67. package/dist/esm/src/lib/json-rpc.js +60 -0
  68. package/dist/esm/src/lib/json-rpc.js.map +1 -0
  69. package/dist/esm/src/main.d.ts +3 -0
  70. package/dist/esm/src/main.d.ts.map +1 -0
  71. package/dist/esm/src/main.js +11 -0
  72. package/dist/esm/src/main.js.map +1 -0
  73. package/dist/esm/src/metrics.d.ts +4 -0
  74. package/dist/esm/src/metrics.d.ts.map +1 -0
  75. package/dist/esm/src/metrics.js +13 -0
  76. package/dist/esm/src/metrics.js.map +1 -0
  77. package/dist/esm/src/plugin-loader.d.ts +10 -0
  78. package/dist/esm/src/plugin-loader.d.ts.map +1 -0
  79. package/dist/esm/src/plugin-loader.js +19 -0
  80. package/dist/esm/src/plugin-loader.js.map +1 -0
  81. package/dist/esm/src/process-handlers.d.ts +11 -0
  82. package/dist/esm/src/process-handlers.d.ts.map +1 -0
  83. package/dist/esm/src/process-handlers.js +40 -0
  84. package/dist/esm/src/process-handlers.js.map +1 -0
  85. package/dist/esm/src/registration/proof-of-work-manager.d.ts +93 -0
  86. package/dist/esm/src/registration/proof-of-work-manager.d.ts.map +1 -0
  87. package/dist/esm/src/registration/proof-of-work-manager.js +243 -0
  88. package/dist/esm/src/registration/proof-of-work-manager.js.map +1 -0
  89. package/dist/esm/src/registration/proof-of-work-types.d.ts +8 -0
  90. package/dist/esm/src/registration/proof-of-work-types.d.ts.map +1 -0
  91. package/dist/esm/src/registration/proof-of-work-types.js +2 -0
  92. package/dist/esm/src/registration/proof-of-work-types.js.map +1 -0
  93. package/dist/esm/src/registration/proof-of-work.d.ts +41 -0
  94. package/dist/esm/src/registration/proof-of-work.d.ts.map +1 -0
  95. package/dist/esm/src/registration/proof-of-work.js +69 -0
  96. package/dist/esm/src/registration/proof-of-work.js.map +1 -0
  97. package/dist/esm/src/registration/registration-manager.d.ts +55 -0
  98. package/dist/esm/src/registration/registration-manager.d.ts.map +1 -0
  99. package/dist/esm/src/registration/registration-manager.js +121 -0
  100. package/dist/esm/src/registration/registration-manager.js.map +1 -0
  101. package/dist/esm/src/registration/registration-store.d.ts +24 -0
  102. package/dist/esm/src/registration/registration-store.d.ts.map +1 -0
  103. package/dist/esm/src/registration/registration-store.js +56 -0
  104. package/dist/esm/src/registration/registration-store.js.map +1 -0
  105. package/dist/esm/src/registration/registration-types.d.ts +18 -0
  106. package/dist/esm/src/registration/registration-types.d.ts.map +1 -0
  107. package/dist/esm/src/registration/registration-types.js +2 -0
  108. package/dist/esm/src/registration/registration-types.js.map +1 -0
  109. package/dist/esm/src/storage.d.ts +24 -0
  110. package/dist/esm/src/storage.d.ts.map +1 -0
  111. package/dist/esm/src/storage.js +146 -0
  112. package/dist/esm/src/storage.js.map +1 -0
  113. package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts +39 -0
  114. package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts.map +1 -0
  115. package/dist/esm/src/web5-connect/sql-ttl-cache.js +106 -0
  116. package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -0
  117. package/dist/esm/src/web5-connect/web5-connect-server.d.ts +58 -0
  118. package/dist/esm/src/web5-connect/web5-connect-server.d.ts.map +1 -0
  119. package/dist/esm/src/web5-connect/web5-connect-server.js +77 -0
  120. package/dist/esm/src/web5-connect/web5-connect-server.js.map +1 -0
  121. package/dist/esm/src/ws-api.d.ts +13 -0
  122. package/dist/esm/src/ws-api.d.ts.map +1 -0
  123. package/dist/esm/src/ws-api.js +31 -0
  124. package/dist/esm/src/ws-api.js.map +1 -0
  125. package/dist/esm/tests/common-scenario-validator.d.ts +11 -0
  126. package/dist/esm/tests/common-scenario-validator.d.ts.map +1 -0
  127. package/dist/esm/tests/common-scenario-validator.js +114 -0
  128. package/dist/esm/tests/common-scenario-validator.js.map +1 -0
  129. package/dist/esm/tests/connection/connection-manager.spec.d.ts +2 -0
  130. package/dist/esm/tests/connection/connection-manager.spec.d.ts.map +1 -0
  131. package/dist/esm/tests/connection/connection-manager.spec.js +47 -0
  132. package/dist/esm/tests/connection/connection-manager.spec.js.map +1 -0
  133. package/dist/esm/tests/connection/socket-connection.spec.d.ts +2 -0
  134. package/dist/esm/tests/connection/socket-connection.spec.d.ts.map +1 -0
  135. package/dist/esm/tests/connection/socket-connection.spec.js +125 -0
  136. package/dist/esm/tests/connection/socket-connection.spec.js.map +1 -0
  137. package/dist/esm/tests/cors/http-api.browser.d.ts +2 -0
  138. package/dist/esm/tests/cors/http-api.browser.d.ts.map +1 -0
  139. package/dist/esm/tests/cors/http-api.browser.js +60 -0
  140. package/dist/esm/tests/cors/http-api.browser.js.map +1 -0
  141. package/dist/esm/tests/cors/ping.browser.d.ts +2 -0
  142. package/dist/esm/tests/cors/ping.browser.d.ts.map +1 -0
  143. package/dist/esm/tests/cors/ping.browser.js +7 -0
  144. package/dist/esm/tests/cors/ping.browser.js.map +1 -0
  145. package/dist/esm/tests/dwn-process-message.spec.d.ts +2 -0
  146. package/dist/esm/tests/dwn-process-message.spec.d.ts.map +1 -0
  147. package/dist/esm/tests/dwn-process-message.spec.js +172 -0
  148. package/dist/esm/tests/dwn-process-message.spec.js.map +1 -0
  149. package/dist/esm/tests/dwn-server.spec.d.ts +2 -0
  150. package/dist/esm/tests/dwn-server.spec.d.ts.map +1 -0
  151. package/dist/esm/tests/dwn-server.spec.js +49 -0
  152. package/dist/esm/tests/dwn-server.spec.js.map +1 -0
  153. package/dist/esm/tests/http-api.spec.d.ts +2 -0
  154. package/dist/esm/tests/http-api.spec.d.ts.map +1 -0
  155. package/dist/esm/tests/http-api.spec.js +775 -0
  156. package/dist/esm/tests/http-api.spec.js.map +1 -0
  157. package/dist/esm/tests/json-rpc-socket.spec.d.ts +2 -0
  158. package/dist/esm/tests/json-rpc-socket.spec.d.ts.map +1 -0
  159. package/dist/esm/tests/json-rpc-socket.spec.js +225 -0
  160. package/dist/esm/tests/json-rpc-socket.spec.js.map +1 -0
  161. package/dist/esm/tests/plugins/data-store-sqlite.d.ts +17 -0
  162. package/dist/esm/tests/plugins/data-store-sqlite.d.ts.map +1 -0
  163. package/dist/esm/tests/plugins/data-store-sqlite.js +23 -0
  164. package/dist/esm/tests/plugins/data-store-sqlite.js.map +1 -0
  165. package/dist/esm/tests/plugins/event-log-sqlite.d.ts +17 -0
  166. package/dist/esm/tests/plugins/event-log-sqlite.d.ts.map +1 -0
  167. package/dist/esm/tests/plugins/event-log-sqlite.js +23 -0
  168. package/dist/esm/tests/plugins/event-log-sqlite.js.map +1 -0
  169. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts +17 -0
  170. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts.map +1 -0
  171. package/dist/esm/tests/plugins/event-stream-in-memory.js +21 -0
  172. package/dist/esm/tests/plugins/event-stream-in-memory.js.map +1 -0
  173. package/dist/esm/tests/plugins/message-store-sqlite.d.ts +17 -0
  174. package/dist/esm/tests/plugins/message-store-sqlite.d.ts.map +1 -0
  175. package/dist/esm/tests/plugins/message-store-sqlite.js +23 -0
  176. package/dist/esm/tests/plugins/message-store-sqlite.js.map +1 -0
  177. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts +17 -0
  178. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts.map +1 -0
  179. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js +23 -0
  180. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js.map +1 -0
  181. package/dist/esm/tests/process-handler.spec.d.ts +2 -0
  182. package/dist/esm/tests/process-handler.spec.d.ts.map +1 -0
  183. package/dist/esm/tests/process-handler.spec.js +60 -0
  184. package/dist/esm/tests/process-handler.spec.js.map +1 -0
  185. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts +2 -0
  186. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts.map +1 -0
  187. package/dist/esm/tests/registration/proof-of-work-manager.spec.js +157 -0
  188. package/dist/esm/tests/registration/proof-of-work-manager.spec.js.map +1 -0
  189. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts +2 -0
  190. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts.map +1 -0
  191. package/dist/esm/tests/rpc-subscribe-close.spec.js +81 -0
  192. package/dist/esm/tests/rpc-subscribe-close.spec.js.map +1 -0
  193. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts +2 -0
  194. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts.map +1 -0
  195. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js +73 -0
  196. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js.map +1 -0
  197. package/dist/esm/tests/scenarios/registration.spec.d.ts +2 -0
  198. package/dist/esm/tests/scenarios/registration.spec.d.ts.map +1 -0
  199. package/dist/esm/tests/scenarios/registration.spec.js +507 -0
  200. package/dist/esm/tests/scenarios/registration.spec.js.map +1 -0
  201. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts +2 -0
  202. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts.map +1 -0
  203. package/dist/esm/tests/scenarios/web5-connect.spec.js +137 -0
  204. package/dist/esm/tests/scenarios/web5-connect.spec.js.map +1 -0
  205. package/dist/esm/tests/test-dwn.d.ts +7 -0
  206. package/dist/esm/tests/test-dwn.d.ts.map +1 -0
  207. package/dist/esm/tests/test-dwn.js +34 -0
  208. package/dist/esm/tests/test-dwn.js.map +1 -0
  209. package/dist/esm/tests/utils.d.ts +46 -0
  210. package/dist/esm/tests/utils.d.ts.map +1 -0
  211. package/dist/esm/tests/utils.js +116 -0
  212. package/dist/esm/tests/utils.js.map +1 -0
  213. package/dist/esm/tests/ws-api.spec.d.ts +2 -0
  214. package/dist/esm/tests/ws-api.spec.d.ts.map +1 -0
  215. package/dist/esm/tests/ws-api.spec.js +327 -0
  216. package/dist/esm/tests/ws-api.spec.js.map +1 -0
  217. package/package.json +119 -0
  218. package/src/config.ts +71 -0
  219. package/src/connection/connection-manager.ts +39 -0
  220. package/src/connection/socket-connection.ts +221 -0
  221. package/src/dwn-error.ts +38 -0
  222. package/src/dwn-server.ts +178 -0
  223. package/src/http-api.ts +541 -0
  224. package/src/index.ts +6 -0
  225. package/src/json-rpc-api.ts +11 -0
  226. package/src/json-rpc-handlers/dwn/index.ts +1 -0
  227. package/src/json-rpc-handlers/dwn/process-message.ts +123 -0
  228. package/src/json-rpc-handlers/subscription/close.ts +59 -0
  229. package/src/json-rpc-handlers/subscription/index.ts +1 -0
  230. package/src/json-rpc-socket.ts +155 -0
  231. package/src/lib/http-server-shutdown-handler.ts +79 -0
  232. package/src/lib/json-rpc-router.ts +52 -0
  233. package/src/lib/json-rpc.ts +126 -0
  234. package/src/main.ts +14 -0
  235. package/src/metrics.ts +14 -0
  236. package/src/plugin-loader.ts +17 -0
  237. package/src/process-handlers.ts +65 -0
  238. package/src/registration/proof-of-work-manager.ts +317 -0
  239. package/src/registration/proof-of-work-types.ts +7 -0
  240. package/src/registration/proof-of-work.ts +100 -0
  241. package/src/registration/registration-manager.ts +153 -0
  242. package/src/registration/registration-store.ts +79 -0
  243. package/src/registration/registration-types.ts +18 -0
  244. package/src/storage.ts +213 -0
  245. package/src/web5-connect/sql-ttl-cache.ts +137 -0
  246. package/src/web5-connect/web5-connect-server.ts +122 -0
  247. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-api.browser.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ping.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping.browser.d.ts","sourceRoot":"","sources":["../../../../tests/cors/ping.browser.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { expect } from 'chai';
2
+ describe('cors-test', () => {
3
+ it('always true', () => {
4
+ expect(true).to.true;
5
+ });
6
+ });
7
+ //# sourceMappingURL=ping.browser.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dwn-process-message.spec.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dwn-server.spec.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-api.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-api.spec.d.ts","sourceRoot":"","sources":["../../../tests/http-api.spec.ts"],"names":[],"mappings":""}