@moltzap/client 2026.529.0 → 2026.717.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/dist/agent-client.d.ts +2 -65
  2. package/dist/agent-client.d.ts.map +1 -1
  3. package/dist/agent-client.js +1 -286
  4. package/dist/agent-client.js.map +1 -1
  5. package/dist/app-client.d.ts +3 -0
  6. package/dist/app-client.d.ts.map +1 -0
  7. package/dist/app-client.js +2 -0
  8. package/dist/app-client.js.map +1 -0
  9. package/dist/auth.d.ts +6 -15
  10. package/dist/auth.d.ts.map +1 -1
  11. package/dist/auth.js +12 -16
  12. package/dist/auth.js.map +1 -1
  13. package/dist/channel-base/format-cross-conv.d.ts +10 -15
  14. package/dist/channel-base/format-cross-conv.d.ts.map +1 -1
  15. package/dist/channel-base/format-cross-conv.js +10 -15
  16. package/dist/channel-base/format-cross-conv.js.map +1 -1
  17. package/dist/channel-base/format-group-block.d.ts +8 -10
  18. package/dist/channel-base/format-group-block.d.ts.map +1 -1
  19. package/dist/channel-base/format-group-block.js +8 -10
  20. package/dist/channel-base/format-group-block.js.map +1 -1
  21. package/dist/channel-base/index.d.ts +3 -62
  22. package/dist/channel-base/index.d.ts.map +1 -1
  23. package/dist/channel-base/index.js +2 -65
  24. package/dist/channel-base/index.js.map +1 -1
  25. package/dist/channel-base/lease-guard.d.ts +0 -2
  26. package/dist/channel-base/lease-guard.d.ts.map +1 -1
  27. package/dist/channel-base/lease-guard.js +0 -2
  28. package/dist/channel-base/lease-guard.js.map +1 -1
  29. package/dist/channel-base/lease-store.d.ts +2 -3
  30. package/dist/channel-base/lease-store.d.ts.map +1 -1
  31. package/dist/channel-base/lease-store.js +2 -3
  32. package/dist/channel-base/lease-store.js.map +1 -1
  33. package/dist/channel-base/lease.d.ts +25 -31
  34. package/dist/channel-base/lease.d.ts.map +1 -1
  35. package/dist/channel-base/lease.js +29 -45
  36. package/dist/channel-base/lease.js.map +1 -1
  37. package/dist/channel-core-enrichment.d.ts +1 -1
  38. package/dist/channel-core-enrichment.d.ts.map +1 -1
  39. package/dist/channel-core-test-support.d.ts +17 -11
  40. package/dist/channel-core-test-support.d.ts.map +1 -1
  41. package/dist/channel-core-test-support.js +5 -6
  42. package/dist/channel-core-test-support.js.map +1 -1
  43. package/dist/channel-core.d.ts +24 -29
  44. package/dist/channel-core.d.ts.map +1 -1
  45. package/dist/channel-core.js +18 -42
  46. package/dist/channel-core.js.map +1 -1
  47. package/dist/cli/commands/agents.d.ts +3 -6
  48. package/dist/cli/commands/agents.d.ts.map +1 -1
  49. package/dist/cli/commands/agents.js +14 -50
  50. package/dist/cli/commands/agents.js.map +1 -1
  51. package/dist/cli/commands/contacts.d.ts +5 -6
  52. package/dist/cli/commands/contacts.d.ts.map +1 -1
  53. package/dist/cli/commands/contacts.js +15 -43
  54. package/dist/cli/commands/contacts.js.map +1 -1
  55. package/dist/cli/commands/conversations.d.ts +8 -18
  56. package/dist/cli/commands/conversations.d.ts.map +1 -1
  57. package/dist/cli/commands/conversations.js +14 -65
  58. package/dist/cli/commands/conversations.js.map +1 -1
  59. package/dist/cli/commands/messages.d.ts +13 -35
  60. package/dist/cli/commands/messages.d.ts.map +1 -1
  61. package/dist/cli/commands/messages.js +21 -46
  62. package/dist/cli/commands/messages.js.map +1 -1
  63. package/dist/cli/commands/register.d.ts +10 -12
  64. package/dist/cli/commands/register.d.ts.map +1 -1
  65. package/dist/cli/commands/register.js +47 -133
  66. package/dist/cli/commands/register.js.map +1 -1
  67. package/dist/cli/commands/send.d.ts +23 -36
  68. package/dist/cli/commands/send.d.ts.map +1 -1
  69. package/dist/cli/commands/send.js +25 -72
  70. package/dist/cli/commands/send.js.map +1 -1
  71. package/dist/cli/commands/start.d.ts +10 -124
  72. package/dist/cli/commands/start.d.ts.map +1 -1
  73. package/dist/cli/commands/start.js +28 -510
  74. package/dist/cli/commands/start.js.map +1 -1
  75. package/dist/cli/commands/status.d.ts +1 -1
  76. package/dist/cli/commands/status.d.ts.map +1 -1
  77. package/dist/cli/commands/status.js +8 -9
  78. package/dist/cli/commands/status.js.map +1 -1
  79. package/dist/cli/commands/test-transport.d.ts +12 -5
  80. package/dist/cli/commands/test-transport.d.ts.map +1 -1
  81. package/dist/cli/commands/test-transport.js +15 -15
  82. package/dist/cli/commands/test-transport.js.map +1 -1
  83. package/dist/cli/index.js +13 -40
  84. package/dist/cli/index.js.map +1 -1
  85. package/dist/cli/output.d.ts +4 -0
  86. package/dist/cli/output.d.ts.map +1 -0
  87. package/dist/cli/output.js +9 -0
  88. package/dist/cli/output.js.map +1 -0
  89. package/dist/cli/socket-client.d.ts +7 -14
  90. package/dist/cli/socket-client.d.ts.map +1 -1
  91. package/dist/cli/socket-client.js +15 -38
  92. package/dist/cli/socket-client.js.map +1 -1
  93. package/dist/cli/transport.d.ts +53 -116
  94. package/dist/cli/transport.d.ts.map +1 -1
  95. package/dist/cli/transport.js +45 -295
  96. package/dist/cli/transport.js.map +1 -1
  97. package/dist/config.d.ts +24 -0
  98. package/dist/config.d.ts.map +1 -0
  99. package/dist/config.js +35 -0
  100. package/dist/config.js.map +1 -0
  101. package/dist/config.test-utils.d.ts +13 -0
  102. package/dist/config.test-utils.d.ts.map +1 -0
  103. package/dist/config.test-utils.js +46 -0
  104. package/dist/config.test-utils.js.map +1 -0
  105. package/dist/index.d.ts +3 -8
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +2 -12
  108. package/dist/index.js.map +1 -1
  109. package/dist/local-daemon-rpc.d.ts +259 -8
  110. package/dist/local-daemon-rpc.d.ts.map +1 -1
  111. package/dist/local-daemon-rpc.js +189 -12
  112. package/dist/local-daemon-rpc.js.map +1 -1
  113. package/dist/{runtime/local-history.d.ts → local-history.d.ts} +16 -21
  114. package/dist/local-history.d.ts.map +1 -0
  115. package/dist/{runtime/local-history.js → local-history.js} +16 -21
  116. package/dist/local-history.js.map +1 -0
  117. package/dist/local-paths.d.ts +0 -2
  118. package/dist/local-paths.d.ts.map +1 -1
  119. package/dist/local-paths.js +0 -4
  120. package/dist/local-paths.js.map +1 -1
  121. package/dist/local-socket-server.d.ts +22 -0
  122. package/dist/local-socket-server.d.ts.map +1 -0
  123. package/dist/{runtime/local-socket-server.js → local-socket-server.js} +4 -9
  124. package/dist/local-socket-server.js.map +1 -0
  125. package/dist/message-rendering.d.ts +3 -0
  126. package/dist/message-rendering.d.ts.map +1 -0
  127. package/dist/message-rendering.js +7 -0
  128. package/dist/message-rendering.js.map +1 -0
  129. package/dist/notification/__tests__/{snapshot-semantics.types-check.d.ts → subscribe-signatures.types-check.d.ts} +1 -1
  130. package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts.map +1 -0
  131. package/dist/notification/__tests__/subscribe-signatures.types-check.js +55 -0
  132. package/dist/notification/__tests__/subscribe-signatures.types-check.js.map +1 -0
  133. package/dist/notification/errors.d.ts +18 -6
  134. package/dist/notification/errors.d.ts.map +1 -1
  135. package/dist/notification/errors.js +13 -15
  136. package/dist/notification/errors.js.map +1 -1
  137. package/dist/notification/index.d.ts +5 -0
  138. package/dist/notification/index.d.ts.map +1 -0
  139. package/dist/notification/index.js +5 -0
  140. package/dist/notification/index.js.map +1 -0
  141. package/dist/notification/stream.d.ts +33 -49
  142. package/dist/notification/stream.d.ts.map +1 -1
  143. package/dist/notification/stream.js +33 -76
  144. package/dist/notification/stream.js.map +1 -1
  145. package/dist/pagination.d.ts +20 -10
  146. package/dist/pagination.d.ts.map +1 -1
  147. package/dist/pagination.js +8 -9
  148. package/dist/pagination.js.map +1 -1
  149. package/dist/profile.d.ts +92 -0
  150. package/dist/profile.d.ts.map +1 -0
  151. package/dist/profile.js +149 -0
  152. package/dist/profile.js.map +1 -0
  153. package/dist/refs.d.ts.map +1 -0
  154. package/dist/refs.js.map +1 -0
  155. package/dist/service-archive-purge.d.ts +2 -1
  156. package/dist/service-archive-purge.d.ts.map +1 -1
  157. package/dist/service-archive-purge.js.map +1 -1
  158. package/dist/{runtime/service-helpers.d.ts → service-helpers.d.ts} +5 -11
  159. package/dist/service-helpers.d.ts.map +1 -0
  160. package/dist/{runtime/service-helpers.js → service-helpers.js} +2 -9
  161. package/dist/service-helpers.js.map +1 -0
  162. package/dist/service-local-daemon.d.ts +22 -0
  163. package/dist/service-local-daemon.d.ts.map +1 -0
  164. package/dist/service-local-daemon.js +185 -0
  165. package/dist/service-local-daemon.js.map +1 -0
  166. package/dist/service.d.ts +65 -57
  167. package/dist/service.d.ts.map +1 -1
  168. package/dist/service.js +205 -156
  169. package/dist/service.js.map +1 -1
  170. package/dist/test-utils/channel-service-fixture.d.ts +3 -2
  171. package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
  172. package/dist/test-utils/channel-service-fixture.js.map +1 -1
  173. package/dist/test-utils/fake-service.d.ts +26 -18
  174. package/dist/test-utils/fake-service.d.ts.map +1 -1
  175. package/dist/test-utils/fake-service.js +28 -42
  176. package/dist/test-utils/fake-service.js.map +1 -1
  177. package/dist/test-utils/ids.d.ts +3 -1
  178. package/dist/test-utils/ids.d.ts.map +1 -1
  179. package/dist/test-utils/ids.js.map +1 -1
  180. package/dist/test-utils/index.d.ts +9 -2
  181. package/dist/test-utils/index.d.ts.map +1 -1
  182. package/dist/test-utils/index.js +8 -1
  183. package/dist/test-utils/index.js.map +1 -1
  184. package/dist/test-utils/standalone-provisioning.d.ts +17 -0
  185. package/dist/test-utils/standalone-provisioning.d.ts.map +1 -0
  186. package/dist/test-utils/standalone-provisioning.js +14 -0
  187. package/dist/test-utils/standalone-provisioning.js.map +1 -0
  188. package/dist/tsconfig.tsbuildinfo +1 -0
  189. package/package.json +39 -17
  190. package/dist/auth.test.d.ts +0 -2
  191. package/dist/auth.test.d.ts.map +0 -1
  192. package/dist/auth.test.js +0 -121
  193. package/dist/auth.test.js.map +0 -1
  194. package/dist/channel-core-context.test.d.ts +0 -2
  195. package/dist/channel-core-context.test.d.ts.map +0 -1
  196. package/dist/channel-core-context.test.js +0 -342
  197. package/dist/channel-core-context.test.js.map +0 -1
  198. package/dist/channel-core-dispatch.test.d.ts +0 -2
  199. package/dist/channel-core-dispatch.test.d.ts.map +0 -1
  200. package/dist/channel-core-dispatch.test.js +0 -557
  201. package/dist/channel-core-dispatch.test.js.map +0 -1
  202. package/dist/channel-core.test.d.ts +0 -2
  203. package/dist/channel-core.test.d.ts.map +0 -1
  204. package/dist/channel-core.test.js +0 -232
  205. package/dist/channel-core.test.js.map +0 -1
  206. package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts +0 -2
  207. package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts.map +0 -1
  208. package/dist/cli/__tests__/cli-multi-agent.int.test.js +0 -132
  209. package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +0 -1
  210. package/dist/cli/commands/invite.d.ts +0 -7
  211. package/dist/cli/commands/invite.d.ts.map +0 -1
  212. package/dist/cli/commands/invite.js +0 -11
  213. package/dist/cli/commands/invite.js.map +0 -1
  214. package/dist/cli/commands/messages.test.d.ts +0 -2
  215. package/dist/cli/commands/messages.test.d.ts.map +0 -1
  216. package/dist/cli/commands/messages.test.js +0 -99
  217. package/dist/cli/commands/messages.test.js.map +0 -1
  218. package/dist/cli/commands/ping.d.ts +0 -7
  219. package/dist/cli/commands/ping.d.ts.map +0 -1
  220. package/dist/cli/commands/ping.js +0 -37
  221. package/dist/cli/commands/ping.js.map +0 -1
  222. package/dist/cli/commands/register.test.d.ts +0 -2
  223. package/dist/cli/commands/register.test.d.ts.map +0 -1
  224. package/dist/cli/commands/register.test.js +0 -91
  225. package/dist/cli/commands/register.test.js.map +0 -1
  226. package/dist/cli/commands/send.test.d.ts +0 -2
  227. package/dist/cli/commands/send.test.d.ts.map +0 -1
  228. package/dist/cli/commands/send.test.js +0 -59
  229. package/dist/cli/commands/send.test.js.map +0 -1
  230. package/dist/cli/commands/start.test.d.ts +0 -2
  231. package/dist/cli/commands/start.test.d.ts.map +0 -1
  232. package/dist/cli/commands/start.test.js +0 -624
  233. package/dist/cli/commands/start.test.js.map +0 -1
  234. package/dist/cli/commands/whoami.d.ts +0 -8
  235. package/dist/cli/commands/whoami.d.ts.map +0 -1
  236. package/dist/cli/commands/whoami.js +0 -28
  237. package/dist/cli/commands/whoami.js.map +0 -1
  238. package/dist/cli/config.d.ts +0 -66
  239. package/dist/cli/config.d.ts.map +0 -1
  240. package/dist/cli/config.js +0 -148
  241. package/dist/cli/config.js.map +0 -1
  242. package/dist/cli/config.test.d.ts +0 -2
  243. package/dist/cli/config.test.d.ts.map +0 -1
  244. package/dist/cli/config.test.js +0 -89
  245. package/dist/cli/config.test.js.map +0 -1
  246. package/dist/cli/http-client.d.ts +0 -17
  247. package/dist/cli/http-client.d.ts.map +0 -1
  248. package/dist/cli/http-client.js +0 -38
  249. package/dist/cli/http-client.js.map +0 -1
  250. package/dist/cli/profile.d.ts +0 -126
  251. package/dist/cli/profile.d.ts.map +0 -1
  252. package/dist/cli/profile.js +0 -231
  253. package/dist/cli/profile.js.map +0 -1
  254. package/dist/cli/profile.test.d.ts +0 -2
  255. package/dist/cli/profile.test.d.ts.map +0 -1
  256. package/dist/cli/profile.test.js +0 -369
  257. package/dist/cli/profile.test.js.map +0 -1
  258. package/dist/cli/transport.test.d.ts +0 -2
  259. package/dist/cli/transport.test.d.ts.map +0 -1
  260. package/dist/cli/transport.test.js +0 -312
  261. package/dist/cli/transport.test.js.map +0 -1
  262. package/dist/notification/__tests__/filter-equivalence.test.d.ts +0 -2
  263. package/dist/notification/__tests__/filter-equivalence.test.d.ts.map +0 -1
  264. package/dist/notification/__tests__/filter-equivalence.test.js +0 -123
  265. package/dist/notification/__tests__/filter-equivalence.test.js.map +0 -1
  266. package/dist/notification/__tests__/snapshot-semantics.test.d.ts +0 -2
  267. package/dist/notification/__tests__/snapshot-semantics.test.d.ts.map +0 -1
  268. package/dist/notification/__tests__/snapshot-semantics.test.js +0 -261
  269. package/dist/notification/__tests__/snapshot-semantics.test.js.map +0 -1
  270. package/dist/notification/__tests__/snapshot-semantics.types-check.d.ts.map +0 -1
  271. package/dist/notification/__tests__/snapshot-semantics.types-check.js +0 -62
  272. package/dist/notification/__tests__/snapshot-semantics.types-check.js.map +0 -1
  273. package/dist/pagination.test.d.ts +0 -2
  274. package/dist/pagination.test.d.ts.map +0 -1
  275. package/dist/pagination.test.js +0 -72
  276. package/dist/pagination.test.js.map +0 -1
  277. package/dist/runtime/close-info.d.ts +0 -84
  278. package/dist/runtime/close-info.d.ts.map +0 -1
  279. package/dist/runtime/close-info.js +0 -102
  280. package/dist/runtime/close-info.js.map +0 -1
  281. package/dist/runtime/close-info.test.d.ts +0 -2
  282. package/dist/runtime/close-info.test.d.ts.map +0 -1
  283. package/dist/runtime/close-info.test.js +0 -109
  284. package/dist/runtime/close-info.test.js.map +0 -1
  285. package/dist/runtime/errors.d.ts +0 -11
  286. package/dist/runtime/errors.d.ts.map +0 -1
  287. package/dist/runtime/errors.js +0 -41
  288. package/dist/runtime/errors.js.map +0 -1
  289. package/dist/runtime/errors.test.d.ts +0 -2
  290. package/dist/runtime/errors.test.d.ts.map +0 -1
  291. package/dist/runtime/errors.test.js +0 -79
  292. package/dist/runtime/errors.test.js.map +0 -1
  293. package/dist/runtime/frame.d.ts +0 -8
  294. package/dist/runtime/frame.d.ts.map +0 -1
  295. package/dist/runtime/frame.js +0 -12
  296. package/dist/runtime/frame.js.map +0 -1
  297. package/dist/runtime/frame.test.d.ts +0 -2
  298. package/dist/runtime/frame.test.d.ts.map +0 -1
  299. package/dist/runtime/frame.test.js +0 -59
  300. package/dist/runtime/frame.test.js.map +0 -1
  301. package/dist/runtime/index.d.ts +0 -10
  302. package/dist/runtime/index.d.ts.map +0 -1
  303. package/dist/runtime/index.js +0 -9
  304. package/dist/runtime/index.js.map +0 -1
  305. package/dist/runtime/local-history.d.ts.map +0 -1
  306. package/dist/runtime/local-history.js.map +0 -1
  307. package/dist/runtime/local-service-commands.d.ts +0 -26
  308. package/dist/runtime/local-service-commands.d.ts.map +0 -1
  309. package/dist/runtime/local-service-commands.js +0 -29
  310. package/dist/runtime/local-service-commands.js.map +0 -1
  311. package/dist/runtime/local-socket-server.d.ts +0 -20
  312. package/dist/runtime/local-socket-server.d.ts.map +0 -1
  313. package/dist/runtime/local-socket-server.js.map +0 -1
  314. package/dist/runtime/refs.d.ts.map +0 -1
  315. package/dist/runtime/refs.js.map +0 -1
  316. package/dist/runtime/runtime.test.d.ts +0 -2
  317. package/dist/runtime/runtime.test.d.ts.map +0 -1
  318. package/dist/runtime/runtime.test.js +0 -37
  319. package/dist/runtime/runtime.test.js.map +0 -1
  320. package/dist/runtime/service-helpers.d.ts.map +0 -1
  321. package/dist/runtime/service-helpers.js.map +0 -1
  322. package/dist/runtime/service-teardown.d.ts +0 -5
  323. package/dist/runtime/service-teardown.d.ts.map +0 -1
  324. package/dist/runtime/service-teardown.js +0 -36
  325. package/dist/runtime/service-teardown.js.map +0 -1
  326. package/dist/runtime/service-teardown.test.d.ts +0 -2
  327. package/dist/runtime/service-teardown.test.d.ts.map +0 -1
  328. package/dist/runtime/service-teardown.test.js +0 -80
  329. package/dist/runtime/service-teardown.test.js.map +0 -1
  330. package/dist/runtime/subscribers.d.ts +0 -152
  331. package/dist/runtime/subscribers.d.ts.map +0 -1
  332. package/dist/runtime/subscribers.js +0 -222
  333. package/dist/runtime/subscribers.js.map +0 -1
  334. package/dist/service-socket-path.test.d.ts +0 -2
  335. package/dist/service-socket-path.test.d.ts.map +0 -1
  336. package/dist/service-socket-path.test.js +0 -87
  337. package/dist/service-socket-path.test.js.map +0 -1
  338. package/dist/service.test.d.ts +0 -2
  339. package/dist/service.test.d.ts.map +0 -1
  340. package/dist/service.test.js +0 -796
  341. package/dist/service.test.js.map +0 -1
  342. package/dist/test/index.d.ts +0 -47
  343. package/dist/test/index.d.ts.map +0 -1
  344. package/dist/test/index.js +0 -39
  345. package/dist/test/index.js.map +0 -1
  346. package/dist/test-utils/conformance-adapter.d.ts +0 -40
  347. package/dist/test-utils/conformance-adapter.d.ts.map +0 -1
  348. package/dist/test-utils/conformance-adapter.js +0 -250
  349. package/dist/test-utils/conformance-adapter.js.map +0 -1
  350. package/dist/tm-client-test-support.d.ts +0 -184
  351. package/dist/tm-client-test-support.d.ts.map +0 -1
  352. package/dist/tm-client-test-support.js +0 -466
  353. package/dist/tm-client-test-support.js.map +0 -1
  354. package/dist/tm-client.d.ts +0 -269
  355. package/dist/tm-client.d.ts.map +0 -1
  356. package/dist/tm-client.js +0 -518
  357. package/dist/tm-client.js.map +0 -1
  358. package/dist/tm-client.test.d.ts +0 -2
  359. package/dist/tm-client.test.d.ts.map +0 -1
  360. package/dist/tm-client.test.js +0 -490
  361. package/dist/tm-client.test.js.map +0 -1
  362. /package/dist/{runtime/refs.d.ts → refs.d.ts} +0 -0
  363. /package/dist/{runtime/refs.js → refs.js} +0 -0
