@trigger.dev/core 4.5.16 → 4.6.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 (307) hide show
  1. package/dist/commonjs/schemas/eventFilter.d.ts +27 -105
  2. package/dist/commonjs/schemas/eventFilter.js +38 -38
  3. package/dist/commonjs/schemas/eventFilter.js.map +1 -1
  4. package/dist/commonjs/schemas/json.d.ts +3 -3
  5. package/dist/commonjs/schemas/json.js +20 -12
  6. package/dist/commonjs/schemas/json.js.map +1 -1
  7. package/dist/commonjs/v3/apiClient/core.d.ts +14 -14
  8. package/dist/commonjs/v3/apiClient/core.js +39 -18
  9. package/dist/commonjs/v3/apiClient/core.js.map +1 -1
  10. package/dist/commonjs/v3/apiClient/encodeTaskIdForPath.d.ts +6 -0
  11. package/dist/commonjs/v3/apiClient/encodeTaskIdForPath.js +20 -0
  12. package/dist/commonjs/v3/apiClient/encodeTaskIdForPath.js.map +1 -0
  13. package/dist/commonjs/v3/apiClient/index.d.ts +82 -184
  14. package/dist/commonjs/v3/apiClient/index.js +27 -8
  15. package/dist/commonjs/v3/apiClient/index.js.map +1 -1
  16. package/dist/commonjs/v3/apiClient/stream.d.ts +4 -4
  17. package/dist/commonjs/v3/apiClient/stream.js.map +1 -1
  18. package/dist/commonjs/v3/errors.d.ts +5 -4
  19. package/dist/commonjs/v3/errors.js.map +1 -1
  20. package/dist/commonjs/v3/index.d.ts +1 -1
  21. package/dist/commonjs/v3/index.js.map +1 -1
  22. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js +3 -0
  23. package/dist/commonjs/v3/realtimeStreams/sessionStreamInstance.js.map +1 -1
  24. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js +3 -0
  25. package/dist/commonjs/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
  26. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js +4 -0
  27. package/dist/commonjs/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
  28. package/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +25 -114
  29. package/dist/commonjs/v3/runEngineWorker/supervisor/http.js +5 -12
  30. package/dist/commonjs/v3/runEngineWorker/supervisor/http.js.map +1 -1
  31. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +594 -4187
  32. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.js +84 -67
  33. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.js.map +1 -1
  34. package/dist/commonjs/v3/runEngineWorker/supervisor/types.d.ts +2 -0
  35. package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +15 -110
  36. package/dist/commonjs/v3/runEngineWorker/workload/http.js +8 -16
  37. package/dist/commonjs/v3/runEngineWorker/workload/http.js.map +1 -1
  38. package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +465 -3624
  39. package/dist/commonjs/v3/runEngineWorker/workload/schemas.js +10 -9
  40. package/dist/commonjs/v3/runEngineWorker/workload/schemas.js.map +1 -1
  41. package/dist/commonjs/v3/schemas/api.d.ts +1869 -12681
  42. package/dist/commonjs/v3/schemas/api.js +1023 -943
  43. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  44. package/dist/commonjs/v3/schemas/build.d.ts +645 -9115
  45. package/dist/commonjs/v3/schemas/build.js +71 -71
  46. package/dist/commonjs/v3/schemas/build.js.map +1 -1
  47. package/dist/commonjs/v3/schemas/checkpoints.d.ts +121 -461
  48. package/dist/commonjs/v3/schemas/checkpoints.js +11 -11
  49. package/dist/commonjs/v3/schemas/checkpoints.js.map +1 -1
  50. package/dist/commonjs/v3/schemas/common.d.ts +1018 -6499
  51. package/dist/commonjs/v3/schemas/common.js +225 -218
  52. package/dist/commonjs/v3/schemas/common.js.map +1 -1
  53. package/dist/commonjs/v3/schemas/config.d.ts +3 -9
  54. package/dist/commonjs/v3/schemas/config.js +4 -4
  55. package/dist/commonjs/v3/schemas/config.js.map +1 -1
  56. package/dist/commonjs/v3/schemas/errors.d.ts +42 -173
  57. package/dist/commonjs/v3/schemas/errors.js +44 -44
  58. package/dist/commonjs/v3/schemas/errors.js.map +1 -1
  59. package/dist/commonjs/v3/schemas/eventFilter.d.ts +23 -91
  60. package/dist/commonjs/v3/schemas/eventFilter.js +35 -35
  61. package/dist/commonjs/v3/schemas/eventFilter.js.map +1 -1
  62. package/dist/commonjs/v3/schemas/fetch.d.ts +119 -415
  63. package/dist/commonjs/v3/schemas/fetch.js +17 -14
  64. package/dist/commonjs/v3/schemas/fetch.js.map +1 -1
  65. package/dist/commonjs/v3/schemas/messages.d.ts +603 -7438
  66. package/dist/commonjs/v3/schemas/messages.js +50 -50
  67. package/dist/commonjs/v3/schemas/messages.js.map +1 -1
  68. package/dist/commonjs/v3/schemas/openTelemetry.d.ts +50 -401
  69. package/dist/commonjs/v3/schemas/openTelemetry.js +32 -32
  70. package/dist/commonjs/v3/schemas/openTelemetry.js.map +1 -1
  71. package/dist/commonjs/v3/schemas/query.d.ts +51 -273
  72. package/dist/commonjs/v3/schemas/query.js +41 -40
  73. package/dist/commonjs/v3/schemas/query.js.map +1 -1
  74. package/dist/commonjs/v3/schemas/queues.d.ts +29 -100
  75. package/dist/commonjs/v3/schemas/queues.js +22 -22
  76. package/dist/commonjs/v3/schemas/queues.js.map +1 -1
  77. package/dist/commonjs/v3/schemas/reports.d.ts +150 -692
  78. package/dist/commonjs/v3/schemas/reports.js +55 -55
  79. package/dist/commonjs/v3/schemas/reports.js.map +1 -1
  80. package/dist/commonjs/v3/schemas/resources.d.ts +533 -5985
  81. package/dist/commonjs/v3/schemas/resources.js +49 -49
  82. package/dist/commonjs/v3/schemas/resources.js.map +1 -1
  83. package/dist/commonjs/v3/schemas/runEngine.d.ts +467 -1822
  84. package/dist/commonjs/v3/schemas/runEngine.js +113 -109
  85. package/dist/commonjs/v3/schemas/runEngine.js.map +1 -1
  86. package/dist/commonjs/v3/schemas/scheduleWindow.d.ts +2 -2
  87. package/dist/commonjs/v3/schemas/scheduleWindow.js +3 -3
  88. package/dist/commonjs/v3/schemas/scheduleWindow.js.map +1 -1
  89. package/dist/commonjs/v3/schemas/schemas.d.ts +788 -7456
  90. package/dist/commonjs/v3/schemas/schemas.js +133 -132
  91. package/dist/commonjs/v3/schemas/schemas.js.map +1 -1
  92. package/dist/commonjs/v3/schemas/snapshotRoute.d.ts +33 -0
  93. package/dist/commonjs/v3/schemas/snapshotRoute.js +33 -0
  94. package/dist/commonjs/v3/schemas/snapshotRoute.js.map +1 -0
  95. package/dist/commonjs/v3/schemas/style.d.ts +24 -86
  96. package/dist/commonjs/v3/schemas/style.js +12 -12
  97. package/dist/commonjs/v3/schemas/style.js.map +1 -1
  98. package/dist/commonjs/v3/schemas/tokens.d.ts +5 -31
  99. package/dist/commonjs/v3/schemas/tokens.js +10 -10
  100. package/dist/commonjs/v3/schemas/tokens.js.map +1 -1
  101. package/dist/commonjs/v3/schemas/warmStart.d.ts +2 -8
  102. package/dist/commonjs/v3/schemas/warmStart.js +4 -4
  103. package/dist/commonjs/v3/schemas/warmStart.js.map +1 -1
  104. package/dist/commonjs/v3/schemas/webhookApi.d.ts +75 -249
  105. package/dist/commonjs/v3/schemas/webhookApi.js +41 -41
  106. package/dist/commonjs/v3/schemas/webhookApi.js.map +1 -1
  107. package/dist/commonjs/v3/schemas/webhookConfig.d.ts +473 -3309
  108. package/dist/commonjs/v3/schemas/webhookConfig.js +79 -78
  109. package/dist/commonjs/v3/schemas/webhookConfig.js.map +1 -1
  110. package/dist/commonjs/v3/schemas/webhookFilter.d.ts +16 -4
  111. package/dist/commonjs/v3/schemas/webhookFilter.js +16 -16
  112. package/dist/commonjs/v3/schemas/webhookFilter.js.map +1 -1
  113. package/dist/commonjs/v3/schemas/webhooks.d.ts +247 -2055
  114. package/dist/commonjs/v3/schemas/webhooks.js +116 -115
  115. package/dist/commonjs/v3/schemas/webhooks.js.map +1 -1
  116. package/dist/commonjs/v3/serverOnly/httpServer.d.ts +19 -8
  117. package/dist/commonjs/v3/serverOnly/httpServer.js +6 -3
  118. package/dist/commonjs/v3/serverOnly/httpServer.js.map +1 -1
  119. package/dist/commonjs/v3/sessionStreams/chatSnapshot.d.ts +163 -16
  120. package/dist/commonjs/v3/sessionStreams/chatSnapshot.js +332 -8
  121. package/dist/commonjs/v3/sessionStreams/chatSnapshot.js.map +1 -1
  122. package/dist/commonjs/v3/sessionStreams/router.d.ts +39 -1
  123. package/dist/commonjs/v3/sessionStreams/router.js +62 -0
  124. package/dist/commonjs/v3/sessionStreams/router.js.map +1 -1
  125. package/dist/commonjs/v3/sessionStreams/wireProtocol.d.ts +15 -0
  126. package/dist/commonjs/v3/sessionStreams/wireProtocol.js +16 -1
  127. package/dist/commonjs/v3/sessionStreams/wireProtocol.js.map +1 -1
  128. package/dist/commonjs/v3/test/test-session-stream-manager.js +5 -1
  129. package/dist/commonjs/v3/test/test-session-stream-manager.js.map +1 -1
  130. package/dist/commonjs/v3/types/schemas.d.ts +21 -1
  131. package/dist/commonjs/v3/types/schemas.js +2 -1
  132. package/dist/commonjs/v3/types/schemas.js.map +1 -1
  133. package/dist/commonjs/v3/types/tools.d.ts +16 -5
  134. package/dist/commonjs/v3/types/tools.js +2 -2
  135. package/dist/commonjs/v3/types/tools.js.map +1 -1
  136. package/dist/commonjs/v3/utils/ioSerialization.js +3 -3
  137. package/dist/commonjs/v3/utils/ioSerialization.js.map +1 -1
  138. package/dist/commonjs/v3/utils/zod.d.ts +8 -0
  139. package/dist/commonjs/v3/utils/zod.js +8 -0
  140. package/dist/commonjs/v3/utils/zod.js.map +1 -0
  141. package/dist/commonjs/v3/workloadDeploymentToken.d.ts +2 -21
  142. package/dist/commonjs/v3/workloadDeploymentToken.js +10 -10
  143. package/dist/commonjs/v3/workloadDeploymentToken.js.map +1 -1
  144. package/dist/commonjs/v3/zodIpc.d.ts +6 -6
  145. package/dist/commonjs/v3/zodIpc.js +20 -18
  146. package/dist/commonjs/v3/zodIpc.js.map +1 -1
  147. package/dist/commonjs/v3/zodMessageHandler.d.ts +14 -21
  148. package/dist/commonjs/v3/zodMessageHandler.js +20 -7
  149. package/dist/commonjs/v3/zodMessageHandler.js.map +1 -1
  150. package/dist/commonjs/v3/zodSocket.d.ts +11 -11
  151. package/dist/commonjs/v3/zodSocket.js +9 -8
  152. package/dist/commonjs/v3/zodSocket.js.map +1 -1
  153. package/dist/commonjs/version.js +1 -1
  154. package/dist/esm/schemas/eventFilter.d.ts +27 -105
  155. package/dist/esm/schemas/eventFilter.js +2 -2
  156. package/dist/esm/schemas/eventFilter.js.map +1 -1
  157. package/dist/esm/schemas/json.d.ts +3 -3
  158. package/dist/esm/schemas/json.js +11 -3
  159. package/dist/esm/schemas/json.js.map +1 -1
  160. package/dist/esm/v3/apiClient/core.d.ts +14 -14
  161. package/dist/esm/v3/apiClient/core.js +38 -17
  162. package/dist/esm/v3/apiClient/core.js.map +1 -1
  163. package/dist/esm/v3/apiClient/encodeTaskIdForPath.d.ts +6 -0
  164. package/dist/esm/v3/apiClient/encodeTaskIdForPath.js +17 -0
  165. package/dist/esm/v3/apiClient/encodeTaskIdForPath.js.map +1 -0
  166. package/dist/esm/v3/apiClient/index.d.ts +82 -184
  167. package/dist/esm/v3/apiClient/index.js +22 -4
  168. package/dist/esm/v3/apiClient/index.js.map +1 -1
  169. package/dist/esm/v3/apiClient/stream.d.ts +4 -4
  170. package/dist/esm/v3/apiClient/stream.js.map +1 -1
  171. package/dist/esm/v3/errors.d.ts +5 -4
  172. package/dist/esm/v3/errors.js.map +1 -1
  173. package/dist/esm/v3/index.d.ts +1 -1
  174. package/dist/esm/v3/index.js.map +1 -1
  175. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js +3 -0
  176. package/dist/esm/v3/realtimeStreams/sessionStreamInstance.js.map +1 -1
  177. package/dist/esm/v3/realtimeStreams/streamsWriterV1.js +3 -0
  178. package/dist/esm/v3/realtimeStreams/streamsWriterV1.js.map +1 -1
  179. package/dist/esm/v3/realtimeStreams/streamsWriterV2.js +4 -0
  180. package/dist/esm/v3/realtimeStreams/streamsWriterV2.js.map +1 -1
  181. package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +25 -114
  182. package/dist/esm/v3/runEngineWorker/supervisor/http.js +4 -11
  183. package/dist/esm/v3/runEngineWorker/supervisor/http.js.map +1 -1
  184. package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +594 -4187
  185. package/dist/esm/v3/runEngineWorker/supervisor/schemas.js +22 -5
  186. package/dist/esm/v3/runEngineWorker/supervisor/schemas.js.map +1 -1
  187. package/dist/esm/v3/runEngineWorker/supervisor/types.d.ts +2 -0
  188. package/dist/esm/v3/runEngineWorker/workload/http.d.ts +15 -110
  189. package/dist/esm/v3/runEngineWorker/workload/http.js +8 -16
  190. package/dist/esm/v3/runEngineWorker/workload/http.js.map +1 -1
  191. package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +465 -3624
  192. package/dist/esm/v3/runEngineWorker/workload/schemas.js +5 -4
  193. package/dist/esm/v3/runEngineWorker/workload/schemas.js.map +1 -1
  194. package/dist/esm/v3/schemas/api.d.ts +1869 -12681
  195. package/dist/esm/v3/schemas/api.js +115 -35
  196. package/dist/esm/v3/schemas/api.js.map +1 -1
  197. package/dist/esm/v3/schemas/build.d.ts +645 -9115
  198. package/dist/esm/v3/schemas/build.js +10 -10
  199. package/dist/esm/v3/schemas/build.js.map +1 -1
  200. package/dist/esm/v3/schemas/checkpoints.d.ts +121 -461
  201. package/dist/esm/v3/schemas/checkpoints.js +1 -1
  202. package/dist/esm/v3/schemas/checkpoints.js.map +1 -1
  203. package/dist/esm/v3/schemas/common.d.ts +1018 -6499
  204. package/dist/esm/v3/schemas/common.js +17 -10
  205. package/dist/esm/v3/schemas/common.js.map +1 -1
  206. package/dist/esm/v3/schemas/config.d.ts +3 -9
  207. package/dist/esm/v3/schemas/config.js +1 -1
  208. package/dist/esm/v3/schemas/config.js.map +1 -1
  209. package/dist/esm/v3/schemas/errors.d.ts +42 -173
  210. package/dist/esm/v3/schemas/errors.js +1 -1
  211. package/dist/esm/v3/schemas/errors.js.map +1 -1
  212. package/dist/esm/v3/schemas/eventFilter.d.ts +23 -91
  213. package/dist/esm/v3/schemas/eventFilter.js +2 -2
  214. package/dist/esm/v3/schemas/eventFilter.js.map +1 -1
  215. package/dist/esm/v3/schemas/fetch.d.ts +119 -415
  216. package/dist/esm/v3/schemas/fetch.js +6 -3
  217. package/dist/esm/v3/schemas/fetch.js.map +1 -1
  218. package/dist/esm/v3/schemas/messages.d.ts +603 -7438
  219. package/dist/esm/v3/schemas/messages.js +3 -3
  220. package/dist/esm/v3/schemas/messages.js.map +1 -1
  221. package/dist/esm/v3/schemas/openTelemetry.d.ts +50 -401
  222. package/dist/esm/v3/schemas/openTelemetry.js +2 -2
  223. package/dist/esm/v3/schemas/openTelemetry.js.map +1 -1
  224. package/dist/esm/v3/schemas/query.d.ts +51 -273
  225. package/dist/esm/v3/schemas/query.js +4 -3
  226. package/dist/esm/v3/schemas/query.js.map +1 -1
  227. package/dist/esm/v3/schemas/queues.d.ts +29 -100
  228. package/dist/esm/v3/schemas/queues.js +1 -1
  229. package/dist/esm/v3/schemas/queues.js.map +1 -1
  230. package/dist/esm/v3/schemas/reports.d.ts +150 -692
  231. package/dist/esm/v3/schemas/reports.js +5 -5
  232. package/dist/esm/v3/schemas/reports.js.map +1 -1
  233. package/dist/esm/v3/schemas/resources.d.ts +533 -5985
  234. package/dist/esm/v3/schemas/resources.js +3 -3
  235. package/dist/esm/v3/schemas/resources.js.map +1 -1
  236. package/dist/esm/v3/schemas/runEngine.d.ts +467 -1822
  237. package/dist/esm/v3/schemas/runEngine.js +11 -3
  238. package/dist/esm/v3/schemas/runEngine.js.map +1 -1
  239. package/dist/esm/v3/schemas/scheduleWindow.d.ts +2 -2
  240. package/dist/esm/v3/schemas/scheduleWindow.js +1 -1
  241. package/dist/esm/v3/schemas/scheduleWindow.js.map +1 -1
  242. package/dist/esm/v3/schemas/schemas.d.ts +788 -7456
  243. package/dist/esm/v3/schemas/schemas.js +11 -10
  244. package/dist/esm/v3/schemas/schemas.js.map +1 -1
  245. package/dist/esm/v3/schemas/snapshotRoute.d.ts +33 -0
  246. package/dist/esm/v3/schemas/snapshotRoute.js +30 -0
  247. package/dist/esm/v3/schemas/snapshotRoute.js.map +1 -0
  248. package/dist/esm/v3/schemas/style.d.ts +24 -86
  249. package/dist/esm/v3/schemas/style.js +1 -1
  250. package/dist/esm/v3/schemas/style.js.map +1 -1
  251. package/dist/esm/v3/schemas/tokens.d.ts +5 -31
  252. package/dist/esm/v3/schemas/tokens.js +1 -1
  253. package/dist/esm/v3/schemas/tokens.js.map +1 -1
  254. package/dist/esm/v3/schemas/warmStart.d.ts +2 -8
  255. package/dist/esm/v3/schemas/warmStart.js +1 -1
  256. package/dist/esm/v3/schemas/warmStart.js.map +1 -1
  257. package/dist/esm/v3/schemas/webhookApi.d.ts +75 -249
  258. package/dist/esm/v3/schemas/webhookApi.js +2 -2
  259. package/dist/esm/v3/schemas/webhookApi.js.map +1 -1
  260. package/dist/esm/v3/schemas/webhookConfig.d.ts +473 -3309
  261. package/dist/esm/v3/schemas/webhookConfig.js +10 -9
  262. package/dist/esm/v3/schemas/webhookConfig.js.map +1 -1
  263. package/dist/esm/v3/schemas/webhookFilter.d.ts +16 -4
  264. package/dist/esm/v3/schemas/webhookFilter.js +1 -1
  265. package/dist/esm/v3/schemas/webhookFilter.js.map +1 -1
  266. package/dist/esm/v3/schemas/webhooks.d.ts +247 -2055
  267. package/dist/esm/v3/schemas/webhooks.js +3 -2
  268. package/dist/esm/v3/schemas/webhooks.js.map +1 -1
  269. package/dist/esm/v3/serverOnly/httpServer.d.ts +19 -8
  270. package/dist/esm/v3/serverOnly/httpServer.js +5 -2
  271. package/dist/esm/v3/serverOnly/httpServer.js.map +1 -1
  272. package/dist/esm/v3/sessionStreams/chatSnapshot.d.ts +163 -16
  273. package/dist/esm/v3/sessionStreams/chatSnapshot.js +318 -2
  274. package/dist/esm/v3/sessionStreams/chatSnapshot.js.map +1 -1
  275. package/dist/esm/v3/sessionStreams/router.d.ts +39 -1
  276. package/dist/esm/v3/sessionStreams/router.js +62 -0
  277. package/dist/esm/v3/sessionStreams/router.js.map +1 -1
  278. package/dist/esm/v3/sessionStreams/wireProtocol.d.ts +15 -0
  279. package/dist/esm/v3/sessionStreams/wireProtocol.js +15 -0
  280. package/dist/esm/v3/sessionStreams/wireProtocol.js.map +1 -1
  281. package/dist/esm/v3/test/test-session-stream-manager.js +5 -1
  282. package/dist/esm/v3/test/test-session-stream-manager.js.map +1 -1
  283. package/dist/esm/v3/types/schemas.d.ts +21 -1
  284. package/dist/esm/v3/types/schemas.js +2 -1
  285. package/dist/esm/v3/types/schemas.js.map +1 -1
  286. package/dist/esm/v3/types/tools.d.ts +16 -5
  287. package/dist/esm/v3/types/tools.js +2 -2
  288. package/dist/esm/v3/types/tools.js.map +1 -1
  289. package/dist/esm/v3/utils/ioSerialization.js +1 -1
  290. package/dist/esm/v3/utils/ioSerialization.js.map +1 -1
  291. package/dist/esm/v3/utils/zod.d.ts +8 -0
  292. package/dist/esm/v3/utils/zod.js +5 -0
  293. package/dist/esm/v3/utils/zod.js.map +1 -0
  294. package/dist/esm/v3/workloadDeploymentToken.d.ts +2 -21
  295. package/dist/esm/v3/workloadDeploymentToken.js +1 -1
  296. package/dist/esm/v3/workloadDeploymentToken.js.map +1 -1
  297. package/dist/esm/v3/zodIpc.d.ts +6 -6
  298. package/dist/esm/v3/zodIpc.js +5 -3
  299. package/dist/esm/v3/zodIpc.js.map +1 -1
  300. package/dist/esm/v3/zodMessageHandler.d.ts +14 -21
  301. package/dist/esm/v3/zodMessageHandler.js +16 -3
  302. package/dist/esm/v3/zodMessageHandler.js.map +1 -1
  303. package/dist/esm/v3/zodSocket.d.ts +11 -11
  304. package/dist/esm/v3/zodSocket.js +3 -2
  305. package/dist/esm/v3/zodSocket.js.map +1 -1
  306. package/dist/esm/version.js +1 -1
  307. package/package.json +7 -3
