@trigger.dev/core 4.5.14 → 4.5.15

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 (267) hide show
  1. package/dist/commonjs/v3/apiClient/index.d.ts +8 -2
  2. package/dist/commonjs/v3/apiClient/index.js +19 -6
  3. package/dist/commonjs/v3/apiClient/index.js.map +1 -1
  4. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.d.ts +2 -2
  5. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js +6 -6
  6. package/dist/commonjs/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -1
  7. package/dist/commonjs/v3/schemas/api.js +1 -1
  8. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  9. package/dist/commonjs/v3/session-streams-api.d.ts +1 -0
  10. package/dist/commonjs/v3/session-streams-api.js +1 -0
  11. package/dist/commonjs/v3/session-streams-api.js.map +1 -1
  12. package/dist/commonjs/v3/sessionStreams/channels.d.ts +25 -0
  13. package/dist/commonjs/v3/sessionStreams/channels.js +3 -0
  14. package/dist/commonjs/v3/sessionStreams/channels.js.map +1 -0
  15. package/dist/commonjs/v3/sessionStreams/index.d.ts +16 -16
  16. package/dist/commonjs/v3/sessionStreams/index.js +32 -32
  17. package/dist/commonjs/v3/sessionStreams/index.js.map +1 -1
  18. package/dist/commonjs/v3/sessionStreams/manager.d.ts +16 -16
  19. package/dist/commonjs/v3/sessionStreams/manager.js +48 -47
  20. package/dist/commonjs/v3/sessionStreams/manager.js.map +1 -1
  21. package/dist/commonjs/v3/sessionStreams/types.d.ts +16 -16
  22. package/dist/commonjs/version.js +1 -1
  23. package/dist/esm/v3/apiClient/index.d.ts +8 -2
  24. package/dist/esm/v3/apiClient/index.js +19 -6
  25. package/dist/esm/v3/apiClient/index.js.map +1 -1
  26. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.d.ts +2 -2
  27. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js +6 -6
  28. package/dist/esm/v3/realtimeStreams/sessionStreamOneshot.js.map +1 -1
  29. package/dist/esm/v3/schemas/api.js +1 -1
  30. package/dist/esm/v3/schemas/api.js.map +1 -1
  31. package/dist/esm/v3/session-streams-api.d.ts +1 -0
  32. package/dist/esm/v3/session-streams-api.js +1 -0
  33. package/dist/esm/v3/session-streams-api.js.map +1 -1
  34. package/dist/esm/v3/sessionStreams/channels.d.ts +25 -0
  35. package/dist/esm/v3/sessionStreams/channels.js +2 -0
  36. package/dist/esm/v3/sessionStreams/channels.js.map +1 -0
  37. package/dist/esm/v3/sessionStreams/index.d.ts +16 -16
  38. package/dist/esm/v3/sessionStreams/index.js +32 -32
  39. package/dist/esm/v3/sessionStreams/index.js.map +1 -1
  40. package/dist/esm/v3/sessionStreams/manager.d.ts +16 -16
  41. package/dist/esm/v3/sessionStreams/manager.js +48 -47
  42. package/dist/esm/v3/sessionStreams/manager.js.map +1 -1
  43. package/dist/esm/v3/sessionStreams/types.d.ts +16 -16
  44. package/dist/esm/version.js +1 -1
  45. package/package.json +4 -1
  46. package/dist/commonjs/v3/apiClient/bulkActions.test.d.ts +0 -1
  47. package/dist/commonjs/v3/apiClient/bulkActions.test.js +0 -151
  48. package/dist/commonjs/v3/apiClient/bulkActions.test.js.map +0 -1
  49. package/dist/commonjs/v3/apiClient/refreshAccessToken.test.d.ts +0 -1
  50. package/dist/commonjs/v3/apiClient/refreshAccessToken.test.js +0 -55
  51. package/dist/commonjs/v3/apiClient/refreshAccessToken.test.js.map +0 -1
  52. package/dist/commonjs/v3/apiClient/runStream.test.d.ts +0 -1
  53. package/dist/commonjs/v3/apiClient/runStream.test.js +0 -825
  54. package/dist/commonjs/v3/apiClient/runStream.test.js.map +0 -1
  55. package/dist/commonjs/v3/apiClient/streamBatchItems.test.d.ts +0 -1
  56. package/dist/commonjs/v3/apiClient/streamBatchItems.test.js +0 -408
  57. package/dist/commonjs/v3/apiClient/streamBatchItems.test.js.map +0 -1
  58. package/dist/commonjs/v3/apiKeys.test.d.ts +0 -1
  59. package/dist/commonjs/v3/apiKeys.test.js +0 -19
  60. package/dist/commonjs/v3/apiKeys.test.js.map +0 -1
  61. package/dist/commonjs/v3/apps/exec.test.d.ts +0 -1
  62. package/dist/commonjs/v3/apps/exec.test.js +0 -23
  63. package/dist/commonjs/v3/apps/exec.test.js.map +0 -1
  64. package/dist/commonjs/v3/build/flags.test.d.ts +0 -1
  65. package/dist/commonjs/v3/build/flags.test.js +0 -50
  66. package/dist/commonjs/v3/build/flags.test.js.map +0 -1
  67. package/dist/commonjs/v3/build/runtime.test.d.ts +0 -1
  68. package/dist/commonjs/v3/build/runtime.test.js +0 -44
  69. package/dist/commonjs/v3/build/runtime.test.js.map +0 -1
  70. package/dist/commonjs/v3/errors.test.d.ts +0 -1
  71. package/dist/commonjs/v3/errors.test.js +0 -36
  72. package/dist/commonjs/v3/errors.test.js.map +0 -1
  73. package/dist/commonjs/v3/externalDeploymentId.test.d.ts +0 -1
  74. package/dist/commonjs/v3/externalDeploymentId.test.js +0 -173
  75. package/dist/commonjs/v3/externalDeploymentId.test.js.map +0 -1
  76. package/dist/commonjs/v3/idempotency-key-catalog/inMemoryIdempotencyKeyCatalog.test.d.ts +0 -1
  77. package/dist/commonjs/v3/idempotency-key-catalog/inMemoryIdempotencyKeyCatalog.test.js +0 -44
  78. package/dist/commonjs/v3/idempotency-key-catalog/inMemoryIdempotencyKeyCatalog.test.js.map +0 -1
  79. package/dist/commonjs/v3/idempotencyKeys.test.d.ts +0 -1
  80. package/dist/commonjs/v3/idempotencyKeys.test.js +0 -192
  81. package/dist/commonjs/v3/idempotencyKeys.test.js.map +0 -1
  82. package/dist/commonjs/v3/isomorphic/friendlyId.test.d.ts +0 -1
  83. package/dist/commonjs/v3/isomorphic/friendlyId.test.js +0 -497
  84. package/dist/commonjs/v3/isomorphic/friendlyId.test.js.map +0 -1
  85. package/dist/commonjs/v3/isomorphic/runOpsResidency.test.d.ts +0 -1
  86. package/dist/commonjs/v3/isomorphic/runOpsResidency.test.js +0 -141
  87. package/dist/commonjs/v3/isomorphic/runOpsResidency.test.js.map +0 -1
  88. package/dist/commonjs/v3/isomorphic/waitpointMint.test.d.ts +0 -1
  89. package/dist/commonjs/v3/isomorphic/waitpointMint.test.js +0 -97
  90. package/dist/commonjs/v3/isomorphic/waitpointMint.test.js.map +0 -1
  91. package/dist/commonjs/v3/machines/max-old-space.test.d.ts +0 -1
  92. package/dist/commonjs/v3/machines/max-old-space.test.js +0 -44
  93. package/dist/commonjs/v3/machines/max-old-space.test.js.map +0 -1
  94. package/dist/commonjs/v3/otel/tracingSDK.test.d.ts +0 -1
  95. package/dist/commonjs/v3/otel/tracingSDK.test.js +0 -174
  96. package/dist/commonjs/v3/otel/tracingSDK.test.js.map +0 -1
  97. package/dist/commonjs/v3/otel/tracingSDKShutdown.test.d.ts +0 -1
  98. package/dist/commonjs/v3/otel/tracingSDKShutdown.test.js +0 -18
  99. package/dist/commonjs/v3/otel/tracingSDKShutdown.test.js.map +0 -1
  100. package/dist/commonjs/v3/realtimeStreams/manager.test.d.ts +0 -1
  101. package/dist/commonjs/v3/realtimeStreams/manager.test.js +0 -89
  102. package/dist/commonjs/v3/realtimeStreams/manager.test.js.map +0 -1
  103. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.d.ts +0 -1
  104. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js +0 -68
  105. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.test.js.map +0 -1
  106. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.d.ts +0 -1
  107. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.js +0 -674
  108. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.js.map +0 -1
  109. package/dist/commonjs/v3/runEngineWorker/supervisor/queueConsumer.test.d.ts +0 -1
  110. package/dist/commonjs/v3/runEngineWorker/supervisor/queueConsumer.test.js +0 -77
  111. package/dist/commonjs/v3/runEngineWorker/supervisor/queueConsumer.test.js.map +0 -1
  112. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.d.ts +0 -1
  113. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js +0 -293
  114. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js.map +0 -1
  115. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.d.ts +0 -1
  116. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.js +0 -235
  117. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.js.map +0 -1
  118. package/dist/commonjs/v3/schemas/api-type.test.d.ts +0 -1
  119. package/dist/commonjs/v3/schemas/api-type.test.js +0 -358
  120. package/dist/commonjs/v3/schemas/api-type.test.js.map +0 -1
  121. package/dist/commonjs/v3/schemas/batchItemNDJSON.test.d.ts +0 -1
  122. package/dist/commonjs/v3/schemas/batchItemNDJSON.test.js +0 -79
  123. package/dist/commonjs/v3/schemas/batchItemNDJSON.test.js.map +0 -1
  124. package/dist/commonjs/v3/schemas/idempotencyKey.test.d.ts +0 -1
  125. package/dist/commonjs/v3/schemas/idempotencyKey.test.js +0 -157
  126. package/dist/commonjs/v3/schemas/idempotencyKey.test.js.map +0 -1
  127. package/dist/commonjs/v3/schemas/scheduleWindow.test.d.ts +0 -1
  128. package/dist/commonjs/v3/schemas/scheduleWindow.test.js +0 -52
  129. package/dist/commonjs/v3/schemas/scheduleWindow.test.js.map +0 -1
  130. package/dist/commonjs/v3/schemas/triggerExternalDeploymentId.test.d.ts +0 -1
  131. package/dist/commonjs/v3/schemas/triggerExternalDeploymentId.test.js +0 -104
  132. package/dist/commonjs/v3/schemas/triggerExternalDeploymentId.test.js.map +0 -1
  133. package/dist/commonjs/v3/serverOnly/shutdownManager.test.d.ts +0 -1
  134. package/dist/commonjs/v3/serverOnly/shutdownManager.test.js +0 -139
  135. package/dist/commonjs/v3/serverOnly/shutdownManager.test.js.map +0 -1
  136. package/dist/commonjs/v3/sessionStreams/manager.test.d.ts +0 -1
  137. package/dist/commonjs/v3/sessionStreams/manager.test.js +0 -375
  138. package/dist/commonjs/v3/sessionStreams/manager.test.js.map +0 -1
  139. package/dist/commonjs/v3/sessionStreams/router.test.d.ts +0 -1
  140. package/dist/commonjs/v3/sessionStreams/router.test.js +0 -463
  141. package/dist/commonjs/v3/sessionStreams/router.test.js.map +0 -1
  142. package/dist/commonjs/v3/taskContext/index.test.d.ts +0 -1
  143. package/dist/commonjs/v3/taskContext/index.test.js +0 -73
  144. package/dist/commonjs/v3/taskContext/index.test.js.map +0 -1
  145. package/dist/commonjs/v3/taskContext/otelProcessors.test.d.ts +0 -1
  146. package/dist/commonjs/v3/taskContext/otelProcessors.test.js +0 -109
  147. package/dist/commonjs/v3/taskContext/otelProcessors.test.js.map +0 -1
  148. package/dist/commonjs/v3/telnetLogServer.test.d.ts +0 -1
  149. package/dist/commonjs/v3/telnetLogServer.test.js +0 -144
  150. package/dist/commonjs/v3/telnetLogServer.test.js.map +0 -1
  151. package/dist/commonjs/v3/utils/reconnectBackoff.test.d.ts +0 -1
  152. package/dist/commonjs/v3/utils/reconnectBackoff.test.js +0 -76
  153. package/dist/commonjs/v3/utils/reconnectBackoff.test.js.map +0 -1
  154. package/dist/commonjs/v3/workloadDeploymentToken.test.d.ts +0 -1
  155. package/dist/commonjs/v3/workloadDeploymentToken.test.js +0 -110
  156. package/dist/commonjs/v3/workloadDeploymentToken.test.js.map +0 -1
  157. package/dist/esm/v3/apiClient/bulkActions.test.d.ts +0 -1
  158. package/dist/esm/v3/apiClient/bulkActions.test.js +0 -149
  159. package/dist/esm/v3/apiClient/bulkActions.test.js.map +0 -1
  160. package/dist/esm/v3/apiClient/refreshAccessToken.test.d.ts +0 -1
  161. package/dist/esm/v3/apiClient/refreshAccessToken.test.js +0 -53
  162. package/dist/esm/v3/apiClient/refreshAccessToken.test.js.map +0 -1
  163. package/dist/esm/v3/apiClient/runStream.test.d.ts +0 -1
  164. package/dist/esm/v3/apiClient/runStream.test.js +0 -823
  165. package/dist/esm/v3/apiClient/runStream.test.js.map +0 -1
  166. package/dist/esm/v3/apiClient/streamBatchItems.test.d.ts +0 -1
  167. package/dist/esm/v3/apiClient/streamBatchItems.test.js +0 -406
  168. package/dist/esm/v3/apiClient/streamBatchItems.test.js.map +0 -1
  169. package/dist/esm/v3/apiKeys.test.d.ts +0 -1
  170. package/dist/esm/v3/apiKeys.test.js +0 -17
  171. package/dist/esm/v3/apiKeys.test.js.map +0 -1
  172. package/dist/esm/v3/apps/exec.test.d.ts +0 -1
  173. package/dist/esm/v3/apps/exec.test.js +0 -21
  174. package/dist/esm/v3/apps/exec.test.js.map +0 -1
  175. package/dist/esm/v3/build/flags.test.d.ts +0 -1
  176. package/dist/esm/v3/build/flags.test.js +0 -48
  177. package/dist/esm/v3/build/flags.test.js.map +0 -1
  178. package/dist/esm/v3/build/runtime.test.d.ts +0 -1
  179. package/dist/esm/v3/build/runtime.test.js +0 -42
  180. package/dist/esm/v3/build/runtime.test.js.map +0 -1
  181. package/dist/esm/v3/errors.test.d.ts +0 -1
  182. package/dist/esm/v3/errors.test.js +0 -34
  183. package/dist/esm/v3/errors.test.js.map +0 -1
  184. package/dist/esm/v3/externalDeploymentId.test.d.ts +0 -1
  185. package/dist/esm/v3/externalDeploymentId.test.js +0 -171
  186. package/dist/esm/v3/externalDeploymentId.test.js.map +0 -1
  187. package/dist/esm/v3/idempotency-key-catalog/inMemoryIdempotencyKeyCatalog.test.d.ts +0 -1
  188. package/dist/esm/v3/idempotency-key-catalog/inMemoryIdempotencyKeyCatalog.test.js +0 -42
  189. package/dist/esm/v3/idempotency-key-catalog/inMemoryIdempotencyKeyCatalog.test.js.map +0 -1
  190. package/dist/esm/v3/idempotencyKeys.test.d.ts +0 -1
  191. package/dist/esm/v3/idempotencyKeys.test.js +0 -190
  192. package/dist/esm/v3/idempotencyKeys.test.js.map +0 -1
  193. package/dist/esm/v3/isomorphic/friendlyId.test.d.ts +0 -1
  194. package/dist/esm/v3/isomorphic/friendlyId.test.js +0 -495
  195. package/dist/esm/v3/isomorphic/friendlyId.test.js.map +0 -1
  196. package/dist/esm/v3/isomorphic/runOpsResidency.test.d.ts +0 -1
  197. package/dist/esm/v3/isomorphic/runOpsResidency.test.js +0 -139
  198. package/dist/esm/v3/isomorphic/runOpsResidency.test.js.map +0 -1
  199. package/dist/esm/v3/isomorphic/waitpointMint.test.d.ts +0 -1
  200. package/dist/esm/v3/isomorphic/waitpointMint.test.js +0 -95
  201. package/dist/esm/v3/isomorphic/waitpointMint.test.js.map +0 -1
  202. package/dist/esm/v3/machines/max-old-space.test.d.ts +0 -1
  203. package/dist/esm/v3/machines/max-old-space.test.js +0 -42
  204. package/dist/esm/v3/machines/max-old-space.test.js.map +0 -1
  205. package/dist/esm/v3/otel/tracingSDK.test.d.ts +0 -1
  206. package/dist/esm/v3/otel/tracingSDK.test.js +0 -172
  207. package/dist/esm/v3/otel/tracingSDK.test.js.map +0 -1
  208. package/dist/esm/v3/otel/tracingSDKShutdown.test.d.ts +0 -1
  209. package/dist/esm/v3/otel/tracingSDKShutdown.test.js +0 -16
  210. package/dist/esm/v3/otel/tracingSDKShutdown.test.js.map +0 -1
  211. package/dist/esm/v3/realtimeStreams/manager.test.d.ts +0 -1
  212. package/dist/esm/v3/realtimeStreams/manager.test.js +0 -87
  213. package/dist/esm/v3/realtimeStreams/manager.test.js.map +0 -1
  214. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.d.ts +0 -1
  215. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js +0 -66
  216. package/dist/esm/v3/realtimeStreams/streamsWriterV2.test.js.map +0 -1
  217. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.d.ts +0 -1
  218. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.js +0 -672
  219. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.js.map +0 -1
  220. package/dist/esm/v3/runEngineWorker/supervisor/queueConsumer.test.d.ts +0 -1
  221. package/dist/esm/v3/runEngineWorker/supervisor/queueConsumer.test.js +0 -75
  222. package/dist/esm/v3/runEngineWorker/supervisor/queueConsumer.test.js.map +0 -1
  223. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.d.ts +0 -1
  224. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js +0 -291
  225. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js.map +0 -1
  226. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.d.ts +0 -1
  227. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.js +0 -233
  228. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.js.map +0 -1
  229. package/dist/esm/v3/schemas/api-type.test.d.ts +0 -1
  230. package/dist/esm/v3/schemas/api-type.test.js +0 -356
  231. package/dist/esm/v3/schemas/api-type.test.js.map +0 -1
  232. package/dist/esm/v3/schemas/batchItemNDJSON.test.d.ts +0 -1
  233. package/dist/esm/v3/schemas/batchItemNDJSON.test.js +0 -77
  234. package/dist/esm/v3/schemas/batchItemNDJSON.test.js.map +0 -1
  235. package/dist/esm/v3/schemas/idempotencyKey.test.d.ts +0 -1
  236. package/dist/esm/v3/schemas/idempotencyKey.test.js +0 -155
  237. package/dist/esm/v3/schemas/idempotencyKey.test.js.map +0 -1
  238. package/dist/esm/v3/schemas/scheduleWindow.test.d.ts +0 -1
  239. package/dist/esm/v3/schemas/scheduleWindow.test.js +0 -50
  240. package/dist/esm/v3/schemas/scheduleWindow.test.js.map +0 -1
  241. package/dist/esm/v3/schemas/triggerExternalDeploymentId.test.d.ts +0 -1
  242. package/dist/esm/v3/schemas/triggerExternalDeploymentId.test.js +0 -102
  243. package/dist/esm/v3/schemas/triggerExternalDeploymentId.test.js.map +0 -1
  244. package/dist/esm/v3/serverOnly/shutdownManager.test.d.ts +0 -1
  245. package/dist/esm/v3/serverOnly/shutdownManager.test.js +0 -137
  246. package/dist/esm/v3/serverOnly/shutdownManager.test.js.map +0 -1
  247. package/dist/esm/v3/sessionStreams/manager.test.d.ts +0 -1
  248. package/dist/esm/v3/sessionStreams/manager.test.js +0 -373
  249. package/dist/esm/v3/sessionStreams/manager.test.js.map +0 -1
  250. package/dist/esm/v3/sessionStreams/router.test.d.ts +0 -1
  251. package/dist/esm/v3/sessionStreams/router.test.js +0 -461
  252. package/dist/esm/v3/sessionStreams/router.test.js.map +0 -1
  253. package/dist/esm/v3/taskContext/index.test.d.ts +0 -1
  254. package/dist/esm/v3/taskContext/index.test.js +0 -71
  255. package/dist/esm/v3/taskContext/index.test.js.map +0 -1
  256. package/dist/esm/v3/taskContext/otelProcessors.test.d.ts +0 -1
  257. package/dist/esm/v3/taskContext/otelProcessors.test.js +0 -107
  258. package/dist/esm/v3/taskContext/otelProcessors.test.js.map +0 -1
  259. package/dist/esm/v3/telnetLogServer.test.d.ts +0 -1
  260. package/dist/esm/v3/telnetLogServer.test.js +0 -139
  261. package/dist/esm/v3/telnetLogServer.test.js.map +0 -1
  262. package/dist/esm/v3/utils/reconnectBackoff.test.d.ts +0 -1
  263. package/dist/esm/v3/utils/reconnectBackoff.test.js +0 -74
  264. package/dist/esm/v3/utils/reconnectBackoff.test.js.map +0 -1
  265. package/dist/esm/v3/workloadDeploymentToken.test.d.ts +0 -1
  266. package/dist/esm/v3/workloadDeploymentToken.test.js +0 -108
  267. package/dist/esm/v3/workloadDeploymentToken.test.js.map +0 -1
