@trigger.dev/core 4.4.6 → 4.5.0-rc.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 (345) hide show
  1. package/dist/commonjs/v3/apiClient/errors.d.ts +5 -0
  2. package/dist/commonjs/v3/apiClient/errors.js +12 -0
  3. package/dist/commonjs/v3/apiClient/errors.js.map +1 -1
  4. package/dist/commonjs/v3/apiClient/index.d.ts +208 -1
  5. package/dist/commonjs/v3/apiClient/index.js +204 -0
  6. package/dist/commonjs/v3/apiClient/index.js.map +1 -1
  7. package/dist/commonjs/v3/apiClient/runStream.d.ts +44 -0
  8. package/dist/commonjs/v3/apiClient/runStream.js +156 -22
  9. package/dist/commonjs/v3/apiClient/runStream.js.map +1 -1
  10. package/dist/commonjs/v3/apiClient/runStream.test.d.ts +1 -0
  11. package/dist/commonjs/v3/apiClient/runStream.test.js +511 -0
  12. package/dist/commonjs/v3/apiClient/runStream.test.js.map +1 -0
  13. package/dist/commonjs/v3/apiClient/types.d.ts +2 -0
  14. package/dist/commonjs/v3/auth/environment.d.ts +62 -0
  15. package/dist/commonjs/v3/auth/environment.js +20 -0
  16. package/dist/commonjs/v3/auth/environment.js.map +1 -0
  17. package/dist/commonjs/v3/errors.d.ts +7 -0
  18. package/dist/commonjs/v3/errors.js +22 -2
  19. package/dist/commonjs/v3/errors.js.map +1 -1
  20. package/dist/commonjs/v3/index.d.ts +2 -1
  21. package/dist/commonjs/v3/index.js +1 -0
  22. package/dist/commonjs/v3/index.js.map +1 -1
  23. package/dist/commonjs/v3/inputStreams/index.d.ts +3 -0
  24. package/dist/commonjs/v3/inputStreams/index.js +9 -0
  25. package/dist/commonjs/v3/inputStreams/index.js.map +1 -1
  26. package/dist/commonjs/v3/inputStreams/manager.d.ts +14 -0
  27. package/dist/commonjs/v3/inputStreams/manager.js +116 -4
  28. package/dist/commonjs/v3/inputStreams/manager.js.map +1 -1
  29. package/dist/commonjs/v3/inputStreams/noopManager.d.ts +3 -0
  30. package/dist/commonjs/v3/inputStreams/noopManager.js +3 -0
  31. package/dist/commonjs/v3/inputStreams/noopManager.js.map +1 -1
  32. package/dist/commonjs/v3/inputStreams/types.d.ts +19 -0
  33. package/dist/commonjs/v3/locals/manager.js.map +1 -1
  34. package/dist/commonjs/v3/locals/types.d.ts +18 -7
  35. package/dist/commonjs/v3/realtime-streams-api.d.ts +3 -0
  36. package/dist/commonjs/v3/realtime-streams-api.js +8 -1
  37. package/dist/commonjs/v3/realtime-streams-api.js.map +1 -1
  38. package/dist/commonjs/v3/realtimeStreams/index.d.ts +3 -0
  39. package/dist/commonjs/v3/realtimeStreams/index.js +11 -1
  40. package/dist/commonjs/v3/realtimeStreams/index.js.map +1 -1
  41. package/dist/commonjs/v3/realtimeStreams/manager.d.ts +11 -0
  42. package/dist/commonjs/v3/realtimeStreams/manager.js +58 -2
  43. package/dist/commonjs/v3/realtimeStreams/manager.js.map +1 -1
  44. package/dist/commonjs/v3/realtimeStreams/manager.test.d.ts +1 -0
  45. package/dist/commonjs/v3/realtimeStreams/manager.test.js +92 -0
  46. package/dist/commonjs/v3/realtimeStreams/manager.test.js.map +1 -0
  47. package/dist/commonjs/v3/realtimeStreams/noopManager.js +1 -1
  48. package/dist/commonjs/v3/realtimeStreams/noopManager.js.map +1 -1
  49. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.d.ts +41 -0
  50. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js +77 -0
  51. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js.map +1 -0
  52. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.d.ts +45 -0
  53. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js +83 -0
  54. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -0
  55. package/dist/commonjs/v3/realtimeStreams/streamInstance.d.ts +14 -2
  56. package/dist/commonjs/v3/realtimeStreams/streamInstance.js +5 -2
  57. package/dist/commonjs/v3/realtimeStreams/streamInstance.js.map +1 -1
  58. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.d.ts +2 -2
  59. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js +2 -1
  60. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
  61. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.d.ts +23 -2
  62. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js +57 -4
  63. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
  64. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.d.ts +1 -0
  65. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js +68 -0
  66. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js.map +1 -0
  67. package/dist/commonjs/v3/realtimeStreams/types.d.ts +42 -3
  68. package/dist/commonjs/v3/resource-catalog/catalog.d.ts +4 -1
  69. package/dist/commonjs/v3/resource-catalog/index.d.ts +4 -1
  70. package/dist/commonjs/v3/resource-catalog/index.js +9 -0
  71. package/dist/commonjs/v3/resource-catalog/index.js.map +1 -1
  72. package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.d.ts +4 -1
  73. package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.js +9 -0
  74. package/dist/commonjs/v3/resource-catalog/noopResourceCatalog.js.map +1 -1
  75. package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.d.ts +6 -1
  76. package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.js +52 -4
  77. package/dist/commonjs/v3/resource-catalog/standardResourceCatalog.js.map +1 -1
  78. package/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +2 -0
  79. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +14 -0
  80. package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +1 -0
  81. package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +7 -0
  82. package/dist/commonjs/v3/schemas/api.d.ts +333 -0
  83. package/dist/commonjs/v3/schemas/api.js +82 -9
  84. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  85. package/dist/commonjs/v3/schemas/build.d.ts +240 -0
  86. package/dist/commonjs/v3/schemas/build.js +3 -0
  87. package/dist/commonjs/v3/schemas/build.js.map +1 -1
  88. package/dist/commonjs/v3/schemas/checkpoints.d.ts +7 -0
  89. package/dist/commonjs/v3/schemas/idempotencyKey.test.d.ts +1 -0
  90. package/dist/commonjs/v3/schemas/idempotencyKey.test.js +143 -0
  91. package/dist/commonjs/v3/schemas/idempotencyKey.test.js.map +1 -0
  92. package/dist/commonjs/v3/schemas/messages.d.ts +160 -0
  93. package/dist/commonjs/v3/schemas/resources.d.ts +40 -0
  94. package/dist/commonjs/v3/schemas/resources.js +5 -1
  95. package/dist/commonjs/v3/schemas/resources.js.map +1 -1
  96. package/dist/commonjs/v3/schemas/runEngine.d.ts +12 -0
  97. package/dist/commonjs/v3/schemas/runEngine.js +3 -1
  98. package/dist/commonjs/v3/schemas/runEngine.js.map +1 -1
  99. package/dist/commonjs/v3/schemas/schemas.d.ts +59 -0
  100. package/dist/commonjs/v3/schemas/schemas.js +21 -1
  101. package/dist/commonjs/v3/schemas/schemas.js.map +1 -1
  102. package/dist/commonjs/v3/semanticInternalAttributes.d.ts +1 -0
  103. package/dist/commonjs/v3/semanticInternalAttributes.js +1 -0
  104. package/dist/commonjs/v3/semanticInternalAttributes.js.map +1 -1
  105. package/dist/commonjs/v3/session-streams-api.d.ts +5 -0
  106. package/dist/commonjs/v3/session-streams-api.js +25 -0
  107. package/dist/commonjs/v3/session-streams-api.js.map +1 -0
  108. package/dist/commonjs/v3/sessionStreams/chatSnapshot.d.ts +53 -0
  109. package/dist/commonjs/v3/sessionStreams/chatSnapshot.js +43 -0
  110. package/dist/commonjs/v3/sessionStreams/chatSnapshot.js.map +1 -0
  111. package/dist/commonjs/v3/sessionStreams/index.d.ts +24 -0
  112. package/dist/commonjs/v3/sessionStreams/index.js +64 -0
  113. package/dist/commonjs/v3/sessionStreams/index.js.map +1 -0
  114. package/dist/commonjs/v3/sessionStreams/manager.d.ts +54 -0
  115. package/dist/commonjs/v3/sessionStreams/manager.js +511 -0
  116. package/dist/commonjs/v3/sessionStreams/manager.js.map +1 -0
  117. package/dist/commonjs/v3/sessionStreams/manager.test.d.ts +1 -0
  118. package/dist/commonjs/v3/sessionStreams/manager.test.js +123 -0
  119. package/dist/commonjs/v3/sessionStreams/manager.test.js.map +1 -0
  120. package/dist/commonjs/v3/sessionStreams/noopManager.d.ts +20 -0
  121. package/dist/commonjs/v3/sessionStreams/noopManager.js +35 -0
  122. package/dist/commonjs/v3/sessionStreams/noopManager.js.map +1 -0
  123. package/dist/commonjs/v3/sessionStreams/types.d.ts +65 -0
  124. package/dist/commonjs/v3/sessionStreams/types.js +7 -0
  125. package/dist/commonjs/v3/sessionStreams/types.js.map +1 -0
  126. package/dist/commonjs/v3/sessionStreams/wireProtocol.d.ts +65 -0
  127. package/dist/commonjs/v3/sessionStreams/wireProtocol.js +72 -0
  128. package/dist/commonjs/v3/sessionStreams/wireProtocol.js.map +1 -0
  129. package/dist/commonjs/v3/taskContext/index.d.ts +4 -0
  130. package/dist/commonjs/v3/taskContext/index.js +18 -0
  131. package/dist/commonjs/v3/taskContext/index.js.map +1 -1
  132. package/dist/commonjs/v3/taskContext/index.test.d.ts +1 -0
  133. package/dist/commonjs/v3/taskContext/index.test.js +73 -0
  134. package/dist/commonjs/v3/taskContext/index.test.js.map +1 -0
  135. package/dist/commonjs/v3/taskContext/otelProcessors.js +11 -0
  136. package/dist/commonjs/v3/taskContext/otelProcessors.js.map +1 -1
  137. package/dist/commonjs/v3/test/index.d.ts +5 -0
  138. package/dist/commonjs/v3/test/index.js +14 -0
  139. package/dist/commonjs/v3/test/index.js.map +1 -0
  140. package/dist/commonjs/v3/test/mock-task-context.d.ts +123 -0
  141. package/dist/commonjs/v3/test/mock-task-context.js +193 -0
  142. package/dist/commonjs/v3/test/mock-task-context.js.map +1 -0
  143. package/dist/commonjs/v3/test/test-input-stream-manager.d.ts +46 -0
  144. package/dist/commonjs/v3/test/test-input-stream-manager.js +192 -0
  145. package/dist/commonjs/v3/test/test-input-stream-manager.js.map +1 -0
  146. package/dist/commonjs/v3/test/test-realtime-streams-manager.d.ts +40 -0
  147. package/dist/commonjs/v3/test/test-realtime-streams-manager.js +140 -0
  148. package/dist/commonjs/v3/test/test-realtime-streams-manager.js.map +1 -0
  149. package/dist/commonjs/v3/test/test-run-metadata-manager.d.ts +31 -0
  150. package/dist/commonjs/v3/test/test-run-metadata-manager.js +86 -0
  151. package/dist/commonjs/v3/test/test-run-metadata-manager.js.map +1 -0
  152. package/dist/commonjs/v3/test/test-session-stream-manager.d.ts +60 -0
  153. package/dist/commonjs/v3/test/test-session-stream-manager.js +247 -0
  154. package/dist/commonjs/v3/test/test-session-stream-manager.js.map +1 -0
  155. package/dist/commonjs/v3/types/tasks.d.ts +35 -0
  156. package/dist/commonjs/v3/utils/gitBranch.d.ts +2 -0
  157. package/dist/commonjs/v3/utils/gitBranch.js +46 -0
  158. package/dist/commonjs/v3/utils/gitBranch.js.map +1 -0
  159. package/dist/commonjs/v3/utils/globals.d.ts +2 -0
  160. package/dist/commonjs/v3/utils/globals.js.map +1 -1
  161. package/dist/commonjs/v3/utils/reconnectBackoff.d.ts +20 -0
  162. package/dist/commonjs/v3/utils/reconnectBackoff.js +29 -0
  163. package/dist/commonjs/v3/utils/reconnectBackoff.js.map +1 -0
  164. package/dist/commonjs/v3/utils/reconnectBackoff.test.d.ts +1 -0
  165. package/dist/commonjs/v3/utils/reconnectBackoff.test.js +76 -0
  166. package/dist/commonjs/v3/utils/reconnectBackoff.test.js.map +1 -0
  167. package/dist/commonjs/v3/workers/index.d.ts +1 -0
  168. package/dist/commonjs/v3/workers/index.js +3 -1
  169. package/dist/commonjs/v3/workers/index.js.map +1 -1
  170. package/dist/commonjs/v3/workers/taskExecutor.js +1 -0
  171. package/dist/commonjs/v3/workers/taskExecutor.js.map +1 -1
  172. package/dist/commonjs/version.js +1 -1
  173. package/dist/esm/v3/apiClient/errors.d.ts +5 -0
  174. package/dist/esm/v3/apiClient/errors.js +11 -0
  175. package/dist/esm/v3/apiClient/errors.js.map +1 -1
  176. package/dist/esm/v3/apiClient/index.d.ts +208 -1
  177. package/dist/esm/v3/apiClient/index.js +205 -1
  178. package/dist/esm/v3/apiClient/index.js.map +1 -1
  179. package/dist/esm/v3/apiClient/runStream.d.ts +44 -0
  180. package/dist/esm/v3/apiClient/runStream.js +157 -23
  181. package/dist/esm/v3/apiClient/runStream.js.map +1 -1
  182. package/dist/esm/v3/apiClient/runStream.test.d.ts +1 -0
  183. package/dist/esm/v3/apiClient/runStream.test.js +509 -0
  184. package/dist/esm/v3/apiClient/runStream.test.js.map +1 -0
  185. package/dist/esm/v3/apiClient/types.d.ts +2 -0
  186. package/dist/esm/v3/auth/environment.d.ts +62 -0
  187. package/dist/esm/v3/auth/environment.js +19 -0
  188. package/dist/esm/v3/auth/environment.js.map +1 -0
  189. package/dist/esm/v3/errors.d.ts +7 -0
  190. package/dist/esm/v3/errors.js +19 -1
  191. package/dist/esm/v3/errors.js.map +1 -1
  192. package/dist/esm/v3/index.d.ts +2 -1
  193. package/dist/esm/v3/index.js +1 -0
  194. package/dist/esm/v3/index.js.map +1 -1
  195. package/dist/esm/v3/inputStreams/index.d.ts +3 -0
  196. package/dist/esm/v3/inputStreams/index.js +9 -0
  197. package/dist/esm/v3/inputStreams/index.js.map +1 -1
  198. package/dist/esm/v3/inputStreams/manager.d.ts +14 -0
  199. package/dist/esm/v3/inputStreams/manager.js +116 -4
  200. package/dist/esm/v3/inputStreams/manager.js.map +1 -1
  201. package/dist/esm/v3/inputStreams/noopManager.d.ts +3 -0
  202. package/dist/esm/v3/inputStreams/noopManager.js +3 -0
  203. package/dist/esm/v3/inputStreams/noopManager.js.map +1 -1
  204. package/dist/esm/v3/inputStreams/types.d.ts +19 -0
  205. package/dist/esm/v3/locals/manager.js.map +1 -1
  206. package/dist/esm/v3/locals/types.d.ts +18 -7
  207. package/dist/esm/v3/realtime-streams-api.d.ts +3 -0
  208. package/dist/esm/v3/realtime-streams-api.js +2 -0
  209. package/dist/esm/v3/realtime-streams-api.js.map +1 -1
  210. package/dist/esm/v3/realtimeStreams/index.d.ts +3 -0
  211. package/dist/esm/v3/realtimeStreams/index.js +5 -0
  212. package/dist/esm/v3/realtimeStreams/index.js.map +1 -1
  213. package/dist/esm/v3/realtimeStreams/manager.d.ts +11 -0
  214. package/dist/esm/v3/realtimeStreams/manager.js +58 -2
  215. package/dist/esm/v3/realtimeStreams/manager.js.map +1 -1
  216. package/dist/esm/v3/realtimeStreams/manager.test.d.ts +1 -0
  217. package/dist/esm/v3/realtimeStreams/manager.test.js +90 -0
  218. package/dist/esm/v3/realtimeStreams/manager.test.js.map +1 -0
  219. package/dist/esm/v3/realtimeStreams/noopManager.js +1 -1
  220. package/dist/esm/v3/realtimeStreams/noopManager.js.map +1 -1
  221. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.d.ts +41 -0
  222. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js +73 -0
  223. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js.map +1 -0
  224. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.d.ts +45 -0
  225. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js +77 -0
  226. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -0
  227. package/dist/esm/v3/realtimeStreams/streamInstance.d.ts +14 -2
  228. package/dist/esm/v3/realtimeStreams/streamInstance.js +5 -2
  229. package/dist/esm/v3/realtimeStreams/streamInstance.js.map +1 -1
  230. package/dist/esm/v3/realtimeStreams/streamsWriterV1.d.ts +2 -2
  231. package/dist/esm/v3/realtimeStreams/streamsWriterV1.js +2 -1
  232. package/dist/esm/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
  233. package/dist/esm/v3/realtimeStreams/streamsWriterV2.d.ts +23 -2
  234. package/dist/esm/v3/realtimeStreams/streamsWriterV2.js +56 -4
  235. package/dist/esm/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
  236. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.d.ts +1 -0
  237. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js +66 -0
  238. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js.map +1 -0
  239. package/dist/esm/v3/realtimeStreams/types.d.ts +42 -3
  240. package/dist/esm/v3/resource-catalog/catalog.d.ts +4 -1
  241. package/dist/esm/v3/resource-catalog/index.d.ts +4 -1
  242. package/dist/esm/v3/resource-catalog/index.js +9 -0
  243. package/dist/esm/v3/resource-catalog/index.js.map +1 -1
  244. package/dist/esm/v3/resource-catalog/noopResourceCatalog.d.ts +4 -1
  245. package/dist/esm/v3/resource-catalog/noopResourceCatalog.js +9 -0
  246. package/dist/esm/v3/resource-catalog/noopResourceCatalog.js.map +1 -1
  247. package/dist/esm/v3/resource-catalog/standardResourceCatalog.d.ts +6 -1
  248. package/dist/esm/v3/resource-catalog/standardResourceCatalog.js +52 -4
  249. package/dist/esm/v3/resource-catalog/standardResourceCatalog.js.map +1 -1
  250. package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +2 -0
  251. package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +14 -0
  252. package/dist/esm/v3/runEngineWorker/workload/http.d.ts +1 -0
  253. package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +7 -0
  254. package/dist/esm/v3/schemas/api.d.ts +333 -0
  255. package/dist/esm/v3/schemas/api.js +80 -7
  256. package/dist/esm/v3/schemas/api.js.map +1 -1
  257. package/dist/esm/v3/schemas/build.d.ts +240 -0
  258. package/dist/esm/v3/schemas/build.js +4 -1
  259. package/dist/esm/v3/schemas/build.js.map +1 -1
  260. package/dist/esm/v3/schemas/checkpoints.d.ts +7 -0
  261. package/dist/esm/v3/schemas/idempotencyKey.test.d.ts +1 -0
  262. package/dist/esm/v3/schemas/idempotencyKey.test.js +141 -0
  263. package/dist/esm/v3/schemas/idempotencyKey.test.js.map +1 -0
  264. package/dist/esm/v3/schemas/messages.d.ts +160 -0
  265. package/dist/esm/v3/schemas/resources.d.ts +40 -0
  266. package/dist/esm/v3/schemas/resources.js +4 -0
  267. package/dist/esm/v3/schemas/resources.js.map +1 -1
  268. package/dist/esm/v3/schemas/runEngine.d.ts +12 -0
  269. package/dist/esm/v3/schemas/runEngine.js +2 -0
  270. package/dist/esm/v3/schemas/runEngine.js.map +1 -1
  271. package/dist/esm/v3/schemas/schemas.d.ts +59 -0
  272. package/dist/esm/v3/schemas/schemas.js +20 -0
  273. package/dist/esm/v3/schemas/schemas.js.map +1 -1
  274. package/dist/esm/v3/semanticInternalAttributes.d.ts +1 -0
  275. package/dist/esm/v3/semanticInternalAttributes.js +1 -0
  276. package/dist/esm/v3/semanticInternalAttributes.js.map +1 -1
  277. package/dist/esm/v3/session-streams-api.d.ts +5 -0
  278. package/dist/esm/v3/session-streams-api.js +8 -0
  279. package/dist/esm/v3/session-streams-api.js.map +1 -0
  280. package/dist/esm/v3/sessionStreams/chatSnapshot.d.ts +53 -0
  281. package/dist/esm/v3/sessionStreams/chatSnapshot.js +39 -0
  282. package/dist/esm/v3/sessionStreams/chatSnapshot.js.map +1 -0
  283. package/dist/esm/v3/sessionStreams/index.d.ts +24 -0
  284. package/dist/esm/v3/sessionStreams/index.js +60 -0
  285. package/dist/esm/v3/sessionStreams/index.js.map +1 -0
  286. package/dist/esm/v3/sessionStreams/manager.d.ts +54 -0
  287. package/dist/esm/v3/sessionStreams/manager.js +507 -0
  288. package/dist/esm/v3/sessionStreams/manager.js.map +1 -0
  289. package/dist/esm/v3/sessionStreams/manager.test.d.ts +1 -0
  290. package/dist/esm/v3/sessionStreams/manager.test.js +121 -0
  291. package/dist/esm/v3/sessionStreams/manager.test.js.map +1 -0
  292. package/dist/esm/v3/sessionStreams/noopManager.d.ts +20 -0
  293. package/dist/esm/v3/sessionStreams/noopManager.js +31 -0
  294. package/dist/esm/v3/sessionStreams/noopManager.js.map +1 -0
  295. package/dist/esm/v3/sessionStreams/types.d.ts +65 -0
  296. package/dist/esm/v3/sessionStreams/types.js +8 -0
  297. package/dist/esm/v3/sessionStreams/types.js.map +1 -0
  298. package/dist/esm/v3/sessionStreams/wireProtocol.d.ts +65 -0
  299. package/dist/esm/v3/sessionStreams/wireProtocol.js +66 -0
  300. package/dist/esm/v3/sessionStreams/wireProtocol.js.map +1 -0
  301. package/dist/esm/v3/taskContext/index.d.ts +4 -0
  302. package/dist/esm/v3/taskContext/index.js +18 -0
  303. package/dist/esm/v3/taskContext/index.js.map +1 -1
  304. package/dist/esm/v3/taskContext/index.test.d.ts +1 -0
  305. package/dist/esm/v3/taskContext/index.test.js +71 -0
  306. package/dist/esm/v3/taskContext/index.test.js.map +1 -0
  307. package/dist/esm/v3/taskContext/otelProcessors.js +11 -0
  308. package/dist/esm/v3/taskContext/otelProcessors.js.map +1 -1
  309. package/dist/esm/v3/test/index.d.ts +5 -0
  310. package/dist/esm/v3/test/index.js +6 -0
  311. package/dist/esm/v3/test/index.js.map +1 -0
  312. package/dist/esm/v3/test/mock-task-context.d.ts +123 -0
  313. package/dist/esm/v3/test/mock-task-context.js +190 -0
  314. package/dist/esm/v3/test/mock-task-context.js.map +1 -0
  315. package/dist/esm/v3/test/test-input-stream-manager.d.ts +46 -0
  316. package/dist/esm/v3/test/test-input-stream-manager.js +188 -0
  317. package/dist/esm/v3/test/test-input-stream-manager.js.map +1 -0
  318. package/dist/esm/v3/test/test-realtime-streams-manager.d.ts +40 -0
  319. package/dist/esm/v3/test/test-realtime-streams-manager.js +136 -0
  320. package/dist/esm/v3/test/test-realtime-streams-manager.js.map +1 -0
  321. package/dist/esm/v3/test/test-run-metadata-manager.d.ts +31 -0
  322. package/dist/esm/v3/test/test-run-metadata-manager.js +82 -0
  323. package/dist/esm/v3/test/test-run-metadata-manager.js.map +1 -0
  324. package/dist/esm/v3/test/test-session-stream-manager.d.ts +60 -0
  325. package/dist/esm/v3/test/test-session-stream-manager.js +243 -0
  326. package/dist/esm/v3/test/test-session-stream-manager.js.map +1 -0
  327. package/dist/esm/v3/types/tasks.d.ts +35 -0
  328. package/dist/esm/v3/utils/gitBranch.d.ts +2 -0
  329. package/dist/esm/v3/utils/gitBranch.js +42 -0
  330. package/dist/esm/v3/utils/gitBranch.js.map +1 -0
  331. package/dist/esm/v3/utils/globals.d.ts +2 -0
  332. package/dist/esm/v3/utils/globals.js.map +1 -1
  333. package/dist/esm/v3/utils/reconnectBackoff.d.ts +20 -0
  334. package/dist/esm/v3/utils/reconnectBackoff.js +25 -0
  335. package/dist/esm/v3/utils/reconnectBackoff.js.map +1 -0
  336. package/dist/esm/v3/utils/reconnectBackoff.test.d.ts +1 -0
  337. package/dist/esm/v3/utils/reconnectBackoff.test.js +74 -0
  338. package/dist/esm/v3/utils/reconnectBackoff.test.js.map +1 -0
  339. package/dist/esm/v3/workers/index.d.ts +1 -0
  340. package/dist/esm/v3/workers/index.js +1 -0
  341. package/dist/esm/v3/workers/index.js.map +1 -1
  342. package/dist/esm/v3/workers/taskExecutor.js +2 -1
  343. package/dist/esm/v3/workers/taskExecutor.js.map +1 -1
  344. package/dist/esm/version.js +1 -1
  345. package/package.json +46 -1