@@ -16,9 +16,9 @@
16
16
  * The `version` field is a forward-compat lever: readers that don't
17
17
  * recognise a version silently fall back to no-snapshot behaviour.
18
18
  */
19
- import { z } from "zod";
19
+ import { z } from "zod/v4";
20
20
  import type { UIMessage } from "ai";
21
- export type ChatSnapshotV1<TUIMessage extends UIMessage = UIMessage> = {
21
+ export type ChatSnapshotV1<TUIMessage = unknown> = {
22
22
  version: 1;
23
23
  savedAt: number;
24
24
  messages: TUIMessage[];
@@ -40,25 +40,172 @@ export type ChatSnapshotV1<TUIMessage extends UIMessage = UIMessage> = {
40
40
  */
41
41
  export declare const ChatSnapshotV1Schema: z.ZodObject<{
42
42
  version: z.ZodLiteral<1>;
43
- savedAt: z.ZodNumber;
44
- messages: z.ZodArray<z.ZodUnknown, "many">;
43
+ savedAt: z.ZodOptional<z.ZodNumber>;
44
+ messages: z.ZodArray<z.ZodUnknown>;
45
45
  lastOutEventId: z.ZodOptional<z.ZodString>;
46
46
  lastInEventId: z.ZodOptional<z.ZodString>;
47
- }, "strip", z.ZodTypeAny, {
48
- version: 1;
49
- savedAt: number;
50
- messages: unknown[];
51
- lastOutEventId?: string | undefined;
52
- lastInEventId?: string | undefined;
53
- }, {
54
- version: 1;
47
+ }, z.core.$strip>;
48
+ /**
49
+ * One transcript entry in a version 2 snapshot. `id` duplicates
50
+ * `message.id` so a reader can address entries without inspecting the
51
+ * message body; `final` is false for a partial assistant message captured
52
+ * by an errored or stopped turn.
53
+ */
54
+ export type TranscriptSnapshotEntry<TUIMessage extends UIMessage = UIMessage> = {
55
+ id: string;
56
+ final: boolean;
57
+ message: TUIMessage;
58
+ };
59
+ /**
60
+ * Version 2 of the persisted transcript blob. Entries are ordered by array
61
+ * position. `state` is an opaque record the runtime uses for compaction and
62
+ * other cross-run bookkeeping; `null` when nothing has been recorded.
63
+ *
64
+ * Readers must accept version 1 as well; writers only emit version 2. Use
65
+ * {@link parseTranscriptSnapshot} to read either.
66
+ */
67
+ export type TranscriptSnapshotV2<TUIMessage extends UIMessage = UIMessage> = {
68
+ version: 2;
55
69
  savedAt: number;
56
- messages: unknown[];
57
- lastOutEventId?: string | undefined;
58
- lastInEventId?: string | undefined;
59
- }>;
70
+ messages: TranscriptSnapshotEntry<TUIMessage>[];
71
+ state: unknown | null;
72
+ lastOutEventId?: string;
73
+ lastInEventId?: string;
74
+ };
75
+ export declare const TranscriptSnapshotV2Schema: z.ZodObject<{
76
+ version: z.ZodLiteral<2>;
77
+ savedAt: z.ZodOptional<z.ZodNumber>;
78
+ messages: z.ZodArray<z.ZodObject<{
79
+ id: z.ZodString;
80
+ final: z.ZodBoolean;
81
+ message: z.ZodUnknown;
82
+ }, z.core.$strip>>;
83
+ state: z.ZodNullable<z.ZodUnknown>;
84
+ lastOutEventId: z.ZodOptional<z.ZodString>;
85
+ lastInEventId: z.ZodOptional<z.ZodString>;
86
+ }, z.core.$strip>;
87
+ /**
88
+ * Parse a fetched snapshot blob of any known version into the version 2
89
+ * shape. A version 1 blob is upgraded in memory: every message becomes a
90
+ * `final: true` entry keyed by its `id` and `state` is `null`. In both
91
+ * versions, entries without a non-empty string `id` or a non-null object
92
+ * `message` are dropped; a version 2 entry whose `message.id` disagrees with
93
+ * the envelope `id` is dropped too, since a reader keys by one and renders by
94
+ * the other. A caller never sees an entry it would crash on or mis-order.
95
+ * A missing `savedAt` defaults to `0` rather than rejecting the whole blob:
96
+ * the field only orders snapshot history before live chunks, and dropping a
97
+ * whole conversation over an absent timestamp is the wrong failure mode.
98
+ * Returns `undefined` for an unknown version or a body that is not a
99
+ * snapshot; callers treat that as "no snapshot".
100
+ */
101
+ export declare function parseTranscriptSnapshot<TUIMessage extends UIMessage = UIMessage>(input: unknown): TranscriptSnapshotV2<TUIMessage> | undefined;
102
+ /**
103
+ * Select one page of transcript entries, newest last. `before` keeps only the
104
+ * entries ordered before that id, and yields an empty page when the transcript
105
+ * no longer holds that id; `limit` keeps the last that many. A
106
+ * non-positive `limit` is treated as no limit (every entry, no cursor), so a
107
+ * caller cannot mistake an empty page for the end of the transcript. The
108
+ * returned `nextCursor` is the id to pass as `before` for the previous page,
109
+ * absent when there is no earlier page.
110
+ */
111
+ export declare function pageTranscriptEntries<TUIMessage extends UIMessage = UIMessage>(all: TranscriptSnapshotEntry<TUIMessage>[], opts: {
112
+ limit?: number;
113
+ before?: string;
114
+ } | undefined): {
115
+ entries: TranscriptSnapshotEntry<TUIMessage>[];
116
+ nextCursor: string | undefined;
117
+ };
60
118
  /**
61
119
  * S3 key suffix for a session's snapshot blob. The webapp's presigned
62
120
  * URL routes prefix this with `packets/{projectRef}/{envSlug}/`.
63
121
  */
64
122
  export declare function chatSnapshotKeySuffix(sessionId: string): string;
123
+ /**
124
+ * Byte length of the fixed trailer that ends a version 2 blob:
125
+ * `#tt2:` + 16 zero-padded digits + `\n`. Fixed width so a reader can fetch
126
+ * exactly this many bytes from the end of the object and learn where the
127
+ * footer starts without a second guess.
128
+ */
129
+ export declare const TRANSCRIPT_TRAILER_BYTES = 22;
130
+ /**
131
+ * Media type a version 2 blob is stored under. Object stores return this on a
132
+ * ranged read, so a reader learns the format from the response it already made
133
+ * instead of inferring it from the bytes.
134
+ */
135
+ export declare const TRANSCRIPT_BLOB_CONTENT_TYPE = "application/vnd.trigger.transcript+ndjson";
136
+ /**
137
+ * Entry index at the end of a version 2 blob. Carries the stream cursors too,
138
+ * so serving a transcript page never has to fetch the header — which is where
139
+ * the private runtime state lives. `offsets` holds `ids.length + 1`
140
+ * byte offsets: entry `i` occupies `[offsets[i], offsets[i + 1] - 1)`, and the
141
+ * final sentinel is where the footer line itself begins. Carrying the sentinel
142
+ * means a reader can bound every entry, including the last, without knowing the
143
+ * object's total size.
144
+ */
145
+ export type TranscriptFooter = {
146
+ ids: string[];
147
+ offsets: number[];
148
+ savedAt?: number;
149
+ lastOutEventId?: string;
150
+ lastInEventId?: string;
151
+ };
152
+ /**
153
+ * Serialize a snapshot to the version 2 blob format: a header line carrying
154
+ * the cursors and the private runtime `state`, one JSON entry per line, an
155
+ * entry-index footer line, and the fixed trailer.
156
+ *
157
+ * The header holds `state`, so a reader that fetches only the end of the
158
+ * object to serve a transcript page cannot receive the model lane even by
159
+ * accident.
160
+ */
161
+ export declare function serializeTranscriptSnapshot<TUIMessage extends UIMessage>(snapshot: TranscriptSnapshotV2<TUIMessage>): string;
162
+ /**
163
+ * Read the fixed trailer from the last {@link TRANSCRIPT_TRAILER_BYTES} bytes
164
+ * of a version 2 blob. Returns the footer line's byte length, or `undefined`
165
+ * when the bytes are not a trailer (a version 1 blob, or a truncated write).
166
+ */
167
+ export declare function readTranscriptTrailer(trailer: string): {
168
+ footerLength: number;
169
+ } | undefined;
170
+ /** Parse a version 2 footer line into its entry index. */
171
+ export declare function parseTranscriptFooter(line: string): TranscriptFooter | undefined;
172
+ /**
173
+ * Byte window covering one page of entries within a single object, computed
174
+ * from its footer alone. Mirrors {@link pageTranscriptEntries}: newest last,
175
+ * `before` excludes that id and everything after it, `limit` keeps the last
176
+ * that many.
177
+ *
178
+ * `undefined` means the page is empty: the transcript is empty, `before` names
179
+ * its first entry, or `before` names an entry the transcript no longer holds
180
+ * (history trimmed since the caller last read it). Returning the newest entries
181
+ * for a cursor that cannot be found would present recent messages as older ones.
182
+ */
183
+ export type TranscriptPagePlan = {
184
+ start: number;
185
+ end: number;
186
+ ids: string[];
187
+ /** Set when the transcript still holds entries before the page. */
188
+ nextCursor: string | undefined;
189
+ /** Position of the page's first entry in the whole transcript. */
190
+ startIndex: number;
191
+ /** Entries in the whole transcript, so a caller can order pages against each other. */
192
+ totalEntries: number;
193
+ };
194
+ export declare function planTranscriptPage(footer: TranscriptFooter, opts: {
195
+ limit?: number;
196
+ before?: string;
197
+ } | undefined): TranscriptPagePlan | undefined;
198
+ /**
199
+ * Parse a run of whole entry lines, e.g. the byte window
200
+ * {@link planTranscriptPage} selected. Malformed lines are dropped, matching
201
+ * {@link parseTranscriptSnapshot}: a caller never sees an entry it would crash
202
+ * on or mis-order.
203
+ */
204
+ export declare function parseTranscriptEntryLines<TUIMessage extends UIMessage = UIMessage>(text: string): TranscriptSnapshotEntry<TUIMessage>[];
205
+ /**
206
+ * Parse a whole fetched blob of any known format. Version 2 is the line-based
207
+ * format {@link serializeTranscriptSnapshot} writes; anything else is handed to
208
+ * {@link parseTranscriptSnapshot}, which still reads the version 1 blobs
209
+ * written by released SDKs.
210
+ */
211
+ export declare function parseTranscriptBlob<TUIMessage extends UIMessage = UIMessage>(text: string): TranscriptSnapshotV2<TUIMessage> | undefined;
@@ -18,22 +18,122 @@
18
18
  * recognise a version silently fall back to no-snapshot behaviour.
19
19
  */
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.ChatSnapshotV1Schema = void 0;
21
+ exports.TRANSCRIPT_BLOB_CONTENT_TYPE = exports.TRANSCRIPT_TRAILER_BYTES = exports.TranscriptSnapshotV2Schema = exports.ChatSnapshotV1Schema = void 0;
22
+ exports.parseTranscriptSnapshot = parseTranscriptSnapshot;
23
+ exports.pageTranscriptEntries = pageTranscriptEntries;
22
24
  exports.chatSnapshotKeySuffix = chatSnapshotKeySuffix;
23
- const zod_1 = require("zod");
25
+ exports.serializeTranscriptSnapshot = serializeTranscriptSnapshot;
26
+ exports.readTranscriptTrailer = readTranscriptTrailer;
27
+ exports.parseTranscriptFooter = parseTranscriptFooter;
28
+ exports.planTranscriptPage = planTranscriptPage;
29
+ exports.parseTranscriptEntryLines = parseTranscriptEntryLines;
30
+ exports.parseTranscriptBlob = parseTranscriptBlob;
31
+ const v4_1 = require("zod/v4");
24
32
  /**
25
33
  * Zod schema for `ChatSnapshotV1` with the message shape kept opaque
26
34
  * (`unknown[]`). The agent runtime types messages strictly via the
27
35
  * generic parameter; readers that need stricter validation can layer
28
36
  * their own UIMessage parser on top.
29
37
  */
30
- exports.ChatSnapshotV1Schema = zod_1.z.object({
31
- version: zod_1.z.literal(1),
32
- savedAt: zod_1.z.number(),
33
- messages: zod_1.z.array(zod_1.z.unknown()),
34
- lastOutEventId: zod_1.z.string().optional(),
35
- lastInEventId: zod_1.z.string().optional(),
38
+ exports.ChatSnapshotV1Schema = v4_1.z.object({
39
+ version: v4_1.z.literal(1),
40
+ savedAt: v4_1.z.number().optional(),
41
+ messages: v4_1.z.array(v4_1.z.unknown()),
42
+ lastOutEventId: v4_1.z.string().optional(),
43
+ lastInEventId: v4_1.z.string().optional(),
36
44
  });
45
+ exports.TranscriptSnapshotV2Schema = v4_1.z.object({
46
+ version: v4_1.z.literal(2),
47
+ savedAt: v4_1.z.number().optional(),
48
+ messages: v4_1.z.array(v4_1.z.object({
49
+ id: v4_1.z.string(),
50
+ final: v4_1.z.boolean(),
51
+ message: v4_1.z.unknown(),
52
+ })),
53
+ state: v4_1.z.unknown().nullable(),
54
+ lastOutEventId: v4_1.z.string().optional(),
55
+ lastInEventId: v4_1.z.string().optional(),
56
+ });
57
+ /**
58
+ * Parse a fetched snapshot blob of any known version into the version 2
59
+ * shape. A version 1 blob is upgraded in memory: every message becomes a
60
+ * `final: true` entry keyed by its `id` and `state` is `null`. In both
61
+ * versions, entries without a non-empty string `id` or a non-null object
62
+ * `message` are dropped; a version 2 entry whose `message.id` disagrees with
63
+ * the envelope `id` is dropped too, since a reader keys by one and renders by
64
+ * the other. A caller never sees an entry it would crash on or mis-order.
65
+ * A missing `savedAt` defaults to `0` rather than rejecting the whole blob:
66
+ * the field only orders snapshot history before live chunks, and dropping a
67
+ * whole conversation over an absent timestamp is the wrong failure mode.
68
+ * Returns `undefined` for an unknown version or a body that is not a
69
+ * snapshot; callers treat that as "no snapshot".
70
+ */
71
+ function parseTranscriptSnapshot(input) {
72
+ const v2 = exports.TranscriptSnapshotV2Schema.safeParse(input);
73
+ if (v2.success) {
74
+ const messages = [];
75
+ for (const entry of v2.data.messages) {
76
+ if (entry.id.length === 0)
77
+ continue;
78
+ if (typeof entry.message !== "object" || entry.message === null)
79
+ continue;
80
+ if (entry.message.id !== entry.id)
81
+ continue;
82
+ messages.push({ id: entry.id, final: entry.final, message: entry.message });
83
+ }
84
+ return {
85
+ version: 2,
86
+ savedAt: v2.data.savedAt ?? 0,
87
+ messages,
88
+ state: v2.data.state ?? null,
89
+ lastOutEventId: v2.data.lastOutEventId,
90
+ lastInEventId: v2.data.lastInEventId,
91
+ };
92
+ }
93
+ const v1 = exports.ChatSnapshotV1Schema.safeParse(input);
94
+ if (v1.success) {
95
+ const messages = [];
96
+ for (const raw of v1.data.messages) {
97
+ const id = raw?.id;
98
+ if (typeof id !== "string" || id.length === 0)
99
+ continue;
100
+ messages.push({ id, final: true, message: raw });
101
+ }
102
+ return {
103
+ version: 2,
104
+ savedAt: v1.data.savedAt ?? 0,
105
+ messages,
106
+ state: null,
107
+ lastOutEventId: v1.data.lastOutEventId,
108
+ lastInEventId: v1.data.lastInEventId,
109
+ };
110
+ }
111
+ return undefined;
112
+ }
113
+ /**
114
+ * Select one page of transcript entries, newest last. `before` keeps only the
115
+ * entries ordered before that id, and yields an empty page when the transcript
116
+ * no longer holds that id; `limit` keeps the last that many. A
117
+ * non-positive `limit` is treated as no limit (every entry, no cursor), so a
118
+ * caller cannot mistake an empty page for the end of the transcript. The
119
+ * returned `nextCursor` is the id to pass as `before` for the previous page,
120
+ * absent when there is no earlier page.
121
+ */
122
+ function pageTranscriptEntries(all, opts) {
123
+ let entries = all;
124
+ if (opts?.before !== undefined) {
125
+ const idx = entries.findIndex((e) => e.id === opts.before);
126
+ if (idx === -1)
127
+ return { entries: [], nextCursor: undefined };
128
+ entries = entries.slice(0, idx);
129
+ }
130
+ let nextCursor;
131
+ if (opts?.limit !== undefined && opts.limit > 0 && entries.length > opts.limit) {
132
+ entries = entries.slice(entries.length - opts.limit);
133
+ nextCursor = entries[0]?.id;
134
+ }
135
+ return { entries, nextCursor };
136
+ }
37
137
  /**
38
138
  * S3 key suffix for a session's snapshot blob. The webapp's presigned
39
139
  * URL routes prefix this with `packets/{projectRef}/{envSlug}/`.
@@ -41,4 +141,228 @@ exports.ChatSnapshotV1Schema = zod_1.z.object({
41
141
  function chatSnapshotKeySuffix(sessionId) {
42
142
  return `sessions/${sessionId}/snapshot.json`;
43
143
  }
144
+ /**
145
+ * Byte length of the fixed trailer that ends a version 2 blob:
146
+ * `#tt2:` + 16 zero-padded digits + `\n`. Fixed width so a reader can fetch
147
+ * exactly this many bytes from the end of the object and learn where the
148
+ * footer starts without a second guess.
149
+ */
150
+ exports.TRANSCRIPT_TRAILER_BYTES = 22;
151
+ /**
152
+ * Media type a version 2 blob is stored under. Object stores return this on a
153
+ * ranged read, so a reader learns the format from the response it already made
154
+ * instead of inferring it from the bytes.
155
+ */
156
+ exports.TRANSCRIPT_BLOB_CONTENT_TYPE = "application/vnd.trigger.transcript+ndjson";
157
+ const TRAILER_PREFIX = "#tt2:";
158
+ const V2_LINE_PREFIX = '{"v":2';
159
+ function utf8Length(value) {
160
+ return new TextEncoder().encode(value).length;
161
+ }
162
+ /**
163
+ * Serialize a snapshot to the version 2 blob format: a header line carrying
164
+ * the cursors and the private runtime `state`, one JSON entry per line, an
165
+ * entry-index footer line, and the fixed trailer.
166
+ *
167
+ * The header holds `state`, so a reader that fetches only the end of the
168
+ * object to serve a transcript page cannot receive the model lane even by
169
+ * accident.
170
+ */
171
+ function serializeTranscriptSnapshot(snapshot) {
172
+ const header = JSON.stringify({
173
+ v: 2,
174
+ savedAt: snapshot.savedAt,
175
+ lastOutEventId: snapshot.lastOutEventId,
176
+ lastInEventId: snapshot.lastInEventId,
177
+ state: snapshot.state ?? null,
178
+ });
179
+ const ids = [];
180
+ const offsets = [];
181
+ const lines = [];
182
+ let cursor = utf8Length(header) + 1;
183
+ for (const entry of snapshot.messages) {
184
+ const line = JSON.stringify({ id: entry.id, final: entry.final, message: entry.message });
185
+ ids.push(entry.id);
186
+ offsets.push(cursor);
187
+ lines.push(line);
188
+ cursor += utf8Length(line) + 1;
189
+ }
190
+ offsets.push(cursor);
191
+ const footer = JSON.stringify({
192
+ ids,
193
+ offsets,
194
+ savedAt: snapshot.savedAt,
195
+ lastOutEventId: snapshot.lastOutEventId,
196
+ lastInEventId: snapshot.lastInEventId,
197
+ });
198
+ const trailer = `${TRAILER_PREFIX}${String(utf8Length(footer)).padStart(16, "0")}\n`;
199
+ return `${header}\n${lines.map((line) => `${line}\n`).join("")}${footer}\n${trailer}`;
200
+ }
201
+ /**
202
+ * Read the fixed trailer from the last {@link TRANSCRIPT_TRAILER_BYTES} bytes
203
+ * of a version 2 blob. Returns the footer line's byte length, or `undefined`
204
+ * when the bytes are not a trailer (a version 1 blob, or a truncated write).
205
+ */
206
+ function readTranscriptTrailer(trailer) {
207
+ if (!trailer.startsWith(TRAILER_PREFIX) || trailer.length !== exports.TRANSCRIPT_TRAILER_BYTES) {
208
+ return undefined;
209
+ }
210
+ const digits = trailer.slice(TRAILER_PREFIX.length, exports.TRANSCRIPT_TRAILER_BYTES - 1);
211
+ if (!/^\d{16}$/.test(digits))
212
+ return undefined;
213
+ const footerLength = Number(digits);
214
+ return Number.isSafeInteger(footerLength) && footerLength >= 0 ? { footerLength } : undefined;
215
+ }
216
+ /** Parse a version 2 footer line into its entry index. */
217
+ function parseTranscriptFooter(line) {
218
+ let parsed;
219
+ try {
220
+ parsed = JSON.parse(line);
221
+ }
222
+ catch {
223
+ return undefined;
224
+ }
225
+ if (!parsed || typeof parsed !== "object")
226
+ return undefined;
227
+ const { ids, offsets } = parsed;
228
+ if (!Array.isArray(ids) || !Array.isArray(offsets))
229
+ return undefined;
230
+ if (offsets.length !== ids.length + 1)
231
+ return undefined;
232
+ if (!ids.every((id) => typeof id === "string"))
233
+ return undefined;
234
+ if (!offsets.every((offset) => typeof offset === "number" && Number.isSafeInteger(offset))) {
235
+ return undefined;
236
+ }
237
+ // Offsets must strictly increase. Every entry is a non-empty JSON line plus a
238
+ // newline, so consecutive offsets always differ; equal or descending ones mean
239
+ // corrupt metadata. Accepting equality would hand the reader a zero-length
240
+ // window, which decodes to no entry at all and drops a message from the page
241
+ // while the cursor advances past it, instead of declining here so the caller
242
+ // takes the whole-object fallback.
243
+ const numeric = offsets;
244
+ if (numeric[0] < 0)
245
+ return undefined;
246
+ for (let i = 1; i < numeric.length; i++) {
247
+ if (numeric[i] <= numeric[i - 1])
248
+ return undefined;
249
+ }
250
+ const { savedAt, lastOutEventId, lastInEventId } = parsed;
251
+ return {
252
+ ids: ids,
253
+ offsets: offsets,
254
+ savedAt: typeof savedAt === "number" ? savedAt : undefined,
255
+ lastOutEventId: typeof lastOutEventId === "string" ? lastOutEventId : undefined,
256
+ lastInEventId: typeof lastInEventId === "string" ? lastInEventId : undefined,
257
+ };
258
+ }
259
+ function planTranscriptPage(footer, opts) {
260
+ let endIndex = footer.ids.length;
261
+ if (opts?.before !== undefined) {
262
+ const idx = footer.ids.indexOf(opts.before);
263
+ if (idx === -1)
264
+ return undefined;
265
+ endIndex = idx;
266
+ }
267
+ const limit = opts?.limit !== undefined && opts.limit > 0 ? opts.limit : undefined;
268
+ let startIndex = 0;
269
+ let nextCursor;
270
+ if (limit !== undefined && endIndex > limit) {
271
+ startIndex = endIndex - limit;
272
+ nextCursor = footer.ids[startIndex];
273
+ }
274
+ if (endIndex <= startIndex)
275
+ return undefined;
276
+ return {
277
+ start: footer.offsets[startIndex],
278
+ end: footer.offsets[endIndex],
279
+ ids: footer.ids.slice(startIndex, endIndex),
280
+ nextCursor,
281
+ startIndex,
282
+ totalEntries: footer.ids.length,
283
+ };
284
+ }
285
+ function parseEntryLine(line) {
286
+ let parsed;
287
+ try {
288
+ parsed = JSON.parse(line);
289
+ }
290
+ catch {
291
+ return undefined;
292
+ }
293
+ if (!parsed || typeof parsed !== "object")
294
+ return undefined;
295
+ const { id, final, message } = parsed;
296
+ if (typeof id !== "string" || id.length === 0)
297
+ return undefined;
298
+ if (typeof message !== "object" || message === null)
299
+ return undefined;
300
+ if (message.id !== id)
301
+ return undefined;
302
+ return { id, final: final === true, message: message };
303
+ }
304
+ /**
305
+ * Parse a run of whole entry lines, e.g. the byte window
306
+ * {@link planTranscriptPage} selected. Malformed lines are dropped, matching
307
+ * {@link parseTranscriptSnapshot}: a caller never sees an entry it would crash
308
+ * on or mis-order.
309
+ */
310
+ function parseTranscriptEntryLines(text) {
311
+ const entries = [];
312
+ for (const line of text.split("\n")) {
313
+ if (line.length === 0)
314
+ continue;
315
+ const entry = parseEntryLine(line);
316
+ if (entry)
317
+ entries.push(entry);
318
+ }
319
+ return entries;
320
+ }
321
+ /**
322
+ * Parse a whole fetched blob of any known format. Version 2 is the line-based
323
+ * format {@link serializeTranscriptSnapshot} writes; anything else is handed to
324
+ * {@link parseTranscriptSnapshot}, which still reads the version 1 blobs
325
+ * written by released SDKs.
326
+ */
327
+ function parseTranscriptBlob(text) {
328
+ if (!text.startsWith(V2_LINE_PREFIX)) {
329
+ let parsed;
330
+ try {
331
+ parsed = JSON.parse(text);
332
+ }
333
+ catch {
334
+ return undefined;
335
+ }
336
+ return parseTranscriptSnapshot(parsed);
337
+ }
338
+ const newline = text.indexOf("\n");
339
+ if (newline === -1)
340
+ return undefined;
341
+ let header;
342
+ try {
343
+ header = JSON.parse(text.slice(0, newline));
344
+ }
345
+ catch {
346
+ return undefined;
347
+ }
348
+ const { savedAt, lastOutEventId, lastInEventId, state } = (header ?? {});
349
+ const trailerStart = text.length - exports.TRANSCRIPT_TRAILER_BYTES;
350
+ const trailer = trailerStart >= 0 ? readTranscriptTrailer(text.slice(trailerStart)) : undefined;
351
+ let body = text.slice(newline + 1);
352
+ if (trailer) {
353
+ // Drop the footer line and the trailer; the entries are everything between
354
+ // the header and them.
355
+ const footerLine = text.lastIndexOf("\n", trailerStart - 2);
356
+ if (footerLine > newline)
357
+ body = text.slice(newline + 1, footerLine + 1);
358
+ }
359
+ return {
360
+ version: 2,
361
+ savedAt: typeof savedAt === "number" ? savedAt : 0,
362
+ messages: parseTranscriptEntryLines(body),
363
+ state: state ?? null,
364
+ lastOutEventId: typeof lastOutEventId === "string" ? lastOutEventId : undefined,
365
+ lastInEventId: typeof lastInEventId === "string" ? lastInEventId : undefined,
366
+ };
367
+ }
44
368
  //# sourceMappingURL=chatSnapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chatSnapshot.js","sourceRoot":"","sources":["../../../../src/v3/sessionStreams/chatSnapshot.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;AAEH,6BAAwB;AAmBxB;;;;;GAKG;AACU,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,OAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;IAC9B,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH;;;GAGG;AACH,+BAAsC,SAAiB;IACrD,OAAO,YAAY,SAAS,gBAAgB,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"chatSnapshot.js","sourceRoot":"","sources":["../../../../src/v3/sessionStreams/chatSnapshot.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,14 @@ export type RouterDropReason =
57
57
  */
58
58
  | "replayed"
59
59
  /** An `at-arrival` record with no handler attached right now. */
60
- | "no-handler";
60
+ | "no-handler"
61
+ /**
62
+ * A record the boot took responsibility for over HTTP (see
63
+ * {@link SessionChannelRouter.markRecovered}). It is dropped however late the
64
+ * live tail re-delivers it, so a recovered message is never also answered as
65
+ * a router turn.
66
+ */
67
+ | "recovered";
61
68
  export type RouterDecision =
62
69
  /** Handed to a consumer that was already waiting, or to a live handler. */
63
70
  {
@@ -127,6 +134,37 @@ export declare class SessionChannelRouter {
127
134
  restore(checkpoint: RouterCheckpoint): void;
128
135
  /** Where a boot should subscribe from: just past this sequence. */
129
136
  resumeFrom(): number | undefined;
137
+ /**
138
+ * Declare the sequences a continuation boot already read over HTTP and took
139
+ * responsibility for dispatching itself, so the live tail's re-read of the
140
+ * same records does not answer them a second time.
141
+ *
142
+ * Two effects, deliberately separate:
143
+ *
144
+ * - Every claimed sequence is dropped in {@link ingest} however late it
145
+ * arrives (`"recovered"`), so a record the boot owns never also becomes a
146
+ * router turn. This survives the boot settling it — the boot owns its
147
+ * disposition for the whole run, and the tail may re-deliver at any time.
148
+ * - Each claimed sequence is also *owed*: it holds the resume floor exactly
149
+ * like a queued record would, until the boot {@link settleRecovered}s it.
150
+ * Suppressing the second delivery without this would let a turn boundary
151
+ * publish a floor past a message the boot has not answered yet, turning a
152
+ * duplicate into a dropped message.
153
+ *
154
+ * `#highestSeq` is advanced over the contiguous run of claimed sequences from
155
+ * the current high water, so once every claim is settled the floor can move
156
+ * past them even if the tail never re-delivers (a silent tail then degrades
157
+ * to a duplicate, never a loss). The advance stops at the first gap so a
158
+ * record the boot left for the router is never skipped.
159
+ */
160
+ markRecovered(seqNums: Iterable<number>): void;
161
+ /**
162
+ * Release a claimed sequence's hold on the resume floor once the boot has
163
+ * decided its disposition (dispatched it as a turn, folded it into the seed
164
+ * chain, or deliberately dropped it). It stays claimed, so a late tail
165
+ * re-delivery is still dropped rather than answered again.
166
+ */
167
+ settleRecovered(seqNum: number): void;
130
168
  /**
131
169
  * Classify one record and act on it. The record's destination is decided
132
170
  * here, once, and never by whichever consumer happens to be waiting.