@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,90 @@
1
+ import { toBase64 } from "../../../shared/lib/bytes/index.js";
2
+ /**
3
+ * A JSON-safe copy of `frames`, with payloads cut at `maxBytes` and, given a
4
+ * `limit`, only the newest frames kept: a report is read from its end.
5
+ */
6
+ export function snapshotFrames(frames, evicted, options = {}) {
7
+ const maxBytes = options.maxBytes ?? 4096;
8
+ const kept = options.limit === undefined || frames.length <= options.limit
9
+ ? frames
10
+ : frames.slice(frames.length - options.limit);
11
+ return {
12
+ evicted,
13
+ omitted: frames.length - kept.length,
14
+ frames: kept.map((frame) => {
15
+ const base = {
16
+ seq: frame.seq,
17
+ at: frame.at,
18
+ protocol: frame.protocol,
19
+ kind: frame.kind,
20
+ direction: frame.direction,
21
+ endpoint: frame.endpoint,
22
+ source: frame.source,
23
+ ...(frame.page === undefined ? {} : { page: frame.page }),
24
+ ...(frame.context === undefined ? {} : { context: frame.context }),
25
+ ...(frame.correlation === undefined
26
+ ? {}
27
+ : { correlation: frame.correlation }),
28
+ ...(Object.keys(frame.meta).length === 0
29
+ ? {}
30
+ : { meta: jsonSafe(frame.meta) }),
31
+ };
32
+ if (frame.payload.empty)
33
+ return base;
34
+ const bytes = frame.payload.bytes();
35
+ return {
36
+ ...base,
37
+ size: bytes.byteLength,
38
+ data: toBase64(bytes.subarray(0, maxBytes)),
39
+ ...(bytes.byteLength > maxBytes ? { truncated: true } : {}),
40
+ };
41
+ }),
42
+ };
43
+ }
44
+ /**
45
+ * One line per frame: `#12 +3.2ms connect out request pkg.Svc/Method 42B`.
46
+ * Times are relative to the first frame listed, which is what a reader of a
47
+ * failure report compares.
48
+ */
49
+ export function formatFrames(frames, options = {}) {
50
+ const limit = options.limit ?? 200;
51
+ // Not `slice(-limit)`: a limit of 0 would be `slice(-0)`, every frame.
52
+ const shown = frames.length > limit ? frames.slice(frames.length - limit) : frames;
53
+ const origin = shown[0]?.at ?? 0;
54
+ const lines = shown.map((frame) => {
55
+ const size = frame.payload.empty
56
+ ? ""
57
+ : ` ${frame.payload.bytes().byteLength}B`;
58
+ const page = frame.page === undefined ? "" : ` ${frame.page}`;
59
+ return `#${frame.seq} +${(frame.at - origin).toFixed(1)}ms ${frame.protocol} ${frame.direction} ${frame.kind} ${frame.endpoint}${page}${size}`;
60
+ });
61
+ if (frames.length > limit)
62
+ lines.unshift(`… ${frames.length - limit} earlier frames not shown`);
63
+ return lines.join("\n");
64
+ }
65
+ /**
66
+ * Make `meta` survive `JSON.stringify`: a bigint (protobuf int64) or a cycle
67
+ * would otherwise throw while writing the report — at the exact moment a test
68
+ * has already failed and the report is the only evidence.
69
+ */
70
+ function jsonSafe(meta) {
71
+ // The objects on the path from the root to the value being written. Only
72
+ // those make a cycle: an object met again elsewhere is merely shared.
73
+ const ancestors = [];
74
+ return JSON.parse(JSON.stringify(meta, function (_key, value) {
75
+ if (typeof value === "bigint")
76
+ return value.toString();
77
+ if (value instanceof Uint8Array)
78
+ return toBase64(value);
79
+ if (typeof value !== "object" || value === null)
80
+ return value;
81
+ // `this` holds `value`: whatever was above it is finished.
82
+ while (ancestors.length > 0 && ancestors.at(-1) !== this)
83
+ ancestors.pop();
84
+ if (ancestors.includes(value))
85
+ return "[circular]";
86
+ ancestors.push(value);
87
+ return value;
88
+ }));
89
+ }
90
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../../src/entities/frame/lib/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Clock } from "../../../shared/lib/clock/index.js";
2
+ import type { Timeline } from "../model/frame.js";
3
+ export interface TimelineOptions {
4
+ readonly clock: Clock;
5
+ /**
6
+ * Frames kept before the oldest are dropped. A 60 Hz data channel makes
7
+ * 3,600 frames a minute; the default holds a long test without letting a
8
+ * soak run grow without bound.
9
+ */
10
+ readonly capacity?: number;
11
+ /**
12
+ * Told when a subscriber throws. By default the first such error is
13
+ * thrown to whoever appended the frame, once every subscriber has run.
14
+ */
15
+ readonly onListenerError?: (error: unknown) => void;
16
+ }
17
+ /**
18
+ * The append-only log every protocol writes to. Order is arrival order (`seq`),
19
+ * not timestamp order: the stage flushes page buffers before every read, so
20
+ * arrival order is also the order things happened in.
21
+ */
22
+ export declare function createTimeline(options: TimelineOptions): Timeline;
23
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../../src/entities/frame/lib/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,KAAK,EAIX,QAAQ,EAER,MAAM,mBAAmB,CAAC;AAK3B,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpD;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CA+GjE"}
@@ -0,0 +1,122 @@
1
+ import { WirestageError } from "../../../shared/lib/errors/index.js";
2
+ import { compileFilter } from "./filter.js";
3
+ import { createPayload } from "./payload.js";
4
+ import { formatFrames, snapshotFrames } from "./snapshot.js";
5
+ const DEFAULT_CAPACITY = 100_000;
6
+ /**
7
+ * The append-only log every protocol writes to. Order is arrival order (`seq`),
8
+ * not timestamp order: the stage flushes page buffers before every read, so
9
+ * arrival order is also the order things happened in.
10
+ */
11
+ export function createTimeline(options) {
12
+ const capacity = options.capacity ?? DEFAULT_CAPACITY;
13
+ if (!Number.isInteger(capacity) || capacity < 1)
14
+ throw new WirestageError("INVALID_ARGUMENT", `timeline capacity must be a positive integer, got ${capacity}`);
15
+ let frames = [];
16
+ let evicted = 0;
17
+ let seq = 0;
18
+ const listeners = new Set();
19
+ const query = (filter) => {
20
+ if (filter === undefined)
21
+ return frames.slice();
22
+ return frames.filter(compileFilter(filter));
23
+ };
24
+ /** Index of the first frame with `seq` greater than `position`. */
25
+ const indexAfter = (position) => {
26
+ const first = frames[0];
27
+ if (first === undefined)
28
+ return 0;
29
+ return Math.max(0, position - first.seq + 1);
30
+ };
31
+ return {
32
+ append(init) {
33
+ const frame = {
34
+ seq: ++seq,
35
+ at: init.at ?? options.clock.now(),
36
+ protocol: init.protocol,
37
+ kind: init.kind,
38
+ direction: init.direction,
39
+ endpoint: init.endpoint,
40
+ source: init.source,
41
+ payload: createPayload(init.data),
42
+ value: init.value,
43
+ meta: init.meta ?? {},
44
+ page: init.page,
45
+ context: init.context,
46
+ correlation: init.correlation,
47
+ };
48
+ frames.push(frame);
49
+ if (frames.length > capacity) {
50
+ // Drop a tenth at once: shifting one frame per append would make a
51
+ // full timeline O(n) per frame.
52
+ const drop = Math.max(1, Math.floor(capacity / 10));
53
+ frames = frames.slice(drop);
54
+ evicted += drop;
55
+ }
56
+ // The frame is on the timeline whatever a subscriber does with it,
57
+ // and one that throws does not starve the rest.
58
+ const failures = [];
59
+ for (const listener of listeners) {
60
+ try {
61
+ listener(frame);
62
+ }
63
+ catch (error) {
64
+ failures.push(error);
65
+ }
66
+ }
67
+ if (failures.length > 0) {
68
+ if (options.onListenerError === undefined)
69
+ throw failures[0];
70
+ for (const failure of failures)
71
+ options.onListenerError(failure);
72
+ }
73
+ return frame;
74
+ },
75
+ frames: query,
76
+ last(filter) {
77
+ const match = compileFilter(filter);
78
+ return frames.findLast(match);
79
+ },
80
+ marker(name) {
81
+ return frames.findLast((f) => f.kind === "marker" && f.endpoint === name);
82
+ },
83
+ subscribe(listener) {
84
+ listeners.add(listener);
85
+ return () => {
86
+ listeners.delete(listener);
87
+ };
88
+ },
89
+ cursor() {
90
+ let position = seq;
91
+ return {
92
+ take(filter) {
93
+ const fresh = frames.slice(indexAfter(position));
94
+ position = seq;
95
+ return filter === undefined
96
+ ? fresh
97
+ : fresh.filter(compileFilter(filter));
98
+ },
99
+ get position() {
100
+ return position;
101
+ },
102
+ };
103
+ },
104
+ clear() {
105
+ frames = [];
106
+ },
107
+ snapshot(filter, snapshotOptions) {
108
+ return snapshotFrames(query(filter), evicted, snapshotOptions);
109
+ },
110
+ format(filter, formatOptions) {
111
+ return formatFrames(query(filter), formatOptions);
112
+ },
113
+ get size() {
114
+ return frames.length;
115
+ },
116
+ get evicted() {
117
+ return evicted;
118
+ },
119
+ capacity,
120
+ };
121
+ }
122
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../../src/entities/frame/lib/timeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAQrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAiB7D,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QAC9C,MAAM,IAAI,cAAc,CACvB,kBAAkB,EAClB,qDAAqD,QAAQ,EAAE,CAC/D,CAAC;IACH,IAAI,MAAM,GAAY,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEpD,MAAM,KAAK,GAAG,CAAC,MAA+B,EAAW,EAAE;QAC1D,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,mEAAmE;IACnE,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAU,EAAE;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,OAAO;QACN,MAAM,CAAC,IAAe;YACrB,MAAM,KAAK,GAAU;gBACpB,GAAG,EAAE,EAAE,GAAG;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC7B,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC9B,mEAAmE;gBACnE,gCAAgC;gBAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;gBACpD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO,IAAI,IAAI,CAAC;YACjB,CAAC;YACD,mEAAmE;YACnE,gDAAgD;YAChD,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACJ,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACF,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;oBAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7D,KAAK,MAAM,OAAO,IAAI,QAAQ;oBAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,EAAE,KAAK;QACb,IAAI,CAAC,MAAM;YACV,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,IAAI;YACV,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAC3E,CAAC;QACD,SAAS,CAAC,QAAQ;YACjB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACX,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC,CAAC;QACH,CAAC;QACD,MAAM;YACL,IAAI,QAAQ,GAAG,GAAG,CAAC;YACnB,OAAO;gBACN,IAAI,CAAC,MAAM;oBACV,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjD,QAAQ,GAAG,GAAG,CAAC;oBACf,OAAO,MAAM,KAAK,SAAS;wBAC1B,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,IAAI,QAAQ;oBACX,OAAO,QAAQ,CAAC;gBACjB,CAAC;aACD,CAAC;QACH,CAAC;QACD,KAAK;YACJ,MAAM,GAAG,EAAE,CAAC;QACb,CAAC;QACD,QAAQ,CAAC,MAAM,EAAE,eAAe;YAC/B,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,CAAC,MAAM,EAAE,aAAa;YAC3B,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,IAAI;YACP,OAAO,MAAM,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,OAAO;YACV,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,QAAQ;KACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Which way a frame travelled, from the page's point of view: `out` left the
3
+ * page (a request, a sent message), `in` reached it. Markers and lifecycle
4
+ * events travel nowhere.
5
+ */
6
+ export type Direction = "out" | "in" | "none";
7
+ export type FrameKind =
8
+ /** The opening half of an exchange: an HTTP request, an RPC's request message. */
9
+ "request"
10
+ /** The closing half: an HTTP response, an RPC's status. */
11
+ | "response"
12
+ /** One message on a stream or channel. */
13
+ | "message"
14
+ /** One server-sent event. */
15
+ | "event"
16
+ /** A named point the test placed on the timeline. */
17
+ | "marker"
18
+ /** Something went wrong on purpose or by accident: an abort, a drop, a cut. */
19
+ | "fault"
20
+ /** A channel or connection opened or closed. */
21
+ | "lifecycle";
22
+ /**
23
+ * Who produced what the frame carries. With `direction` it says who was
24
+ * talking to whom: `out` from `page` is the app speaking, `in` from `stub`
25
+ * is a stub answering it, `in` from `network` the real backend.
26
+ */
27
+ export type FrameSource =
28
+ /** The app in the browser: its requests, the messages it sends. */
29
+ "page"
30
+ /** The real backend, a real remote peer, or a client outside the browser. */
31
+ | "network"
32
+ /** A stub: its responses, its messages, the faults it injects. */
33
+ | "stub"
34
+ /** The test itself: markers, drive-client requests, injected messages. */
35
+ | "test"
36
+ /** A fake served on a port of its own (`serve()`). */
37
+ | "server";
38
+ /**
39
+ * A payload as given: bytes, text, or a thunk that encodes on demand. The thunk
40
+ * keeps a high-rate stub from serializing every message twice when nobody ever
41
+ * reads the bytes back.
42
+ */
43
+ export type PayloadInput = Uint8Array | string | (() => Uint8Array);
44
+ export interface Payload {
45
+ /** True when the frame carries no payload at all. */
46
+ readonly empty: boolean;
47
+ bytes(): Uint8Array;
48
+ /** UTF-8 text of the bytes, or the text as given. */
49
+ text(): string;
50
+ /** `JSON.parse(text())`. Throws on invalid JSON. */
51
+ json<T = unknown>(): T;
52
+ /**
53
+ * Decode with `decoder`, cached per decoder: asserting on the same frame
54
+ * from three helpers decodes it once.
55
+ */
56
+ decode<T>(decoder: (bytes: Uint8Array) => T): T;
57
+ }
58
+ export interface FrameInit {
59
+ /** The protocol plugin's name: `webrtc`, `connect`, `rest`, ... */
60
+ readonly protocol: string;
61
+ readonly kind: FrameKind;
62
+ readonly direction: Direction;
63
+ /**
64
+ * What the frame is about, in the protocol's own terms: a URL path, an RPC
65
+ * (`pkg.Service/Method`), a channel label, a WebSocket URL, a marker name.
66
+ */
67
+ readonly endpoint: string;
68
+ readonly source: FrameSource;
69
+ /** Epoch milliseconds. Defaults to the stage clock's now. */
70
+ readonly at?: number;
71
+ readonly data?: PayloadInput;
72
+ /** An already-decoded form of the payload, e.g. a protobuf message. */
73
+ readonly value?: unknown;
74
+ readonly meta?: Readonly<Record<string, unknown>>;
75
+ /** The page the frame belongs to (`p1`, ...). */
76
+ readonly page?: string;
77
+ /** The browser context the frame belongs to (`c1`, ...). */
78
+ readonly context?: string;
79
+ /** Links the frames of one exchange: a request, its messages, its response. */
80
+ readonly correlation?: string;
81
+ }
82
+ export interface Frame {
83
+ /** Arrival order on the timeline, starting at 1. The order to trust. */
84
+ readonly seq: number;
85
+ /** Epoch milliseconds. Informational: page and Node clocks differ slightly. */
86
+ readonly at: number;
87
+ readonly protocol: string;
88
+ readonly kind: FrameKind;
89
+ readonly direction: Direction;
90
+ readonly endpoint: string;
91
+ readonly source: FrameSource;
92
+ readonly payload: Payload;
93
+ readonly value: unknown;
94
+ readonly meta: Readonly<Record<string, unknown>>;
95
+ readonly page: string | undefined;
96
+ readonly context: string | undefined;
97
+ readonly correlation: string | undefined;
98
+ }
99
+ export interface FrameFilter {
100
+ readonly protocol?: string | readonly string[];
101
+ readonly kind?: FrameKind | readonly FrameKind[];
102
+ readonly direction?: Direction;
103
+ /** Exact match, or a RegExp tested against the endpoint. */
104
+ readonly endpoint?: string | RegExp;
105
+ readonly source?: FrameSource;
106
+ readonly page?: string;
107
+ readonly context?: string;
108
+ readonly correlation?: string;
109
+ /** Only frames whose `seq` is greater. */
110
+ readonly after?: number;
111
+ /** Any further condition. Runs last, so cheap fields filter first. */
112
+ readonly where?: (frame: Frame) => boolean;
113
+ }
114
+ /** A consumer's position on the timeline: each `take` returns what is new. */
115
+ export interface TimelineCursor {
116
+ /**
117
+ * Frames appended since the previous `take` that match `filter`. The
118
+ * cursor moves past ALL of them, matching or not: "what happened since I
119
+ * last looked", narrowed.
120
+ */
121
+ take(filter?: FrameFilter): Frame[];
122
+ /** The `seq` the cursor has read up to. */
123
+ readonly position: number;
124
+ }
125
+ export interface SnapshotFrame {
126
+ readonly seq: number;
127
+ readonly at: number;
128
+ readonly protocol: string;
129
+ readonly kind: FrameKind;
130
+ readonly direction: Direction;
131
+ readonly endpoint: string;
132
+ readonly source: FrameSource;
133
+ readonly page?: string;
134
+ readonly context?: string;
135
+ readonly correlation?: string;
136
+ readonly meta?: Readonly<Record<string, unknown>>;
137
+ /** Base64 of the payload, cut at the snapshot's byte limit. */
138
+ readonly data?: string;
139
+ readonly size?: number;
140
+ readonly truncated?: boolean;
141
+ }
142
+ /** A JSON-safe copy of the timeline, for a test report attachment. */
143
+ export interface TimelineSnapshot {
144
+ readonly frames: readonly SnapshotFrame[];
145
+ /** Frames dropped from the front because the timeline hit its capacity. */
146
+ readonly evicted: number;
147
+ /** Earlier matching frames left out by the snapshot's `limit`. */
148
+ readonly omitted: number;
149
+ }
150
+ export interface SnapshotOptions {
151
+ /** Bytes of payload kept per frame. Default 4096. */
152
+ readonly maxBytes?: number;
153
+ /** Frames kept, counting back from the newest. Default: all of them. */
154
+ readonly limit?: number;
155
+ }
156
+ export interface Timeline {
157
+ /** Append a frame and notify subscribers. The only way frames enter. */
158
+ append(init: FrameInit): Frame;
159
+ frames(filter?: FrameFilter): Frame[];
160
+ last(filter?: FrameFilter): Frame | undefined;
161
+ /** The most recent marker with this name. */
162
+ marker(name: string): Frame | undefined;
163
+ /**
164
+ * Called for every appended frame, synchronously, after it is on the
165
+ * timeline. A listener that throws does not stop the others. Returns
166
+ * unsubscribe.
167
+ */
168
+ subscribe(listener: (frame: Frame) => void): () => void;
169
+ /** A new cursor starting at the current end. */
170
+ cursor(): TimelineCursor;
171
+ /** Drop every frame. `seq` keeps counting; `evicted` is left alone. */
172
+ clear(): void;
173
+ snapshot(filter?: FrameFilter, options?: SnapshotOptions): TimelineSnapshot;
174
+ /** A human-readable listing, one line per frame. */
175
+ format(filter?: FrameFilter, options?: {
176
+ readonly limit?: number;
177
+ }): string;
178
+ readonly size: number;
179
+ readonly evicted: number;
180
+ readonly capacity: number;
181
+ }
182
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../../../src/entities/frame/model/frame.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../../../src/entities/frame/model/frame.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export { definePlugin } from "./lib/define-plugin.js";
2
+ export { named } from "./lib/named.js";
3
+ export type { Attachment } from "./model/attachment.js";
4
+ export type { AbortErrorCode, HttpOutcome, HttpRequestView, HttpRouter, HttpRule, HttpRuleHandle, PassthroughResponse, } from "./model/http.js";
5
+ export type { PageEntry, PageHost, PageInstaller, PageModule, PageModuleEnv, PageSource, } from "./model/page.js";
6
+ export type { AnyWirePlugin, PluginApis, PluginContext, PluginRuntime, WaitForOptions, WirePlugin, } from "./model/plugin.js";
7
+ export type { SocketPeer, SocketRouter, SocketRule, SocketRuleHandle, SocketView, } from "./model/socket.js";
8
+ export type { ResponseStream, StreamEnd } from "./model/stream.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/entities/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACX,cAAc,EACd,WAAW,EACX,eAAe,EACf,UAAU,EACV,QAAQ,EACR,cAAc,EACd,mBAAmB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACX,SAAS,EACT,QAAQ,EACR,aAAa,EACb,UAAU,EACV,aAAa,EACb,UAAU,GACV,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,GACV,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,UAAU,GACV,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { definePlugin } from "./lib/define-plugin.js";
2
+ export { named } from "./lib/named.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/entities/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { WirePlugin } from "../model/plugin.js";
2
+ /**
3
+ * Identity, for inference: it keeps the plugin's `name` a literal type, so
4
+ * `createStage({ plugins: [myPlugin()] })` types `stage.myPlugin` without the
5
+ * author writing the generic arguments out.
6
+ */
7
+ export declare function definePlugin<const Name extends string, Api>(plugin: WirePlugin<Name, Api>): WirePlugin<Name, Api>;
8
+ //# sourceMappingURL=define-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-plugin.d.ts","sourceRoot":"","sources":["../../../../src/entities/plugin/lib/define-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,EAC1D,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAC3B,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAEvB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Identity, for inference: it keeps the plugin's `name` a literal type, so
3
+ * `createStage({ plugins: [myPlugin()] })` types `stage.myPlugin` without the
4
+ * author writing the generic arguments out.
5
+ */
6
+ export function definePlugin(plugin) {
7
+ return plugin;
8
+ }
9
+ //# sourceMappingURL=define-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-plugin.js","sourceRoot":"","sources":["../../../../src/entities/plugin/lib/define-plugin.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC3B,MAA6B;IAE7B,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { WirePlugin } from "../model/plugin.js";
2
+ /**
3
+ * The same plugin under another name: mounted as `stage.<name>`, and
4
+ * recording its frames under that name. What lets one protocol run twice —
5
+ * two backends, two sets of channels — with each instance's traffic apart:
6
+ *
7
+ * plugins: [rest({ baseURL: "/api" }), named("billing", rest({ baseURL: "https://billing.test" }))]
8
+ */
9
+ export declare function named<const Name extends string, Api>(name: Name, plugin: WirePlugin<string, Api>): WirePlugin<Name, Api>;
10
+ //# sourceMappingURL=named.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named.d.ts","sourceRoot":"","sources":["../../../../src/entities/plugin/lib/named.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,EACnD,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAQvB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The same plugin under another name: mounted as `stage.<name>`, and
3
+ * recording its frames under that name. What lets one protocol run twice —
4
+ * two backends, two sets of channels — with each instance's traffic apart:
5
+ *
6
+ * plugins: [rest({ baseURL: "/api" }), named("billing", rest({ baseURL: "https://billing.test" }))]
7
+ */
8
+ export function named(name, plugin) {
9
+ return {
10
+ name,
11
+ scope: plugin.scope,
12
+ // Called on the plugin, not copied off it: a plugin written as a class
13
+ // has `setup` on its prototype, which a spread leaves behind.
14
+ setup: (context) => plugin.setup(context),
15
+ };
16
+ }
17
+ //# sourceMappingURL=named.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named.js","sourceRoot":"","sources":["../../../../src/entities/plugin/lib/named.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACpB,IAAU,EACV,MAA+B;IAE/B,OAAO;QACN,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,uEAAuE;QACvE,8DAA8D;QAC9D,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;KACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { CookieJarPort } from "../../../shared/api/playwright/index.js";
2
+ /**
3
+ * One browser context the stage is attached to, as a plugin sees it: a
4
+ * frozen view, not the context. The context stays with the stage, and a
5
+ * plugin reaches the browser through the services of its `PluginContext`.
6
+ */
7
+ export interface Attachment {
8
+ /** `c1`, `c2`, ... — what frames name in their `context` field. */
9
+ readonly id: string;
10
+ /** The context's base URL, when the caller supplied one. */
11
+ readonly baseURL: string | undefined;
12
+ /**
13
+ * The context's cookie jar, for a client that calls as the signed-in
14
+ * page: reads and adds go to the context, and nothing else does.
15
+ */
16
+ readonly cookies: CookieJarPort;
17
+ }
18
+ //# sourceMappingURL=attachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../../../src/entities/plugin/model/attachment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=attachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../../../src/entities/plugin/model/attachment.ts"],"names":[],"mappings":""}