@@ -0,0 +1,507 @@
1
+ import { InputStreamOncePromise, InputStreamTimeoutError, } from "../inputStreams/types.js";
2
+ import { computeReconnectDelayMs } from "../utils/reconnectBackoff.js";
3
+ import { controlSubtype } from "./wireProtocol.js";
4
+ function keyFor(sessionId, io) {
5
+ return `${sessionId}:${io}`;
6
+ }
7
+ /**
8
+ * Session-scoped parallel to {@link StandardInputStreamManager}. Keeps the
9
+ * same buffer / once-waiter / tail lifecycle, but keyed on
10
+ * `(sessionId, io)` and subscribing via
11
+ * {@link ApiClient.subscribeToSessionStream} instead of the run input
12
+ * stream SSE.
13
+ */
14
+ export class StandardSessionStreamManager {
15
+ apiClient;
16
+ baseUrl;
17
+ debug;
18
+ handlers = new Map();
19
+ onceWaiters = new Map();
20
+ buffer = new Map();
21
+ // Parallel to `buffer`: the SSE seq_num of each buffered record. Same
22
+ // length and order as `buffer[key]`. Used so that when `once()` shifts
23
+ // a buffered record into a waiter, the cursor (`lastDispatchedSeqNums`)
24
+ // can advance to that record's seq. Kept as a separate map so the
25
+ // existing `peek()` shape (returns `unknown`) stays unchanged.
26
+ //
27
+ // Entries are `number | undefined` so the array stays length-locked
28
+ // with `buffer` even if a record arrives without a parseable seq —
29
+ // shifting `undefined` is just a no-op for the cursor advance, but
30
+ // the slot still gets consumed. Drifting lengths would map seq_nums
31
+ // to the wrong records on subsequent shifts.
32
+ bufferSeqNums = new Map();
33
+ tails = new Map();
34
+ // Per-stream lower-bound timestamp filter. When set, records whose
35
+ // SSE timestamp is <= the bound are dropped before dispatch — used by
36
+ // chat.agent on OOM-retry boot to skip session.in records belonging
37
+ // to turns that already completed on the prior attempt. The filter
38
+ // is consulted in `runTail`'s `onPart` so the buffer never sees the
39
+ // dropped records.
40
+ minTimestamps = new Map();
41
+ // Keys that were explicitly torn down by `disconnectStream`. The tail's
42
+ // `.finally` reconnect path checks this so a long-lived persistent handler
43
+ // (e.g. `chat.agent`'s run-level `stopInput.on(...)`) doesn't silently
44
+ // resurrect the tail mid-`session.in.wait()` and re-deliver the record
45
+ // that's already being delivered out-of-band via the waitpoint.
46
+ explicitlyDisconnected = new Set();
47
+ seqNums = new Map();
48
+ // Highest seq_num that has been *consumed* (delivered to a once()
49
+ // waiter or shifted off the buffer into a once() caller) on a channel.
50
+ // Distinct from `seqNums`, which advances whenever any record is
51
+ // received from SSE — even ones still sitting in the local buffer.
52
+ // The committed-consume cursor is what gets persisted on the
53
+ // turn-complete control record's `session-in-event-id` header so the
54
+ // next worker boot can resume `.in` from this point without
55
+ // re-delivering already-handled user messages.
56
+ lastDispatchedSeqNums = new Map();
57
+ // Reconnect attempt counter per key. Drives the exponential backoff
58
+ // applied by `#ensureTailConnected`'s `.finally` so a persistent
59
+ // backend failure (auth rejection, 5xx, DNS, etc.) doesn't reconnect
60
+ // in a tight loop. Reset to 0 by `#dispatch` whenever a real record
61
+ // flows through — any successful traffic is taken as a healthy
62
+ // connection.
63
+ reconnectAttempts = new Map();
64
+ constructor(apiClient, baseUrl, debug = false) {
65
+ this.apiClient = apiClient;
66
+ this.baseUrl = baseUrl;
67
+ this.debug = debug;
68
+ }
69
+ on(sessionId, io, handler) {
70
+ const key = keyFor(sessionId, io);
71
+ let handlerSet = this.handlers.get(key);
72
+ if (!handlerSet) {
73
+ handlerSet = new Set();
74
+ this.handlers.set(key, handlerSet);
75
+ }
76
+ handlerSet.add(handler);
77
+ // Explicit re-attach clears the "explicitly disconnected" suppression
78
+ // so the tail can subscribe again now that callers want delivery back.
79
+ this.explicitlyDisconnected.delete(key);
80
+ this.#ensureTailConnected(sessionId, io);
81
+ const buffered = this.buffer.get(key);
82
+ if (buffered && buffered.length > 0) {
83
+ for (const data of buffered) {
84
+ this.#invokeHandler(handler, data);
85
+ }
86
+ // Advance the committed-consume cursor to the highest seq drained
87
+ // into the new handler. `on()`-drain removes the records from the
88
+ // buffer, so they're no longer available to a future `once()` —
89
+ // from the manager's perspective they've been consumed. Without
90
+ // this, a worker that uses `messagesInput.on()` for user-message
91
+ // delivery (pendingMessages mode) would persist a `.in` cursor
92
+ // that lags behind the records the handler already processed, and
93
+ // the next boot would re-deliver them.
94
+ const seqList = this.bufferSeqNums.get(key);
95
+ if (seqList) {
96
+ for (const s of seqList) {
97
+ if (s !== undefined)
98
+ this.#advanceLastDispatched(key, s);
99
+ }
100
+ }
101
+ this.buffer.delete(key);
102
+ // Keep `bufferSeqNums` in lock-step with `buffer` — without this,
103
+ // the parallel array desyncs and the next `#dispatch` that buffers
104
+ // a record would shift a stale seqNum into `lastDispatchedSeqNum`.
105
+ this.bufferSeqNums.delete(key);
106
+ }
107
+ return {
108
+ off: () => {
109
+ handlerSet?.delete(handler);
110
+ if (handlerSet?.size === 0) {
111
+ this.handlers.delete(key);
112
+ }
113
+ },
114
+ };
115
+ }
116
+ once(sessionId, io, options) {
117
+ const key = keyFor(sessionId, io);
118
+ this.explicitlyDisconnected.delete(key);
119
+ this.#ensureTailConnected(sessionId, io);
120
+ const buffered = this.buffer.get(key);
121
+ if (buffered && buffered.length > 0) {
122
+ const data = buffered.shift();
123
+ const seqList = this.bufferSeqNums.get(key);
124
+ const shiftedSeqNum = seqList?.shift();
125
+ if (buffered.length === 0) {
126
+ this.buffer.delete(key);
127
+ this.bufferSeqNums.delete(key);
128
+ }
129
+ if (shiftedSeqNum !== undefined) {
130
+ this.#advanceLastDispatched(key, shiftedSeqNum);
131
+ }
132
+ return new InputStreamOncePromise((resolve) => {
133
+ resolve({ ok: true, output: data });
134
+ });
135
+ }
136
+ return new InputStreamOncePromise((resolve, reject) => {
137
+ const waiter = { resolve, reject };
138
+ if (options?.signal) {
139
+ if (options.signal.aborted) {
140
+ reject(new Error("Aborted"));
141
+ return;
142
+ }
143
+ const abortHandler = () => {
144
+ if (waiter.timeoutHandle)
145
+ clearTimeout(waiter.timeoutHandle);
146
+ this.#removeOnceWaiter(key, waiter);
147
+ reject(new Error("Aborted"));
148
+ };
149
+ waiter.signal = options.signal;
150
+ waiter.abortHandler = abortHandler;
151
+ options.signal.addEventListener("abort", abortHandler, { once: true });
152
+ }
153
+ if (options?.timeoutMs) {
154
+ waiter.timeoutHandle = setTimeout(() => {
155
+ this.#removeOnceWaiter(key, waiter);
156
+ resolve({
157
+ ok: false,
158
+ error: new InputStreamTimeoutError(key, options.timeoutMs),
159
+ });
160
+ }, options.timeoutMs);
161
+ }
162
+ let waiters = this.onceWaiters.get(key);
163
+ if (!waiters) {
164
+ waiters = [];
165
+ this.onceWaiters.set(key, waiters);
166
+ }
167
+ waiters.push(waiter);
168
+ });
169
+ }
170
+ peek(sessionId, io) {
171
+ const buffered = this.buffer.get(keyFor(sessionId, io));
172
+ if (buffered && buffered.length > 0)
173
+ return buffered[0];
174
+ return undefined;
175
+ }
176
+ lastSeqNum(sessionId, io) {
177
+ return this.seqNums.get(keyFor(sessionId, io));
178
+ }
179
+ setLastSeqNum(sessionId, io, seqNum) {
180
+ const key = keyFor(sessionId, io);
181
+ const current = this.seqNums.get(key);
182
+ if (current === undefined || seqNum > current) {
183
+ this.seqNums.set(key, seqNum);
184
+ }
185
+ }
186
+ lastDispatchedSeqNum(sessionId, io) {
187
+ return this.lastDispatchedSeqNums.get(keyFor(sessionId, io));
188
+ }
189
+ setLastDispatchedSeqNum(sessionId, io, seqNum) {
190
+ this.#advanceLastDispatched(keyFor(sessionId, io), seqNum);
191
+ }
192
+ #advanceLastDispatched(key, seqNum) {
193
+ const current = this.lastDispatchedSeqNums.get(key);
194
+ if (current === undefined || seqNum > current) {
195
+ this.lastDispatchedSeqNums.set(key, seqNum);
196
+ }
197
+ }
198
+ setMinTimestamp(sessionId, io, minTimestamp) {
199
+ const key = keyFor(sessionId, io);
200
+ if (minTimestamp === undefined) {
201
+ this.minTimestamps.delete(key);
202
+ }
203
+ else {
204
+ this.minTimestamps.set(key, minTimestamp);
205
+ }
206
+ }
207
+ shiftBuffer(sessionId, io) {
208
+ const key = keyFor(sessionId, io);
209
+ const buffered = this.buffer.get(key);
210
+ if (buffered && buffered.length > 0) {
211
+ buffered.shift();
212
+ const seqList = this.bufferSeqNums.get(key);
213
+ const shiftedSeqNum = seqList?.shift();
214
+ if (buffered.length === 0) {
215
+ this.buffer.delete(key);
216
+ this.bufferSeqNums.delete(key);
217
+ }
218
+ if (shiftedSeqNum !== undefined) {
219
+ this.#advanceLastDispatched(key, shiftedSeqNum);
220
+ }
221
+ return true;
222
+ }
223
+ return false;
224
+ }
225
+ disconnectStream(sessionId, io) {
226
+ const key = keyFor(sessionId, io);
227
+ const tail = this.tails.get(key);
228
+ const bufferedSize = this.buffer.get(key)?.length ?? 0;
229
+ // Mark as explicitly disconnected BEFORE we abort, so the tail's
230
+ // `.finally` reconnect path sees the flag when it runs (which can be
231
+ // synchronous in the AbortError catch). Cleared on the next explicit
232
+ // `on()`/`once()`.
233
+ this.explicitlyDisconnected.add(key);
234
+ if (tail) {
235
+ tail.abortController.abort();
236
+ this.tails.delete(key);
237
+ }
238
+ this.buffer.delete(key);
239
+ this.bufferSeqNums.delete(key);
240
+ // Reset the backoff counter so a future re-attach starts fresh —
241
+ // an explicit disconnect is a deliberate teardown, not evidence of
242
+ // a broken backend.
243
+ this.reconnectAttempts.delete(key);
244
+ }
245
+ clearHandlers() {
246
+ this.handlers.clear();
247
+ for (const [key, tail] of this.tails) {
248
+ const hasWaiters = this.onceWaiters.has(key) && this.onceWaiters.get(key).length > 0;
249
+ if (!hasWaiters) {
250
+ tail.abortController.abort();
251
+ this.tails.delete(key);
252
+ }
253
+ }
254
+ }
255
+ /**
256
+ * Tear down all active tails. Does NOT clear handlers or `onceWaiters`,
257
+ * so any registered listener will trigger an auto-reconnect (with
258
+ * backoff) the moment it sees no live tail — by design, so a transient
259
+ * network blip recovers without the caller re-subscribing. Use
260
+ * `reset()` if you want a full clean state with no resurrection, or
261
+ * `disconnectStream(sessionId, io)` for a single channel that should
262
+ * stay down until a fresh `on()` / `once()` attaches.
263
+ */
264
+ disconnect() {
265
+ for (const [, tail] of this.tails) {
266
+ tail.abortController.abort();
267
+ }
268
+ this.tails.clear();
269
+ }
270
+ reset() {
271
+ this.disconnect();
272
+ this.seqNums.clear();
273
+ this.lastDispatchedSeqNums.clear();
274
+ this.minTimestamps.clear();
275
+ this.handlers.clear();
276
+ this.reconnectAttempts.clear();
277
+ for (const [, waiters] of this.onceWaiters) {
278
+ for (const waiter of waiters) {
279
+ if (waiter.timeoutHandle)
280
+ clearTimeout(waiter.timeoutHandle);
281
+ if (waiter.signal && waiter.abortHandler) {
282
+ waiter.signal.removeEventListener("abort", waiter.abortHandler);
283
+ }
284
+ waiter.reject(new Error("Session stream manager reset"));
285
+ }
286
+ }
287
+ this.onceWaiters.clear();
288
+ this.buffer.clear();
289
+ this.bufferSeqNums.clear();
290
+ }
291
+ #ensureTailConnected(sessionId, io) {
292
+ const key = keyFor(sessionId, io);
293
+ if (this.tails.has(key))
294
+ return;
295
+ const abortController = new AbortController();
296
+ const promise = this.#runTail(sessionId, io, abortController.signal)
297
+ .catch((error) => {
298
+ if (this.debug) {
299
+ console.error(`[SessionStreamManager] Tail error for "${key}":`, error);
300
+ }
301
+ })
302
+ .finally(() => {
303
+ this.tails.delete(key);
304
+ // If the tail was torn down explicitly via `disconnectStream`,
305
+ // honor that — the caller (typically `session.in.wait()`) is
306
+ // suspending the run and expects no records to be buffered or
307
+ // delivered until a fresh `on()` / `once()` re-attaches. Without
308
+ // this guard a run-level persistent handler (e.g. `chat.agent`'s
309
+ // `stopInput.on(...)`) would auto-reconnect during the suspend
310
+ // window, the resurrected tail would receive the same record the
311
+ // waitpoint just delivered, and that record would land in the
312
+ // buffer where the next turn's `messagesInput.on(...)` drains it
313
+ // and runs a duplicate turn.
314
+ if (this.explicitlyDisconnected.has(key)) {
315
+ return;
316
+ }
317
+ const hasHandlers = this.handlers.has(key) && this.handlers.get(key).size > 0;
318
+ const hasWaiters = this.onceWaiters.has(key) && this.onceWaiters.get(key).length > 0;
319
+ if (hasHandlers || hasWaiters) {
320
+ // Exponential backoff with jitter. 1s base, doubling each
321
+ // attempt, capped at 30s. Without this, a persistent backend
322
+ // failure (auth rejected, 5xx, DNS) reconnects in a tight loop
323
+ // because `#runTail`'s error path only logs. `#dispatch` resets
324
+ // the counter on every successful record, so transient blips
325
+ // don't accumulate.
326
+ const attempt = this.reconnectAttempts.get(key) ?? 0;
327
+ this.reconnectAttempts.set(key, attempt + 1);
328
+ const delayMs = computeReconnectDelayMs(attempt);
329
+ setTimeout(() => {
330
+ // Guards: a fresh `on()` during the wait may already have
331
+ // re-attached the tail; explicit disconnect or absence of
332
+ // handlers/waiters means we should stay quiet.
333
+ if (this.tails.has(key))
334
+ return;
335
+ if (this.explicitlyDisconnected.has(key))
336
+ return;
337
+ const stillHasHandlers = this.handlers.has(key) && this.handlers.get(key).size > 0;
338
+ const stillHasWaiters = this.onceWaiters.has(key) && this.onceWaiters.get(key).length > 0;
339
+ if (!stillHasHandlers && !stillHasWaiters)
340
+ return;
341
+ this.#ensureTailConnected(sessionId, io);
342
+ }, delayMs);
343
+ }
344
+ });
345
+ this.tails.set(key, { abortController, promise });
346
+ }
347
+ async #runTail(sessionId, io, signal) {
348
+ const key = keyFor(sessionId, io);
349
+ try {
350
+ const lastSeq = this.seqNums.get(key);
351
+ // Dispatch is driven from `onPart` (not the for-await loop) so each
352
+ // record reaches dispatch with its full SSE metadata in scope —
353
+ // specifically the timestamp, which we need for the per-stream
354
+ // min-timestamp filter. The for-await loop below just drains the
355
+ // pipeThrough output to keep the source flowing.
356
+ const stream = await this.apiClient.subscribeToSessionStream(sessionId, io, {
357
+ signal,
358
+ baseUrl: this.baseUrl,
359
+ timeoutInSeconds: 600,
360
+ lastEventId: lastSeq !== undefined ? String(lastSeq) : undefined,
361
+ onPart: (part) => {
362
+ if (signal.aborted)
363
+ return;
364
+ const seqNum = parseInt(part.id, 10);
365
+ if (Number.isFinite(seqNum)) {
366
+ this.seqNums.set(key, seqNum);
367
+ }
368
+ // Trigger control records (turn-complete, upgrade-required)
369
+ // are dispatched out-of-band via `onControl` — they're not
370
+ // consumer-facing data. Skip the data dispatch path.
371
+ if (controlSubtype(part.headers)) {
372
+ return;
373
+ }
374
+ // Min-timestamp filter: drop records older than (or at) the
375
+ // bound. Used to skip already-processed records on OOM-retry
376
+ // boot.
377
+ const minTs = this.minTimestamps.get(key);
378
+ if (minTs !== undefined && part.timestamp <= minTs) {
379
+ return;
380
+ }
381
+ let data = part.chunk;
382
+ if (typeof data === "string") {
383
+ try {
384
+ data = JSON.parse(data);
385
+ }
386
+ catch {
387
+ // keep as string
388
+ }
389
+ }
390
+ this.#dispatch(key, data, Number.isFinite(seqNum) ? seqNum : undefined);
391
+ },
392
+ onComplete: () => {
393
+ if (this.debug) {
394
+ console.log(`[SessionStreamManager] Tail completed for "${key}"`);
395
+ }
396
+ },
397
+ onError: (error) => {
398
+ if (this.debug) {
399
+ console.error(`[SessionStreamManager] Tail error for "${key}":`, error);
400
+ }
401
+ },
402
+ });
403
+ // Drain to keep the pipeThrough flowing. Records were already
404
+ // dispatched in `onPart`, so the body here is a no-op.
405
+ for await (const _record of stream) {
406
+ if (signal.aborted)
407
+ break;
408
+ }
409
+ }
410
+ catch (error) {
411
+ if (error instanceof Error && error.name === "AbortError")
412
+ return;
413
+ throw error;
414
+ }
415
+ }
416
+ #dispatch(key, data, seqNum) {
417
+ // Any record flowing through = healthy connection; reset the backoff
418
+ // counter so the next disconnect starts fresh.
419
+ this.reconnectAttempts.delete(key);
420
+ const waiters = this.onceWaiters.get(key);
421
+ if (waiters && waiters.length > 0) {
422
+ const waiter = waiters.shift();
423
+ if (waiters.length === 0)
424
+ this.onceWaiters.delete(key);
425
+ if (waiter.timeoutHandle)
426
+ clearTimeout(waiter.timeoutHandle);
427
+ if (waiter.signal && waiter.abortHandler) {
428
+ waiter.signal.removeEventListener("abort", waiter.abortHandler);
429
+ }
430
+ // Record was consumed directly by a waiter — advance the
431
+ // committed-consume cursor immediately. Buffered-then-shifted
432
+ // records advance the cursor in `once()` / `shiftBuffer()`.
433
+ if (seqNum !== undefined) {
434
+ this.#advanceLastDispatched(key, seqNum);
435
+ }
436
+ waiter.resolve({ ok: true, output: data });
437
+ this.#invokeHandlers(key, data);
438
+ return;
439
+ }
440
+ // Persistent handlers (e.g. `stopInput.on(...)`) get a copy of the chunk,
441
+ // but they don't "consume" it — handlers usually filter by `kind` and
442
+ // ignore chunks they don't care about. Buffer the chunk regardless so a
443
+ // subsequent `once()` (e.g. `messagesInput.waitWithIdleTimeout` in
444
+ // chat.agent's preload) can still pick up the same chunk that arrived
445
+ // before its waiter was registered.
446
+ this.#invokeHandlers(key, data);
447
+ let buffered = this.buffer.get(key);
448
+ if (!buffered) {
449
+ buffered = [];
450
+ this.buffer.set(key, buffered);
451
+ }
452
+ buffered.push(data);
453
+ let bufferedSeqs = this.bufferSeqNums.get(key);
454
+ if (!bufferedSeqs) {
455
+ bufferedSeqs = [];
456
+ this.bufferSeqNums.set(key, bufferedSeqs);
457
+ }
458
+ // Always push, even when `seqNum` is undefined (e.g. NaN from a
459
+ // malformed `part.id`). Skipping the push here would drift the two
460
+ // arrays apart and misattribute seq_nums to records on the next
461
+ // shift.
462
+ bufferedSeqs.push(seqNum);
463
+ }
464
+ #invokeHandlers(key, data) {
465
+ const handlers = this.handlers.get(key);
466
+ if (!handlers)
467
+ return;
468
+ for (const handler of handlers) {
469
+ this.#invokeHandler(handler, data);
470
+ }
471
+ }
472
+ #invokeHandler(handler, data) {
473
+ try {
474
+ const result = handler(data);
475
+ if (result && typeof result === "object" && "catch" in result) {
476
+ result.catch((error) => {
477
+ if (this.debug) {
478
+ console.error("[SessionStreamManager] Handler error:", error);
479
+ }
480
+ });
481
+ }
482
+ }
483
+ catch (error) {
484
+ if (this.debug) {
485
+ console.error("[SessionStreamManager] Handler error:", error);
486
+ }
487
+ }
488
+ }
489
+ #removeOnceWaiter(key, waiter) {
490
+ // Centralized cleanup — both timeout and explicit abort paths funnel
491
+ // through here, so detach the abort listener once instead of at every
492
+ // callsite. The dispatch path doesn't go through this method (the
493
+ // waiter is shifted off inline), so it detaches the listener there.
494
+ if (waiter.signal && waiter.abortHandler) {
495
+ waiter.signal.removeEventListener("abort", waiter.abortHandler);
496
+ }
497
+ const waiters = this.onceWaiters.get(key);
498
+ if (!waiters)
499
+ return;
500
+ const index = waiters.indexOf(waiter);
501
+ if (index !== -1)
502
+ waiters.splice(index, 1);
503
+ if (waiters.length === 0)
504
+ this.onceWaiters.delete(key);
505
+ }
506
+ }
507
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/v3/sessionStreams/manager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAEtB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsBnD,SAAS,MAAM,CAAC,SAAiB,EAAE,EAAoB;IACrD,OAAO,GAAG,SAAS,IAAI,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,4BAA4B;IAiD7B;IACA;IACA;IAlDF,QAAQ,GAAG,IAAI,GAAG,EAAqC,CAAC;IACxD,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC9C,sEAAsE;IACtE,uEAAuE;IACvE,wEAAwE;IACxE,kEAAkE;IAClE,+DAA+D;IAC/D,EAAE;IACF,oEAAoE;IACpE,mEAAmE;IACnE,mEAAmE;IACnE,oEAAoE;IACpE,6CAA6C;IACrC,aAAa,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC7D,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,mEAAmE;IACnE,sEAAsE;IACtE,oEAAoE;IACpE,mEAAmE;IACnE,oEAAoE;IACpE,mBAAmB;IACX,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,wEAAwE;IACxE,2EAA2E;IAC3E,uEAAuE;IACvE,uEAAuE;IACvE,gEAAgE;IACxD,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,kEAAkE;IAClE,uEAAuE;IACvE,iEAAiE;IACjE,mEAAmE;IACnE,6DAA6D;IAC7D,qEAAqE;IACrE,4DAA4D;IAC5D,+CAA+C;IACvC,qBAAqB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1D,oEAAoE;IACpE,iEAAiE;IACjE,qEAAqE;IACrE,oEAAoE;IACpE,+DAA+D;IAC/D,cAAc;IACN,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtD,YACU,SAAoB,EACpB,OAAe,EACf,QAAiB,KAAK;QAFtB,cAAS,GAAT,SAAS,CAAW;QACpB,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAAiB;IAC7B,CAAC;IAEJ,EAAE,CACA,SAAiB,EACjB,EAAoB,EACpB,OAA6B;QAE7B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAElC,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAExB,sEAAsE;QACtE,uEAAuE;QACvE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;YACD,kEAAkE;YAClE,kEAAkE;YAClE,gEAAgE;YAChE,gEAAgE;YAChE,iEAAiE;YACjE,+DAA+D;YAC/D,kEAAkE;YAClE,uCAAuC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,IAAI,CAAC,KAAK,SAAS;wBAAE,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,kEAAkE;YAClE,mEAAmE;YACnE,mEAAmE;YACnE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,OAAO;YACL,GAAG,EAAE,GAAG,EAAE;gBACR,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,IAAI,UAAU,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,CACF,SAAiB,EACjB,EAAoB,EACpB,OAAgC;QAEhC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAElC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,IAAI,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5C,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,sBAAsB,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAE/C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBACD,MAAM,YAAY,GAAG,GAAG,EAAE;oBACxB,IAAI,MAAM,CAAC,aAAa;wBAAE,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC7D,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBACpC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC;gBACF,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC/B,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;gBACvB,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBACrC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBACpC,OAAO,CAAC;wBACN,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE,IAAI,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,SAAU,CAAC;qBAC5D,CAAC,CAAC;gBACL,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,EAAoB;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,EAAoB;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,EAAoB,EAAE,MAAc;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,SAAiB,EAAE,EAAoB;QAC1D,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,uBAAuB,CACrB,SAAiB,EACjB,EAAoB,EACpB,MAAc;QAEd,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,sBAAsB,CAAC,GAAW,EAAE,MAAc;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;YAC9C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,eAAe,CACb,SAAiB,EACjB,EAAoB,EACpB,YAAgC;QAEhC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,EAAoB;QACjD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB,CAAC,SAAiB,EAAE,EAAoB;QACtD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;QACvD,iEAAiE;QACjE,qEAAqE;QACrE,qEAAqE;QACrE,mBAAmB;QACnB,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,iEAAiE;QACjE,mEAAmE;QACnE,oBAAoB;QACpB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,aAAa;QACX,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACtF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU;QACR,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAE/B,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,aAAa;oBAAE,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC7D,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACzC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAClE,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,oBAAoB,CAAC,SAAiB,EAAE,EAAoB;QAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAEhC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC;aACjE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEvB,+DAA+D;YAC/D,6DAA6D;YAC7D,8DAA8D;YAC9D,iEAAiE;YACjE,iEAAiE;YACjE,+DAA+D;YAC/D,iEAAiE;YACjE,8DAA8D;YAC9D,iEAAiE;YACjE,6BAA6B;YAC7B,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,GAAG,CAAC,CAAC;YAC/E,MAAM,UAAU,GACd,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACrE,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;gBAC9B,0DAA0D;gBAC1D,6DAA6D;gBAC7D,+DAA+D;gBAC/D,gEAAgE;gBAChE,6DAA6D;gBAC7D,oBAAoB;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACjD,UAAU,CAAC,GAAG,EAAE;oBACd,0DAA0D;oBAC1D,0DAA0D;oBAC1D,+CAA+C;oBAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,OAAO;oBAChC,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,OAAO;oBACjD,MAAM,gBAAgB,GACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC7D,MAAM,eAAe,GACnB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC;oBACrE,IAAI,CAAC,gBAAgB,IAAI,CAAC,eAAe;wBAAE,OAAO;oBAClD,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC,EAAE,OAAO,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,SAAiB,EACjB,EAAoB,EACpB,MAAmB;QAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC,oEAAoE;YACpE,gEAAgE;YAChE,+DAA+D;YAC/D,iEAAiE;YACjE,iDAAiD;YACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAU,SAAS,EAAE,EAAE,EAAE;gBACnF,MAAM;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,gBAAgB,EAAE,GAAG;gBACrB,WAAW,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;gBAChE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,MAAM,CAAC,OAAO;wBAAE,OAAO;oBAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBAChC,CAAC;oBAED,4DAA4D;oBAC5D,2DAA2D;oBAC3D,qDAAqD;oBACrD,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBACjC,OAAO;oBACT,CAAC;oBAED,4DAA4D;oBAC5D,6DAA6D;oBAC7D,QAAQ;oBACR,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC;wBACnD,OAAO;oBACT,CAAC;oBAED,IAAI,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC;oBAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,IAAI,CAAC;4BACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC1B,CAAC;wBAAC,MAAM,CAAC;4BACP,iBAAiB;wBACnB,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC1E,CAAC;gBACD,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,8CAA8C,GAAG,GAAG,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;YAEH,8DAA8D;YAC9D,uDAAuD;YACvD,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,OAAO;oBAAE,MAAM;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,IAAa,EAAE,MAA0B;QAC9D,qEAAqE;QACrE,+CAA+C;QAC/C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAG,CAAC;YAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,aAAa;gBAAE,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAClE,CAAC;YACD,yDAAyD;YACzD,8DAA8D;YAC9D,4DAA4D;YAC5D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,0EAA0E;QAC1E,sEAAsE;QACtE,wEAAwE;QACxE,mEAAmE;QACnE,sEAAsE;QACtE,oCAAoC;QACpC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEhC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;QACD,gEAAgE;QAChE,mEAAmE;QACnE,gEAAgE;QAChE,SAAS;QACT,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe,CAAC,GAAW,EAAE,IAAa;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,cAAc,CAAC,OAA6B,EAAE,IAAa;QACzD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBAC7D,MAAwB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACxC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,GAAW,EAAE,MAAkB;QAC/C,qEAAqE;QACrE,sEAAsE;QACtE,kEAAkE;QAClE,oEAAoE;QACpE,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,121 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { StandardSessionStreamManager } from "./manager.js";
3
+ // Single-shot mock that mimics S2's long-poll: delivers `records` once via
4
+ // `onPart` on the first subscribe call, then keeps the returned async
5
+ // iterable OPEN until the abort signal fires. Real S2 keeps the SSE
6
+ // connection alive on a long-poll; the manager's `runTail` finally /
7
+ // reconnect path only fires when the connection actually closes. Returning
8
+ // an empty stream synchronously triggers a tight reconnect loop, so the
9
+ // mock parks indefinitely instead.
10
+ function singleShotApiClient(records) {
11
+ let delivered = false;
12
+ return {
13
+ async subscribeToSessionStream(_sessionIdOrExternalId, _io, options) {
14
+ if (!delivered) {
15
+ delivered = true;
16
+ for (const record of records) {
17
+ options?.onPart?.(record);
18
+ }
19
+ }
20
+ const signal = options?.signal;
21
+ return (async function* () {
22
+ if (signal?.aborted)
23
+ return;
24
+ await new Promise((resolve) => {
25
+ if (!signal) {
26
+ // No signal — block the stream forever; tests must
27
+ // explicitly call `disconnectStream` / `disconnect` to
28
+ // unblock.
29
+ return;
30
+ }
31
+ signal.addEventListener("abort", () => resolve(), { once: true });
32
+ });
33
+ })();
34
+ },
35
+ };
36
+ }
37
+ describe("StandardSessionStreamManager — minTimestamp filter", () => {
38
+ const sessionId = "session-1";
39
+ const io = "in";
40
+ it("dispatches records when no filter is set", async () => {
41
+ const records = [
42
+ { id: "0", chunk: { kind: "message", payload: { id: "u1" } }, timestamp: 1000 },
43
+ { id: "1", chunk: { kind: "message", payload: { id: "u2" } }, timestamp: 2000 },
44
+ ];
45
+ const manager = new StandardSessionStreamManager(singleShotApiClient(records), "http://localhost");
46
+ const first = await manager.once(sessionId, io);
47
+ expect(first).toEqual({ ok: true, output: { kind: "message", payload: { id: "u1" } } });
48
+ const second = await manager.once(sessionId, io);
49
+ expect(second).toEqual({ ok: true, output: { kind: "message", payload: { id: "u2" } } });
50
+ manager.disconnectStream(sessionId, io); // stop reconnect loop
51
+ manager.disconnect();
52
+ });
53
+ it("drops records whose timestamp is <= minTimestamp", async () => {
54
+ const records = [
55
+ { id: "0", chunk: { kind: "message", payload: { id: "u1" } }, timestamp: 1000 },
56
+ { id: "1", chunk: { kind: "message", payload: { id: "u2" } }, timestamp: 2000 },
57
+ { id: "2", chunk: { kind: "message", payload: { id: "u3" } }, timestamp: 3000 },
58
+ ];
59
+ const manager = new StandardSessionStreamManager(singleShotApiClient(records), "http://localhost");
60
+ // Cutoff at 2000 (inclusive: `<=` is dropped). Only u3 should pass.
61
+ manager.setMinTimestamp(sessionId, io, 2000);
62
+ const passed = await manager.once(sessionId, io, { timeoutMs: 200 });
63
+ expect(passed).toEqual({ ok: true, output: { kind: "message", payload: { id: "u3" } } });
64
+ manager.disconnectStream(sessionId, io);
65
+ manager.disconnect();
66
+ });
67
+ it("clears the filter when set to undefined", async () => {
68
+ const records = [
69
+ { id: "0", chunk: { kind: "message", payload: { id: "u1" } }, timestamp: 1000 },
70
+ ];
71
+ const manager = new StandardSessionStreamManager(singleShotApiClient(records), "http://localhost");
72
+ manager.setMinTimestamp(sessionId, io, 5000);
73
+ manager.setMinTimestamp(sessionId, io, undefined);
74
+ const passed = await manager.once(sessionId, io, { timeoutMs: 200 });
75
+ expect(passed).toEqual({ ok: true, output: { kind: "message", payload: { id: "u1" } } });
76
+ manager.disconnectStream(sessionId, io);
77
+ manager.disconnect();
78
+ });
79
+ it("filter is per-(sessionId, io) and doesn't bleed across streams", async () => {
80
+ const inApi = singleShotApiClient([
81
+ { id: "0", chunk: { kind: "in-record" }, timestamp: 1000 },
82
+ ]);
83
+ const manager = new StandardSessionStreamManager(inApi, "http://localhost");
84
+ manager.setMinTimestamp(sessionId, "in", 5000);
85
+ // The "out" stream uses the same singleShotApiClient instance — its
86
+ // single-shot delivers the same fixture, but the filter doesn't apply
87
+ // to "out" so the record passes.
88
+ const outResult = await manager.once(sessionId, "out", { timeoutMs: 200 });
89
+ expect(outResult).toEqual({ ok: true, output: { kind: "in-record" } });
90
+ // The "in" stream is filtered (minTimestamp=5000, record ts=1000): the
91
+ // once() call should idle-timeout instead of resolving with the record.
92
+ // But the singleShot instance has already delivered to the "out" tail,
93
+ // so the "in" tail will get nothing on first connect anyway. Use a
94
+ // separate manager+api to keep the assertion crisp.
95
+ const inApi2 = singleShotApiClient([
96
+ { id: "0", chunk: { kind: "in-record-2" }, timestamp: 1000 },
97
+ ]);
98
+ const manager2 = new StandardSessionStreamManager(inApi2, "http://localhost");
99
+ manager2.setMinTimestamp(sessionId, "in", 5000);
100
+ const inResult = await manager2.once(sessionId, "in", { timeoutMs: 100 });
101
+ expect(inResult.ok).toBe(false); // filter-dropped → idle timeout
102
+ manager.disconnectStream(sessionId, "in");
103
+ manager.disconnectStream(sessionId, "out");
104
+ manager.disconnect();
105
+ manager2.disconnectStream(sessionId, "in");
106
+ manager2.disconnect();
107
+ });
108
+ it("reset() clears all per-stream timestamp filters", async () => {
109
+ const records = [
110
+ { id: "0", chunk: { kind: "message", payload: { id: "u1" } }, timestamp: 1000 },
111
+ ];
112
+ const manager = new StandardSessionStreamManager(singleShotApiClient(records), "http://localhost");
113
+ manager.setMinTimestamp(sessionId, io, 5000);
114
+ manager.reset();
115
+ const passed = await manager.once(sessionId, io, { timeoutMs: 200 });
116
+ expect(passed).toEqual({ ok: true, output: { kind: "message", payload: { id: "u1" } } });
117
+ manager.disconnectStream(sessionId, io);
118
+ manager.disconnect();
119
+ });
120
+ });
121
+ //# sourceMappingURL=manager.test.js.map