msw 2.5.1 → 2.6.0

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 (190) hide show
  1. package/lib/browser/index.d.mts +7 -6
  2. package/lib/browser/index.d.ts +7 -6
  3. package/lib/browser/index.js +29 -1
  4. package/lib/browser/index.js.map +1 -1
  5. package/lib/browser/index.mjs +29 -1
  6. package/lib/browser/index.mjs.map +1 -1
  7. package/lib/core/{GraphQLHandler-ClMB0BOy.d.mts → GraphQLHandler-Doool6Q_.d.mts} +1 -1
  8. package/lib/core/{GraphQLHandler-D6mLMXGZ.d.ts → GraphQLHandler-udzgBRPf.d.ts} +1 -1
  9. package/lib/core/{HttpResponse-vn-Pb4Bi.d.mts → HttpResponse-BLGmJolh.d.mts} +1 -1
  10. package/lib/core/{HttpResponse-DaYkf3ml.d.ts → HttpResponse-Cgbkdkje.d.ts} +1 -1
  11. package/lib/core/HttpResponse.d.mts +1 -1
  12. package/lib/core/HttpResponse.d.ts +1 -1
  13. package/lib/core/SetupApi.d.mts +15 -12
  14. package/lib/core/SetupApi.d.ts +15 -12
  15. package/lib/core/SetupApi.js +3 -1
  16. package/lib/core/SetupApi.js.map +1 -1
  17. package/lib/core/SetupApi.mjs +3 -1
  18. package/lib/core/SetupApi.mjs.map +1 -1
  19. package/lib/core/getResponse.d.mts +1 -1
  20. package/lib/core/getResponse.d.ts +1 -1
  21. package/lib/core/graphql.d.mts +2 -2
  22. package/lib/core/graphql.d.ts +2 -2
  23. package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
  24. package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
  25. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  26. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  27. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  28. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  29. package/lib/core/handlers/WebSocketHandler.d.mts +33 -0
  30. package/lib/core/handlers/WebSocketHandler.d.ts +33 -0
  31. package/lib/core/handlers/WebSocketHandler.js +120 -0
  32. package/lib/core/handlers/WebSocketHandler.js.map +1 -0
  33. package/lib/core/handlers/WebSocketHandler.mjs +102 -0
  34. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -0
  35. package/lib/core/http.d.mts +1 -1
  36. package/lib/core/http.d.ts +1 -1
  37. package/lib/core/index.d.mts +5 -2
  38. package/lib/core/index.d.ts +5 -2
  39. package/lib/core/index.js +5 -1
  40. package/lib/core/index.js.map +1 -1
  41. package/lib/core/index.mjs +7 -1
  42. package/lib/core/index.mjs.map +1 -1
  43. package/lib/core/passthrough.d.mts +1 -1
  44. package/lib/core/passthrough.d.ts +1 -1
  45. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  46. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  47. package/lib/core/utils/executeHandlers.d.mts +1 -1
  48. package/lib/core/utils/executeHandlers.d.ts +1 -1
  49. package/lib/core/utils/executeHandlers.js +4 -0
  50. package/lib/core/utils/executeHandlers.js.map +1 -1
  51. package/lib/core/utils/executeHandlers.mjs +6 -0
  52. package/lib/core/utils/executeHandlers.mjs.map +1 -1
  53. package/lib/core/utils/handleRequest.d.mts +2 -2
  54. package/lib/core/utils/handleRequest.d.ts +2 -2
  55. package/lib/core/utils/handleRequest.js.map +1 -1
  56. package/lib/core/utils/handleRequest.mjs.map +1 -1
  57. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
  58. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  59. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  60. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  61. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  62. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  63. package/lib/core/utils/logging/getTimestamp.d.mts +4 -1
  64. package/lib/core/utils/logging/getTimestamp.d.ts +4 -1
  65. package/lib/core/utils/logging/getTimestamp.js +6 -2
  66. package/lib/core/utils/logging/getTimestamp.js.map +1 -1
  67. package/lib/core/utils/logging/getTimestamp.mjs +6 -2
  68. package/lib/core/utils/logging/getTimestamp.mjs.map +1 -1
  69. package/lib/core/utils/matching/matchRequestUrl.d.mts +2 -1
  70. package/lib/core/utils/matching/matchRequestUrl.d.ts +2 -1
  71. package/lib/core/utils/matching/matchRequestUrl.js +4 -0
  72. package/lib/core/utils/matching/matchRequestUrl.js.map +1 -1
  73. package/lib/core/utils/matching/matchRequestUrl.mjs +4 -0
  74. package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -1
  75. package/lib/core/ws/WebSocketClientManager.d.mts +63 -0
  76. package/lib/core/ws/WebSocketClientManager.d.ts +63 -0
  77. package/lib/core/ws/WebSocketClientManager.js +149 -0
  78. package/lib/core/ws/WebSocketClientManager.js.map +1 -0
  79. package/lib/core/ws/WebSocketClientManager.mjs +129 -0
  80. package/lib/core/ws/WebSocketClientManager.mjs.map +1 -0
  81. package/lib/core/ws/WebSocketClientStore.d.mts +13 -0
  82. package/lib/core/ws/WebSocketClientStore.d.ts +13 -0
  83. package/lib/core/ws/WebSocketClientStore.js +26 -0
  84. package/lib/core/ws/WebSocketClientStore.js.map +1 -0
  85. package/lib/core/ws/WebSocketClientStore.mjs +6 -0
  86. package/lib/core/ws/WebSocketClientStore.mjs.map +1 -0
  87. package/lib/core/ws/WebSocketIndexedDBClientStore.d.mts +15 -0
  88. package/lib/core/ws/WebSocketIndexedDBClientStore.d.ts +15 -0
  89. package/lib/core/ws/WebSocketIndexedDBClientStore.js +130 -0
  90. package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -0
  91. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs +110 -0
  92. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -0
  93. package/lib/core/ws/WebSocketMemoryClientStore.d.mts +13 -0
  94. package/lib/core/ws/WebSocketMemoryClientStore.d.ts +13 -0
  95. package/lib/core/ws/WebSocketMemoryClientStore.js +41 -0
  96. package/lib/core/ws/WebSocketMemoryClientStore.js.map +1 -0
  97. package/lib/core/ws/WebSocketMemoryClientStore.mjs +21 -0
  98. package/lib/core/ws/WebSocketMemoryClientStore.mjs.map +1 -0
  99. package/lib/core/ws/handleWebSocketEvent.d.mts +19 -0
  100. package/lib/core/ws/handleWebSocketEvent.d.ts +19 -0
  101. package/lib/core/ws/handleWebSocketEvent.js +73 -0
  102. package/lib/core/ws/handleWebSocketEvent.js.map +1 -0
  103. package/lib/core/ws/handleWebSocketEvent.mjs +55 -0
  104. package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -0
  105. package/lib/core/ws/utils/attachWebSocketLogger.d.mts +12 -0
  106. package/lib/core/ws/utils/attachWebSocketLogger.d.ts +12 -0
  107. package/lib/core/ws/utils/attachWebSocketLogger.js +198 -0
  108. package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -0
  109. package/lib/core/ws/utils/attachWebSocketLogger.mjs +178 -0
  110. package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -0
  111. package/lib/core/ws/utils/getMessageLength.d.mts +11 -0
  112. package/lib/core/ws/utils/getMessageLength.d.ts +11 -0
  113. package/lib/core/ws/utils/getMessageLength.js +33 -0
  114. package/lib/core/ws/utils/getMessageLength.js.map +1 -0
  115. package/lib/core/ws/utils/getMessageLength.mjs +13 -0
  116. package/lib/core/ws/utils/getMessageLength.mjs.map +1 -0
  117. package/lib/core/ws/utils/getPublicData.d.mts +5 -0
  118. package/lib/core/ws/utils/getPublicData.d.ts +5 -0
  119. package/lib/core/ws/utils/getPublicData.js +36 -0
  120. package/lib/core/ws/utils/getPublicData.js.map +1 -0
  121. package/lib/core/ws/utils/getPublicData.mjs +16 -0
  122. package/lib/core/ws/utils/getPublicData.mjs.map +1 -0
  123. package/lib/core/ws/utils/truncateMessage.d.mts +3 -0
  124. package/lib/core/ws/utils/truncateMessage.d.ts +3 -0
  125. package/lib/core/ws/utils/truncateMessage.js +31 -0
  126. package/lib/core/ws/utils/truncateMessage.js.map +1 -0
  127. package/lib/core/ws/utils/truncateMessage.mjs +11 -0
  128. package/lib/core/ws/utils/truncateMessage.mjs.map +1 -0
  129. package/lib/core/ws/webSocketInterceptor.d.mts +5 -0
  130. package/lib/core/ws/webSocketInterceptor.d.ts +5 -0
  131. package/lib/core/ws/webSocketInterceptor.js +26 -0
  132. package/lib/core/ws/webSocketInterceptor.js.map +1 -0
  133. package/lib/core/ws/webSocketInterceptor.mjs +6 -0
  134. package/lib/core/ws/webSocketInterceptor.mjs.map +1 -0
  135. package/lib/core/ws.d.mts +75 -0
  136. package/lib/core/ws.d.ts +75 -0
  137. package/lib/core/ws.js +71 -0
  138. package/lib/core/ws.js.map +1 -0
  139. package/lib/core/ws.mjs +54 -0
  140. package/lib/core/ws.mjs.map +1 -0
  141. package/lib/iife/index.js +1413 -85
  142. package/lib/iife/index.js.map +1 -1
  143. package/lib/mockServiceWorker.js +1 -1
  144. package/lib/native/index.d.mts +6 -5
  145. package/lib/native/index.d.ts +6 -5
  146. package/lib/native/index.js +22 -4
  147. package/lib/native/index.js.map +1 -1
  148. package/lib/native/index.mjs +22 -4
  149. package/lib/native/index.mjs.map +1 -1
  150. package/lib/node/index.d.mts +8 -7
  151. package/lib/node/index.d.ts +8 -7
  152. package/lib/node/index.js +22 -4
  153. package/lib/node/index.js.map +1 -1
  154. package/lib/node/index.mjs +22 -4
  155. package/lib/node/index.mjs.map +1 -1
  156. package/package.json +10 -1
  157. package/src/browser/setupWorker/glossary.ts +10 -10
  158. package/src/browser/setupWorker/setupWorker.ts +32 -3
  159. package/src/browser/setupWorker/start/createRequestListener.ts +7 -1
  160. package/src/browser/setupWorker/start/createStartHandler.ts +5 -0
  161. package/src/browser/setupWorker/stop/createStop.ts +6 -0
  162. package/src/core/SetupApi.ts +28 -20
  163. package/src/core/handlers/WebSocketHandler.ts +142 -0
  164. package/src/core/index.ts +11 -1
  165. package/src/core/utils/executeHandlers.ts +6 -2
  166. package/src/core/utils/handleRequest.ts +1 -1
  167. package/src/core/utils/logging/getTimestamp.test.ts +20 -6
  168. package/src/core/utils/logging/getTimestamp.ts +11 -6
  169. package/src/core/utils/matching/matchRequestUrl.test.ts +44 -0
  170. package/src/core/utils/matching/matchRequestUrl.ts +4 -0
  171. package/src/core/ws/WebSocketClientManager.test.ts +164 -0
  172. package/src/core/ws/WebSocketClientManager.ts +211 -0
  173. package/src/core/ws/WebSocketClientStore.ts +14 -0
  174. package/src/core/ws/WebSocketIndexedDBClientStore.ts +145 -0
  175. package/src/core/ws/WebSocketMemoryClientStore.ts +27 -0
  176. package/src/core/ws/handleWebSocketEvent.ts +82 -0
  177. package/src/core/ws/utils/attachWebSocketLogger.ts +259 -0
  178. package/src/core/ws/utils/getMessageLength.test.ts +16 -0
  179. package/src/core/ws/utils/getMessageLength.ts +19 -0
  180. package/src/core/ws/utils/getPublicData.test.ts +38 -0
  181. package/src/core/ws/utils/getPublicData.ts +17 -0
  182. package/src/core/ws/utils/truncateMessage.test.ts +12 -0
  183. package/src/core/ws/utils/truncateMessage.ts +9 -0
  184. package/src/core/ws/webSocketInterceptor.ts +3 -0
  185. package/src/core/ws.test.ts +23 -0
  186. package/src/core/ws.ts +166 -0
  187. package/src/node/SetupServerApi.ts +8 -7
  188. package/src/node/SetupServerCommonApi.ts +29 -5
  189. package/src/node/glossary.ts +5 -7
  190. package/src/node/setupServer.ts +2 -1
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var WebSocketIndexedDBClientStore_exports = {};
20
+ __export(WebSocketIndexedDBClientStore_exports, {
21
+ WebSocketIndexedDBClientStore: () => WebSocketIndexedDBClientStore
22
+ });
23
+ module.exports = __toCommonJS(WebSocketIndexedDBClientStore_exports);
24
+ var import_deferred_promise = require("@open-draft/deferred-promise");
25
+ const DB_NAME = "msw-websocket-clients";
26
+ const DB_STORE_NAME = "clients";
27
+ class WebSocketIndexedDBClientStore {
28
+ db;
29
+ constructor() {
30
+ this.db = this.createDatabase();
31
+ }
32
+ async add(client) {
33
+ const promise = new import_deferred_promise.DeferredPromise();
34
+ const store = await this.getStore();
35
+ const request = store.put({
36
+ id: client.id,
37
+ url: client.url.href
38
+ });
39
+ request.onsuccess = () => {
40
+ promise.resolve();
41
+ };
42
+ request.onerror = () => {
43
+ console.error(request.error);
44
+ promise.reject(
45
+ new Error(
46
+ `Failed to add WebSocket client "${client.id}". There is likely an additional output above.`
47
+ )
48
+ );
49
+ };
50
+ return promise;
51
+ }
52
+ async getAll() {
53
+ const promise = new import_deferred_promise.DeferredPromise();
54
+ const store = await this.getStore();
55
+ const request = store.getAll();
56
+ request.onsuccess = () => {
57
+ promise.resolve(request.result);
58
+ };
59
+ request.onerror = () => {
60
+ console.log(request.error);
61
+ promise.reject(
62
+ new Error(
63
+ `Failed to get all WebSocket clients. There is likely an additional output above.`
64
+ )
65
+ );
66
+ };
67
+ return promise;
68
+ }
69
+ async deleteMany(clientIds) {
70
+ const promise = new import_deferred_promise.DeferredPromise();
71
+ const store = await this.getStore();
72
+ for (const clientId of clientIds) {
73
+ store.delete(clientId);
74
+ }
75
+ store.transaction.oncomplete = () => {
76
+ promise.resolve();
77
+ };
78
+ store.transaction.onerror = () => {
79
+ console.error(store.transaction.error);
80
+ promise.reject(
81
+ new Error(
82
+ `Failed to delete WebSocket clients [${clientIds.join(", ")}]. There is likely an additional output above.`
83
+ )
84
+ );
85
+ };
86
+ return promise;
87
+ }
88
+ async createDatabase() {
89
+ const promise = new import_deferred_promise.DeferredPromise();
90
+ const request = indexedDB.open(DB_NAME, 1);
91
+ request.onsuccess = ({ currentTarget }) => {
92
+ const db = Reflect.get(currentTarget, "result");
93
+ if (db.objectStoreNames.contains(DB_STORE_NAME)) {
94
+ return promise.resolve(db);
95
+ }
96
+ };
97
+ request.onupgradeneeded = async ({ currentTarget }) => {
98
+ const db = Reflect.get(currentTarget, "result");
99
+ if (db.objectStoreNames.contains(DB_STORE_NAME)) {
100
+ return;
101
+ }
102
+ const store = db.createObjectStore(DB_STORE_NAME, { keyPath: "id" });
103
+ store.transaction.oncomplete = () => {
104
+ promise.resolve(db);
105
+ };
106
+ store.transaction.onerror = () => {
107
+ console.error(store.transaction.error);
108
+ promise.reject(
109
+ new Error(
110
+ "Failed to create WebSocket client store. There is likely an additional output above."
111
+ )
112
+ );
113
+ };
114
+ };
115
+ request.onerror = () => {
116
+ console.error(request.error);
117
+ promise.reject(
118
+ new Error(
119
+ "Failed to open an IndexedDB database. There is likely an additional output above."
120
+ )
121
+ );
122
+ };
123
+ return promise;
124
+ }
125
+ async getStore() {
126
+ const db = await this.db;
127
+ return db.transaction(DB_STORE_NAME, "readwrite").objectStore(DB_STORE_NAME);
128
+ }
129
+ }
130
+ //# sourceMappingURL=WebSocketIndexedDBClientStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/ws/WebSocketIndexedDBClientStore.ts"],"sourcesContent":["import { DeferredPromise } from '@open-draft/deferred-promise'\nimport { WebSocketClientConnectionProtocol } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport {\n type SerializedWebSocketClient,\n WebSocketClientStore,\n} from './WebSocketClientStore'\n\nconst DB_NAME = 'msw-websocket-clients'\nconst DB_STORE_NAME = 'clients'\n\nexport class WebSocketIndexedDBClientStore implements WebSocketClientStore {\n private db: Promise<IDBDatabase>\n\n constructor() {\n this.db = this.createDatabase()\n }\n\n public async add(client: WebSocketClientConnectionProtocol): Promise<void> {\n const promise = new DeferredPromise<void>()\n const store = await this.getStore()\n\n /**\n * @note Use `.put()` instead of `.add()` to allow setting clients\n * that already exist in the database. This can happen if a single page\n * has multiple event handlers. Each handler will receive the \"connection\"\n * event in parallel, and try to set that WebSocket client in the database.\n */\n const request = store.put({\n id: client.id,\n url: client.url.href,\n } satisfies SerializedWebSocketClient)\n\n request.onsuccess = () => {\n promise.resolve()\n }\n request.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(request.error)\n promise.reject(\n new Error(\n `Failed to add WebSocket client \"${client.id}\". There is likely an additional output above.`,\n ),\n )\n }\n\n return promise\n }\n\n public async getAll(): Promise<Array<SerializedWebSocketClient>> {\n const promise = new DeferredPromise<Array<SerializedWebSocketClient>>()\n const store = await this.getStore()\n const request = store.getAll() as IDBRequest<\n Array<SerializedWebSocketClient>\n >\n\n request.onsuccess = () => {\n promise.resolve(request.result)\n }\n request.onerror = () => {\n // eslint-disable-next-line no-console\n console.log(request.error)\n promise.reject(\n new Error(\n `Failed to get all WebSocket clients. There is likely an additional output above.`,\n ),\n )\n }\n\n return promise\n }\n\n public async deleteMany(clientIds: Array<string>): Promise<void> {\n const promise = new DeferredPromise<void>()\n const store = await this.getStore()\n\n for (const clientId of clientIds) {\n store.delete(clientId)\n }\n\n store.transaction.oncomplete = () => {\n promise.resolve()\n }\n store.transaction.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(store.transaction.error)\n promise.reject(\n new Error(\n `Failed to delete WebSocket clients [${clientIds.join(', ')}]. There is likely an additional output above.`,\n ),\n )\n }\n\n return promise\n }\n\n private async createDatabase(): Promise<IDBDatabase> {\n const promise = new DeferredPromise<IDBDatabase>()\n const request = indexedDB.open(DB_NAME, 1)\n\n request.onsuccess = ({ currentTarget }) => {\n const db = Reflect.get(currentTarget!, 'result') as IDBDatabase\n\n if (db.objectStoreNames.contains(DB_STORE_NAME)) {\n return promise.resolve(db)\n }\n }\n\n request.onupgradeneeded = async ({ currentTarget }) => {\n const db = Reflect.get(currentTarget!, 'result') as IDBDatabase\n if (db.objectStoreNames.contains(DB_STORE_NAME)) {\n return\n }\n\n const store = db.createObjectStore(DB_STORE_NAME, { keyPath: 'id' })\n store.transaction.oncomplete = () => {\n promise.resolve(db)\n }\n store.transaction.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(store.transaction.error)\n promise.reject(\n new Error(\n 'Failed to create WebSocket client store. There is likely an additional output above.',\n ),\n )\n }\n }\n request.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(request.error)\n promise.reject(\n new Error(\n 'Failed to open an IndexedDB database. There is likely an additional output above.',\n ),\n )\n }\n\n return promise\n }\n\n private async getStore(): Promise<IDBObjectStore> {\n const db = await this.db\n return db.transaction(DB_STORE_NAME, 'readwrite').objectStore(DB_STORE_NAME)\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,110 @@
1
+ import { DeferredPromise } from "@open-draft/deferred-promise";
2
+ const DB_NAME = "msw-websocket-clients";
3
+ const DB_STORE_NAME = "clients";
4
+ class WebSocketIndexedDBClientStore {
5
+ db;
6
+ constructor() {
7
+ this.db = this.createDatabase();
8
+ }
9
+ async add(client) {
10
+ const promise = new DeferredPromise();
11
+ const store = await this.getStore();
12
+ const request = store.put({
13
+ id: client.id,
14
+ url: client.url.href
15
+ });
16
+ request.onsuccess = () => {
17
+ promise.resolve();
18
+ };
19
+ request.onerror = () => {
20
+ console.error(request.error);
21
+ promise.reject(
22
+ new Error(
23
+ `Failed to add WebSocket client "${client.id}". There is likely an additional output above.`
24
+ )
25
+ );
26
+ };
27
+ return promise;
28
+ }
29
+ async getAll() {
30
+ const promise = new DeferredPromise();
31
+ const store = await this.getStore();
32
+ const request = store.getAll();
33
+ request.onsuccess = () => {
34
+ promise.resolve(request.result);
35
+ };
36
+ request.onerror = () => {
37
+ console.log(request.error);
38
+ promise.reject(
39
+ new Error(
40
+ `Failed to get all WebSocket clients. There is likely an additional output above.`
41
+ )
42
+ );
43
+ };
44
+ return promise;
45
+ }
46
+ async deleteMany(clientIds) {
47
+ const promise = new DeferredPromise();
48
+ const store = await this.getStore();
49
+ for (const clientId of clientIds) {
50
+ store.delete(clientId);
51
+ }
52
+ store.transaction.oncomplete = () => {
53
+ promise.resolve();
54
+ };
55
+ store.transaction.onerror = () => {
56
+ console.error(store.transaction.error);
57
+ promise.reject(
58
+ new Error(
59
+ `Failed to delete WebSocket clients [${clientIds.join(", ")}]. There is likely an additional output above.`
60
+ )
61
+ );
62
+ };
63
+ return promise;
64
+ }
65
+ async createDatabase() {
66
+ const promise = new DeferredPromise();
67
+ const request = indexedDB.open(DB_NAME, 1);
68
+ request.onsuccess = ({ currentTarget }) => {
69
+ const db = Reflect.get(currentTarget, "result");
70
+ if (db.objectStoreNames.contains(DB_STORE_NAME)) {
71
+ return promise.resolve(db);
72
+ }
73
+ };
74
+ request.onupgradeneeded = async ({ currentTarget }) => {
75
+ const db = Reflect.get(currentTarget, "result");
76
+ if (db.objectStoreNames.contains(DB_STORE_NAME)) {
77
+ return;
78
+ }
79
+ const store = db.createObjectStore(DB_STORE_NAME, { keyPath: "id" });
80
+ store.transaction.oncomplete = () => {
81
+ promise.resolve(db);
82
+ };
83
+ store.transaction.onerror = () => {
84
+ console.error(store.transaction.error);
85
+ promise.reject(
86
+ new Error(
87
+ "Failed to create WebSocket client store. There is likely an additional output above."
88
+ )
89
+ );
90
+ };
91
+ };
92
+ request.onerror = () => {
93
+ console.error(request.error);
94
+ promise.reject(
95
+ new Error(
96
+ "Failed to open an IndexedDB database. There is likely an additional output above."
97
+ )
98
+ );
99
+ };
100
+ return promise;
101
+ }
102
+ async getStore() {
103
+ const db = await this.db;
104
+ return db.transaction(DB_STORE_NAME, "readwrite").objectStore(DB_STORE_NAME);
105
+ }
106
+ }
107
+ export {
108
+ WebSocketIndexedDBClientStore
109
+ };
110
+ //# sourceMappingURL=WebSocketIndexedDBClientStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/ws/WebSocketIndexedDBClientStore.ts"],"sourcesContent":["import { DeferredPromise } from '@open-draft/deferred-promise'\nimport { WebSocketClientConnectionProtocol } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport {\n type SerializedWebSocketClient,\n WebSocketClientStore,\n} from './WebSocketClientStore'\n\nconst DB_NAME = 'msw-websocket-clients'\nconst DB_STORE_NAME = 'clients'\n\nexport class WebSocketIndexedDBClientStore implements WebSocketClientStore {\n private db: Promise<IDBDatabase>\n\n constructor() {\n this.db = this.createDatabase()\n }\n\n public async add(client: WebSocketClientConnectionProtocol): Promise<void> {\n const promise = new DeferredPromise<void>()\n const store = await this.getStore()\n\n /**\n * @note Use `.put()` instead of `.add()` to allow setting clients\n * that already exist in the database. This can happen if a single page\n * has multiple event handlers. Each handler will receive the \"connection\"\n * event in parallel, and try to set that WebSocket client in the database.\n */\n const request = store.put({\n id: client.id,\n url: client.url.href,\n } satisfies SerializedWebSocketClient)\n\n request.onsuccess = () => {\n promise.resolve()\n }\n request.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(request.error)\n promise.reject(\n new Error(\n `Failed to add WebSocket client \"${client.id}\". There is likely an additional output above.`,\n ),\n )\n }\n\n return promise\n }\n\n public async getAll(): Promise<Array<SerializedWebSocketClient>> {\n const promise = new DeferredPromise<Array<SerializedWebSocketClient>>()\n const store = await this.getStore()\n const request = store.getAll() as IDBRequest<\n Array<SerializedWebSocketClient>\n >\n\n request.onsuccess = () => {\n promise.resolve(request.result)\n }\n request.onerror = () => {\n // eslint-disable-next-line no-console\n console.log(request.error)\n promise.reject(\n new Error(\n `Failed to get all WebSocket clients. There is likely an additional output above.`,\n ),\n )\n }\n\n return promise\n }\n\n public async deleteMany(clientIds: Array<string>): Promise<void> {\n const promise = new DeferredPromise<void>()\n const store = await this.getStore()\n\n for (const clientId of clientIds) {\n store.delete(clientId)\n }\n\n store.transaction.oncomplete = () => {\n promise.resolve()\n }\n store.transaction.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(store.transaction.error)\n promise.reject(\n new Error(\n `Failed to delete WebSocket clients [${clientIds.join(', ')}]. There is likely an additional output above.`,\n ),\n )\n }\n\n return promise\n }\n\n private async createDatabase(): Promise<IDBDatabase> {\n const promise = new DeferredPromise<IDBDatabase>()\n const request = indexedDB.open(DB_NAME, 1)\n\n request.onsuccess = ({ currentTarget }) => {\n const db = Reflect.get(currentTarget!, 'result') as IDBDatabase\n\n if (db.objectStoreNames.contains(DB_STORE_NAME)) {\n return promise.resolve(db)\n }\n }\n\n request.onupgradeneeded = async ({ currentTarget }) => {\n const db = Reflect.get(currentTarget!, 'result') as IDBDatabase\n if (db.objectStoreNames.contains(DB_STORE_NAME)) {\n return\n }\n\n const store = db.createObjectStore(DB_STORE_NAME, { keyPath: 'id' })\n store.transaction.oncomplete = () => {\n promise.resolve(db)\n }\n store.transaction.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(store.transaction.error)\n promise.reject(\n new Error(\n 'Failed to create WebSocket client store. There is likely an additional output above.',\n ),\n )\n }\n }\n request.onerror = () => {\n // eslint-disable-next-line no-console\n console.error(request.error)\n promise.reject(\n new Error(\n 'Failed to open an IndexedDB database. There is likely an additional output above.',\n ),\n )\n }\n\n return promise\n }\n\n private async getStore(): Promise<IDBObjectStore> {\n const db = await this.db\n return db.transaction(DB_STORE_NAME, 'readwrite').objectStore(DB_STORE_NAME)\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,13 @@
1
+ import { WebSocketClientConnectionProtocol } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket';
2
+ import { WebSocketClientStore, SerializedWebSocketClient } from './WebSocketClientStore.mjs';
3
+ import '@mswjs/interceptors/WebSocket';
4
+
5
+ declare class WebSocketMemoryClientStore implements WebSocketClientStore {
6
+ private store;
7
+ constructor();
8
+ add(client: WebSocketClientConnectionProtocol): Promise<void>;
9
+ getAll(): Promise<Array<SerializedWebSocketClient>>;
10
+ deleteMany(clientIds: Array<string>): Promise<void>;
11
+ }
12
+
13
+ export { WebSocketMemoryClientStore };
@@ -0,0 +1,13 @@
1
+ import { WebSocketClientConnectionProtocol } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket';
2
+ import { WebSocketClientStore, SerializedWebSocketClient } from './WebSocketClientStore.js';
3
+ import '@mswjs/interceptors/WebSocket';
4
+
5
+ declare class WebSocketMemoryClientStore implements WebSocketClientStore {
6
+ private store;
7
+ constructor();
8
+ add(client: WebSocketClientConnectionProtocol): Promise<void>;
9
+ getAll(): Promise<Array<SerializedWebSocketClient>>;
10
+ deleteMany(clientIds: Array<string>): Promise<void>;
11
+ }
12
+
13
+ export { WebSocketMemoryClientStore };
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var WebSocketMemoryClientStore_exports = {};
20
+ __export(WebSocketMemoryClientStore_exports, {
21
+ WebSocketMemoryClientStore: () => WebSocketMemoryClientStore
22
+ });
23
+ module.exports = __toCommonJS(WebSocketMemoryClientStore_exports);
24
+ class WebSocketMemoryClientStore {
25
+ store;
26
+ constructor() {
27
+ this.store = /* @__PURE__ */ new Map();
28
+ }
29
+ async add(client) {
30
+ this.store.set(client.id, { id: client.id, url: client.url.href });
31
+ }
32
+ getAll() {
33
+ return Promise.resolve(Array.from(this.store.values()));
34
+ }
35
+ async deleteMany(clientIds) {
36
+ for (const clientId of clientIds) {
37
+ this.store.delete(clientId);
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=WebSocketMemoryClientStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/ws/WebSocketMemoryClientStore.ts"],"sourcesContent":["import { WebSocketClientConnectionProtocol } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport {\n SerializedWebSocketClient,\n WebSocketClientStore,\n} from './WebSocketClientStore'\n\nexport class WebSocketMemoryClientStore implements WebSocketClientStore {\n private store: Map<string, SerializedWebSocketClient>\n\n constructor() {\n this.store = new Map()\n }\n\n public async add(client: WebSocketClientConnectionProtocol): Promise<void> {\n this.store.set(client.id, { id: client.id, url: client.url.href })\n }\n\n public getAll(): Promise<Array<SerializedWebSocketClient>> {\n return Promise.resolve(Array.from(this.store.values()))\n }\n\n public async deleteMany(clientIds: Array<string>): Promise<void> {\n for (const clientId of clientIds) {\n this.store.delete(clientId)\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,MAAM,2BAA2D;AAAA,EAC9D;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ,oBAAI,IAAI;AAAA,EACvB;AAAA,EAEA,MAAa,IAAI,QAA0D;AACzE,SAAK,MAAM,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC;AAAA,EACnE;AAAA,EAEO,SAAoD;AACzD,WAAO,QAAQ,QAAQ,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC;AAAA,EACxD;AAAA,EAEA,MAAa,WAAW,WAAyC;AAC/D,eAAW,YAAY,WAAW;AAChC,WAAK,MAAM,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,21 @@
1
+ class WebSocketMemoryClientStore {
2
+ store;
3
+ constructor() {
4
+ this.store = /* @__PURE__ */ new Map();
5
+ }
6
+ async add(client) {
7
+ this.store.set(client.id, { id: client.id, url: client.url.href });
8
+ }
9
+ getAll() {
10
+ return Promise.resolve(Array.from(this.store.values()));
11
+ }
12
+ async deleteMany(clientIds) {
13
+ for (const clientId of clientIds) {
14
+ this.store.delete(clientId);
15
+ }
16
+ }
17
+ }
18
+ export {
19
+ WebSocketMemoryClientStore
20
+ };
21
+ //# sourceMappingURL=WebSocketMemoryClientStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/ws/WebSocketMemoryClientStore.ts"],"sourcesContent":["import { WebSocketClientConnectionProtocol } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport {\n SerializedWebSocketClient,\n WebSocketClientStore,\n} from './WebSocketClientStore'\n\nexport class WebSocketMemoryClientStore implements WebSocketClientStore {\n private store: Map<string, SerializedWebSocketClient>\n\n constructor() {\n this.store = new Map()\n }\n\n public async add(client: WebSocketClientConnectionProtocol): Promise<void> {\n this.store.set(client.id, { id: client.id, url: client.url.href })\n }\n\n public getAll(): Promise<Array<SerializedWebSocketClient>> {\n return Promise.resolve(Array.from(this.store.values()))\n }\n\n public async deleteMany(clientIds: Array<string>): Promise<void> {\n for (const clientId of clientIds) {\n this.store.delete(clientId)\n }\n }\n}\n"],"mappings":"AAMO,MAAM,2BAA2D;AAAA,EAC9D;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ,oBAAI,IAAI;AAAA,EACvB;AAAA,EAEA,MAAa,IAAI,QAA0D;AACzE,SAAK,MAAM,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC;AAAA,EACnE;AAAA,EAEO,SAAoD;AACzD,WAAO,QAAQ,QAAQ,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC;AAAA,EACxD;AAAA,EAEA,MAAa,WAAW,WAAyC;AAC/D,eAAW,YAAY,WAAW;AAChC,WAAK,MAAM,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,19 @@
1
+ import { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket';
2
+ import { R as RequestHandler } from '../HttpResponse-BLGmJolh.mjs';
3
+ import { WebSocketHandler } from '../handlers/WebSocketHandler.mjs';
4
+ import { UnhandledRequestStrategy } from '../utils/request/onUnhandledRequest.mjs';
5
+ import '../utils/internal/isIterable.mjs';
6
+ import '../typeUtils.mjs';
7
+ import 'strict-event-emitter';
8
+ import '@mswjs/interceptors/WebSocket';
9
+ import '../utils/matching/matchRequestUrl.mjs';
10
+
11
+ interface HandleWebSocketEventOptions {
12
+ getUnhandledRequestStrategy: () => UnhandledRequestStrategy;
13
+ getHandlers: () => Array<RequestHandler | WebSocketHandler>;
14
+ onMockedConnection: (connection: WebSocketConnectionData) => void;
15
+ onPassthroughConnection: (onnection: WebSocketConnectionData) => void;
16
+ }
17
+ declare function handleWebSocketEvent(options: HandleWebSocketEventOptions): void;
18
+
19
+ export { handleWebSocketEvent };
@@ -0,0 +1,19 @@
1
+ import { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket';
2
+ import { R as RequestHandler } from '../HttpResponse-Cgbkdkje.js';
3
+ import { WebSocketHandler } from '../handlers/WebSocketHandler.js';
4
+ import { UnhandledRequestStrategy } from '../utils/request/onUnhandledRequest.js';
5
+ import '../utils/internal/isIterable.js';
6
+ import '../typeUtils.js';
7
+ import 'strict-event-emitter';
8
+ import '@mswjs/interceptors/WebSocket';
9
+ import '../utils/matching/matchRequestUrl.js';
10
+
11
+ interface HandleWebSocketEventOptions {
12
+ getUnhandledRequestStrategy: () => UnhandledRequestStrategy;
13
+ getHandlers: () => Array<RequestHandler | WebSocketHandler>;
14
+ onMockedConnection: (connection: WebSocketConnectionData) => void;
15
+ onPassthroughConnection: (onnection: WebSocketConnectionData) => void;
16
+ }
17
+ declare function handleWebSocketEvent(options: HandleWebSocketEventOptions): void;
18
+
19
+ export { handleWebSocketEvent };
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var handleWebSocketEvent_exports = {};
20
+ __export(handleWebSocketEvent_exports, {
21
+ handleWebSocketEvent: () => handleWebSocketEvent
22
+ });
23
+ module.exports = __toCommonJS(handleWebSocketEvent_exports);
24
+ var import_WebSocketHandler = require("../handlers/WebSocketHandler.js");
25
+ var import_webSocketInterceptor = require("./webSocketInterceptor.js");
26
+ var import_onUnhandledRequest = require("../utils/request/onUnhandledRequest.js");
27
+ function handleWebSocketEvent(options) {
28
+ import_webSocketInterceptor.webSocketInterceptor.on("connection", async (connection) => {
29
+ const handlers = options.getHandlers();
30
+ const connectionEvent = new MessageEvent("connection", {
31
+ data: connection
32
+ });
33
+ const matchingHandlers = [];
34
+ for (const handler of handlers) {
35
+ if (handler instanceof import_WebSocketHandler.WebSocketHandler && handler.predicate({
36
+ event: connectionEvent,
37
+ parsedResult: handler.parse({
38
+ event: connectionEvent
39
+ })
40
+ })) {
41
+ matchingHandlers.push(handler);
42
+ }
43
+ }
44
+ if (matchingHandlers.length > 0) {
45
+ options?.onMockedConnection(connection);
46
+ for (const handler of matchingHandlers) {
47
+ handler[import_WebSocketHandler.kDispatchEvent](connectionEvent);
48
+ }
49
+ } else {
50
+ const request = new Request(connection.client.url, {
51
+ headers: {
52
+ upgrade: "websocket",
53
+ connection: "upgrade"
54
+ }
55
+ });
56
+ await (0, import_onUnhandledRequest.onUnhandledRequest)(
57
+ request,
58
+ options.getUnhandledRequestStrategy()
59
+ ).catch((error) => {
60
+ const errorEvent = new Event("error");
61
+ Object.defineProperty(errorEvent, "cause", {
62
+ enumerable: true,
63
+ configurable: false,
64
+ value: error
65
+ });
66
+ connection.client.socket.dispatchEvent(errorEvent);
67
+ });
68
+ options?.onPassthroughConnection(connection);
69
+ connection.server.connect();
70
+ }
71
+ });
72
+ }
73
+ //# sourceMappingURL=handleWebSocketEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler, kDispatchEvent } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\nimport {\n onUnhandledRequest,\n UnhandledRequestStrategy,\n} from '../utils/request/onUnhandledRequest'\n\ninterface HandleWebSocketEventOptions {\n getUnhandledRequestStrategy: () => UnhandledRequestStrategy\n getHandlers: () => Array<RequestHandler | WebSocketHandler>\n onMockedConnection: (connection: WebSocketConnectionData) => void\n onPassthroughConnection: (onnection: WebSocketConnectionData) => void\n}\n\nexport function handleWebSocketEvent(options: HandleWebSocketEventOptions) {\n webSocketInterceptor.on('connection', async (connection) => {\n const handlers = options.getHandlers()\n\n const connectionEvent = new MessageEvent('connection', {\n data: connection,\n })\n\n // First, filter only those WebSocket handlers that\n // match the \"ws.link()\" endpoint predicate. Don't dispatch\n // anything yet so the logger can be attached to the connection\n // before it potentially sends events.\n const matchingHandlers: Array<WebSocketHandler> = []\n\n for (const handler of handlers) {\n if (\n handler instanceof WebSocketHandler &&\n handler.predicate({\n event: connectionEvent,\n parsedResult: handler.parse({\n event: connectionEvent,\n }),\n })\n ) {\n matchingHandlers.push(handler)\n }\n }\n\n if (matchingHandlers.length > 0) {\n options?.onMockedConnection(connection)\n\n // Iterate over the handlers and forward the connection\n // event to WebSocket event handlers. This is equivalent\n // to dispatching that event onto multiple listeners.\n for (const handler of matchingHandlers) {\n handler[kDispatchEvent](connectionEvent)\n }\n } else {\n // Construct a request representing this WebSocket connection.\n const request = new Request(connection.client.url, {\n headers: {\n upgrade: 'websocket',\n connection: 'upgrade',\n },\n })\n await onUnhandledRequest(\n request,\n options.getUnhandledRequestStrategy(),\n ).catch((error) => {\n const errorEvent = new Event('error')\n Object.defineProperty(errorEvent, 'cause', {\n enumerable: true,\n configurable: false,\n value: error,\n })\n connection.client.socket.dispatchEvent(errorEvent)\n })\n\n options?.onPassthroughConnection(connection)\n\n // If none of the \"ws\" handlers matched,\n // establish the WebSocket connection as-is.\n connection.server.connect()\n }\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,8BAAiD;AACjD,kCAAqC;AACrC,gCAGO;AASA,SAAS,qBAAqB,SAAsC;AACzE,mDAAqB,GAAG,cAAc,OAAO,eAAe;AAC1D,UAAM,WAAW,QAAQ,YAAY;AAErC,UAAM,kBAAkB,IAAI,aAAa,cAAc;AAAA,MACrD,MAAM;AAAA,IACR,CAAC;AAMD,UAAM,mBAA4C,CAAC;AAEnD,eAAW,WAAW,UAAU;AAC9B,UACE,mBAAmB,4CACnB,QAAQ,UAAU;AAAA,QAChB,OAAO;AAAA,QACP,cAAc,QAAQ,MAAM;AAAA,UAC1B,OAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC,GACD;AACA,yBAAiB,KAAK,OAAO;AAAA,MAC/B;AAAA,IACF;AAEA,QAAI,iBAAiB,SAAS,GAAG;AAC/B,eAAS,mBAAmB,UAAU;AAKtC,iBAAW,WAAW,kBAAkB;AACtC,gBAAQ,sCAAc,EAAE,eAAe;AAAA,MACzC;AAAA,IACF,OAAO;AAEL,YAAM,UAAU,IAAI,QAAQ,WAAW,OAAO,KAAK;AAAA,QACjD,SAAS;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,QACd;AAAA,MACF,CAAC;AACD,gBAAM;AAAA,QACJ;AAAA,QACA,QAAQ,4BAA4B;AAAA,MACtC,EAAE,MAAM,CAAC,UAAU;AACjB,cAAM,aAAa,IAAI,MAAM,OAAO;AACpC,eAAO,eAAe,YAAY,SAAS;AAAA,UACzC,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,OAAO;AAAA,QACT,CAAC;AACD,mBAAW,OAAO,OAAO,cAAc,UAAU;AAAA,MACnD,CAAC;AAED,eAAS,wBAAwB,UAAU;AAI3C,iBAAW,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,55 @@
1
+ import { WebSocketHandler, kDispatchEvent } from '../handlers/WebSocketHandler.mjs';
2
+ import { webSocketInterceptor } from './webSocketInterceptor.mjs';
3
+ import {
4
+ onUnhandledRequest
5
+ } from '../utils/request/onUnhandledRequest.mjs';
6
+ function handleWebSocketEvent(options) {
7
+ webSocketInterceptor.on("connection", async (connection) => {
8
+ const handlers = options.getHandlers();
9
+ const connectionEvent = new MessageEvent("connection", {
10
+ data: connection
11
+ });
12
+ const matchingHandlers = [];
13
+ for (const handler of handlers) {
14
+ if (handler instanceof WebSocketHandler && handler.predicate({
15
+ event: connectionEvent,
16
+ parsedResult: handler.parse({
17
+ event: connectionEvent
18
+ })
19
+ })) {
20
+ matchingHandlers.push(handler);
21
+ }
22
+ }
23
+ if (matchingHandlers.length > 0) {
24
+ options?.onMockedConnection(connection);
25
+ for (const handler of matchingHandlers) {
26
+ handler[kDispatchEvent](connectionEvent);
27
+ }
28
+ } else {
29
+ const request = new Request(connection.client.url, {
30
+ headers: {
31
+ upgrade: "websocket",
32
+ connection: "upgrade"
33
+ }
34
+ });
35
+ await onUnhandledRequest(
36
+ request,
37
+ options.getUnhandledRequestStrategy()
38
+ ).catch((error) => {
39
+ const errorEvent = new Event("error");
40
+ Object.defineProperty(errorEvent, "cause", {
41
+ enumerable: true,
42
+ configurable: false,
43
+ value: error
44
+ });
45
+ connection.client.socket.dispatchEvent(errorEvent);
46
+ });
47
+ options?.onPassthroughConnection(connection);
48
+ connection.server.connect();
49
+ }
50
+ });
51
+ }
52
+ export {
53
+ handleWebSocketEvent
54
+ };
55
+ //# sourceMappingURL=handleWebSocketEvent.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler, kDispatchEvent } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\nimport {\n onUnhandledRequest,\n UnhandledRequestStrategy,\n} from '../utils/request/onUnhandledRequest'\n\ninterface HandleWebSocketEventOptions {\n getUnhandledRequestStrategy: () => UnhandledRequestStrategy\n getHandlers: () => Array<RequestHandler | WebSocketHandler>\n onMockedConnection: (connection: WebSocketConnectionData) => void\n onPassthroughConnection: (onnection: WebSocketConnectionData) => void\n}\n\nexport function handleWebSocketEvent(options: HandleWebSocketEventOptions) {\n webSocketInterceptor.on('connection', async (connection) => {\n const handlers = options.getHandlers()\n\n const connectionEvent = new MessageEvent('connection', {\n data: connection,\n })\n\n // First, filter only those WebSocket handlers that\n // match the \"ws.link()\" endpoint predicate. Don't dispatch\n // anything yet so the logger can be attached to the connection\n // before it potentially sends events.\n const matchingHandlers: Array<WebSocketHandler> = []\n\n for (const handler of handlers) {\n if (\n handler instanceof WebSocketHandler &&\n handler.predicate({\n event: connectionEvent,\n parsedResult: handler.parse({\n event: connectionEvent,\n }),\n })\n ) {\n matchingHandlers.push(handler)\n }\n }\n\n if (matchingHandlers.length > 0) {\n options?.onMockedConnection(connection)\n\n // Iterate over the handlers and forward the connection\n // event to WebSocket event handlers. This is equivalent\n // to dispatching that event onto multiple listeners.\n for (const handler of matchingHandlers) {\n handler[kDispatchEvent](connectionEvent)\n }\n } else {\n // Construct a request representing this WebSocket connection.\n const request = new Request(connection.client.url, {\n headers: {\n upgrade: 'websocket',\n connection: 'upgrade',\n },\n })\n await onUnhandledRequest(\n request,\n options.getUnhandledRequestStrategy(),\n ).catch((error) => {\n const errorEvent = new Event('error')\n Object.defineProperty(errorEvent, 'cause', {\n enumerable: true,\n configurable: false,\n value: error,\n })\n connection.client.socket.dispatchEvent(errorEvent)\n })\n\n options?.onPassthroughConnection(connection)\n\n // If none of the \"ws\" handlers matched,\n // establish the WebSocket connection as-is.\n connection.server.connect()\n }\n })\n}\n"],"mappings":"AAEA,SAAS,kBAAkB,sBAAsB;AACjD,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,OAEK;AASA,SAAS,qBAAqB,SAAsC;AACzE,uBAAqB,GAAG,cAAc,OAAO,eAAe;AAC1D,UAAM,WAAW,QAAQ,YAAY;AAErC,UAAM,kBAAkB,IAAI,aAAa,cAAc;AAAA,MACrD,MAAM;AAAA,IACR,CAAC;AAMD,UAAM,mBAA4C,CAAC;AAEnD,eAAW,WAAW,UAAU;AAC9B,UACE,mBAAmB,oBACnB,QAAQ,UAAU;AAAA,QAChB,OAAO;AAAA,QACP,cAAc,QAAQ,MAAM;AAAA,UAC1B,OAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC,GACD;AACA,yBAAiB,KAAK,OAAO;AAAA,MAC/B;AAAA,IACF;AAEA,QAAI,iBAAiB,SAAS,GAAG;AAC/B,eAAS,mBAAmB,UAAU;AAKtC,iBAAW,WAAW,kBAAkB;AACtC,gBAAQ,cAAc,EAAE,eAAe;AAAA,MACzC;AAAA,IACF,OAAO;AAEL,YAAM,UAAU,IAAI,QAAQ,WAAW,OAAO,KAAK;AAAA,QACjD,SAAS;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,QACd;AAAA,MACF,CAAC;AACD,YAAM;AAAA,QACJ;AAAA,QACA,QAAQ,4BAA4B;AAAA,MACtC,EAAE,MAAM,CAAC,UAAU;AACjB,cAAM,aAAa,IAAI,MAAM,OAAO;AACpC,eAAO,eAAe,YAAY,SAAS;AAAA,UACzC,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,OAAO;AAAA,QACT,CAAC;AACD,mBAAW,OAAO,OAAO,cAAc,UAAU;AAAA,MACnD,CAAC;AAED,eAAS,wBAAwB,UAAU;AAI3C,iBAAW,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { WebSocketConnectionData, WebSocketClientConnection } from '@mswjs/interceptors/WebSocket';
2
+
3
+ declare function attachWebSocketLogger(connection: WebSocketConnectionData): void;
4
+ /**
5
+ * Prints the WebSocket connection.
6
+ * This is meant to be logged by every WebSocket handler
7
+ * that intercepted this connection. This helps you see
8
+ * what handlers observe this connection.
9
+ */
10
+ declare function logConnectionOpen(client: WebSocketClientConnection): void;
11
+
12
+ export { attachWebSocketLogger, logConnectionOpen };
@@ -0,0 +1,12 @@
1
+ import { WebSocketConnectionData, WebSocketClientConnection } from '@mswjs/interceptors/WebSocket';
2
+
3
+ declare function attachWebSocketLogger(connection: WebSocketConnectionData): void;
4
+ /**
5
+ * Prints the WebSocket connection.
6
+ * This is meant to be logged by every WebSocket handler
7
+ * that intercepted this connection. This helps you see
8
+ * what handlers observe this connection.
9
+ */
10
+ declare function logConnectionOpen(client: WebSocketClientConnection): void;
11
+
12
+ export { attachWebSocketLogger, logConnectionOpen };