@@ -1,490 +0,0 @@
1
- /**
2
- * Tests for `tm-client.ts` against a real in-process `@effect/platform` WebSocket server.
3
- */
4
- import { afterEach, beforeEach, expect, it } from "vitest";
5
- import { Cause, Effect, Exit, Option } from "effect";
6
- import { MessagesAuthorize, TaskCreate } from "@moltzap/protocol";
7
- import { AgentsLookupByName, TaskList, DispatchAuthorize, Duration, Fiber, ForbiddenError, MessageReceivedNotificationDefinition, MessagesSend, RpcTimeoutError, TestClock, closeClient, closeWaitSocketOutput, connectClient, connectClientForServer, dispatchRequestParams, effectTest, expectEffectFailure, findClosedLocalPort, findResponseRaw, grantDispatchAuthorizeHandlers, makeClient, messageReceivedFrame, realSleep, sendMalformedFrameBurst, sendMalformedFramesAndResponse, sendPaddedNotificationAndResponse, sendRpcEffect, setRef, scopedEffectTest, startAgentsLookupByNameServer, startDispatchAuthorizeServer, startHandshakingServer, startReconnectServer, startTestServer, validateResponseFrame, waitFor, waitForErrorResponse, waitForResponseRaw, withTestServer, CLIENT_DRAIN_COUNT, CLOSE_INFO_WAIT_MS, CLOSE_PROPAGATION_TIMEOUT_MS, CONNECT_FAILURE_MAX_MS, DOMAIN_REJECTED_MESSAGE, DOMAIN_REJECTED_REASON, GRANT_DECISION, HANDLER_REJECTION_CODE, JSON_RPC_VERSION, LOCALHOST_HOST, MALFORMED_FRAME_FLUSH_MS, NORMAL_CLOSE_CODE, NORMAL_CLOSE_REASON, POST_TIMEOUT_SETTLE_MS, REALTIME_POLL_TIMEOUT_MS, RECONNECT_AGENT_ID, REFUSED_CONNECT_MAX_MS, REFUSED_CONNECT_TEST_TIMEOUT_MS, RPC_TIMEOUT_MS, SESSION_A, SESSION_B, SERVER_ERROR_CLOSE_CODE, SERVER_ERROR_REASON, SERVER_ERROR_REQUEST_ID, SERVER_TEST_REQUEST_ID, STALE_PORT_TEST_TIMEOUT_MS, TEST_AGENT_ID, TEST_CONVERSATION_ID, TEST_TASK_ID, } from "./tm-client-test-support.js";
8
- import { shouldLogMalformedFrame } from "./tm-client.js";
9
- // ── Tests ──────────────────────────────────────────────────────────────
10
- beforeEach(() => {
11
- // Nothing global to reset; each test owns its server scope.
12
- });
13
- afterEach(() => {
14
- // Nothing to clean up — test scopes close their own servers.
15
- });
16
- it("encodes the notification fixture with the protocol method name", () => {
17
- expect(messageReceivedFrame().method).toBe(MessageReceivedNotificationDefinition.name);
18
- });
19
- // ─────────────────────────────────────────────────────────────────────
20
- // §5.1 — connect() must not hang on pre-open close/error
21
- // ─────────────────────────────────────────────────────────────────────
22
- effectTest("rejects immediately when the server closes the connection before handshake", () => withTestServer(Effect.gen(function* () {
23
- // Handler closes on the very first inbound frame — i.e. before the
24
- // client sees any network/connect response.
25
- const server = yield* startTestServer((conn) => conn.close(NORMAL_CLOSE_CODE).pipe(Effect.ignore));
26
- const client = makeClient(server.url);
27
- const t0 = Date.now();
28
- yield* expectEffectFailure(connectClient(client), /WebSocket not connected/);
29
- const elapsed = Date.now() - t0;
30
- expect(elapsed).toBeLessThan(CONNECT_FAILURE_MAX_MS);
31
- yield* closeClient(client);
32
- })));
33
- effectTest("rejects when the server refuses the connection (well within RPC timeout)", () => Effect.gen(function* () {
34
- // Point the client at a port that's not accepting connections. The
35
- // `ws` lib emits 'error' on TCP connect failure which maps to
36
- // `SocketGenericError{reason: "Open"}`. Our reader fiber's `onExit`
37
- // catches and fails the handshake deferred -> NotConnectedError.
38
- //
39
- // Observed: ECONNREFUSED fires in single-digit ms locally; give
40
- // generous CI headroom via the 15s assertion but keep test timeout at
41
- // 20s to avoid flakes on slow runners.
42
- const refusedPort = yield* findClosedLocalPort();
43
- const client = makeClient(`http://${LOCALHOST_HOST}:${refusedPort}`);
44
- const t0 = Date.now();
45
- yield* expectEffectFailure(connectClient(client), /WebSocket not connected/);
46
- const elapsed = Date.now() - t0;
47
- expect(elapsed).toBeLessThan(REFUSED_CONNECT_MAX_MS);
48
- yield* closeClient(client);
49
- }), REFUSED_CONNECT_TEST_TIMEOUT_MS);
50
- effectTest("resolves with HelloOk on the happy open -> network/connect path", () => withTestServer(Effect.gen(function* () {
51
- const server = yield* startHandshakingServer(() => Effect.void);
52
- const client = makeClient(server.url);
53
- const hello = (yield* connectClient(client));
54
- expect(hello.agentId).toBe(TEST_AGENT_ID);
55
- expect(client.helloOk).toEqual(hello);
56
- yield* closeClient(client);
57
- })));
58
- // ─────────────────────────────────────────────────────────────────────
59
- // §5.2 — pending RPCs fail fast on disconnect
60
- // ─────────────────────────────────────────────────────────────────────
61
- effectTest("rejects pending sendRpc calls when disconnect() is called", () => withTestServer(Effect.gen(function* () {
62
- // Handler responds to network/connect but drops everything else, so the
63
- // RPC stays pending until we trigger disconnect.
64
- const server = yield* startHandshakingServer(() => Effect.void);
65
- const client = makeClient(server.url);
66
- yield* connectClient(client);
67
- const rpcFiber = yield* Effect.fork(sendRpcEffect(client, MessagesSend, {
68
- taskId: TEST_TASK_ID,
69
- conversationId: TEST_CONVERSATION_ID,
70
- parts: [{ type: "text", text: "hi" }],
71
- }));
72
- // Wait for the RPC frame to land on the server.
73
- yield* waitFor(() => server.connections[0].received.length >= 2);
74
- // Trigger disconnect — the reader-fiber `onExit` path drains pendings
75
- // with NotConnectedError.
76
- yield* client.disconnect();
77
- yield* expectEffectFailure(Fiber.join(rpcFiber), /WebSocket not connected/);
78
- yield* closeClient(client);
79
- })));
80
- // ─────────────────────────────────────────────────────────────────────
81
- // §5.3 — no automatic retry on timeout (TestClock-driven)
82
- // ─────────────────────────────────────────────────────────────────────
83
- //
84
- // `sendRpcEffect` wraps `Deferred.await` with `Effect.timeoutFail`, which
85
- // schedules against the Effect Clock. Under `@effect/vitest`'s `it.effect`
86
- // that Clock is a TestClock, so `TestClock.adjust(Duration.millis(30_000))`
87
- // advances virtual time and fires the timeout synchronously.
88
- //
89
- // Layering caveat: `Effect.sleep` (TestClock) and real DOM WebSocket events
90
- // (real timers) live on different clocks. The handshake runs without any
91
- // `Effect.sleep`, so it completes against wall-clock. We poll server-side
92
- // frame arrival via real setTimeout (sidesteps TestClock) so the test can
93
- // wait for the RPC frame to land before advancing virtual time.
94
- scopedEffectTest("fails with RpcTimeoutError after virtual 30s, no retry frame", () => withTestServer(Effect.gen(function* () {
95
- // Server answers network/connect, then silently drops messages/send.
96
- const server = yield* startHandshakingServer(() => Effect.void);
97
- const client = makeClient(server.url);
98
- // Handshake: not wrapped in Effect.sleep, so TestClock doesn't
99
- // interfere.
100
- yield* connectClient(client);
101
- const serverConn = server.connections[0];
102
- const beforeCount = serverConn.received.length;
103
- const rpcFiber = yield* Effect.fork(client.sendRpc(MessagesSend, {
104
- taskId: TEST_TASK_ID,
105
- conversationId: TEST_CONVERSATION_ID,
106
- parts: [{ type: "text", text: "payload" }],
107
- }));
108
- yield* waitFor(() => serverConn.received.length > beforeCount, {
109
- maxMs: REALTIME_POLL_TIMEOUT_MS,
110
- });
111
- expect(serverConn.received.length).toBe(beforeCount + 1);
112
- // Virtual time: advance past RPC_TIMEOUT_MS → timeoutFail fires.
113
- yield* TestClock.adjust(Duration.millis(RPC_TIMEOUT_MS));
114
- const exit = yield* Fiber.await(rpcFiber);
115
- expect(Exit.isFailure(exit)).toBe(true);
116
- if (Exit.isFailure(exit)) {
117
- // Cause.failureOption narrows the cause to its typed error without
118
- // touching `_tag` manually. instanceof pins the class nominally
119
- // in case a defect slipped through with a matching shape.
120
- const failed = Cause.failureOption(exit.cause);
121
- expect(Option.isSome(failed)).toBe(true);
122
- if (Option.isSome(failed)) {
123
- const err = failed.value;
124
- expect(err).toBeInstanceOf(RpcTimeoutError);
125
- if (err instanceof RpcTimeoutError) {
126
- expect(err.method).toBe(MessagesSend.name);
127
- expect(err.timeoutMs).toBe(RPC_TIMEOUT_MS);
128
- }
129
- }
130
- }
131
- // No retry frame may have been enqueued — timeout is terminal. Bounce
132
- // once through the real event loop for any stragglers.
133
- yield* realSleep(POST_TIMEOUT_SETTLE_MS);
134
- expect(serverConn.received.length).toBe(beforeCount + 1);
135
- yield* client.close();
136
- })));
137
- // ─────────────────────────────────────────────────────────────────────
138
- // Reconnect backoff — real wall-clock
139
- // ─────────────────────────────────────────────────────────────────────
140
- //
141
- // The reconnect loop is forked on the client's internal `ManagedRuntime`
142
- // (created in the constructor to provide `NodeSocket.layerWebSocketConstructor`
143
- // without bubbling the requirement to callers). That runtime has its own
144
- // default Clock, so `TestClock.adjust` from a test fiber doesn't release
145
- // `Effect.sleep`s scheduled inside it. We assert on real wall-clock timing
146
- // instead; the jittered base delay is [0, 1s] so 2.5s is a safe ceiling.
147
- effectTest("reconnects with exponential-jittered backoff after unsolicited server close", () => withTestServer(Effect.gen(function* () {
148
- const authResponsesSent = { current: 0 };
149
- const reconnectHello = { current: null };
150
- const server = yield* startReconnectServer(authResponsesSent);
151
- const client = makeClient(server.url, {
152
- onReconnect: setRef(reconnectHello),
153
- });
154
- yield* connectClient(client);
155
- expect(authResponsesSent.current).toBe(1);
156
- expect(server.connections.length).toBe(1);
157
- // Kill the server-side connection. The client's reader sees a close,
158
- // fails pendings, invokes onDisconnect, and schedules a reconnect
159
- // via `Effect.sleep` + `Schedule.jittered`.
160
- yield* server.connections[0].close(NORMAL_CLOSE_CODE);
161
- yield* waitFor(() => server.connections.length >= 2 && authResponsesSent.current >= 2, { maxMs: 2500 });
162
- expect(server.connections.length).toBeGreaterThanOrEqual(2);
163
- expect(authResponsesSent.current).toBeGreaterThanOrEqual(2);
164
- yield* waitFor(() => reconnectHello.current !== null, { maxMs: 500 });
165
- expect(reconnectHello.current.agentId).toBe(RECONNECT_AGENT_ID);
166
- yield* closeClient(client);
167
- })));
168
- // ─────────────────────────────────────────────────────────────────────
169
- // §5.4 — malformed inbound frames logged + ignored, not crashing
170
- // ─────────────────────────────────────────────────────────────────────
171
- effectTest("ignores non-JSON frames while a pending RPC is outstanding, then resolves on the real response", () => withTestServer(Effect.gen(function* () {
172
- // Server auto-handshakes. On `conversations/list`, injects a few
173
- // malformed inbound frames, then the real response.
174
- const server = yield* startHandshakingServer(sendMalformedFramesAndResponse);
175
- const client = makeClient(server.url);
176
- yield* connectClient(client);
177
- const result = (yield* sendRpcEffect(client, TaskList, {}));
178
- expect(result.tasks).toEqual([]);
179
- yield* closeClient(client);
180
- })));
181
- effectTest("logs a combined notification and response text frame as malformed", () => withTestServer(Effect.gen(function* () {
182
- const events = [];
183
- const server = yield* startHandshakingServer(sendPaddedNotificationAndResponse);
184
- const client = makeClient(server.url, {
185
- onNotification: (event) => events.push(event),
186
- });
187
- yield* connectClient(client);
188
- const rpcFiber = yield* Effect.fork(sendRpcEffect(client, TaskList, {}).pipe(Effect.ignore));
189
- yield* realSleep(POST_TIMEOUT_SETTLE_MS);
190
- expect(events).toHaveLength(0);
191
- yield* Fiber.interrupt(rpcFiber);
192
- yield* closeClient(client);
193
- })));
194
- effectTest("routes a well-formed notification frame to onNotification", () => withTestServer(Effect.gen(function* () {
195
- const events = [];
196
- const server = yield* startHandshakingServer((conn) => conn.send(JSON.stringify(messageReceivedFrame())));
197
- const client = makeClient(server.url, {
198
- onNotification: (e) => events.push(e),
199
- });
200
- yield* connectClient(client);
201
- // Fire-and-forget: the server responds with an out-of-band notification
202
- // rather than an RPC response, so the noop Deferred never resolves.
203
- // Awaiting it would wedge the test for the full RPC_TIMEOUT_MS.
204
- const rpcFiber = yield* Effect.fork(sendRpcEffect(client, TaskList, {}).pipe(Effect.ignore));
205
- yield* waitFor(() => events.length > 0, {
206
- maxMs: CLOSE_INFO_WAIT_MS,
207
- });
208
- expect(events[0]).toMatchObject({
209
- method: MessageReceivedNotificationDefinition.name,
210
- });
211
- yield* Fiber.interrupt(rpcFiber);
212
- yield* closeClient(client);
213
- })));
214
- effectTest("does NOT route a notification frame missing the method field", () => withTestServer(Effect.gen(function* () {
215
- const events = [];
216
- // Send a malformed notification on the first post-handshake frame.
217
- const server = yield* startHandshakingServer((conn) => conn.send(JSON.stringify({ jsonrpc: JSON_RPC_VERSION, params: {} })));
218
- const client = makeClient(server.url, {
219
- onNotification: (e) => events.push(e),
220
- });
221
- yield* connectClient(client);
222
- // Fire-and-forget: see the well-formed-event test above for rationale.
223
- const rpcFiber = yield* Effect.fork(sendRpcEffect(client, TaskList, {}).pipe(Effect.ignore));
224
- yield* Effect.sleep(Duration.millis(POST_TIMEOUT_SETTLE_MS));
225
- expect(events).toHaveLength(0);
226
- yield* Fiber.interrupt(rpcFiber);
227
- yield* closeClient(client);
228
- })));
229
- // ─────────────────────────────────────────────────────────────────────
230
- // Malformed-frame log cadence
231
- // ─────────────────────────────────────────────────────────────────────
232
- effectTest("logs at frames #1, #50, #100 and suppresses everything in between", () => withTestServer(Effect.gen(function* () {
233
- // Server auto-handshakes. On ANY post-handshake frame, fires 101
234
- // malformed frames back at the client.
235
- const server = yield* startHandshakingServer(sendMalformedFrameBurst);
236
- const client = makeClient(server.url);
237
- yield* connectClient(client);
238
- // Fire-and-forget: server responds with 101 malformed frames, no
239
- // actual RPC response, so awaiting the noop would wedge the test.
240
- const rpcFiber = yield* Effect.fork(sendRpcEffect(client, TaskList, {}).pipe(Effect.ignore));
241
- // Wait for the malformed frames to flush through the reader fiber.
242
- yield* Effect.sleep(Duration.millis(MALFORMED_FRAME_FLUSH_MS));
243
- const loggedFrameNumbers = Array.from({ length: 101 }, (_, index) => index + 1).filter(shouldLogMalformedFrame);
244
- expect(loggedFrameNumbers).toEqual([1, 50, 100]);
245
- yield* Fiber.interrupt(rpcFiber);
246
- yield* closeClient(client);
247
- })));
248
- // ─────────────────────────────────────────────────────────────────────
249
- // close() vs pending-RPC interleave
250
- // ─────────────────────────────────────────────────────────────────────
251
- effectTest("rejects the pending RPC with NotConnectedError before any timeout", () => withTestServer(Effect.gen(function* () {
252
- // Server handshakes then drops everything.
253
- const server = yield* startHandshakingServer(() => Effect.void);
254
- const client = makeClient(server.url);
255
- yield* connectClient(client);
256
- const rpcFiber = yield* Effect.fork(sendRpcEffect(client, TaskList, {}));
257
- yield* waitFor(() => server.connections[0].received.length >= 2);
258
- const beforeMs = Date.now();
259
- yield* closeClient(client);
260
- yield* expectEffectFailure(Fiber.join(rpcFiber), /WebSocket not connected/);
261
- expect(Date.now() - beforeMs).toBeLessThan(CLOSE_PROPAGATION_TIMEOUT_MS);
262
- })));
263
- // ─────────────────────────────────────────────────────────────────────
264
- // ws.on("error") → close propagation
265
- // ─────────────────────────────────────────────────────────────────────
266
- effectTest("pending RPCs reject with NotConnectedError after the server closes", () => withTestServer(Effect.gen(function* () {
267
- // Handshakes, then on any follow-up RPC, closes abruptly (code 1011).
268
- const server = yield* startHandshakingServer((conn) => conn.close(SERVER_ERROR_CLOSE_CODE));
269
- const client = makeClient(server.url);
270
- yield* connectClient(client);
271
- yield* expectEffectFailure(sendRpcEffect(client, TaskList, {}), /WebSocket not connected/);
272
- yield* closeClient(client);
273
- })));
274
- // ─────────────────────────────────────────────────────────────────────
275
- // Typed-manifest sendRpc overload
276
- // ─────────────────────────────────────────────────────────────────────
277
- effectTest("uses definition.name as the wire-level method string", () => withTestServer(Effect.gen(function* () {
278
- const captured = { current: null };
279
- const server = yield* startAgentsLookupByNameServer(captured);
280
- const client = makeClient(server.url);
281
- yield* connectClient(client);
282
- const result = yield* client.sendRpc(AgentsLookupByName, {
283
- names: ["alice"],
284
- });
285
- expect(result.agents).toEqual([]);
286
- expect(captured.current?.method).toBe(AgentsLookupByName.name);
287
- expect(captured.current?.params).toEqual({ names: ["alice"] });
288
- yield* closeClient(client);
289
- })));
290
- // ─────────────────────────────────────────────────────────────────────
291
- // AC2 — graceful close drains ESTABLISHED sockets (socket-count evidence)
292
- // ─────────────────────────────────────────────────────────────────────
293
- effectTest("10 clients close cleanly: no CLOSE_WAIT sockets on the server port", () => withTestServer(Effect.gen(function* () {
294
- const server = yield* startHandshakingServer(() => Effect.void);
295
- const port = new URL(server.url).port;
296
- // Connect 10 clients concurrently.
297
- const clients = yield* Effect.all(Array.from({ length: CLIENT_DRAIN_COUNT }, () => connectClientForServer(server.url)), { concurrency: CLIENT_DRAIN_COUNT });
298
- expect(server.connections.length).toBe(CLIENT_DRAIN_COUNT);
299
- // Close all 10 via the graceful Effect-based close().
300
- yield* Effect.all(clients.map((c) => c.close()), { concurrency: CLIENT_DRAIN_COUNT });
301
- // Brief pause for TCP close handshake to complete.
302
- yield* Effect.sleep("150 millis");
303
- // Assert no CLOSE_WAIT connections remain on the server port.
304
- const ssOut = yield* closeWaitSocketOutput;
305
- const stale = ssOut
306
- .split("\n")
307
- .filter((line) => line.includes(`:${port} `) || line.endsWith(`:${port}`));
308
- expect(stale).toHaveLength(0);
309
- })), STALE_PORT_TEST_TIMEOUT_MS);
310
- // ─────────────────────────────────────────────────────────────────────
311
- // Spec #222 §5.4 (V7) — `onDisconnect` receives a typed `CloseInfo`
312
- // ─────────────────────────────────────────────────────────────────────
313
- // Two distinguishable closes through the live reader-fiber path:
314
- // 1. Server-initiated 1000/"bye" → CloseInfo{1000, NORMAL_CLOSE_REASON}
315
- // (`@effect/platform/Socket` treats 1000 as `Exit.Success` per
316
- // its default `closeCodeIsError`; `extractCloseInfo` synthesizes
317
- // the OQ-5 graceful default — the close-frame reason is dropped
318
- // because there's no `SocketCloseError` to round-trip.)
319
- // 2. Server-initiated 1011/SERVER_ERROR_REASON → CloseInfo{1011, SERVER_ERROR_REASON}
320
- // (non-1000 codes raise `SocketCloseError`; the real code +
321
- // `closeReason` round-trip through.)
322
- //
323
- // The pre-deletion adapter hardcoded `{1000, "disconnect"}` regardless
324
- // of the actual close. A V7 mutation that re-introduces the hardcode
325
- // flips the second test's `code === 1011` assertion pass → fail,
326
- // satisfying AC 5.4-4 (distinguishable payloads). The OQ-5
327
- // default-fallback paths (HandshakeFailure / TransportFailure /
328
- // Unknown → DEFAULT_ABNORMAL_CLOSE) are covered by the direct unit
329
- // tests in `runtime/close-info.test.ts`, where synthetic `Exit`
330
- // values exercise each branch without a real transport.
331
- effectTest("synthesizes the graceful default when the transport treats 1000 as Exit.Success", () => withTestServer(Effect.gen(function* () {
332
- const closes = [];
333
- const server = yield* startHandshakingServer(() => Effect.void);
334
- const client = makeClient(server.url, {
335
- onDisconnect: (close) => {
336
- closes.push(close);
337
- },
338
- });
339
- yield* connectClient(client);
340
- yield* server.connections[0].close(NORMAL_CLOSE_CODE, "bye");
341
- yield* waitFor(() => closes.length > 0, {
342
- maxMs: CLOSE_INFO_WAIT_MS,
343
- });
344
- yield* closeClient(client);
345
- expect(closes.length).toBeGreaterThanOrEqual(1);
346
- const first = closes[0];
347
- expect(first.code).toBe(NORMAL_CLOSE_CODE);
348
- expect(first.reason).toBe(NORMAL_CLOSE_REASON); // OQ-5 default, not "bye"
349
- })));
350
- effectTest("round-trips the server's close code + reason for a 1011 (server error) close", () => withTestServer(Effect.gen(function* () {
351
- const closes = [];
352
- const server = yield* startHandshakingServer(() => Effect.void);
353
- const client = makeClient(server.url, {
354
- onDisconnect: (close) => {
355
- closes.push(close);
356
- },
357
- });
358
- yield* connectClient(client);
359
- yield* server.connections[0].close(SERVER_ERROR_CLOSE_CODE, SERVER_ERROR_REASON);
360
- yield* waitFor(() => closes.length > 0, {
361
- maxMs: CLOSE_INFO_WAIT_MS,
362
- });
363
- yield* closeClient(client);
364
- expect(closes.length).toBeGreaterThanOrEqual(1);
365
- const first = closes[0];
366
- // Distinguishable from the 1000 test above (AC 5.4-4):
367
- // a hardcoded `{1000, "disconnect"}` would fail this assertion.
368
- expect(first.code).toBe(SERVER_ERROR_CLOSE_CODE);
369
- expect(first.reason).toBe(SERVER_ERROR_REASON);
370
- })));
371
- // ─────────────────────────────────────────────────────────────────────
372
- // Phase 1.0 (B.1) gating tests — client-side server-initiated RPC
373
- // (Spec F #617 typed-dispatcher TM-callback handler table + dispatcher
374
- // fiber + appCallback response write-back)
375
- // ─────────────────────────────────────────────────────────────────────
376
- effectTest("dispatches an inbound appCallback request to the registered handler and writes the response back", () => withTestServer(Effect.gen(function* () {
377
- // Server: auto-handshake; immediately AFTER replying to
378
- // network/connect, send an appCallback request to the client; capture every
379
- // subsequent inbound frame the client writes back. We're testing
380
- // the client's dispatcher fiber + handler registry + response
381
- // encoding.
382
- const server = yield* startDispatchAuthorizeServer(SERVER_TEST_REQUEST_ID, dispatchRequestParams(SESSION_A));
383
- // Spec F: pass the TM-callback handler table at construction
384
- // so the typed dispatcher sees it on the very first inbound
385
- // task-callback request. The handler captures the `taskId`
386
- // it was invoked with so the assertion below can verify the
387
- // request reached the right descriptor's handler.
388
- const observedTaskId = { current: null };
389
- const client = makeClient(server.url, {
390
- handlers: grantDispatchAuthorizeHandlers(observedTaskId),
391
- });
392
- yield* connectClient(client);
393
- // Wait for the response frame the dispatcher writes back. The
394
- // server records every inbound frame in `received` — the appCallback
395
- // response should appear after the client's network/connect.
396
- const responseRaw = yield* waitForResponseRaw(server, SERVER_TEST_REQUEST_ID);
397
- const parsedResponse = JSON.parse(responseRaw);
398
- expect(validateResponseFrame(parsedResponse)).toBe(true);
399
- if (!validateResponseFrame(parsedResponse))
400
- return;
401
- expect(parsedResponse.id).toBe(SERVER_TEST_REQUEST_ID);
402
- expect("result" in parsedResponse).toBe(true);
403
- if (!("result" in parsedResponse))
404
- return;
405
- const result = parsedResponse.result;
406
- expect(result.admission.decision).toBe(GRANT_DECISION);
407
- expect(observedTaskId.current).toBe(SESSION_A);
408
- yield* closeClient(client);
409
- })));
410
- // Spec F: TM-callback handler-table fragment bound at construction.
411
- // The dispatch/authorize handler unconditionally fails with a
412
- // registered tagged error so the dispatcher encodes it onto the wire
413
- // as an `error` reply.
414
- const REGISTERED_ERROR_HANDLERS = {
415
- "dispatch/authorize": {
416
- definition: DispatchAuthorize,
417
- handle: () => Effect.fail(new ForbiddenError({
418
- message: DOMAIN_REJECTED_MESSAGE,
419
- data: { reason: DOMAIN_REJECTED_REASON },
420
- })),
421
- },
422
- "messages/authorize": {
423
- definition: MessagesAuthorize,
424
- handle: () => Effect.fail(new ForbiddenError({ message: "vacuous deny" })),
425
- },
426
- "task/create": {
427
- definition: TaskCreate,
428
- handle: () => Effect.succeed({
429
- verdict: { decision: "reject", reason: "vacuous deny" },
430
- }),
431
- },
432
- };
433
- effectTest("encodes a registered handler error as a `response` frame with `error`", () => withTestServer(Effect.gen(function* () {
434
- const server = yield* startDispatchAuthorizeServer(SERVER_ERROR_REQUEST_ID, dispatchRequestParams(SESSION_B));
435
- const client = makeClient(server.url, {
436
- handlers: REGISTERED_ERROR_HANDLERS,
437
- });
438
- yield* connectClient(client);
439
- yield* waitForErrorResponse(server, SERVER_ERROR_REQUEST_ID);
440
- const found = findResponseRaw(server, SERVER_ERROR_REQUEST_ID);
441
- const parsed = JSON.parse(found);
442
- expect(validateResponseFrame(parsed)).toBe(true);
443
- if (!validateResponseFrame(parsed))
444
- return;
445
- expect("error" in parsed).toBe(true);
446
- if (!("error" in parsed))
447
- return;
448
- expect(parsed.error.code).toBe(HANDLER_REJECTION_CODE);
449
- expect(parsed.error.message).toBe(DOMAIN_REJECTED_MESSAGE);
450
- expect(parsed.error.data.reason).toBe(DOMAIN_REJECTED_REASON);
451
- yield* closeClient(client);
452
- })));
453
- // Note: Spec F (#617) makes the TM-callback handler table immutable at
454
- // construction. Duplicate-key binding is now a TypeScript compile-time
455
- // error at the object-literal site (duplicate property name on the
456
- // `handlers` literal). The previous runtime
457
- // duplicate-registration rejection test has been retired alongside the
458
- // runtime register API (D3 deletion); the type system carries the
459
- // invariant.
460
- // ─────────────────────────────────────────────────────────────────────
461
- // Regression gate (review-295): runSync(client.close()) and
462
- // runSync(client.disconnect()) must not throw AsyncFiberException after
463
- // the appCallback queue + dispatcher were added. The appCallback machinery lives off the
464
- // per-connect Scope (allocated inline + forked via runtime.runFork) so
465
- // `Scope.close` stays sync; teardown of the queue and dispatcher fiber
466
- // is dispatched via `runFork` from close()/disconnectSync().
467
- //
468
- // Failure mode this guards: `Effect.acquireRelease(Queue.dropping, Queue.shutdown)
469
- // .pipe(Scope.extend(scope))` + `Effect.forkScoped` would have made the
470
- // scope teardown async, breaking
471
- // packages/openclaw-channel/src/__tests__/reconnection.integration.test.ts:14
472
- // (`closeWs = (c) => Effect.runSync(c.close())`).
473
- // ─────────────────────────────────────────────────────────────────────
474
- effectTest("client.close() runs synchronously after a successful connect", () => withTestServer(Effect.gen(function* () {
475
- const server = yield* startHandshakingServer(() => Effect.void);
476
- const client = makeClient(server.url);
477
- yield* connectClient(client);
478
- // Critical: this MUST be runSync, not runPromise. Throwing
479
- // AsyncFiberException here is the regression we're guarding.
480
- expect(() => Effect.runSync(client.close())).not.toThrow();
481
- })));
482
- effectTest("client.disconnect() runs synchronously after a successful connect", () => withTestServer(Effect.gen(function* () {
483
- const server = yield* startHandshakingServer(() => Effect.void);
484
- const client = makeClient(server.url);
485
- yield* connectClient(client);
486
- expect(() => Effect.runSync(client.disconnect())).not.toThrow();
487
- // Drain reconnect-fiber + runtime so vitest doesn't flag dangling work.
488
- yield* closeClient(client);
489
- })));
490
- //# sourceMappingURL=tm-client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tm-client.test.js","sourceRoot":"","sources":["../src/tm-client.test.ts"],"names":[],"mappings":"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"}
File without changes
File without changes