@heojeongbo/wirestage 0.0.0-stage → 0.1.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 (489) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES.md +21 -0
  3. package/README.md +150 -2
  4. package/dist/app/playwright/index.d.ts +3 -0
  5. package/dist/app/playwright/index.d.ts.map +1 -0
  6. package/dist/app/playwright/index.js +2 -0
  7. package/dist/app/playwright/index.js.map +1 -0
  8. package/dist/app/playwright/lib/fixture.d.ts +61 -0
  9. package/dist/app/playwright/lib/fixture.d.ts.map +1 -0
  10. package/dist/app/playwright/lib/fixture.js +110 -0
  11. package/dist/app/playwright/lib/fixture.js.map +1 -0
  12. package/dist/connect.d.ts +7 -0
  13. package/dist/connect.d.ts.map +1 -0
  14. package/dist/connect.js +7 -0
  15. package/dist/connect.js.map +1 -0
  16. package/dist/entities/frame/@x/plugin.d.ts +9 -0
  17. package/dist/entities/frame/@x/plugin.d.ts.map +1 -0
  18. package/dist/entities/frame/@x/plugin.js +2 -0
  19. package/dist/entities/frame/@x/plugin.js.map +1 -0
  20. package/dist/entities/frame/index.d.ts +6 -0
  21. package/dist/entities/frame/index.d.ts.map +1 -0
  22. package/dist/entities/frame/index.js +4 -0
  23. package/dist/entities/frame/index.js.map +1 -0
  24. package/dist/entities/frame/lib/filter.d.ts +8 -0
  25. package/dist/entities/frame/lib/filter.d.ts.map +1 -0
  26. package/dist/entities/frame/lib/filter.js +62 -0
  27. package/dist/entities/frame/lib/filter.js.map +1 -0
  28. package/dist/entities/frame/lib/payload.d.ts +8 -0
  29. package/dist/entities/frame/lib/payload.d.ts.map +1 -0
  30. package/dist/entities/frame/lib/payload.js +42 -0
  31. package/dist/entities/frame/lib/payload.js.map +1 -0
  32. package/dist/entities/frame/lib/snapshot.d.ts +15 -0
  33. package/dist/entities/frame/lib/snapshot.d.ts.map +1 -0
  34. package/dist/entities/frame/lib/snapshot.js +90 -0
  35. package/dist/entities/frame/lib/snapshot.js.map +1 -0
  36. package/dist/entities/frame/lib/timeline.d.ts +23 -0
  37. package/dist/entities/frame/lib/timeline.d.ts.map +1 -0
  38. package/dist/entities/frame/lib/timeline.js +122 -0
  39. package/dist/entities/frame/lib/timeline.js.map +1 -0
  40. package/dist/entities/frame/model/frame.d.ts +182 -0
  41. package/dist/entities/frame/model/frame.d.ts.map +1 -0
  42. package/dist/entities/frame/model/frame.js +2 -0
  43. package/dist/entities/frame/model/frame.js.map +1 -0
  44. package/dist/entities/plugin/index.d.ts +9 -0
  45. package/dist/entities/plugin/index.d.ts.map +1 -0
  46. package/dist/entities/plugin/index.js +3 -0
  47. package/dist/entities/plugin/index.js.map +1 -0
  48. package/dist/entities/plugin/lib/define-plugin.d.ts +8 -0
  49. package/dist/entities/plugin/lib/define-plugin.d.ts.map +1 -0
  50. package/dist/entities/plugin/lib/define-plugin.js +9 -0
  51. package/dist/entities/plugin/lib/define-plugin.js.map +1 -0
  52. package/dist/entities/plugin/lib/named.d.ts +10 -0
  53. package/dist/entities/plugin/lib/named.d.ts.map +1 -0
  54. package/dist/entities/plugin/lib/named.js +17 -0
  55. package/dist/entities/plugin/lib/named.js.map +1 -0
  56. package/dist/entities/plugin/model/attachment.d.ts +18 -0
  57. package/dist/entities/plugin/model/attachment.d.ts.map +1 -0
  58. package/dist/entities/plugin/model/attachment.js +2 -0
  59. package/dist/entities/plugin/model/attachment.js.map +1 -0
  60. package/dist/entities/plugin/model/http.d.ts +135 -0
  61. package/dist/entities/plugin/model/http.d.ts.map +1 -0
  62. package/dist/entities/plugin/model/http.js +2 -0
  63. package/dist/entities/plugin/model/http.js.map +1 -0
  64. package/dist/entities/plugin/model/page.d.ts +100 -0
  65. package/dist/entities/plugin/model/page.d.ts.map +1 -0
  66. package/dist/entities/plugin/model/page.js +2 -0
  67. package/dist/entities/plugin/model/page.js.map +1 -0
  68. package/dist/entities/plugin/model/plugin.d.ts +83 -0
  69. package/dist/entities/plugin/model/plugin.d.ts.map +1 -0
  70. package/dist/entities/plugin/model/plugin.js +2 -0
  71. package/dist/entities/plugin/model/plugin.js.map +1 -0
  72. package/dist/entities/plugin/model/socket.d.ts +107 -0
  73. package/dist/entities/plugin/model/socket.d.ts.map +1 -0
  74. package/dist/entities/plugin/model/socket.js +2 -0
  75. package/dist/entities/plugin/model/socket.js.map +1 -0
  76. package/dist/entities/plugin/model/stream.d.ts +46 -0
  77. package/dist/entities/plugin/model/stream.d.ts.map +1 -0
  78. package/dist/entities/plugin/model/stream.js +2 -0
  79. package/dist/entities/plugin/model/stream.js.map +1 -0
  80. package/dist/features/connect/index.d.ts +5 -0
  81. package/dist/features/connect/index.d.ts.map +1 -0
  82. package/dist/features/connect/index.js +4 -0
  83. package/dist/features/connect/index.js.map +1 -0
  84. package/dist/features/connect/lib/calls.d.ts +9 -0
  85. package/dist/features/connect/lib/calls.d.ts.map +1 -0
  86. package/dist/features/connect/lib/calls.js +46 -0
  87. package/dist/features/connect/lib/calls.js.map +1 -0
  88. package/dist/features/connect/lib/client.d.ts +33 -0
  89. package/dist/features/connect/lib/client.d.ts.map +1 -0
  90. package/dist/features/connect/lib/client.js +147 -0
  91. package/dist/features/connect/lib/client.js.map +1 -0
  92. package/dist/features/connect/lib/create-connect.d.ts +14 -0
  93. package/dist/features/connect/lib/create-connect.d.ts.map +1 -0
  94. package/dist/features/connect/lib/create-connect.js +124 -0
  95. package/dist/features/connect/lib/create-connect.js.map +1 -0
  96. package/dist/features/connect/lib/faults.d.ts +18 -0
  97. package/dist/features/connect/lib/faults.d.ts.map +1 -0
  98. package/dist/features/connect/lib/faults.js +85 -0
  99. package/dist/features/connect/lib/faults.js.map +1 -0
  100. package/dist/features/connect/lib/protocol.d.ts +42 -0
  101. package/dist/features/connect/lib/protocol.d.ts.map +1 -0
  102. package/dist/features/connect/lib/protocol.js +228 -0
  103. package/dist/features/connect/lib/protocol.js.map +1 -0
  104. package/dist/features/connect/lib/record.d.ts +14 -0
  105. package/dist/features/connect/lib/record.d.ts.map +1 -0
  106. package/dist/features/connect/lib/record.js +36 -0
  107. package/dist/features/connect/lib/record.js.map +1 -0
  108. package/dist/features/connect/lib/recorder.d.ts +77 -0
  109. package/dist/features/connect/lib/recorder.d.ts.map +1 -0
  110. package/dist/features/connect/lib/recorder.js +209 -0
  111. package/dist/features/connect/lib/recorder.js.map +1 -0
  112. package/dist/features/connect/lib/rules.d.ts +51 -0
  113. package/dist/features/connect/lib/rules.d.ts.map +1 -0
  114. package/dist/features/connect/lib/rules.js +222 -0
  115. package/dist/features/connect/lib/rules.js.map +1 -0
  116. package/dist/features/connect/lib/serve.d.ts +10 -0
  117. package/dist/features/connect/lib/serve.d.ts.map +1 -0
  118. package/dist/features/connect/lib/serve.js +78 -0
  119. package/dist/features/connect/lib/serve.js.map +1 -0
  120. package/dist/features/connect/lib/status-of.d.ts +11 -0
  121. package/dist/features/connect/lib/status-of.d.ts.map +1 -0
  122. package/dist/features/connect/lib/status-of.js +22 -0
  123. package/dist/features/connect/lib/status-of.js.map +1 -0
  124. package/dist/features/connect/lib/stubs.d.ts +18 -0
  125. package/dist/features/connect/lib/stubs.d.ts.map +1 -0
  126. package/dist/features/connect/lib/stubs.js +174 -0
  127. package/dist/features/connect/lib/stubs.js.map +1 -0
  128. package/dist/features/connect/lib/universal.d.ts +19 -0
  129. package/dist/features/connect/lib/universal.d.ts.map +1 -0
  130. package/dist/features/connect/lib/universal.js +71 -0
  131. package/dist/features/connect/lib/universal.js.map +1 -0
  132. package/dist/features/connect/model/types.d.ts +247 -0
  133. package/dist/features/connect/model/types.d.ts.map +1 -0
  134. package/dist/features/connect/model/types.js +2 -0
  135. package/dist/features/connect/model/types.js.map +1 -0
  136. package/dist/features/rest/index.d.ts +5 -0
  137. package/dist/features/rest/index.d.ts.map +1 -0
  138. package/dist/features/rest/index.js +3 -0
  139. package/dist/features/rest/index.js.map +1 -0
  140. package/dist/features/rest/lib/calls.d.ts +8 -0
  141. package/dist/features/rest/lib/calls.d.ts.map +1 -0
  142. package/dist/features/rest/lib/calls.js +32 -0
  143. package/dist/features/rest/lib/calls.js.map +1 -0
  144. package/dist/features/rest/lib/create-rest.d.ts +8 -0
  145. package/dist/features/rest/lib/create-rest.d.ts.map +1 -0
  146. package/dist/features/rest/lib/create-rest.js +136 -0
  147. package/dist/features/rest/lib/create-rest.js.map +1 -0
  148. package/dist/features/rest/lib/path.d.ts +14 -0
  149. package/dist/features/rest/lib/path.d.ts.map +1 -0
  150. package/dist/features/rest/lib/path.js +58 -0
  151. package/dist/features/rest/lib/path.js.map +1 -0
  152. package/dist/features/rest/lib/reply.d.ts +25 -0
  153. package/dist/features/rest/lib/reply.d.ts.map +1 -0
  154. package/dist/features/rest/lib/reply.js +40 -0
  155. package/dist/features/rest/lib/reply.js.map +1 -0
  156. package/dist/features/rest/model/types.d.ts +74 -0
  157. package/dist/features/rest/model/types.d.ts.map +1 -0
  158. package/dist/features/rest/model/types.js +2 -0
  159. package/dist/features/rest/model/types.js.map +1 -0
  160. package/dist/features/sse/index.d.ts +4 -0
  161. package/dist/features/sse/index.d.ts.map +1 -0
  162. package/dist/features/sse/index.js +3 -0
  163. package/dist/features/sse/index.js.map +1 -0
  164. package/dist/features/sse/lib/create-sse.d.ts +9 -0
  165. package/dist/features/sse/lib/create-sse.d.ts.map +1 -0
  166. package/dist/features/sse/lib/create-sse.js +121 -0
  167. package/dist/features/sse/lib/create-sse.js.map +1 -0
  168. package/dist/features/sse/lib/encode.d.ts +8 -0
  169. package/dist/features/sse/lib/encode.d.ts.map +1 -0
  170. package/dist/features/sse/lib/encode.js +29 -0
  171. package/dist/features/sse/lib/encode.js.map +1 -0
  172. package/dist/features/sse/model/types.d.ts +68 -0
  173. package/dist/features/sse/model/types.d.ts.map +1 -0
  174. package/dist/features/sse/model/types.js +2 -0
  175. package/dist/features/sse/model/types.js.map +1 -0
  176. package/dist/features/webrtc/index.d.ts +3 -0
  177. package/dist/features/webrtc/index.d.ts.map +1 -0
  178. package/dist/features/webrtc/index.js +2 -0
  179. package/dist/features/webrtc/index.js.map +1 -0
  180. package/dist/features/webrtc/lib/create-webrtc.d.ts +9 -0
  181. package/dist/features/webrtc/lib/create-webrtc.d.ts.map +1 -0
  182. package/dist/features/webrtc/lib/create-webrtc.js +123 -0
  183. package/dist/features/webrtc/lib/create-webrtc.js.map +1 -0
  184. package/dist/features/webrtc/lib/rtc-page-module.d.ts +22 -0
  185. package/dist/features/webrtc/lib/rtc-page-module.d.ts.map +1 -0
  186. package/dist/features/webrtc/lib/rtc-page-module.js +161 -0
  187. package/dist/features/webrtc/lib/rtc-page-module.js.map +1 -0
  188. package/dist/features/webrtc/lib/to-frame.d.ts +9 -0
  189. package/dist/features/webrtc/lib/to-frame.d.ts.map +1 -0
  190. package/dist/features/webrtc/lib/to-frame.js +43 -0
  191. package/dist/features/webrtc/lib/to-frame.js.map +1 -0
  192. package/dist/features/webrtc/model/types.d.ts +70 -0
  193. package/dist/features/webrtc/model/types.d.ts.map +1 -0
  194. package/dist/features/webrtc/model/types.js +2 -0
  195. package/dist/features/webrtc/model/types.js.map +1 -0
  196. package/dist/features/websocket/index.d.ts +3 -0
  197. package/dist/features/websocket/index.d.ts.map +1 -0
  198. package/dist/features/websocket/index.js +2 -0
  199. package/dist/features/websocket/index.js.map +1 -0
  200. package/dist/features/websocket/lib/create-websocket.d.ts +9 -0
  201. package/dist/features/websocket/lib/create-websocket.d.ts.map +1 -0
  202. package/dist/features/websocket/lib/create-websocket.js +34 -0
  203. package/dist/features/websocket/lib/create-websocket.js.map +1 -0
  204. package/dist/features/websocket/lib/mock.d.ts +6 -0
  205. package/dist/features/websocket/lib/mock.d.ts.map +1 -0
  206. package/dist/features/websocket/lib/mock.js +96 -0
  207. package/dist/features/websocket/lib/mock.js.map +1 -0
  208. package/dist/features/websocket/lib/proxy.d.ts +9 -0
  209. package/dist/features/websocket/lib/proxy.d.ts.map +1 -0
  210. package/dist/features/websocket/lib/proxy.js +120 -0
  211. package/dist/features/websocket/lib/proxy.js.map +1 -0
  212. package/dist/features/websocket/lib/wire.d.ts +16 -0
  213. package/dist/features/websocket/lib/wire.d.ts.map +1 -0
  214. package/dist/features/websocket/lib/wire.js +46 -0
  215. package/dist/features/websocket/lib/wire.js.map +1 -0
  216. package/dist/features/websocket/model/types.d.ts +133 -0
  217. package/dist/features/websocket/model/types.d.ts.map +1 -0
  218. package/dist/features/websocket/model/types.js +2 -0
  219. package/dist/features/websocket/model/types.js.map +1 -0
  220. package/dist/index.d.ts +27 -0
  221. package/dist/index.d.ts.map +1 -0
  222. package/dist/index.js +16 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/playwright.d.ts +4 -0
  225. package/dist/playwright.d.ts.map +1 -0
  226. package/dist/playwright.js +2 -0
  227. package/dist/playwright.js.map +1 -0
  228. package/dist/rest.d.ts +3 -0
  229. package/dist/rest.d.ts.map +1 -0
  230. package/dist/rest.js +3 -0
  231. package/dist/rest.js.map +1 -0
  232. package/dist/shared/api/http-server/index.d.ts +3 -0
  233. package/dist/shared/api/http-server/index.d.ts.map +1 -0
  234. package/dist/shared/api/http-server/index.js +2 -0
  235. package/dist/shared/api/http-server/index.js.map +1 -0
  236. package/dist/shared/api/http-server/listen.d.ts +25 -0
  237. package/dist/shared/api/http-server/listen.d.ts.map +1 -0
  238. package/dist/shared/api/http-server/listen.js +44 -0
  239. package/dist/shared/api/http-server/listen.js.map +1 -0
  240. package/dist/shared/api/playwright/index.d.ts +2 -0
  241. package/dist/shared/api/playwright/index.d.ts.map +1 -0
  242. package/dist/shared/api/playwright/index.js +2 -0
  243. package/dist/shared/api/playwright/index.js.map +1 -0
  244. package/dist/shared/api/playwright/ports.d.ts +126 -0
  245. package/dist/shared/api/playwright/ports.d.ts.map +1 -0
  246. package/dist/shared/api/playwright/ports.js +11 -0
  247. package/dist/shared/api/playwright/ports.js.map +1 -0
  248. package/dist/shared/api/stream-server/index.d.ts +3 -0
  249. package/dist/shared/api/stream-server/index.d.ts.map +1 -0
  250. package/dist/shared/api/stream-server/index.js +2 -0
  251. package/dist/shared/api/stream-server/index.js.map +1 -0
  252. package/dist/shared/api/stream-server/stream-server.d.ts +45 -0
  253. package/dist/shared/api/stream-server/stream-server.d.ts.map +1 -0
  254. package/dist/shared/api/stream-server/stream-server.js +167 -0
  255. package/dist/shared/api/stream-server/stream-server.js.map +1 -0
  256. package/dist/shared/lib/async/arrivals.d.ts +31 -0
  257. package/dist/shared/lib/async/arrivals.d.ts.map +1 -0
  258. package/dist/shared/lib/async/arrivals.js +57 -0
  259. package/dist/shared/lib/async/arrivals.js.map +1 -0
  260. package/dist/shared/lib/async/async-queue.d.ts +23 -0
  261. package/dist/shared/lib/async/async-queue.d.ts.map +1 -0
  262. package/dist/shared/lib/async/async-queue.js +80 -0
  263. package/dist/shared/lib/async/async-queue.js.map +1 -0
  264. package/dist/shared/lib/async/deferred.d.ts +12 -0
  265. package/dist/shared/lib/async/deferred.d.ts.map +1 -0
  266. package/dist/shared/lib/async/deferred.js +34 -0
  267. package/dist/shared/lib/async/deferred.js.map +1 -0
  268. package/dist/shared/lib/async/index.d.ts +8 -0
  269. package/dist/shared/lib/async/index.d.ts.map +1 -0
  270. package/dist/shared/lib/async/index.js +5 -0
  271. package/dist/shared/lib/async/index.js.map +1 -0
  272. package/dist/shared/lib/async/run-all.d.ts +8 -0
  273. package/dist/shared/lib/async/run-all.d.ts.map +1 -0
  274. package/dist/shared/lib/async/run-all.js +22 -0
  275. package/dist/shared/lib/async/run-all.js.map +1 -0
  276. package/dist/shared/lib/bytes/bytes.d.ts +18 -0
  277. package/dist/shared/lib/bytes/bytes.d.ts.map +1 -0
  278. package/dist/shared/lib/bytes/bytes.js +48 -0
  279. package/dist/shared/lib/bytes/bytes.js.map +1 -0
  280. package/dist/shared/lib/bytes/index.d.ts +3 -0
  281. package/dist/shared/lib/bytes/index.d.ts.map +1 -0
  282. package/dist/shared/lib/bytes/index.js +2 -0
  283. package/dist/shared/lib/bytes/index.js.map +1 -0
  284. package/dist/shared/lib/clock/clock.d.ts +29 -0
  285. package/dist/shared/lib/clock/clock.d.ts.map +1 -0
  286. package/dist/shared/lib/clock/clock.js +85 -0
  287. package/dist/shared/lib/clock/clock.js.map +1 -0
  288. package/dist/shared/lib/clock/index.d.ts +3 -0
  289. package/dist/shared/lib/clock/index.d.ts.map +1 -0
  290. package/dist/shared/lib/clock/index.js +2 -0
  291. package/dist/shared/lib/clock/index.js.map +1 -0
  292. package/dist/shared/lib/cookies/index.d.ts +3 -0
  293. package/dist/shared/lib/cookies/index.d.ts.map +1 -0
  294. package/dist/shared/lib/cookies/index.js +2 -0
  295. package/dist/shared/lib/cookies/index.js.map +1 -0
  296. package/dist/shared/lib/cookies/set-cookie.d.ts +22 -0
  297. package/dist/shared/lib/cookies/set-cookie.d.ts.map +1 -0
  298. package/dist/shared/lib/cookies/set-cookie.js +89 -0
  299. package/dist/shared/lib/cookies/set-cookie.js.map +1 -0
  300. package/dist/shared/lib/envelope/envelope.d.ts +50 -0
  301. package/dist/shared/lib/envelope/envelope.d.ts.map +1 -0
  302. package/dist/shared/lib/envelope/envelope.js +111 -0
  303. package/dist/shared/lib/envelope/envelope.js.map +1 -0
  304. package/dist/shared/lib/envelope/index.d.ts +3 -0
  305. package/dist/shared/lib/envelope/index.d.ts.map +1 -0
  306. package/dist/shared/lib/envelope/index.js +2 -0
  307. package/dist/shared/lib/envelope/index.js.map +1 -0
  308. package/dist/shared/lib/errors/index.d.ts +3 -0
  309. package/dist/shared/lib/errors/index.d.ts.map +1 -0
  310. package/dist/shared/lib/errors/index.js +2 -0
  311. package/dist/shared/lib/errors/index.js.map +1 -0
  312. package/dist/shared/lib/errors/wirestage-error.d.ts +28 -0
  313. package/dist/shared/lib/errors/wirestage-error.d.ts.map +1 -0
  314. package/dist/shared/lib/errors/wirestage-error.js +16 -0
  315. package/dist/shared/lib/errors/wirestage-error.js.map +1 -0
  316. package/dist/shared/lib/id/id.d.ts +10 -0
  317. package/dist/shared/lib/id/id.d.ts.map +1 -0
  318. package/dist/shared/lib/id/id.js +26 -0
  319. package/dist/shared/lib/id/id.js.map +1 -0
  320. package/dist/shared/lib/id/index.d.ts +2 -0
  321. package/dist/shared/lib/id/index.d.ts.map +1 -0
  322. package/dist/shared/lib/id/index.js +2 -0
  323. package/dist/shared/lib/id/index.js.map +1 -0
  324. package/dist/shared/lib/logger/index.d.ts +3 -0
  325. package/dist/shared/lib/logger/index.d.ts.map +1 -0
  326. package/dist/shared/lib/logger/index.js +2 -0
  327. package/dist/shared/lib/logger/index.js.map +1 -0
  328. package/dist/shared/lib/logger/logger.d.ts +46 -0
  329. package/dist/shared/lib/logger/logger.d.ts.map +1 -0
  330. package/dist/shared/lib/logger/logger.js +67 -0
  331. package/dist/shared/lib/logger/logger.js.map +1 -0
  332. package/dist/shared/lib/match/index.d.ts +3 -0
  333. package/dist/shared/lib/match/index.d.ts.map +1 -0
  334. package/dist/shared/lib/match/index.js +2 -0
  335. package/dist/shared/lib/match/index.js.map +1 -0
  336. package/dist/shared/lib/match/url-matcher.d.ts +27 -0
  337. package/dist/shared/lib/match/url-matcher.d.ts.map +1 -0
  338. package/dist/shared/lib/match/url-matcher.js +88 -0
  339. package/dist/shared/lib/match/url-matcher.js.map +1 -0
  340. package/dist/sse.d.ts +3 -0
  341. package/dist/sse.d.ts.map +1 -0
  342. package/dist/sse.js +3 -0
  343. package/dist/sse.js.map +1 -0
  344. package/dist/webrtc.d.ts +3 -0
  345. package/dist/webrtc.d.ts.map +1 -0
  346. package/dist/webrtc.js +3 -0
  347. package/dist/webrtc.js.map +1 -0
  348. package/dist/websocket.d.ts +3 -0
  349. package/dist/websocket.d.ts.map +1 -0
  350. package/dist/websocket.js +3 -0
  351. package/dist/websocket.js.map +1 -0
  352. package/dist/widgets/stage/index.d.ts +3 -0
  353. package/dist/widgets/stage/index.d.ts.map +1 -0
  354. package/dist/widgets/stage/index.js +2 -0
  355. package/dist/widgets/stage/index.js.map +1 -0
  356. package/dist/widgets/stage/lib/attached-context.d.ts +10 -0
  357. package/dist/widgets/stage/lib/attached-context.d.ts.map +1 -0
  358. package/dist/widgets/stage/lib/attached-context.js +2 -0
  359. package/dist/widgets/stage/lib/attached-context.js.map +1 -0
  360. package/dist/widgets/stage/lib/create-stage.d.ts +12 -0
  361. package/dist/widgets/stage/lib/create-stage.d.ts.map +1 -0
  362. package/dist/widgets/stage/lib/create-stage.js +250 -0
  363. package/dist/widgets/stage/lib/create-stage.js.map +1 -0
  364. package/dist/widgets/stage/lib/http-router.d.ts +44 -0
  365. package/dist/widgets/stage/lib/http-router.d.ts.map +1 -0
  366. package/dist/widgets/stage/lib/http-router.js +696 -0
  367. package/dist/widgets/stage/lib/http-router.js.map +1 -0
  368. package/dist/widgets/stage/lib/page-host.d.ts +36 -0
  369. package/dist/widgets/stage/lib/page-host.d.ts.map +1 -0
  370. package/dist/widgets/stage/lib/page-host.js +240 -0
  371. package/dist/widgets/stage/lib/page-host.js.map +1 -0
  372. package/dist/widgets/stage/lib/page-runtime.d.ts +93 -0
  373. package/dist/widgets/stage/lib/page-runtime.d.ts.map +1 -0
  374. package/dist/widgets/stage/lib/page-runtime.js +247 -0
  375. package/dist/widgets/stage/lib/page-runtime.js.map +1 -0
  376. package/dist/widgets/stage/lib/reads.d.ts +21 -0
  377. package/dist/widgets/stage/lib/reads.d.ts.map +1 -0
  378. package/dist/widgets/stage/lib/reads.js +97 -0
  379. package/dist/widgets/stage/lib/reads.js.map +1 -0
  380. package/dist/widgets/stage/lib/response-stream.d.ts +23 -0
  381. package/dist/widgets/stage/lib/response-stream.d.ts.map +1 -0
  382. package/dist/widgets/stage/lib/response-stream.js +108 -0
  383. package/dist/widgets/stage/lib/response-stream.js.map +1 -0
  384. package/dist/widgets/stage/lib/socket-router.d.ts +25 -0
  385. package/dist/widgets/stage/lib/socket-router.d.ts.map +1 -0
  386. package/dist/widgets/stage/lib/socket-router.js +233 -0
  387. package/dist/widgets/stage/lib/socket-router.js.map +1 -0
  388. package/dist/widgets/stage/model/stage.d.ts +88 -0
  389. package/dist/widgets/stage/model/stage.d.ts.map +1 -0
  390. package/dist/widgets/stage/model/stage.js +2 -0
  391. package/dist/widgets/stage/model/stage.js.map +1 -0
  392. package/package.json +140 -5
  393. package/src/app/playwright/index.ts +7 -0
  394. package/src/app/playwright/lib/fixture.ts +201 -0
  395. package/src/connect.ts +6 -0
  396. package/src/entities/frame/@x/plugin.ts +8 -0
  397. package/src/entities/frame/index.ts +19 -0
  398. package/src/entities/frame/lib/filter.ts +58 -0
  399. package/src/entities/frame/lib/payload.ts +42 -0
  400. package/src/entities/frame/lib/snapshot.ts +105 -0
  401. package/src/entities/frame/lib/timeline.ts +147 -0
  402. package/src/entities/frame/model/frame.ts +191 -0
  403. package/src/entities/plugin/index.ts +36 -0
  404. package/src/entities/plugin/lib/define-plugin.ts +12 -0
  405. package/src/entities/plugin/lib/named.ts +21 -0
  406. package/src/entities/plugin/model/attachment.ts +18 -0
  407. package/src/entities/plugin/model/http.ts +156 -0
  408. package/src/entities/plugin/model/page.ts +110 -0
  409. package/src/entities/plugin/model/plugin.ts +96 -0
  410. package/src/entities/plugin/model/socket.ts +113 -0
  411. package/src/entities/plugin/model/stream.ts +46 -0
  412. package/src/features/connect/index.ts +23 -0
  413. package/src/features/connect/lib/calls.ts +58 -0
  414. package/src/features/connect/lib/client.ts +203 -0
  415. package/src/features/connect/lib/create-connect.ts +164 -0
  416. package/src/features/connect/lib/faults.ts +132 -0
  417. package/src/features/connect/lib/protocol.ts +321 -0
  418. package/src/features/connect/lib/record.ts +48 -0
  419. package/src/features/connect/lib/recorder.ts +306 -0
  420. package/src/features/connect/lib/rules.ts +385 -0
  421. package/src/features/connect/lib/serve.ts +114 -0
  422. package/src/features/connect/lib/status-of.ts +20 -0
  423. package/src/features/connect/lib/stubs.ts +282 -0
  424. package/src/features/connect/lib/universal.ts +100 -0
  425. package/src/features/connect/model/types.ts +305 -0
  426. package/src/features/rest/index.ts +23 -0
  427. package/src/features/rest/lib/calls.ts +31 -0
  428. package/src/features/rest/lib/create-rest.ts +169 -0
  429. package/src/features/rest/lib/path.ts +70 -0
  430. package/src/features/rest/lib/reply.ts +74 -0
  431. package/src/features/rest/model/types.ts +113 -0
  432. package/src/features/sse/index.ts +10 -0
  433. package/src/features/sse/lib/create-sse.ts +129 -0
  434. package/src/features/sse/lib/encode.ts +28 -0
  435. package/src/features/sse/model/types.ts +72 -0
  436. package/src/features/webrtc/index.ts +6 -0
  437. package/src/features/webrtc/lib/create-webrtc.ts +149 -0
  438. package/src/features/webrtc/lib/rtc-page-module.ts +189 -0
  439. package/src/features/webrtc/lib/to-frame.ts +63 -0
  440. package/src/features/webrtc/model/types.ts +80 -0
  441. package/src/features/websocket/index.ts +15 -0
  442. package/src/features/websocket/lib/create-websocket.ts +41 -0
  443. package/src/features/websocket/lib/mock.ts +114 -0
  444. package/src/features/websocket/lib/proxy.ts +153 -0
  445. package/src/features/websocket/lib/wire.ts +78 -0
  446. package/src/features/websocket/model/types.ts +134 -0
  447. package/src/index.ts +111 -0
  448. package/src/playwright.ts +8 -0
  449. package/src/rest.ts +2 -0
  450. package/src/shared/api/http-server/index.ts +2 -0
  451. package/src/shared/api/http-server/listen.ts +71 -0
  452. package/src/shared/api/playwright/index.ts +17 -0
  453. package/src/shared/api/playwright/ports.ts +150 -0
  454. package/src/shared/api/stream-server/index.ts +7 -0
  455. package/src/shared/api/stream-server/stream-server.ts +254 -0
  456. package/src/shared/lib/async/arrivals.ts +91 -0
  457. package/src/shared/lib/async/async-queue.ts +101 -0
  458. package/src/shared/lib/async/deferred.ts +38 -0
  459. package/src/shared/lib/async/index.ts +11 -0
  460. package/src/shared/lib/async/run-all.ts +19 -0
  461. package/src/shared/lib/bytes/bytes.ts +53 -0
  462. package/src/shared/lib/bytes/index.ts +9 -0
  463. package/src/shared/lib/clock/clock.ts +114 -0
  464. package/src/shared/lib/clock/index.ts +2 -0
  465. package/src/shared/lib/cookies/index.ts +2 -0
  466. package/src/shared/lib/cookies/set-cookie.ts +105 -0
  467. package/src/shared/lib/envelope/envelope.ts +133 -0
  468. package/src/shared/lib/envelope/index.ts +9 -0
  469. package/src/shared/lib/errors/index.ts +5 -0
  470. package/src/shared/lib/errors/wirestage-error.ts +50 -0
  471. package/src/shared/lib/id/id.ts +29 -0
  472. package/src/shared/lib/id/index.ts +1 -0
  473. package/src/shared/lib/logger/index.ts +12 -0
  474. package/src/shared/lib/logger/logger.ts +126 -0
  475. package/src/shared/lib/match/index.ts +6 -0
  476. package/src/shared/lib/match/url-matcher.ts +107 -0
  477. package/src/sse.ts +2 -0
  478. package/src/webrtc.ts +2 -0
  479. package/src/websocket.ts +2 -0
  480. package/src/widgets/stage/index.ts +9 -0
  481. package/src/widgets/stage/lib/attached-context.ts +10 -0
  482. package/src/widgets/stage/lib/create-stage.ts +307 -0
  483. package/src/widgets/stage/lib/http-router.ts +954 -0
  484. package/src/widgets/stage/lib/page-host.ts +375 -0
  485. package/src/widgets/stage/lib/page-runtime.ts +314 -0
  486. package/src/widgets/stage/lib/reads.ts +128 -0
  487. package/src/widgets/stage/lib/response-stream.ts +139 -0
  488. package/src/widgets/stage/lib/socket-router.ts +300 -0
  489. package/src/widgets/stage/model/stage.ts +110 -0