@@ -1,461 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { SessionChannelRouter } from "./router.js";
3
- const CHAT_TABLE = {
4
- kindOf: (data) => data?.kind,
5
- routes: [
6
- { name: "messages", delivery: "queue", replayable: true, kinds: ["message"] },
7
- { name: "stop", delivery: "at-arrival", replayable: false, kinds: ["stop"] },
8
- {
9
- name: "handover",
10
- delivery: "queue",
11
- replayable: false,
12
- kinds: ["handover", "handover-skip"],
13
- },
14
- ],
15
- };
16
- function router(onDrop) {
17
- return makeRouter(onDrop);
18
- }
19
- function makeRouter(onDrop) {
20
- return new SessionChannelRouter(CHAT_TABLE, { onDrop });
21
- }
22
- function rec(seqNum, kind, text) {
23
- return { id: `r${seqNum}`, seqNum, data: { kind, ...(text ? { text } : {}) } };
24
- }
25
- describe("SessionChannelRouter: table validation", () => {
26
- it("rejects a route that is at-arrival and replayable", () => {
27
- expect(() => new SessionChannelRouter({
28
- kindOf: () => "x",
29
- routes: [{ name: "bad", delivery: "at-arrival", replayable: true, kinds: ["x"] }],
30
- })).toThrow(/at-arrival and replayable/);
31
- });
32
- it("rejects a kind claimed by two routes", () => {
33
- expect(() => new SessionChannelRouter({
34
- kindOf: () => "x",
35
- routes: [
36
- { name: "a", delivery: "queue", replayable: true, kinds: ["x"] },
37
- { name: "b", delivery: "queue", replayable: false, kinds: ["x"] },
38
- ],
39
- })).toThrow(/claimed by both/);
40
- });
41
- });
42
- describe("SessionChannelRouter: classification", () => {
43
- it("queues a message when nobody is ready for it", () => {
44
- const r = router();
45
- expect(r.ingest(rec(0, "message", "M0"))).toEqual({ action: "queue", route: "messages" });
46
- expect(r.hasPending("messages")).toBe(true);
47
- });
48
- it("discards a stop with no handler attached", () => {
49
- const r = router();
50
- expect(r.ingest(rec(0, "stop"))).toEqual({
51
- action: "drop",
52
- route: "stop",
53
- reason: "no-handler",
54
- });
55
- });
56
- it("delivers a stop to a live handler", () => {
57
- const r = router();
58
- const seen = [];
59
- r.on("stop", (record) => seen.push(record.seqNum));
60
- expect(r.ingest(rec(3, "stop"))).toEqual({ action: "deliver", route: "stop" });
61
- expect(seen).toEqual([3]);
62
- });
63
- it("drops a kind no route claims, and reports it once", () => {
64
- const drops = [];
65
- const r = router((record, reason) => drops.push([record.seqNum, reason]));
66
- expect(r.ingest(rec(1, "some-future-kind"))).toEqual({
67
- action: "drop",
68
- reason: "unroutable",
69
- });
70
- expect(drops).toEqual([[1, "unroutable"]]);
71
- });
72
- it("drops a record with no usable kind", () => {
73
- const r = router();
74
- expect(r.ingest({ id: "x", seqNum: 0, data: { nope: true } })).toEqual({
75
- action: "drop",
76
- reason: "malformed",
77
- });
78
- });
79
- it("does not let a throwing kindOf take the channel down", () => {
80
- const r = new SessionChannelRouter({
81
- kindOf: () => {
82
- throw new Error("boom");
83
- },
84
- routes: [{ name: "m", delivery: "queue", replayable: true, kinds: ["message"] }],
85
- });
86
- expect(r.ingest(rec(0, "message"))).toEqual({ action: "drop", reason: "malformed" });
87
- });
88
- });
89
- describe("SessionChannelRouter: the wedge cannot happen", () => {
90
- it("delivers a message queued behind an unroutable record", async () => {
91
- const r = router();
92
- r.ingest(rec(0, "mystery-kind"));
93
- r.ingest(rec(1, "message", "M1"));
94
- expect(r.hasPending("messages")).toBe(true);
95
- const taken = await r.next("messages", { timeoutMs: 0 });
96
- expect(taken.data.text).toBe("M1");
97
- });
98
- it("reports pending for a message queued behind a stop", () => {
99
- const r = router();
100
- r.ingest(rec(0, "stop"));
101
- r.ingest(rec(1, "message", "M1"));
102
- expect(r.hasPending("messages")).toBe(true);
103
- expect(r.peek("messages").data.text).toBe("M1");
104
- });
105
- });
106
- describe("SessionChannelRouter: delivery ordering", () => {
107
- it("serves a parked waiter before a push handler", async () => {
108
- const r = router();
109
- const handlerSaw = [];
110
- const pending = r.next("messages");
111
- r.on("messages", (record) => handlerSaw.push(record.data.text));
112
- r.ingest(rec(0, "message", "M0"));
113
- expect((await pending)?.seqNum).toBe(0);
114
- expect(handlerSaw).toEqual([]);
115
- });
116
- it("re-offers a queued record to a handler attaching later, in order", () => {
117
- const r = router();
118
- r.ingest(rec(0, "message", "M0"));
119
- r.ingest(rec(1, "message", "M1"));
120
- const seen = [];
121
- r.on("messages", (record) => seen.push(record.data.text));
122
- expect(seen).toEqual(["M0", "M1"]);
123
- expect(r.hasPending("messages")).toBe(false);
124
- });
125
- it("resolves next() undefined on timeout without consuming anything", async () => {
126
- const r = router();
127
- expect(await r.next("messages", { timeoutMs: 5 })).toBeUndefined();
128
- r.ingest(rec(0, "message", "M0"));
129
- expect((await r.next("messages", { timeoutMs: 0 }))?.seqNum).toBe(0);
130
- });
131
- });
132
- describe("SessionChannelRouter: the resume floor", () => {
133
- it("sits at the high water when nothing is owed", () => {
134
- const r = router();
135
- r.on("stop", () => { });
136
- r.ingest(rec(0, "message"));
137
- r.next("messages", { timeoutMs: 0 });
138
- r.ingest(rec(1, "stop"));
139
- expect(r.resumeFloor()).toBe(1);
140
- expect(r.appliedThrough()).toBe(1);
141
- });
142
- it("is held below a message still queued, even as control records advance", () => {
143
- const r = router();
144
- r.on("stop", () => { });
145
- r.ingest(rec(0, "message", "M0"));
146
- r.ingest(rec(1, "message", "M1"));
147
- r.next("messages", { timeoutMs: 0 });
148
- r.ingest(rec(2, "stop"));
149
- r.ingest(rec(3, "stop"));
150
- expect(r.resumeFloor()).toBe(0);
151
- expect(r.appliedThrough()).toBe(3);
152
- });
153
- it("is undefined rather than negative when the very first record is owed", () => {
154
- const r = router();
155
- r.ingest(rec(0, "message", "M0"));
156
- expect(r.resumeFloor()).toBeUndefined();
157
- });
158
- it("is not held back by a queued non-replayable record", () => {
159
- const r = router();
160
- r.ingest(rec(0, "handover"));
161
- r.ingest(rec(1, "message", "M1"));
162
- r.next("messages", { timeoutMs: 0 });
163
- expect(r.pendingCount("handover")).toBe(1);
164
- expect(r.resumeFloor()).toBe(1);
165
- });
166
- it("advances once the owed message is taken", async () => {
167
- const r = router();
168
- r.on("stop", () => { });
169
- r.ingest(rec(0, "message", "M0"));
170
- r.ingest(rec(1, "stop"));
171
- expect(r.resumeFloor()).toBeUndefined();
172
- await r.next("messages", { timeoutMs: 0 });
173
- expect(r.resumeFloor()).toBe(1);
174
- });
175
- it("tracks the earliest of several owed messages", () => {
176
- const r = router();
177
- r.ingest(rec(0, "message", "M0"));
178
- r.ingest(rec(1, "message", "M1"));
179
- r.ingest(rec(2, "message", "M2"));
180
- r.next("messages", { timeoutMs: 0 });
181
- expect(r.resumeFloor()).toBe(0);
182
- expect(r.appliedThrough()).toBe(2);
183
- });
184
- });
185
- describe("SessionChannelRouter: resuming", () => {
186
- it("does not apply a non-replayable record inside the replay window", () => {
187
- const r = router();
188
- r.restore({ resumeFrom: 0, appliedThrough: 2 });
189
- const stops = [];
190
- r.on("stop", (record) => stops.push(record.seqNum));
191
- expect(r.ingest(rec(1, "message", "M1"))).toEqual({ action: "queue", route: "messages" });
192
- expect(r.ingest(rec(2, "stop"))).toEqual({
193
- action: "drop",
194
- route: "stop",
195
- reason: "replayed",
196
- });
197
- expect(stops).toEqual([]);
198
- });
199
- it("applies the same kind arriving live, past the window", () => {
200
- const r = router();
201
- r.restore({ resumeFrom: 0, appliedThrough: 2 });
202
- const stops = [];
203
- r.on("stop", (record) => stops.push(record.seqNum));
204
- r.ingest(rec(1, "message", "M1"));
205
- r.ingest(rec(2, "stop"));
206
- expect(r.ingest(rec(3, "stop"))).toEqual({ action: "deliver", route: "stop" });
207
- expect(stops).toEqual([3]);
208
- });
209
- it("falls back to the floor when no replay-window end is supplied", () => {
210
- const r = router();
211
- r.restore({ resumeFrom: 4 });
212
- r.on("stop", () => { });
213
- expect(r.ingest(rec(4, "stop")).action).toBe("drop");
214
- expect(r.ingest(rec(5, "stop"))).toEqual({ action: "deliver", route: "stop" });
215
- });
216
- it("declines a control record inside a window resolved from the channel", () => {
217
- const r = router();
218
- // What the chat layer supplies when the boundary predates the published
219
- // window: everything already on the channel at boot counts as replayed.
220
- r.restore({ resumeFrom: 4, appliedThrough: 6 });
221
- const stops = [];
222
- r.on("stop", (record) => stops.push(record.seqNum));
223
- expect(r.ingest(rec(5, "message", "M5"))).toEqual({ action: "queue", route: "messages" });
224
- expect(r.ingest(rec(6, "stop"))).toEqual({
225
- action: "drop",
226
- route: "stop",
227
- reason: "replayed",
228
- });
229
- expect(r.ingest(rec(7, "stop"))).toEqual({ action: "deliver", route: "stop" });
230
- expect(stops).toEqual([7]);
231
- });
232
- it("applies everything on a fresh session with no checkpoint", () => {
233
- const r = router();
234
- r.on("stop", () => { });
235
- expect(r.ingest(rec(0, "stop"))).toEqual({ action: "deliver", route: "stop" });
236
- });
237
- it("never drops a replayable record, however far inside the window", () => {
238
- const r = router();
239
- r.restore({ resumeFrom: 0, appliedThrough: 9 });
240
- expect(r.ingest(rec(1, "message", "M1"))).toEqual({ action: "queue", route: "messages" });
241
- });
242
- it("keeps the floor from moving backwards past the restored point", () => {
243
- const r = router();
244
- r.restore({ resumeFrom: 7, appliedThrough: 7 });
245
- expect(r.resumeFloor()).toBe(7);
246
- });
247
- });
248
- describe("SessionChannelRouter: consumer windows", () => {
249
- it("queues a handover that arrives before its consumer is ready", async () => {
250
- const r = router();
251
- expect(r.ingest(rec(0, "handover")).action).toBe("queue");
252
- const taken = await r.next("handover", { timeoutMs: 0 });
253
- expect(taken?.seqNum).toBe(0);
254
- });
255
- it("discards what is left on a route when its window closes", () => {
256
- const r = router();
257
- r.ingest(rec(0, "handover"));
258
- r.clearRoute("handover");
259
- expect(r.pendingCount("handover")).toBe(0);
260
- expect(r.resumeFloor()).toBe(0);
261
- });
262
- it("wakes a waiter empty when its window closes", async () => {
263
- const r = router();
264
- const pending = r.next("handover");
265
- r.clearRoute("handover");
266
- expect(await pending).toBeUndefined();
267
- });
268
- });
269
- /**
270
- * The invariant the whole design exists to hold: across any interleaving and
271
- * any crash point, a message is delivered exactly once and a stop is never
272
- * applied twice.
273
- *
274
- * Runs every record sequence over a simulated two-boot lifecycle. The second
275
- * boot resubscribes from the published floor, exactly as the tail does with
276
- * `Last-Event-ID`, so a floor that is too high shows up as a lost message and
277
- * one that replays a stop shows up as a duplicate application.
278
- */
279
- describe("SessionChannelRouter: exactly-once across a crash", () => {
280
- const KINDS = ["message", "stop", "handover", "junk"];
281
- function interleavings(length) {
282
- if (length === 0)
283
- return [[]];
284
- const shorter = interleavings(length - 1);
285
- const out = [];
286
- for (const prefix of shorter) {
287
- for (const kind of KINDS)
288
- out.push([...prefix, kind]);
289
- }
290
- return out;
291
- }
292
- function runBoot(records, checkpoint, takeMessages, attachStop) {
293
- const r = router();
294
- r.restore(checkpoint);
295
- const messages = [];
296
- const stops = [];
297
- if (attachStop)
298
- r.on("stop", (record) => stops.push(record.seqNum));
299
- for (const record of records) {
300
- if (checkpoint.resumeFrom !== undefined && record.seqNum <= checkpoint.resumeFrom)
301
- continue;
302
- r.ingest(record);
303
- }
304
- for (let i = 0; i < takeMessages; i++) {
305
- const head = r.peek("messages");
306
- if (!head)
307
- break;
308
- void r.next("messages", { timeoutMs: 0 });
309
- messages.push(head.seqNum);
310
- }
311
- return { messages, stops, checkpoint: r.checkpoint() };
312
- }
313
- it("delivers every message exactly once and applies no stop twice", () => {
314
- const cases = interleavings(4);
315
- expect(cases.length).toBe(256);
316
- for (const kinds of cases) {
317
- const records = kinds.map((kind, index) => rec(index, kind));
318
- const messageSeqs = records
319
- .filter((record) => record.data.kind === "message")
320
- .map((record) => record.seqNum);
321
- for (let crashAfter = 0; crashAfter <= kinds.length; crashAfter++) {
322
- const first = runBoot(records, {}, crashAfter, true);
323
- const second = runBoot(records, first.checkpoint, kinds.length, true);
324
- const delivered = [...first.messages, ...second.messages];
325
- expect(delivered, `messages for [${kinds.join(",")}] crashAfter=${crashAfter}`).toEqual(messageSeqs);
326
- const appliedTwice = first.stops.filter((seq) => second.stops.includes(seq));
327
- expect(appliedTwice, `stops applied twice for [${kinds.join(",")}] crashAfter=${crashAfter}`).toEqual([]);
328
- }
329
- }
330
- });
331
- });
332
- describe("SessionChannelRouter: observe", () => {
333
- it("notifies without consuming, so the record still queues and holds the floor", () => {
334
- const r = router();
335
- const seen = [];
336
- r.observe("messages", (record) => seen.push(record.seqNum));
337
- r.ingest(rec(0, "message"));
338
- expect(seen).toEqual([0]);
339
- expect(r.hasPending("messages")).toBe(true);
340
- expect(r.resumeFloor()).toBeUndefined();
341
- });
342
- it("does not satisfy a queue route's handler delivery", () => {
343
- const r = router();
344
- const observed = [];
345
- const handled = [];
346
- r.observe("messages", (record) => observed.push(record.seqNum));
347
- r.ingest(rec(0, "message"));
348
- expect(handled).toEqual([]);
349
- r.on("messages", (record) => handled.push(record.seqNum));
350
- expect(handled).toEqual([0]);
351
- expect(observed).toEqual([0]);
352
- });
353
- it("rejects an at-arrival route, so a stop with only an observer is still discarded", () => {
354
- const r = router();
355
- expect(() => r.observe("stop", () => { })).toThrow(/at-arrival/);
356
- });
357
- it("does not re-offer records that were already queued when it attached", () => {
358
- const r = router();
359
- r.ingest(rec(0, "message"));
360
- const seen = [];
361
- r.observe("messages", (record) => seen.push(record.seqNum));
362
- expect(seen).toEqual([]);
363
- r.ingest(rec(1, "message"));
364
- expect(seen).toEqual([1]);
365
- });
366
- it("stops notifying after off()", () => {
367
- const r = router();
368
- const seen = [];
369
- const sub = r.observe("messages", (record) => seen.push(record.seqNum));
370
- r.ingest(rec(0, "message"));
371
- sub.off();
372
- r.ingest(rec(1, "message"));
373
- expect(seen).toEqual([0]);
374
- });
375
- });
376
- describe("SessionChannelRouter: take", () => {
377
- it("removes one queued record by sequence and releases the floor", () => {
378
- const r = router();
379
- r.ingest(rec(0, "message"));
380
- r.ingest(rec(1, "message"));
381
- expect(r.take("messages", 0)?.seqNum).toBe(0);
382
- expect(r.pendingCount("messages")).toBe(1);
383
- expect(r.peek("messages")?.seqNum).toBe(1);
384
- });
385
- it("reports false for a record that is no longer queued", () => {
386
- const r = router();
387
- r.ingest(rec(0, "message"));
388
- expect(r.take("messages", 0)?.seqNum).toBe(0);
389
- expect(r.take("messages", 0)).toBeUndefined();
390
- expect(r.take("messages", 99)).toBeUndefined();
391
- });
392
- it("leaves an untaken observed record to be delivered as normal", async () => {
393
- const r = router();
394
- r.observe("messages", () => { });
395
- r.ingest(rec(0, "message"));
396
- r.ingest(rec(1, "message"));
397
- r.take("messages", 0);
398
- const next = await r.next("messages", { timeoutMs: 0 });
399
- expect(next?.seqNum).toBe(1);
400
- });
401
- });
402
- describe("SessionChannelRouter: clearRoute guard", () => {
403
- it("refuses to clear a replayable route", () => {
404
- const r = router();
405
- r.ingest(rec(0, "message"));
406
- expect(() => r.clearRoute("messages")).toThrow(/replayable/);
407
- expect(r.hasPending("messages")).toBe(true);
408
- });
409
- it("still clears a non-replayable route", () => {
410
- const r = router();
411
- r.ingest(rec(0, "handover"));
412
- expect(r.hasPending("handover")).toBe(true);
413
- r.clearRoute("handover");
414
- expect(r.hasPending("handover")).toBe(false);
415
- });
416
- });
417
- describe("SessionChannelRouter: observe versus a waiting consumer", () => {
418
- it("notifies the observer even when a parked puller takes the record", async () => {
419
- const r = router();
420
- const seen = [];
421
- r.observe("messages", (record) => seen.push(record.seqNum));
422
- const pull = r.next("messages");
423
- r.ingest(rec(0, "message"));
424
- const taken = await pull;
425
- expect(seen).toEqual([0]);
426
- expect(taken?.seqNum).toBe(0);
427
- expect(r.hasPending("messages")).toBe(false);
428
- });
429
- it("reports a failed take for a record a puller already consumed", async () => {
430
- const r = router();
431
- const seen = [];
432
- r.observe("messages", (record) => seen.push(record.seqNum));
433
- const pull = r.next("messages");
434
- r.ingest(rec(0, "message"));
435
- await pull;
436
- expect(seen).toEqual([0]);
437
- expect(r.take("messages", 0)).toBeUndefined();
438
- });
439
- });
440
- describe("SessionChannelRouter: untake", () => {
441
- it("puts a claimed record back in sequence order", async () => {
442
- const r = router();
443
- r.ingest(rec(0, "message"));
444
- r.ingest(rec(2, "message"));
445
- const taken = r.take("messages", 0);
446
- expect(r.peek("messages")?.seqNum).toBe(2);
447
- r.untake("messages", taken);
448
- expect(r.pendingCount("messages")).toBe(2);
449
- expect(r.peek("messages")?.seqNum).toBe(0);
450
- expect(r.resumeFloor()).toBeUndefined();
451
- });
452
- it("is idempotent, so a double return cannot duplicate a record", () => {
453
- const r = router();
454
- r.ingest(rec(0, "message"));
455
- const taken = r.take("messages", 0);
456
- r.untake("messages", taken);
457
- r.untake("messages", taken);
458
- expect(r.pendingCount("messages")).toBe(1);
459
- });
460
- });
461
- //# sourceMappingURL=router.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"router.test.js","sourceRoot":"","sources":["../../../../src/v3/sessionStreams/router.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,71 +0,0 @@
1
- import { afterEach, describe, expect, it } from "vitest";
2
- import { unregisterGlobal } from "../utils/globals.js";
3
- import { SemanticInternalAttributes } from "../semanticInternalAttributes.js";
4
- import { TaskContextAPI } from "./index.js";
5
- const FAKE_CTX = {
6
- attempt: { id: "attempt_1", number: 1, startedAt: new Date(), status: "EXECUTING" },
7
- run: {
8
- id: "run_1",
9
- payload: undefined,
10
- payloadType: "application/json",
11
- context: undefined,
12
- createdAt: new Date(),
13
- tags: [],
14
- isTest: false,
15
- isReplay: false,
16
- startedAt: new Date(),
17
- durationMs: 0,
18
- costInCents: 0,
19
- baseCostInCents: 0,
20
- },
21
- task: { id: "my-task", filePath: "src/trigger/task.ts", exportName: "myTask" },
22
- queue: { id: "queue_1", name: "default" },
23
- environment: { id: "env_1", slug: "dev", type: "DEVELOPMENT" },
24
- organization: { id: "org_1", slug: "acme", name: "Acme" },
25
- project: { id: "proj_1", ref: "proj_xyz", slug: "demo", name: "Demo" },
26
- machine: {
27
- name: "small-1x",
28
- cpu: 0.5,
29
- memory: 0.5,
30
- centsPerMs: 0.0001,
31
- },
32
- };
33
- const FAKE_WORKER = { id: "worker_1", version: "1.0.0", contentHash: "abc" };
34
- describe("TaskContextAPI conversation id", () => {
35
- afterEach(() => {
36
- unregisterGlobal("task-context");
37
- TaskContextAPI.getInstance().setConversationId(undefined);
38
- });
39
- it("returns no conversation attribute when setConversationId was never called", () => {
40
- const api = TaskContextAPI.getInstance();
41
- api.setGlobalTaskContext({ ctx: FAKE_CTX, worker: FAKE_WORKER });
42
- expect(api.attributes[SemanticInternalAttributes.GEN_AI_CONVERSATION_ID]).toBeUndefined();
43
- });
44
- it("includes gen_ai.conversation.id after setConversationId", () => {
45
- const api = TaskContextAPI.getInstance();
46
- api.setGlobalTaskContext({ ctx: FAKE_CTX, worker: FAKE_WORKER });
47
- api.setConversationId("chat_123");
48
- expect(api.attributes[SemanticInternalAttributes.GEN_AI_CONVERSATION_ID]).toBe("chat_123");
49
- });
50
- it("clears the conversation attribute when called with undefined", () => {
51
- const api = TaskContextAPI.getInstance();
52
- api.setGlobalTaskContext({ ctx: FAKE_CTX, worker: FAKE_WORKER });
53
- api.setConversationId("chat_123");
54
- api.setConversationId(undefined);
55
- expect(api.attributes[SemanticInternalAttributes.GEN_AI_CONVERSATION_ID]).toBeUndefined();
56
- expect(api.conversationId).toBeUndefined();
57
- });
58
- it("returns no attributes when there is no task context", () => {
59
- const api = TaskContextAPI.getInstance();
60
- api.setConversationId("chat_123");
61
- expect(api.attributes).toEqual({});
62
- });
63
- it("clears conversation id when a new task context is registered (warm restart)", () => {
64
- const api = TaskContextAPI.getInstance();
65
- api.setGlobalTaskContext({ ctx: FAKE_CTX, worker: FAKE_WORKER });
66
- api.setConversationId("chat_old");
67
- api.setGlobalTaskContext({ ctx: FAKE_CTX, worker: FAKE_WORKER });
68
- expect(api.attributes[SemanticInternalAttributes.GEN_AI_CONVERSATION_ID]).toBeUndefined();
69
- });
70
- });
71
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/v3/taskContext/index.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};