@@ -0,0 +1,96 @@
1
+ import { createArrivals, createDeferred, } from "../../../shared/lib/async/index.js";
2
+ import { closedError, createSocketLog, encodeOutgoing, toMessage, } from "./wire.js";
3
+ /** A fake server: every matching socket becomes a connection the test drives. */
4
+ export async function createMock(context, protocol, url, options) {
5
+ const connections = createArrivals({
6
+ clock: context.clock,
7
+ label: "WebSocket connection",
8
+ });
9
+ /** Each connection, with whether it is over: `broadcast` skips those. */
10
+ const ended = new Map();
11
+ const rule = await context.sockets.add({
12
+ protocol,
13
+ label: `mock ${String(url)}`,
14
+ url,
15
+ ...(options.times === undefined ? {} : { times: options.times }),
16
+ async open(socket) {
17
+ const log = createSocketLog(context, protocol, socket);
18
+ const messages = createArrivals({
19
+ clock: context.clock,
20
+ label: `message on ${socket.url.pathname}`,
21
+ });
22
+ const closed = createDeferred();
23
+ // The page hears of a close the stub starts through the same event
24
+ // as its own; whoever asked first is who closed.
25
+ let closedBy = "page";
26
+ log("lifecycle", "none", "page", { event: "open", url: socket.url.href });
27
+ socket.page.onMessage((raw) => {
28
+ messages.push(toMessage("out", raw, context.clock.now()));
29
+ log("message", "out", "page", {}, raw);
30
+ });
31
+ socket.page.onClose((code, reason) => {
32
+ // Once per connection: a close is reported again when the route
33
+ // completes it, which the close below does.
34
+ if (closed.settled)
35
+ return;
36
+ closed.resolve({ code, reason });
37
+ log("lifecycle", "none", closedBy, { event: "close", code, reason });
38
+ // A handler here turns off Playwright's own answer to the page's
39
+ // close, and without one the page's socket would hang in CLOSING.
40
+ if (closedBy === "page")
41
+ void socket.page.close({
42
+ ...(code === undefined ? {} : { code }),
43
+ ...(reason === undefined ? {} : { reason }),
44
+ });
45
+ });
46
+ // Over from the moment the stub closes it, before the page hears.
47
+ const over = () => closed.settled || closedBy === "stub";
48
+ const connection = {
49
+ url: socket.url.href,
50
+ get messages() {
51
+ return messages.items;
52
+ },
53
+ nextMessage: (waitOptions) => messages.next(waitOptions),
54
+ send(data) {
55
+ if (over())
56
+ throw closedError(socket);
57
+ const encoded = encodeOutgoing(data);
58
+ socket.page.send(encoded);
59
+ log("message", "in", "stub", {}, encoded);
60
+ },
61
+ async close(closeOptions) {
62
+ closedBy = "stub";
63
+ await socket.page.close(closeOptions);
64
+ },
65
+ closed: closed.promise,
66
+ };
67
+ connections.push(connection);
68
+ ended.set(connection, over);
69
+ try {
70
+ await options.onConnect?.(connection);
71
+ }
72
+ catch (error) {
73
+ // The stage closes the socket of a rule that throws: the close
74
+ // the page then hears of is the stub's doing.
75
+ closedBy = "stub";
76
+ throw error;
77
+ }
78
+ },
79
+ });
80
+ return {
81
+ get hits() {
82
+ return rule.hits;
83
+ },
84
+ get connections() {
85
+ return connections.items;
86
+ },
87
+ next: (waitOptions) => connections.next(waitOptions),
88
+ broadcast(data) {
89
+ for (const [connection, isOver] of ended)
90
+ if (!isOver())
91
+ connection.send(data);
92
+ },
93
+ remove: () => rule.remove(),
94
+ };
95
+ }
96
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../../src/features/websocket/lib/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { PluginContext } from "../../../entities/plugin/index.js";
2
+ import type { UrlMatcher } from "../../../shared/lib/match/index.js";
3
+ import type { WsProxy, WsProxyOptions } from "../model/types.js";
4
+ /**
5
+ * A pass-through to the real server that records both directions and can
6
+ * drop or inject messages on the way.
7
+ */
8
+ export declare function createProxy(context: PluginContext, protocol: string, url: UrlMatcher, options: WsProxyOptions): Promise<WsProxy>;
9
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../../src/features/websocket/lib/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EAEb,MAAM,mCAAmC,CAAC;AAK3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAGX,OAAO,EAEP,cAAc,EACd,MAAM,mBAAmB,CAAC;AAQ3B;;;GAGG;AACH,wBAAsB,WAAW,CAChC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC,CAwHlB"}
@@ -0,0 +1,120 @@
1
+ import { createArrivals, createDeferred, } from "../../../shared/lib/async/index.js";
2
+ import { closedError, createSocketLog, encodeOutgoing, toMessage, } from "./wire.js";
3
+ /**
4
+ * A pass-through to the real server that records both directions and can
5
+ * drop or inject messages on the way.
6
+ */
7
+ export async function createProxy(context, protocol, url, options) {
8
+ const connections = createArrivals({
9
+ clock: context.clock,
10
+ label: "WebSocket connection",
11
+ });
12
+ const rule = await context.sockets.add({
13
+ protocol,
14
+ label: `proxy ${String(url)}`,
15
+ url,
16
+ ...(options.times === undefined ? {} : { times: options.times }),
17
+ open(socket) {
18
+ const log = createSocketLog(context, protocol, socket);
19
+ const page = socket.page;
20
+ const server = socket.connectToServer();
21
+ const messages = createArrivals({
22
+ clock: context.clock,
23
+ label: `message on ${socket.url.pathname}`,
24
+ });
25
+ const closed = createDeferred();
26
+ // Who closed, when neither end did: the test, or the stub — the
27
+ // stage closes the socket of a rule that throws.
28
+ let closedBy;
29
+ log("lifecycle", "none", "page", { event: "open", url: socket.url.href });
30
+ const forward = (direction, raw, to) => {
31
+ const passing = toMessage(direction, raw, context.clock.now());
32
+ messages.push(passing);
33
+ let dropped;
34
+ try {
35
+ dropped = options.drop?.(passing);
36
+ }
37
+ catch (error) {
38
+ // The stage fails a rule that throws and closes both ends: the
39
+ // closes they report are the stub's, not the page's or server's.
40
+ closedBy ??= "stub";
41
+ throw error;
42
+ }
43
+ if (dropped) {
44
+ log("fault", direction, "stub", { reason: "dropped" }, raw);
45
+ return;
46
+ }
47
+ log("message", direction, direction === "out" ? "page" : "network", {}, raw);
48
+ to.send(raw);
49
+ };
50
+ page.onMessage((raw) => forward("out", raw, server));
51
+ server.onMessage((raw) => forward("in", raw, page));
52
+ // A close handler turns off Playwright's own forwarding of the close,
53
+ // so whichever end closes first, both are closed by hand: the other
54
+ // end to pass the close on, and the end that started it to complete
55
+ // it — the page's socket hangs in CLOSING until its end is closed.
56
+ // Once: each of those closes is reported back through a handler.
57
+ const relay = (from) => (code, reason) => {
58
+ if (closed.settled)
59
+ return;
60
+ closed.resolve({ code, reason });
61
+ log("lifecycle", "none", closedBy ?? from, {
62
+ event: "close",
63
+ code,
64
+ reason,
65
+ });
66
+ const passed = {
67
+ ...(code === undefined ? {} : { code }),
68
+ ...(reason === undefined ? {} : { reason }),
69
+ };
70
+ void page.close(passed);
71
+ void server.close(passed);
72
+ };
73
+ page.onClose(relay("page"));
74
+ server.onClose(relay("network"));
75
+ // Over from the moment the test closes it or the rule fails, before
76
+ // either end hears.
77
+ const over = () => closed.settled || closedBy !== undefined;
78
+ connections.push({
79
+ url: socket.url.href,
80
+ get messages() {
81
+ return messages.items;
82
+ },
83
+ nextMessage: (waitOptions) => messages.next(waitOptions),
84
+ toPage(data) {
85
+ if (over())
86
+ throw closedError(socket);
87
+ const encoded = encodeOutgoing(data);
88
+ page.send(encoded);
89
+ log("message", "in", "test", { injected: true }, encoded);
90
+ },
91
+ toServer(data) {
92
+ if (over())
93
+ throw closedError(socket);
94
+ const encoded = encodeOutgoing(data);
95
+ server.send(encoded);
96
+ log("message", "out", "test", { injected: true }, encoded);
97
+ },
98
+ async close(closeOptions) {
99
+ closedBy = "test";
100
+ await Promise.all([
101
+ page.close(closeOptions),
102
+ server.close(closeOptions),
103
+ ]);
104
+ },
105
+ closed: closed.promise,
106
+ });
107
+ },
108
+ });
109
+ return {
110
+ get hits() {
111
+ return rule.hits;
112
+ },
113
+ get connections() {
114
+ return connections.items;
115
+ },
116
+ next: (waitOptions) => connections.next(waitOptions),
117
+ remove: () => rule.remove(),
118
+ };
119
+ }
120
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../src/features/websocket/lib/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Direction, FrameKind, FrameSource } from "../../../entities/frame/index.js";
2
+ import type { PluginContext, SocketView } from "../../../entities/plugin/index.js";
3
+ import { WirestageError } from "../../../shared/lib/errors/index.js";
4
+ import type { WsData, WsMessage } from "../model/types.js";
5
+ /**
6
+ * What a send to a connection that is over throws. Playwright would drop
7
+ * the message without a word, and the timeline would show it delivered.
8
+ */
9
+ export declare function closedError(socket: SocketView): WirestageError;
10
+ /** What a test passes to `send`, as the wire carries it. */
11
+ export declare function encodeOutgoing(data: WsData): string | Uint8Array;
12
+ export declare function toMessage(direction: "in" | "out", raw: string | Uint8Array, at: number): WsMessage;
13
+ /** Writes one connection's frames: same endpoint, correlation and context. */
14
+ export type SocketLog = (kind: FrameKind, direction: Direction, source: FrameSource, meta: Readonly<Record<string, unknown>>, data?: string | Uint8Array) => void;
15
+ export declare function createSocketLog(context: Pick<PluginContext, "timeline">, protocol: string, socket: SocketView): SocketLog;
16
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../../src/features/websocket/lib/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACX,aAAa,EACb,UAAU,EACV,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAK9D;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAMhE;AAED,wBAAgB,SAAS,CACxB,SAAS,EAAE,IAAI,GAAG,KAAK,EACvB,GAAG,EAAE,MAAM,GAAG,UAAU,EACxB,EAAE,EAAE,MAAM,GACR,SAAS,CASX;AAED,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,CACvB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,KACtB,IAAI,CAAC;AAEV,wBAAgB,eAAe,CAC9B,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EACxC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,GAChB,SAAS,CAgBX"}
@@ -0,0 +1,46 @@
1
+ import { toBytes, utf8 } from "../../../shared/lib/bytes/index.js";
2
+ import { WirestageError } from "../../../shared/lib/errors/index.js";
3
+ /**
4
+ * What a send to a connection that is over throws. Playwright would drop
5
+ * the message without a word, and the timeline would show it delivered.
6
+ */
7
+ export function closedError(socket) {
8
+ return new WirestageError("CLOSED", `the WebSocket connection to ${socket.url.href} is closed`);
9
+ }
10
+ /** What a test passes to `send`, as the wire carries it. */
11
+ export function encodeOutgoing(data) {
12
+ if (typeof data === "string")
13
+ return data;
14
+ // Any binary form goes out as bytes; only what is left is a value.
15
+ if (data instanceof ArrayBuffer || ArrayBuffer.isView(data))
16
+ return toBytes(data);
17
+ return JSON.stringify(data);
18
+ }
19
+ export function toMessage(direction, raw, at) {
20
+ const text = () => (typeof raw === "string" ? raw : utf8(raw));
21
+ return {
22
+ direction,
23
+ data: raw,
24
+ at,
25
+ text,
26
+ json: () => JSON.parse(text()),
27
+ };
28
+ }
29
+ export function createSocketLog(context, protocol, socket) {
30
+ return (kind, direction, source, meta, data) => {
31
+ context.timeline.append({
32
+ protocol,
33
+ kind,
34
+ direction,
35
+ // The path, like every HTTP frame: it reads the same on the dev
36
+ // server, the preview build and CI, whose origins all differ.
37
+ endpoint: socket.url.pathname,
38
+ source,
39
+ correlation: socket.correlation,
40
+ context: socket.context,
41
+ meta,
42
+ ...(data === undefined ? {} : { data }),
43
+ });
44
+ };
45
+ }
46
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../../src/features/websocket/lib/wire.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAGrE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC7C,OAAO,IAAI,cAAc,CACxB,QAAQ,EACR,+BAA+B,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAC1D,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,mEAAmE;IACnE,IAAI,IAAI,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,SAAS,CACxB,SAAuB,EACvB,GAAwB,EACxB,EAAU;IAEV,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,OAAO;QACN,SAAS;QACT,IAAI,EAAE,GAAG;QACT,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,GAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAM;KACtC,CAAC;AACH,CAAC;AAWD,MAAM,UAAU,eAAe,CAC9B,OAAwC,EACxC,QAAgB,EAChB,MAAkB;IAElB,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,QAAQ;YACR,IAAI;YACJ,SAAS;YACT,gEAAgE;YAChE,8DAA8D;YAC9D,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ;YAC7B,MAAM;YACN,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI;YACJ,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACvC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,133 @@
1
+ import type { Frame } from "../../../entities/frame/index.js";
2
+ import type { UrlMatcher } from "../../../shared/lib/match/index.js";
3
+ export interface WebSocketOptions {
4
+ /**
5
+ * Leave `WebSocket` alone until the first `mock()` or `proxy()`.
6
+ *
7
+ * By default the plugin routes WebSockets from the moment a context is
8
+ * attached, so a mock added mid-test reaches the pages that are already
9
+ * open. Playwright routes by replacing `WebSocket` in every document as it
10
+ * loads, and a socket no rule takes is passed through to the real server.
11
+ * With `lazy`, nothing is replaced until the first rule exists — and that
12
+ * rule then applies only to the documents loaded after it.
13
+ */
14
+ readonly lazy?: boolean;
15
+ }
16
+ /** What a test may send: text, bytes in any binary form, or a value sent as JSON. */
17
+ export type WsData = string | ArrayBuffer | ArrayBufferView | object;
18
+ export interface WsMessage {
19
+ /** `out` came from the page, `in` went to it. */
20
+ readonly direction: "in" | "out";
21
+ readonly data: string | Uint8Array;
22
+ readonly at: number;
23
+ text(): string;
24
+ json<T = unknown>(): T;
25
+ }
26
+ export interface WsCloseInfo {
27
+ readonly code: number | undefined;
28
+ readonly reason: string | undefined;
29
+ }
30
+ export interface WsCloseOptions {
31
+ /**
32
+ * The code the page's socket closes with: any a server may send. A proxy
33
+ * also closes the real server's end, through the browser, which sends
34
+ * only 1000 and 3000-4999 — another code reaches the page as given and
35
+ * the server as a normal closure, 1000.
36
+ */
37
+ readonly code?: number;
38
+ /**
39
+ * The page gets it whole. A proxy's real server gets at most 123 bytes
40
+ * of it, cut on a character: all a close frame carries, and all the
41
+ * browser will send.
42
+ */
43
+ readonly reason?: string;
44
+ }
45
+ export interface WsConnection {
46
+ readonly url: string;
47
+ /** Messages the page sent, oldest first. */
48
+ readonly messages: readonly WsMessage[];
49
+ /** The next message the page sends (or sent and nobody took). */
50
+ nextMessage(options?: {
51
+ readonly timeout?: number;
52
+ }): Promise<WsMessage>;
53
+ /**
54
+ * Send to the page. Throws `CLOSED` once the connection is over — from
55
+ * the moment `close()` is called — since the page would never get it.
56
+ */
57
+ send(data: WsData): void;
58
+ close(options?: WsCloseOptions): Promise<void>;
59
+ /** Resolves when the connection is over, whoever closed it. */
60
+ readonly closed: Promise<WsCloseInfo>;
61
+ }
62
+ export interface WsMockOptions {
63
+ /** Answer this many connections, then leave the rest to the next rule. */
64
+ readonly times?: number;
65
+ /**
66
+ * Called for each new connection, e.g. to send a greeting. The page's
67
+ * socket opens once it settles. If it throws, the stage closes the
68
+ * page's socket with 1011 and records a `rule-error` fault.
69
+ */
70
+ readonly onConnect?: (connection: WsConnection) => void | Promise<void>;
71
+ }
72
+ export interface WsMock {
73
+ /** Connections this mock took. */
74
+ readonly hits: number;
75
+ readonly connections: readonly WsConnection[];
76
+ /** The next connection the page opens (or opened and nobody took). */
77
+ next(options?: {
78
+ readonly timeout?: number;
79
+ }): Promise<WsConnection>;
80
+ /** Send to every connection that is not over yet. */
81
+ broadcast(data: WsData): void;
82
+ /** New connections go to the real server again. */
83
+ remove(): Promise<void>;
84
+ }
85
+ export interface WsProxyOptions {
86
+ /** Proxy this many connections, then leave the rest to the next rule. */
87
+ readonly times?: number;
88
+ /**
89
+ * Drop a message instead of forwarding it. Dropped messages are recorded
90
+ * as faults. If it throws, the stage closes both ends, the page's with
91
+ * 1011, and records a `rule-error` fault.
92
+ */
93
+ readonly drop?: (message: WsMessage) => boolean;
94
+ }
95
+ export interface WsProxyConnection {
96
+ readonly url: string;
97
+ /** Messages in both directions, oldest first. */
98
+ readonly messages: readonly WsMessage[];
99
+ nextMessage(options?: {
100
+ readonly timeout?: number;
101
+ }): Promise<WsMessage>;
102
+ /**
103
+ * Inject a message to the page, as if the server sent it. Throws
104
+ * `CLOSED` once the connection is over, as `toServer` does.
105
+ */
106
+ toPage(data: WsData): void;
107
+ /** Inject a message to the server, as if the page sent it. */
108
+ toServer(data: WsData): void;
109
+ /** Close both sides. */
110
+ close(options?: WsCloseOptions): Promise<void>;
111
+ /** Resolves when the connection is over, whoever closed it. */
112
+ readonly closed: Promise<WsCloseInfo>;
113
+ }
114
+ export interface WsProxy {
115
+ /** Connections this proxy took. */
116
+ readonly hits: number;
117
+ readonly connections: readonly WsProxyConnection[];
118
+ next(options?: {
119
+ readonly timeout?: number;
120
+ }): Promise<WsProxyConnection>;
121
+ remove(): Promise<void>;
122
+ }
123
+ export interface WebSocketApi {
124
+ /** Answer matching WebSockets with a fake server the test drives. */
125
+ mock(url: UrlMatcher, options?: WsMockOptions): Promise<WsMock>;
126
+ /** Pass matching WebSockets through to the real server, recording and optionally dropping messages. */
127
+ proxy(url: UrlMatcher, options?: WsProxyOptions): Promise<WsProxy>;
128
+ /** Every recorded frame: opens, messages, drops, closes. */
129
+ frames(filter?: {
130
+ readonly endpoint?: string | RegExp;
131
+ }): Promise<Frame[]>;
132
+ }
133
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/features/websocket/model/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/features/websocket/model/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @heojeongbo/wirestage — the core: the stage, its timeline, and the plugin
3
+ * contract every protocol is written against. Protocols live in subpaths:
4
+ * `/connect`, `/rest`, `/sse`, `/websocket`, `/webrtc`; the Playwright
5
+ * fixture in `/playwright`.
6
+ */
7
+ export type { Direction, Frame, FrameFilter, FrameInit, FrameKind, FrameSource, Payload, PayloadInput, SnapshotFrame, SnapshotOptions, Timeline, TimelineCursor, TimelineOptions, TimelineSnapshot, } from "./entities/frame/index.js";
8
+ export { createTimeline } from "./entities/frame/index.js";
9
+ export type { AbortErrorCode, AnyWirePlugin, Attachment, HttpOutcome, HttpRequestView, HttpRouter, HttpRule, HttpRuleHandle, PageEntry, PageHost, PageInstaller, PageModule, PageModuleEnv, PageSource, PassthroughResponse, PluginApis, PluginContext, PluginRuntime, ResponseStream, SocketPeer, SocketRouter, SocketRule, SocketRuleHandle, SocketView, StreamEnd, WaitForOptions, WirePlugin, } from "./entities/plugin/index.js";
10
+ export { definePlugin, named } from "./entities/plugin/index.js";
11
+ export type { ContextPort, CookieJarPort, FramePort, PagePort, } from "./shared/api/playwright/index.js";
12
+ export type { Arrivals, ArrivalsOptions, AsyncQueue, Deferred, } from "./shared/lib/async/index.js";
13
+ export { createArrivals, createAsyncQueue, createDeferred, } from "./shared/lib/async/index.js";
14
+ export type { Clock, ManualClock } from "./shared/lib/clock/index.js";
15
+ export { createManualClock, createSystemClock, } from "./shared/lib/clock/index.js";
16
+ export type { CookieInit } from "./shared/lib/cookies/index.js";
17
+ export type { Envelope } from "./shared/lib/envelope/index.js";
18
+ export { createEnvelopeReader, decodeEnvelopes, EnvelopeFlag, encodeEnvelope, encodeEnvelopes, parseTrailerBlock, } from "./shared/lib/envelope/index.js";
19
+ export type { WirestageErrorCode } from "./shared/lib/errors/index.js";
20
+ export { isWirestageError, WirestageError } from "./shared/lib/errors/index.js";
21
+ export type { LogScope, LogThreshold, ScopedLogger, } from "./shared/lib/logger/index.js";
22
+ export { getLogThreshold, setLogThreshold } from "./shared/lib/logger/index.js";
23
+ export type { UrlMatcher } from "./shared/lib/match/index.js";
24
+ export { compileUrlMatcher } from "./shared/lib/match/index.js";
25
+ export type { AttachOptions, ReportOptions, Stage, StageCore, StageOptions, StageReport, } from "./widgets/stage/index.js";
26
+ export { createStage } from "./widgets/stage/index.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,eAAe,EACf,gBAAgB,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,YAAY,EACX,cAAc,EACd,aAAa,EACb,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,QAAQ,EACR,aAAa,EACb,UAAU,EACV,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,cAAc,EACd,UAAU,GACV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEjE,YAAY,EACX,WAAW,EACX,aAAa,EACb,SAAS,EACT,QAAQ,GACR,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EACX,QAAQ,EACR,eAAe,EACf,UAAU,EACV,QAAQ,GACR,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,cAAc,GACd,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACN,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,YAAY,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EACN,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,GACjB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EACX,QAAQ,EACR,YAAY,EACZ,YAAY,GACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,YAAY,EACX,aAAa,EACb,aAAa,EACb,KAAK,EACL,SAAS,EACT,YAAY,EACZ,WAAW,GACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @heojeongbo/wirestage — the core: the stage, its timeline, and the plugin
3
+ * contract every protocol is written against. Protocols live in subpaths:
4
+ * `/connect`, `/rest`, `/sse`, `/websocket`, `/webrtc`; the Playwright
5
+ * fixture in `/playwright`.
6
+ */
7
+ export { createTimeline } from "./entities/frame/index.js";
8
+ export { definePlugin, named } from "./entities/plugin/index.js";
9
+ export { createArrivals, createAsyncQueue, createDeferred, } from "./shared/lib/async/index.js";
10
+ export { createManualClock, createSystemClock, } from "./shared/lib/clock/index.js";
11
+ export { createEnvelopeReader, decodeEnvelopes, EnvelopeFlag, encodeEnvelope, encodeEnvelopes, parseTrailerBlock, } from "./shared/lib/envelope/index.js";
12
+ export { isWirestageError, WirestageError } from "./shared/lib/errors/index.js";
13
+ export { getLogThreshold, setLogThreshold } from "./shared/lib/logger/index.js";
14
+ export { compileUrlMatcher } from "./shared/lib/match/index.js";
15
+ export { createStage } from "./widgets/stage/index.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AA+B3D,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAejE,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,cAAc,GACd,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACN,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EACN,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,GACjB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAMhF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAShE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** @heojeongbo/wirestage/playwright — the `stage` fixture for @playwright/test. */
2
+ export type { ReportMode, StageFixtureArgs, StageFixtureOptions, StageTestInfo, } from "./app/playwright/index.js";
3
+ export { createStageFixture, withStage } from "./app/playwright/index.js";
4
+ //# sourceMappingURL=playwright.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,YAAY,EACX,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createStageFixture, withStage } from "./app/playwright/index.js";
2
+ //# sourceMappingURL=playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/rest.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ /** @heojeongbo/wirestage/rest — REST and other plain HTTP. */
2
+ export * from "./features/rest/index.js";
3
+ //# sourceMappingURL=rest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,cAAc,0BAA0B,CAAC"}
package/dist/rest.js ADDED
@@ -0,0 +1,3 @@
1
+ /** @heojeongbo/wirestage/rest — REST and other plain HTTP. */
2
+ export * from "./features/rest/index.js";
3
+ //# sourceMappingURL=rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { Listening, ListenOptions } from "./listen.js";
2
+ export { listen } from "./listen.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/api/http-server/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { listen } from "./listen.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/api/http-server/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { Server } from "node:net";
2
+ export interface ListenOptions {
3
+ /** Names the server in the "port in use" error. */
4
+ readonly name: string;
5
+ readonly protocol: "http" | "https";
6
+ readonly host?: string;
7
+ /** 0, the default, picks a free port. */
8
+ readonly port?: number;
9
+ }
10
+ export interface Listening {
11
+ readonly url: string;
12
+ readonly port: number;
13
+ /** Stop accepting and drop open connections at once. */
14
+ close(): Promise<void>;
15
+ }
16
+ /**
17
+ * Start listening and return a handle whose `close` really is immediate.
18
+ * `server.close()` alone waits for every keep-alive and streaming connection to
19
+ * end on its own — a held-open stream would stall test teardown until the
20
+ * runner's timeout.
21
+ *
22
+ * Takes a `net.Server`, which http, https and http2 servers all are.
23
+ */
24
+ export declare function listen(server: Server, options: ListenOptions): Promise<Listening>;
25
+ //# sourceMappingURL=listen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../../../src/shared/api/http-server/listen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,MAAM,EAAU,MAAM,UAAU,CAAC;AAI5D,MAAM,WAAW,aAAa;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,CAAC,CAuCpB"}