reactor-effect-client 0.7.0 → 0.8.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 (514) hide show
  1. package/NOTICE +7 -2
  2. package/README.md +103 -141
  3. package/dist/Coordinator.d.ts +382 -0
  4. package/dist/Coordinator.d.ts.map +1 -0
  5. package/dist/Coordinator.js +732 -0
  6. package/dist/Coordinator.js.map +1 -0
  7. package/dist/H3.d.ts +159 -0
  8. package/dist/H3.d.ts.map +1 -0
  9. package/dist/H3.js +21 -0
  10. package/dist/H3.js.map +1 -0
  11. package/dist/H3Source.d.ts +93 -0
  12. package/dist/H3Source.d.ts.map +1 -0
  13. package/dist/H3Source.js +401 -0
  14. package/dist/H3Source.js.map +1 -0
  15. package/dist/LocalSource.d.ts +68 -0
  16. package/dist/LocalSource.d.ts.map +1 -0
  17. package/dist/LocalSource.js +354 -0
  18. package/dist/LocalSource.js.map +1 -0
  19. package/dist/Media.d.ts +106 -0
  20. package/dist/Media.d.ts.map +1 -0
  21. package/dist/Media.js +16 -0
  22. package/dist/Media.js.map +1 -0
  23. package/dist/Peer.d.ts +134 -0
  24. package/dist/Peer.d.ts.map +1 -0
  25. package/dist/Peer.js +57 -0
  26. package/dist/Peer.js.map +1 -0
  27. package/dist/Playout.d.ts +724 -0
  28. package/dist/Playout.d.ts.map +1 -0
  29. package/dist/Playout.js +28 -0
  30. package/dist/Playout.js.map +1 -0
  31. package/dist/Reactor.d.ts +135 -0
  32. package/dist/Reactor.d.ts.map +1 -0
  33. package/dist/Reactor.js +158 -0
  34. package/dist/Reactor.js.map +1 -0
  35. package/dist/ReactorError.d.ts +331 -0
  36. package/dist/ReactorError.d.ts.map +1 -0
  37. package/dist/ReactorError.js +316 -0
  38. package/dist/ReactorError.js.map +1 -0
  39. package/dist/ReactorTest.d.ts +383 -0
  40. package/dist/ReactorTest.d.ts.map +1 -0
  41. package/dist/ReactorTest.js +317 -0
  42. package/dist/ReactorTest.js.map +1 -0
  43. package/dist/Session.d.ts +314 -0
  44. package/dist/Session.d.ts.map +1 -0
  45. package/dist/Session.js +51 -0
  46. package/dist/Session.js.map +1 -0
  47. package/dist/index.d.ts +12 -22
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +12 -11
  50. package/dist/index.js.map +1 -1
  51. package/dist/internal/correlator.d.ts +46 -0
  52. package/dist/internal/correlator.d.ts.map +1 -0
  53. package/dist/internal/correlator.js +150 -0
  54. package/dist/internal/correlator.js.map +1 -0
  55. package/dist/internal/deadline.d.ts +24 -0
  56. package/dist/internal/deadline.d.ts.map +1 -0
  57. package/dist/internal/deadline.js +44 -0
  58. package/dist/internal/deadline.js.map +1 -0
  59. package/dist/{h3/_internal/contracts.d.ts → internal/h3/commands.d.ts} +39 -33
  60. package/dist/internal/h3/commands.d.ts.map +1 -0
  61. package/dist/internal/h3/commands.js +128 -0
  62. package/dist/internal/h3/commands.js.map +1 -0
  63. package/dist/{h3 → internal/h3}/messages.d.ts +16 -11
  64. package/dist/internal/h3/messages.d.ts.map +1 -0
  65. package/dist/{h3 → internal/h3}/messages.js +19 -31
  66. package/dist/internal/h3/messages.js.map +1 -0
  67. package/dist/internal/h3/operations.d.ts +145 -0
  68. package/dist/internal/h3/operations.d.ts.map +1 -0
  69. package/dist/internal/h3/operations.js +284 -0
  70. package/dist/internal/h3/operations.js.map +1 -0
  71. package/dist/{h3 → internal/h3}/profile.d.ts +63 -65
  72. package/dist/internal/h3/profile.d.ts.map +1 -0
  73. package/dist/{h3 → internal/h3}/profile.js +39 -39
  74. package/dist/internal/h3/profile.js.map +1 -0
  75. package/dist/internal/h3/provider.d.ts +14 -0
  76. package/dist/internal/h3/provider.d.ts.map +1 -0
  77. package/dist/internal/h3/provider.js +672 -0
  78. package/dist/internal/h3/provider.js.map +1 -0
  79. package/dist/internal/h3/references.d.ts +68 -0
  80. package/dist/internal/h3/references.d.ts.map +1 -0
  81. package/dist/internal/h3/references.js +339 -0
  82. package/dist/internal/h3/references.js.map +1 -0
  83. package/dist/internal/h3/request.d.ts +56 -0
  84. package/dist/internal/h3/request.d.ts.map +1 -0
  85. package/dist/internal/h3/request.js +70 -0
  86. package/dist/internal/h3/request.js.map +1 -0
  87. package/dist/internal/h3/state.d.ts +120 -0
  88. package/dist/internal/h3/state.d.ts.map +1 -0
  89. package/dist/internal/h3/state.js +270 -0
  90. package/dist/internal/h3/state.js.map +1 -0
  91. package/dist/{Submission.d.ts → internal/h3/submission.d.ts} +1 -3
  92. package/dist/internal/h3/submission.d.ts.map +1 -0
  93. package/dist/{Submission.js → internal/h3/submission.js} +1 -9
  94. package/dist/internal/h3/submission.js.map +1 -0
  95. package/dist/internal/hub.d.ts +32 -0
  96. package/dist/internal/hub.d.ts.map +1 -0
  97. package/dist/internal/hub.js +92 -0
  98. package/dist/internal/hub.js.map +1 -0
  99. package/dist/internal/playout/errors.d.ts +51 -0
  100. package/dist/internal/playout/errors.d.ts.map +1 -0
  101. package/dist/internal/playout/errors.js +40 -0
  102. package/dist/internal/playout/errors.js.map +1 -0
  103. package/dist/internal/playout/policy.d.ts +559 -0
  104. package/dist/internal/playout/policy.d.ts.map +1 -0
  105. package/dist/internal/playout/policy.js +2338 -0
  106. package/dist/internal/playout/policy.js.map +1 -0
  107. package/dist/internal/playout/runtime.d.ts +28 -0
  108. package/dist/internal/playout/runtime.d.ts.map +1 -0
  109. package/dist/internal/playout/runtime.js +766 -0
  110. package/dist/internal/playout/runtime.js.map +1 -0
  111. package/dist/internal/playout/tag.d.ts +14 -0
  112. package/dist/internal/playout/tag.d.ts.map +1 -0
  113. package/dist/internal/playout/tag.js +43 -0
  114. package/dist/internal/playout/tag.js.map +1 -0
  115. package/dist/internal/proto/reactor_wire/v1/common_pb.d.ts +55 -0
  116. package/dist/internal/proto/reactor_wire/v1/common_pb.d.ts.map +1 -0
  117. package/dist/internal/proto/reactor_wire/v1/common_pb.js +42 -0
  118. package/dist/internal/proto/reactor_wire/v1/common_pb.js.map +1 -0
  119. package/dist/internal/proto/reactor_wire/v1/control_pb.d.ts +160 -0
  120. package/dist/internal/proto/reactor_wire/v1/control_pb.d.ts.map +1 -0
  121. package/dist/internal/proto/reactor_wire/v1/control_pb.js +21 -0
  122. package/dist/internal/proto/reactor_wire/v1/control_pb.js.map +1 -0
  123. package/dist/internal/proto/reactor_wire/v1/data_pb.d.ts +89 -0
  124. package/dist/internal/proto/reactor_wire/v1/data_pb.d.ts.map +1 -0
  125. package/dist/internal/proto/reactor_wire/v1/data_pb.js +20 -0
  126. package/dist/internal/proto/reactor_wire/v1/data_pb.js.map +1 -0
  127. package/dist/internal/proto/reactor_wire/v1/model_pb.d.ts +85 -0
  128. package/dist/internal/proto/reactor_wire/v1/model_pb.d.ts.map +1 -0
  129. package/dist/internal/proto/reactor_wire/v1/model_pb.js +24 -0
  130. package/dist/internal/proto/reactor_wire/v1/model_pb.js.map +1 -0
  131. package/dist/internal/proto/reactor_wire/v1/platform_pb.d.ts +190 -0
  132. package/dist/internal/proto/reactor_wire/v1/platform_pb.d.ts.map +1 -0
  133. package/dist/internal/proto/reactor_wire/v1/platform_pb.js +54 -0
  134. package/dist/internal/proto/reactor_wire/v1/platform_pb.js.map +1 -0
  135. package/dist/internal/proto/reactor_wire/v1/track_pb.d.ts +88 -0
  136. package/dist/internal/proto/reactor_wire/v1/track_pb.d.ts.map +1 -0
  137. package/dist/internal/proto/reactor_wire/v1/track_pb.js +33 -0
  138. package/dist/internal/proto/reactor_wire/v1/track_pb.js.map +1 -0
  139. package/dist/internal/queue.d.ts +4 -0
  140. package/dist/internal/queue.d.ts.map +1 -0
  141. package/dist/{_internal → internal}/queue.js +0 -9
  142. package/dist/internal/queue.js.map +1 -0
  143. package/dist/internal/reactorTest/coordinator.d.ts +5 -0
  144. package/dist/internal/reactorTest/coordinator.d.ts.map +1 -0
  145. package/dist/internal/reactorTest/coordinator.js +178 -0
  146. package/dist/internal/reactorTest/coordinator.js.map +1 -0
  147. package/dist/internal/reactorTest/faults.d.ts +172 -0
  148. package/dist/internal/reactorTest/faults.d.ts.map +1 -0
  149. package/dist/internal/reactorTest/faults.js +23 -0
  150. package/dist/internal/reactorTest/faults.js.map +1 -0
  151. package/dist/internal/reactorTest/h3.d.ts +431 -0
  152. package/dist/internal/reactorTest/h3.d.ts.map +1 -0
  153. package/dist/internal/reactorTest/h3.js +625 -0
  154. package/dist/internal/reactorTest/h3.js.map +1 -0
  155. package/dist/internal/reactorTest/media.d.ts +22 -0
  156. package/dist/internal/reactorTest/media.d.ts.map +1 -0
  157. package/dist/internal/reactorTest/media.js +34 -0
  158. package/dist/internal/reactorTest/media.js.map +1 -0
  159. package/dist/internal/reactorTest/peer.d.ts +318 -0
  160. package/dist/internal/reactorTest/peer.d.ts.map +1 -0
  161. package/dist/internal/reactorTest/peer.js +206 -0
  162. package/dist/internal/reactorTest/peer.js.map +1 -0
  163. package/dist/internal/reactorTest/playout.d.ts +34 -0
  164. package/dist/internal/reactorTest/playout.d.ts.map +1 -0
  165. package/dist/internal/reactorTest/playout.js +340 -0
  166. package/dist/internal/reactorTest/playout.js.map +1 -0
  167. package/dist/internal/reactorTest/references.d.ts +25 -0
  168. package/dist/internal/reactorTest/references.d.ts.map +1 -0
  169. package/dist/{testing/Png.js → internal/reactorTest/references.js} +50 -12
  170. package/dist/internal/reactorTest/references.js.map +1 -0
  171. package/dist/internal/reactorTest/sessions.d.ts +364 -0
  172. package/dist/internal/reactorTest/sessions.d.ts.map +1 -0
  173. package/dist/internal/reactorTest/sessions.js +592 -0
  174. package/dist/internal/reactorTest/sessions.js.map +1 -0
  175. package/dist/internal/reactorTest/timing.d.ts +13 -0
  176. package/dist/internal/reactorTest/timing.d.ts.map +1 -0
  177. package/dist/internal/reactorTest/timing.js +20 -0
  178. package/dist/internal/reactorTest/timing.js.map +1 -0
  179. package/dist/internal/recording.d.ts +52 -0
  180. package/dist/internal/recording.d.ts.map +1 -0
  181. package/dist/internal/recording.js +141 -0
  182. package/dist/internal/recording.js.map +1 -0
  183. package/dist/internal/session/connect.d.ts +34 -0
  184. package/dist/internal/session/connect.d.ts.map +1 -0
  185. package/dist/internal/session/connect.js +502 -0
  186. package/dist/internal/session/connect.js.map +1 -0
  187. package/dist/internal/session/generation.d.ts +35 -0
  188. package/dist/internal/session/generation.d.ts.map +1 -0
  189. package/dist/internal/session/generation.js +185 -0
  190. package/dist/internal/session/generation.js.map +1 -0
  191. package/dist/internal/session/ice.d.ts +23 -0
  192. package/dist/internal/session/ice.d.ts.map +1 -0
  193. package/dist/internal/session/ice.js +57 -0
  194. package/dist/internal/session/ice.js.map +1 -0
  195. package/dist/internal/session/inbound.d.ts +50 -0
  196. package/dist/internal/session/inbound.d.ts.map +1 -0
  197. package/dist/internal/session/inbound.js +202 -0
  198. package/dist/internal/session/inbound.js.map +1 -0
  199. package/dist/internal/session/model.d.ts +163 -0
  200. package/dist/internal/session/model.d.ts.map +1 -0
  201. package/dist/internal/session/model.js +78 -0
  202. package/dist/internal/session/model.js.map +1 -0
  203. package/dist/internal/session/requests.d.ts +71 -0
  204. package/dist/internal/session/requests.d.ts.map +1 -0
  205. package/dist/internal/session/requests.js +240 -0
  206. package/dist/internal/session/requests.js.map +1 -0
  207. package/dist/internal/session/tracks.d.ts +21 -0
  208. package/dist/internal/session/tracks.d.ts.map +1 -0
  209. package/dist/internal/session/tracks.js +166 -0
  210. package/dist/internal/session/tracks.js.map +1 -0
  211. package/dist/internal/session/upload.d.ts +21 -0
  212. package/dist/internal/session/upload.d.ts.map +1 -0
  213. package/dist/internal/session/upload.js +68 -0
  214. package/dist/internal/session/upload.js.map +1 -0
  215. package/dist/internal/session.d.ts +66 -0
  216. package/dist/internal/session.d.ts.map +1 -0
  217. package/dist/internal/session.js +280 -0
  218. package/dist/internal/session.js.map +1 -0
  219. package/dist/{stats.d.ts → internal/stats.d.ts} +30 -16
  220. package/dist/internal/stats.d.ts.map +1 -0
  221. package/dist/internal/stats.js +201 -0
  222. package/dist/internal/stats.js.map +1 -0
  223. package/dist/internal/token.d.ts +22 -0
  224. package/dist/internal/token.d.ts.map +1 -0
  225. package/dist/internal/token.js +65 -0
  226. package/dist/internal/token.js.map +1 -0
  227. package/dist/internal/wire.d.ts +37 -0
  228. package/dist/internal/wire.d.ts.map +1 -0
  229. package/dist/internal/wire.js +49 -0
  230. package/dist/internal/wire.js.map +1 -0
  231. package/notices/bufbuild-protobuf-LICENSE +201 -0
  232. package/package.json +17 -38
  233. package/dist/FetchHttp.d.ts +0 -9
  234. package/dist/FetchHttp.d.ts.map +0 -1
  235. package/dist/FetchHttp.js +0 -63
  236. package/dist/FetchHttp.js.map +0 -1
  237. package/dist/PeerFactory.d.ts +0 -26
  238. package/dist/PeerFactory.d.ts.map +0 -1
  239. package/dist/PeerFactory.js +0 -4
  240. package/dist/PeerFactory.js.map +0 -1
  241. package/dist/PeerTypes.d.ts +0 -64
  242. package/dist/PeerTypes.d.ts.map +0 -1
  243. package/dist/PeerTypes.js +0 -2
  244. package/dist/PeerTypes.js.map +0 -1
  245. package/dist/Sequence.d.ts +0 -85
  246. package/dist/Sequence.d.ts.map +0 -1
  247. package/dist/Sequence.js +0 -210
  248. package/dist/Sequence.js.map +0 -1
  249. package/dist/SessionTypes.d.ts +0 -312
  250. package/dist/SessionTypes.d.ts.map +0 -1
  251. package/dist/SessionTypes.js +0 -19
  252. package/dist/SessionTypes.js.map +0 -1
  253. package/dist/Submission.d.ts.map +0 -1
  254. package/dist/Submission.js.map +0 -1
  255. package/dist/_internal/queue.d.ts +0 -6
  256. package/dist/_internal/queue.d.ts.map +0 -1
  257. package/dist/_internal/queue.js.map +0 -1
  258. package/dist/bytes.d.ts +0 -6
  259. package/dist/bytes.d.ts.map +0 -1
  260. package/dist/bytes.js +0 -32
  261. package/dist/bytes.js.map +0 -1
  262. package/dist/contract.d.ts +0 -149
  263. package/dist/contract.d.ts.map +0 -1
  264. package/dist/contract.js +0 -119
  265. package/dist/contract.js.map +0 -1
  266. package/dist/coordinator/_internal/client.d.ts +0 -215
  267. package/dist/coordinator/_internal/client.d.ts.map +0 -1
  268. package/dist/coordinator/_internal/client.js +0 -563
  269. package/dist/coordinator/_internal/client.js.map +0 -1
  270. package/dist/coordinator/_internal/recording.d.ts +0 -31
  271. package/dist/coordinator/_internal/recording.d.ts.map +0 -1
  272. package/dist/coordinator/_internal/recording.js +0 -123
  273. package/dist/coordinator/_internal/recording.js.map +0 -1
  274. package/dist/coordinator/_internal/response.d.ts +0 -15
  275. package/dist/coordinator/_internal/response.d.ts.map +0 -1
  276. package/dist/coordinator/_internal/response.js +0 -55
  277. package/dist/coordinator/_internal/response.js.map +0 -1
  278. package/dist/coordinator/_internal/schemas.d.ts +0 -73
  279. package/dist/coordinator/_internal/schemas.d.ts.map +0 -1
  280. package/dist/coordinator/_internal/schemas.js +0 -200
  281. package/dist/coordinator/_internal/schemas.js.map +0 -1
  282. package/dist/coordinator/index.d.ts +0 -40
  283. package/dist/coordinator/index.d.ts.map +0 -1
  284. package/dist/coordinator/index.js +0 -21
  285. package/dist/coordinator/index.js.map +0 -1
  286. package/dist/correlation.d.ts +0 -47
  287. package/dist/correlation.d.ts.map +0 -1
  288. package/dist/correlation.js +0 -131
  289. package/dist/correlation.js.map +0 -1
  290. package/dist/duration.d.ts +0 -27
  291. package/dist/duration.d.ts.map +0 -1
  292. package/dist/duration.js +0 -47
  293. package/dist/duration.js.map +0 -1
  294. package/dist/errors.d.ts +0 -1303
  295. package/dist/errors.d.ts.map +0 -1
  296. package/dist/errors.js +0 -745
  297. package/dist/errors.js.map +0 -1
  298. package/dist/h3/_internal/client.d.ts +0 -9
  299. package/dist/h3/_internal/client.d.ts.map +0 -1
  300. package/dist/h3/_internal/client.js +0 -652
  301. package/dist/h3/_internal/client.js.map +0 -1
  302. package/dist/h3/_internal/contracts.d.ts.map +0 -1
  303. package/dist/h3/_internal/contracts.js +0 -123
  304. package/dist/h3/_internal/contracts.js.map +0 -1
  305. package/dist/h3/_internal/deployment.d.ts +0 -8
  306. package/dist/h3/_internal/deployment.d.ts.map +0 -1
  307. package/dist/h3/_internal/deployment.js +0 -149
  308. package/dist/h3/_internal/deployment.js.map +0 -1
  309. package/dist/h3/_internal/evidence.d.ts +0 -17
  310. package/dist/h3/_internal/evidence.d.ts.map +0 -1
  311. package/dist/h3/_internal/evidence.js +0 -48
  312. package/dist/h3/_internal/evidence.js.map +0 -1
  313. package/dist/h3/_internal/operations.d.ts +0 -58
  314. package/dist/h3/_internal/operations.d.ts.map +0 -1
  315. package/dist/h3/_internal/operations.js +0 -268
  316. package/dist/h3/_internal/operations.js.map +0 -1
  317. package/dist/h3/_internal/references.d.ts +0 -24
  318. package/dist/h3/_internal/references.d.ts.map +0 -1
  319. package/dist/h3/_internal/references.js +0 -309
  320. package/dist/h3/_internal/references.js.map +0 -1
  321. package/dist/h3/_internal/request.d.ts +0 -21
  322. package/dist/h3/_internal/request.d.ts.map +0 -1
  323. package/dist/h3/_internal/request.js +0 -97
  324. package/dist/h3/_internal/request.js.map +0 -1
  325. package/dist/h3/_internal/retained.d.ts +0 -22
  326. package/dist/h3/_internal/retained.d.ts.map +0 -1
  327. package/dist/h3/_internal/retained.js +0 -89
  328. package/dist/h3/_internal/retained.js.map +0 -1
  329. package/dist/h3/_internal/state.d.ts +0 -44
  330. package/dist/h3/_internal/state.d.ts.map +0 -1
  331. package/dist/h3/_internal/state.js +0 -283
  332. package/dist/h3/_internal/state.js.map +0 -1
  333. package/dist/h3/index.d.ts +0 -10
  334. package/dist/h3/index.d.ts.map +0 -1
  335. package/dist/h3/index.js +0 -7
  336. package/dist/h3/index.js.map +0 -1
  337. package/dist/h3/messages.d.ts.map +0 -1
  338. package/dist/h3/messages.js.map +0 -1
  339. package/dist/h3/profile.d.ts.map +0 -1
  340. package/dist/h3/profile.js.map +0 -1
  341. package/dist/h3/types.d.ts +0 -291
  342. package/dist/h3/types.d.ts.map +0 -1
  343. package/dist/h3/types.js +0 -2
  344. package/dist/h3/types.js.map +0 -1
  345. package/dist/host.d.ts +0 -26
  346. package/dist/host.d.ts.map +0 -1
  347. package/dist/host.js +0 -20
  348. package/dist/host.js.map +0 -1
  349. package/dist/json.d.ts +0 -25
  350. package/dist/json.d.ts.map +0 -1
  351. package/dist/json.js +0 -143
  352. package/dist/json.js.map +0 -1
  353. package/dist/media-stream.d.ts +0 -10
  354. package/dist/media-stream.d.ts.map +0 -1
  355. package/dist/media-stream.js +0 -18
  356. package/dist/media-stream.js.map +0 -1
  357. package/dist/observation.d.ts +0 -38
  358. package/dist/observation.d.ts.map +0 -1
  359. package/dist/observation.js +0 -113
  360. package/dist/observation.js.map +0 -1
  361. package/dist/orchestration/elapsed.d.ts +0 -9
  362. package/dist/orchestration/elapsed.d.ts.map +0 -1
  363. package/dist/orchestration/elapsed.js +0 -8
  364. package/dist/orchestration/elapsed.js.map +0 -1
  365. package/dist/orchestration/h3-source.d.ts +0 -58
  366. package/dist/orchestration/h3-source.d.ts.map +0 -1
  367. package/dist/orchestration/h3-source.js +0 -362
  368. package/dist/orchestration/h3-source.js.map +0 -1
  369. package/dist/orchestration/index.d.ts +0 -17
  370. package/dist/orchestration/index.d.ts.map +0 -1
  371. package/dist/orchestration/index.js +0 -12
  372. package/dist/orchestration/index.js.map +0 -1
  373. package/dist/orchestration/media-buffer.d.ts +0 -32
  374. package/dist/orchestration/media-buffer.d.ts.map +0 -1
  375. package/dist/orchestration/media-buffer.js +0 -94
  376. package/dist/orchestration/media-buffer.js.map +0 -1
  377. package/dist/orchestration/open-h3.d.ts +0 -101
  378. package/dist/orchestration/open-h3.d.ts.map +0 -1
  379. package/dist/orchestration/open-h3.js +0 -127
  380. package/dist/orchestration/open-h3.js.map +0 -1
  381. package/dist/orchestration/queries.d.ts +0 -10
  382. package/dist/orchestration/queries.d.ts.map +0 -1
  383. package/dist/orchestration/queries.js +0 -43
  384. package/dist/orchestration/queries.js.map +0 -1
  385. package/dist/orchestration/references.d.ts +0 -18
  386. package/dist/orchestration/references.d.ts.map +0 -1
  387. package/dist/orchestration/references.js +0 -79
  388. package/dist/orchestration/references.js.map +0 -1
  389. package/dist/orchestration/renewal-state.d.ts +0 -84
  390. package/dist/orchestration/renewal-state.d.ts.map +0 -1
  391. package/dist/orchestration/renewal-state.js +0 -95
  392. package/dist/orchestration/renewal-state.js.map +0 -1
  393. package/dist/orchestration/renewal.d.ts +0 -103
  394. package/dist/orchestration/renewal.d.ts.map +0 -1
  395. package/dist/orchestration/renewal.js +0 -1088
  396. package/dist/orchestration/renewal.js.map +0 -1
  397. package/dist/orchestration/request.d.ts +0 -65
  398. package/dist/orchestration/request.d.ts.map +0 -1
  399. package/dist/orchestration/request.js +0 -134
  400. package/dist/orchestration/request.js.map +0 -1
  401. package/dist/orchestration/retention.d.ts +0 -100
  402. package/dist/orchestration/retention.d.ts.map +0 -1
  403. package/dist/orchestration/retention.js +0 -134
  404. package/dist/orchestration/retention.js.map +0 -1
  405. package/dist/orchestration/routing.d.ts +0 -21
  406. package/dist/orchestration/routing.d.ts.map +0 -1
  407. package/dist/orchestration/routing.js +0 -93
  408. package/dist/orchestration/routing.js.map +0 -1
  409. package/dist/orchestration/scheduler-key.d.ts +0 -14
  410. package/dist/orchestration/scheduler-key.d.ts.map +0 -1
  411. package/dist/orchestration/scheduler-key.js +0 -62
  412. package/dist/orchestration/scheduler-key.js.map +0 -1
  413. package/dist/orchestration/scheduler-policy.d.ts +0 -222
  414. package/dist/orchestration/scheduler-policy.d.ts.map +0 -1
  415. package/dist/orchestration/scheduler-policy.js +0 -582
  416. package/dist/orchestration/scheduler-policy.js.map +0 -1
  417. package/dist/orchestration/scheduler.d.ts +0 -383
  418. package/dist/orchestration/scheduler.d.ts.map +0 -1
  419. package/dist/orchestration/scheduler.js +0 -2597
  420. package/dist/orchestration/scheduler.js.map +0 -1
  421. package/dist/orchestration/source-slot.d.ts +0 -124
  422. package/dist/orchestration/source-slot.d.ts.map +0 -1
  423. package/dist/orchestration/source-slot.js +0 -348
  424. package/dist/orchestration/source-slot.js.map +0 -1
  425. package/dist/orchestration/types.d.ts +0 -1462
  426. package/dist/orchestration/types.d.ts.map +0 -1
  427. package/dist/orchestration/types.js +0 -135
  428. package/dist/orchestration/types.js.map +0 -1
  429. package/dist/protobuf.d.ts +0 -63
  430. package/dist/protobuf.d.ts.map +0 -1
  431. package/dist/protobuf.js +0 -252
  432. package/dist/protobuf.js.map +0 -1
  433. package/dist/session/_internal/acquire.d.ts +0 -21
  434. package/dist/session/_internal/acquire.d.ts.map +0 -1
  435. package/dist/session/_internal/acquire.js +0 -168
  436. package/dist/session/_internal/acquire.js.map +0 -1
  437. package/dist/session/_internal/cleanup.d.ts +0 -19
  438. package/dist/session/_internal/cleanup.d.ts.map +0 -1
  439. package/dist/session/_internal/cleanup.js +0 -102
  440. package/dist/session/_internal/cleanup.js.map +0 -1
  441. package/dist/session/_internal/lifecycle.d.ts +0 -67
  442. package/dist/session/_internal/lifecycle.d.ts.map +0 -1
  443. package/dist/session/_internal/lifecycle.js +0 -142
  444. package/dist/session/_internal/lifecycle.js.map +0 -1
  445. package/dist/session/_internal/remote.d.ts +0 -28
  446. package/dist/session/_internal/remote.d.ts.map +0 -1
  447. package/dist/session/_internal/remote.js +0 -71
  448. package/dist/session/_internal/remote.js.map +0 -1
  449. package/dist/session/_internal/uploads.d.ts +0 -7
  450. package/dist/session/_internal/uploads.d.ts.map +0 -1
  451. package/dist/session/_internal/uploads.js +0 -31
  452. package/dist/session/_internal/uploads.js.map +0 -1
  453. package/dist/session/commands.d.ts +0 -2
  454. package/dist/session/commands.d.ts.map +0 -1
  455. package/dist/session/commands.js +0 -2
  456. package/dist/session/commands.js.map +0 -1
  457. package/dist/session/files.d.ts +0 -21
  458. package/dist/session/files.d.ts.map +0 -1
  459. package/dist/session/files.js +0 -49
  460. package/dist/session/files.js.map +0 -1
  461. package/dist/session/index.d.ts +0 -84
  462. package/dist/session/index.d.ts.map +0 -1
  463. package/dist/session/index.js +0 -16
  464. package/dist/session/index.js.map +0 -1
  465. package/dist/session/media.d.ts +0 -114
  466. package/dist/session/media.d.ts.map +0 -1
  467. package/dist/session/media.js +0 -2
  468. package/dist/session/media.js.map +0 -1
  469. package/dist/session/recorder.d.ts +0 -24
  470. package/dist/session/recorder.d.ts.map +0 -1
  471. package/dist/session/recorder.js +0 -19
  472. package/dist/session/recorder.js.map +0 -1
  473. package/dist/session.d.ts +0 -105
  474. package/dist/session.d.ts.map +0 -1
  475. package/dist/session.js +0 -976
  476. package/dist/session.js.map +0 -1
  477. package/dist/simulation/_internal/source.d.ts +0 -12
  478. package/dist/simulation/_internal/source.d.ts.map +0 -1
  479. package/dist/simulation/_internal/source.js +0 -513
  480. package/dist/simulation/_internal/source.js.map +0 -1
  481. package/dist/simulation/index.d.ts +0 -13
  482. package/dist/simulation/index.d.ts.map +0 -1
  483. package/dist/simulation/index.js +0 -12
  484. package/dist/simulation/index.js.map +0 -1
  485. package/dist/simulation/types.d.ts +0 -39
  486. package/dist/simulation/types.d.ts.map +0 -1
  487. package/dist/simulation/types.js +0 -2
  488. package/dist/simulation/types.js.map +0 -1
  489. package/dist/stats.d.ts.map +0 -1
  490. package/dist/stats.js +0 -205
  491. package/dist/stats.js.map +0 -1
  492. package/dist/testing/Faults.d.ts +0 -4
  493. package/dist/testing/Faults.d.ts.map +0 -1
  494. package/dist/testing/Faults.js +0 -7
  495. package/dist/testing/Faults.js.map +0 -1
  496. package/dist/testing/Png.d.ts +0 -3
  497. package/dist/testing/Png.d.ts.map +0 -1
  498. package/dist/testing/Png.js.map +0 -1
  499. package/dist/testing/Wav.d.ts +0 -14
  500. package/dist/testing/Wav.d.ts.map +0 -1
  501. package/dist/testing/Wav.js +0 -37
  502. package/dist/testing/Wav.js.map +0 -1
  503. package/dist/testing/index.d.ts +0 -5
  504. package/dist/testing/index.d.ts.map +0 -1
  505. package/dist/testing/index.js +0 -4
  506. package/dist/testing/index.js.map +0 -1
  507. package/dist/wire.d.ts +0 -7
  508. package/dist/wire.d.ts.map +0 -1
  509. package/dist/wire.generated.d.ts +0 -305
  510. package/dist/wire.generated.d.ts.map +0 -1
  511. package/dist/wire.generated.js +0 -1257
  512. package/dist/wire.generated.js.map +0 -1
  513. package/dist/wire.js +0 -5
  514. package/dist/wire.js.map +0 -1
@@ -1,582 +0,0 @@
1
- import * as Option from "effect/Option";
2
- /**
3
- * The indexes of a playing clip's cues that fall due by `untilMs` and have not fired, in
4
- * the order they fall: an offset from its start, or back from the end of its length.
5
- */
6
- export const dueCues = (cues, fired, startedAtMs, durationSeconds, untilMs) => cues
7
- .map((cue, index) => ({
8
- index,
9
- atMs: cue.from === "start"
10
- ? startedAtMs + cue.offsetMs
11
- : startedAtMs + durationSeconds * 1000 - cue.offsetMs,
12
- }))
13
- .filter(({ index, atMs }) => !fired.has(index) && atMs <= untilMs)
14
- .sort((a, b) => a.atMs - b.atMs)
15
- .map(({ index }) => index);
16
- /**
17
- * The requested length for the next filler clip. Before an anchor, equal clips that tile the
18
- * uncovered gap within the provider's lengths, so filler ends on the anchor; otherwise the
19
- * shortest clip, which keeps boundaries, and so reactions, frequent. `ratio` is a built
20
- * clip's actual over requested length.
21
- */
22
- export const fillLength = (uncoveredSeconds, lengths, ratio) => {
23
- const clamp = (requested) => Math.min(lengths.max, Math.max(lengths.min, requested));
24
- if (!(uncoveredSeconds > 0))
25
- return lengths.min;
26
- const pieces = Math.max(1, Math.ceil(uncoveredSeconds / (lengths.max * ratio)));
27
- return clamp(uncoveredSeconds / pieces / ratio);
28
- };
29
- /** A held clip that would be next within this many seconds is removed and rebuilt. */
30
- const exposureMarginSeconds = 1.5;
31
- /** Enough measured builds to act on. */
32
- export const minimumSamples = 3;
33
- const quantile = (values, q) => {
34
- const sorted = [...values].sort((a, b) => a - b);
35
- return sorted[Math.min(sorted.length - 1, Math.floor(q * sorted.length))] ?? 0;
36
- };
37
- /** Estimates from recent samples: build seconds per requested second, and actual over requested length. */
38
- export const estimatesFrom = (build, length) => ({
39
- build: build.length < minimumSamples
40
- ? undefined
41
- : { median: quantile(build, 0.5), p95: quantile(build, 0.95) },
42
- length: length.length === 0 ? 1 : quantile(length, 0.5),
43
- });
44
- /**
45
- * Seconds added to the measured p95 build time before a refill counts as early enough: the
46
- * scheduler's 100 ms turn, a command round trip, and the provider's delay in starting the
47
- * next clip (30 to 110 ms on hosted H3).
48
- */
49
- const lookaheadMarginSeconds = 1;
50
- /** Items that pending batches withdraw. */
51
- export const supersededBy = (batches) => new Set(batches.flatMap((batch) => batch.targets.map((target) => target.key)));
52
- /** A clip ending within this many seconds is left to end rather than cut. */
53
- const cutMarginSeconds = 1;
54
- const preferredSession = (state) => Option.getOrUndefined(state.preferredSessionId);
55
- /**
56
- * When the playing clip started on the monotonic clock. Engine state can show a new clip
57
- * playing before its Started event is handled, so the state's own observation fills in.
58
- */
59
- const playingSince = (playing, playingStartedMs) => playing === undefined
60
- ? undefined
61
- : (playingStartedMs.get(playing.clipId) ?? playing.startedAtMonotonicMillis);
62
- /** Ready material on a retiring source is not runway for the replacement. */
63
- export const runwaySeconds = (state, nowMs, playingStartedMs, owned, items) => {
64
- const preferred = preferredSession(state);
65
- const playing = Option.getOrUndefined(state.playing);
66
- const record = playing === undefined ? undefined : Option.getOrUndefined(playing.record);
67
- const started = playingSince(playing, playingStartedMs);
68
- const rest = record === undefined || started === undefined
69
- ? 0
70
- : Math.max(0, record.durationSeconds - (nowMs - started) / 1000);
71
- return (rest +
72
- state.ready
73
- .filter((clip) => {
74
- if (preferred !== undefined && clip.sessionId !== preferred)
75
- return false;
76
- const owner = owned.get(clip.clipId);
77
- if (owner?._tag !== "Item")
78
- return true;
79
- const item = items.find((candidate) => candidate.key === owner.key);
80
- return item?.held !== true && (item?.atMs === undefined || item.atMs <= nowMs);
81
- })
82
- .reduce((seconds, clip) => seconds + clip.durationSeconds, 0));
83
- };
84
- /**
85
- * Which of two waiting items the build slot takes first: Asap, then everything but held
86
- * items, then lane, a replacement racing its item, a group already under way, the earlier
87
- * deadline, and admission.
88
- */
89
- const buildOrder = (lanes) => (a, b) => {
90
- const asap = Number(b.asap === true) - Number(a.asap === true);
91
- const held = Number(a.held === true) - Number(b.held === true);
92
- const lane = lanes.indexOf(a.lane) - lanes.indexOf(b.lane);
93
- // A replacement races the clip it replaces, so it builds first in its lane.
94
- const replacing = Number(b.replaces !== undefined) - Number(a.replaces !== undefined);
95
- // A deadline may move a whole group ahead in its lane, never into one being built.
96
- const open = Number(b.group !== undefined && b.group.index > 0) -
97
- Number(a.group !== undefined && a.group.index > 0);
98
- return (asap ||
99
- held ||
100
- lane ||
101
- replacing ||
102
- open ||
103
- (a.startByMs ?? Infinity) - (b.startByMs ?? Infinity) ||
104
- a.admission - b.admission);
105
- };
106
- const compareRank = (left, right) => left[0] - right[0] || left[1] - right[1] || left[2] - right[2] || left[3] - right[3];
107
- /** Where a place sits among a group's parts, and whether a part must wait for the one before it. */
108
- const ordering = (items, lanes, nowMs, superseded) => {
109
- // A group's parts in order. A part already pruned has settled, so it counts as admitted.
110
- const groups = new Map();
111
- for (const item of items)
112
- if (item.group !== undefined)
113
- groups.set(item.group.key, [...(groups.get(item.group.key) ?? []), item]);
114
- const previousAdmitted = (item) => {
115
- if (item.group === undefined)
116
- return true;
117
- const index = item.group.index;
118
- const parts = groups.get(item.group.key) ?? [];
119
- const previous = Math.max(...parts.map((part) => part.group?.index ?? 0).filter((value) => value < index));
120
- // The previous place may hold a part and its replacement; either one unadmitted holds this part.
121
- return !parts.some((part) => part.group?.index === previous && part.phase === "Accepted");
122
- };
123
- // Once a group airs, its remaining parts stay ahead of the rest of their lane. A group
124
- // whose first part was pruned has settled it, and a settled first part that did not
125
- // air withdrew the others.
126
- const begun = (item) => {
127
- if (item?.group === undefined)
128
- return false;
129
- const parts = groups.get(item.group.key) ?? [];
130
- return (parts.some((part) => part.startedAtMonoMs !== undefined) ||
131
- Math.min(...parts.map((part) => part.group?.index ?? 0)) > 0);
132
- };
133
- // Within its place, a Ready replacement airs ahead of the item it replaces.
134
- const byKey = new Map(items.map((item) => [item.key, item]));
135
- /**
136
- * The live item a replacement takes the place of. Replacing a replacement that was never
137
- * built drops that one, so the chain leads back to the item still in the place.
138
- */
139
- const replacedOf = (item) => {
140
- let old = item.replaces === undefined ? undefined : byKey.get(item.replaces);
141
- while (old?.phase === "Terminal" && old.replaces !== undefined)
142
- old = byKey.get(old.replaces);
143
- return old;
144
- };
145
- const replacedReady = new Set(items.flatMap((item) => {
146
- const old = item.phase === "Ready" || item.phase === "Started" ? replacedOf(item) : undefined;
147
- return old === undefined ? [] : [old.key];
148
- }));
149
- const rankItem = (item) => {
150
- const generation = item?.key !== undefined && replacedReady.has(item.key) ? Infinity : (item?.generation ?? 0);
151
- if (item?.held === true || (item?.atMs !== undefined && nowMs < item.atMs))
152
- return [lanes.length + 1, 1, item.admission, generation];
153
- if (item?.asap === true)
154
- return [-0.5, 0, item.admission, generation];
155
- return [
156
- Math.max(0, lanes.indexOf(item?.lane ?? "")),
157
- item?.key !== undefined && superseded.has(item.key) ? 2 : begun(item) ? 0 : 1,
158
- item?.admission ?? 0,
159
- generation,
160
- ];
161
- };
162
- const rankClip = (clipId, owned) => {
163
- const clip = owned.get(clipId);
164
- if (clip === undefined)
165
- return [-1, 0, 0, 0];
166
- if (clip._tag === "Filler")
167
- return [lanes.length, 1, clip.index, 0];
168
- return rankItem(items.find((value) => value.key === clip.key));
169
- };
170
- return { previousAdmitted, begun, rankItem, rankClip, replacedOf };
171
- };
172
- /**
173
- * An accepted drain still owes air to every line not yet Ready, and to a Ready line held
174
- * for a future At anchor, which runway must reach. Filler is the only material that can
175
- * cover either, so it keeps playing and refilling until nothing accepted can still leave
176
- * the host frozen. An Unknown item does not count: without a fenced source it can stay
177
- * open until the scheduler closes, and filler for it would never stop.
178
- */
179
- const fillerHeldFor = (snapshot) => snapshot.drain === "accepted" &&
180
- snapshot.items.some((item) => item.held !== true &&
181
- (item.phase === "Accepted" ||
182
- item.phase === "Building" ||
183
- (item.phase === "Ready" && item.atMs !== undefined && item.atMs > snapshot.nowMs)));
184
- /**
185
- * When a clip could start at the earliest if it took `place`, optimistically, so a refusal
186
- * means it cannot make it: after the rest of the playing clip and every Ready clip on the
187
- * preferred source ranked ahead, and after its own build, once builds have been measured.
188
- * The build waits for the one in flight and for every build that must go first: higher
189
- * lanes, a replacement or a group already under way in its lane, and earlier deadlines.
190
- */
191
- export const projectedStartMs = (view, place) => {
192
- const { engine, owned, nowMs } = view;
193
- const playing = Option.getOrUndefined(engine.playing);
194
- const playingRecord = playing === undefined ? undefined : Option.getOrUndefined(playing.record);
195
- const started = playingSince(playing, view.playingStartedMs);
196
- const restMs = playingRecord === undefined || started === undefined
197
- ? 0
198
- : Math.max(0, playingRecord.durationSeconds * 1000 - (nowMs - started));
199
- const { rankItem, rankClip, previousAdmitted } = ordering(view.items, view.lanes, nowMs, supersededBy(view.batches));
200
- const rank = rankItem(place);
201
- const preferred = preferredSession(engine);
202
- const withdrawing = view.withdrawing ?? new Set();
203
- const aheadMs = engine.ready.reduce((total, record) => {
204
- if (record.sessionId !== preferred || compareRank(rankClip(record.clipId, owned), rank) >= 0)
205
- return total;
206
- const owner = owned.get(record.clipId);
207
- if (owner?._tag === "Item" && withdrawing.has(owner.key))
208
- return total;
209
- return total + record.durationSeconds * 1000;
210
- }, 0);
211
- const playable = nowMs + restMs + aheadMs;
212
- const perSecond = view.estimates.build?.median;
213
- if (perSecond === undefined || place.seconds === undefined)
214
- return playable;
215
- const buildMs = (seconds) => seconds * perSecond * 1000;
216
- // The build slot is busy until the build in flight is done.
217
- const inFlight = [
218
- ...view.items.flatMap((item) => item.phase === "Building" && item.dispatchedAtMs !== undefined && item.key !== place.key
219
- ? [item.dispatchedAtMs + buildMs(item.seconds ?? 0)]
220
- : []),
221
- ...(view.fillerDispatchedAtMs === undefined || view.fillerSeconds === undefined
222
- ? []
223
- : [view.fillerDispatchedAtMs + buildMs(view.fillerSeconds)]),
224
- ];
225
- // Only builds that can go now and that the build order puts first count, so the
226
- // projection stays optimistic: not held, future or not-yet items, nor a group's parts
227
- // after one not yet built.
228
- const order = buildOrder(view.lanes);
229
- const first = view.items
230
- .filter((item) => item.phase === "Accepted" &&
231
- item.key !== place.key &&
232
- !withdrawing.has(item.key) &&
233
- item.held !== true &&
234
- (item.atMs === undefined || item.atMs <= nowMs) &&
235
- (item.notBeforeMs === undefined || item.notBeforeMs <= nowMs) &&
236
- previousAdmitted(item) &&
237
- order(item, place) < 0)
238
- .reduce((total, item) => total + buildMs(item.seconds ?? 0), 0);
239
- const built = Math.max(nowMs, ...inFlight) + first + buildMs(place.seconds);
240
- return Math.max(playable, built);
241
- };
242
- /**
243
- * The pure policy: every withdrawal the plan wants now, and at most one serialized provider
244
- * command. The actor re-reads Engine after each applied command.
245
- */
246
- export const plan = (snapshot) => {
247
- const { engine, items, nowMs, owned } = snapshot;
248
- const { previousAdmitted, rankClip, rankItem, replacedOf } = ordering(items, snapshot.lanes, nowMs, supersededBy(snapshot.batches));
249
- /**
250
- * What an item continuing from its predecessor continues from: the Ready clip or waiting
251
- * item that airs just before it on the preferred source, else the clip playing there.
252
- * `wait` while that predecessor is not built yet; no clip when there is none, or when
253
- * the provider no longer offers it for continuation.
254
- */
255
- const continuation = (item) => {
256
- const place = rankItem(item);
257
- // What will not air before it is no predecessor: the item it replaces, and what a batch
258
- // or a withdrawal is taking off.
259
- const gone = new Set([...supersededBy(snapshot.batches), ...snapshot.withdrawing]);
260
- const replaced = replacedOf(item);
261
- if (replaced !== undefined)
262
- gone.add(replaced.key);
263
- let best;
264
- const consider = (rank, clipId) => {
265
- if (compareRank(rank, place) < 0 && (best === undefined || compareRank(rank, best.rank) > 0))
266
- best = clipId === undefined ? { rank } : { rank, clipId };
267
- };
268
- for (const clip of engine.ready) {
269
- const owner = owned.get(clip.clipId);
270
- if (clip.sessionId === preferredSession(engine) &&
271
- !(owner?._tag === "Item" && gone.has(owner.key)))
272
- consider(rankClip(clip.clipId, owned), clip.clipId);
273
- }
274
- for (const other of items)
275
- if (other.key !== item.key &&
276
- !gone.has(other.key) &&
277
- (other.phase === "Accepted" || other.phase === "Building" || other.phase === "Unknown"))
278
- consider(rankItem(other), undefined);
279
- if (best !== undefined && best.clipId === undefined)
280
- return { _tag: "wait" };
281
- const clipId = best?.clipId ?? Option.getOrUndefined(engine.playing)?.clipId;
282
- return clipId !== undefined && engine.continuable.includes(clipId)
283
- ? { _tag: "from", clipId }
284
- : { _tag: "from" };
285
- };
286
- const runway = runwaySeconds(engine, nowMs, snapshot.playingStartedMs, owned, items);
287
- const nextAnchorMs = items
288
- .filter((item) => item.phase !== "Terminal" && item.atMs !== undefined && item.atMs > nowMs)
289
- .reduce((earliest, item) => Math.min(earliest, item.atMs ?? Infinity), Infinity);
290
- const anchorGapSeconds = nextAnchorMs === Infinity ? 0 : (nextAnchorMs - nowMs) / 1000;
291
- // A nonzero floor covers at least one measured p95 build of the next filler clip, so a
292
- // refill started at the floor is Ready before the picture runs out. A zero floor keeps
293
- // filler off.
294
- const p95 = snapshot.estimates.build?.p95;
295
- const floorSeconds = snapshot.floorSeconds > 0 && p95 !== undefined && snapshot.fillerSeconds !== undefined
296
- ? Math.max(snapshot.floorSeconds, p95 * snapshot.fillerSeconds + lookaheadMarginSeconds)
297
- : snapshot.floorSeconds;
298
- const targetSeconds = Math.max(snapshot.targetSeconds, floorSeconds);
299
- const fillTarget = Math.max(targetSeconds, anchorGapSeconds);
300
- const filling = anchorGapSeconds > runway ||
301
- (snapshot.refillActive ? runway < targetSeconds : runway < floorSeconds);
302
- const playingId = Option.getOrUndefined(engine.playing)?.clipId;
303
- const fillerHeld = fillerHeldFor(snapshot);
304
- const withdraw = [];
305
- const listed = new Set();
306
- const drop = (item, reason) => {
307
- if (snapshot.withdrawing.has(item.key) || listed.has(item.key))
308
- return;
309
- listed.add(item.key);
310
- withdraw.push({ key: item.key, reason });
311
- };
312
- const waiting = (item) => item.phase === "Accepted" ||
313
- item.phase === "Building" ||
314
- item.phase === "Ready" ||
315
- item.phase === "Unknown";
316
- // Sweep every status; expiry behind a nonexpired head must not be stranded.
317
- for (const item of items) {
318
- if (item.phase !== "Accepted" && item.phase !== "Building" && item.phase !== "Ready")
319
- continue;
320
- const lateBy = item.atMs === undefined ? undefined : nowMs - item.atMs;
321
- const atExpired = lateBy === undefined || item.late === "nextBoundary"
322
- ? false
323
- : item.late === "drop"
324
- ? lateBy > 0
325
- : lateBy > item.late.skipIfLaterThanMs;
326
- if ((item.firm && item.startByMs !== undefined && nowMs > item.startByMs) || atExpired)
327
- drop(item, "late");
328
- }
329
- // A firm item that cannot start before its deadline is dropped before it takes the build
330
- // slot, once builds have been measured.
331
- if (snapshot.estimates.build !== undefined)
332
- for (const item of items)
333
- if (item.firm &&
334
- item.phase === "Accepted" &&
335
- item.startByMs !== undefined &&
336
- !snapshot.dispatched.has(item.key) &&
337
- projectedStartMs(snapshot, item) > item.startByMs)
338
- drop(item, "late");
339
- // A part that failed or was dropped withdraws the parts after it.
340
- for (const item of items) {
341
- const brokenAt = item.group === undefined ? undefined : snapshot.brokenGroups.get(item.group.key);
342
- if (brokenAt !== undefined && item.group.index > brokenAt && waiting(item))
343
- drop(item, "withdrawn");
344
- }
345
- // A replacement takes the place once Ready, or at once if nothing was built for the item it
346
- // replaces; a batch's replacement waits for its batch. If the replaced item starts first,
347
- // the replacement goes.
348
- const pendingReplacements = new Set(snapshot.batches.flatMap((batch) => batch.waitFor));
349
- for (const item of items) {
350
- if (item.replaces === undefined || item.phase === "Terminal")
351
- continue;
352
- const old = replacedOf(item);
353
- if (old === undefined || old.phase === "Terminal")
354
- continue;
355
- if (old.phase === "Started") {
356
- if (item.phase !== "Started")
357
- drop(item, "withdrawn");
358
- }
359
- else if (
360
- // A batch's Ready replacement waits for its batch, but one that has started takes
361
- // the place at once, so the item it replaces never follows it.
362
- (item.phase === "Ready" && !pendingReplacements.has(item.key)) ||
363
- item.phase === "Started" ||
364
- (old.phase === "Accepted" && !snapshot.dispatched.has(old.key)))
365
- drop(old, "replaced");
366
- }
367
- // A batch takes effect once everything it adds is Ready or has settled. Until then what it
368
- // withdraws keeps its place, except an item nothing was built for, which covers nothing.
369
- const commit = [];
370
- for (const batch of snapshot.batches) {
371
- const find = (key) => items.find((item) => item.key === key);
372
- if (batch.waitFor.every((key) => {
373
- const phase = find(key)?.phase;
374
- return (phase === undefined || phase === "Ready" || phase === "Started" || phase === "Terminal");
375
- }))
376
- commit.push(batch.id);
377
- else
378
- for (const { key, reason } of batch.targets) {
379
- const target = find(key);
380
- if (target?.phase === "Accepted" && !snapshot.dispatched.has(key))
381
- drop(target, reason);
382
- }
383
- }
384
- // A held item cannot air without a release a drain will not wait for.
385
- if (snapshot.drain !== undefined)
386
- for (const item of items)
387
- if (item.held === true && waiting(item))
388
- drop(item, "withdrawn");
389
- // A drain that finishes only the playing clip withdraws everything waiting.
390
- if (snapshot.drain === "playing")
391
- for (const item of items)
392
- if (waiting(item) && (item.clipId === undefined || item.clipId !== playingId))
393
- drop(item, "withdrawn");
394
- const withdrawFiller = [];
395
- const preferred = preferredSession(engine);
396
- const retiring = Option.getOrUndefined(engine.retiringSessionId);
397
- if (preferred !== undefined &&
398
- retiring !== undefined &&
399
- engine.handoffReady === true &&
400
- !engine.queued.some((clip) => clip.sessionId === retiring) &&
401
- Option.getOrUndefined(engine.building)?.record.sessionId !== retiring &&
402
- !items.some((item) => (item.phase === "Building" || item.phase === "Unknown") &&
403
- (item.sessionId ?? item.unknownSessionId) === retiring) &&
404
- engine.ready.some((clip) => clip.sessionId === preferred && owned.get(clip.clipId)?._tag === "Item"))
405
- for (const clip of engine.ready)
406
- if (clip.sessionId === retiring && owned.get(clip.clipId)?._tag === "Filler")
407
- withdrawFiller.push(clip.clipId);
408
- // A drain withdraws filler once nothing accepted still needs it to cover the wait.
409
- if (snapshot.drain !== undefined && !fillerHeld)
410
- for (const [clipId, owner] of owned)
411
- if (owner._tag === "Filler" && clipId !== playingId && !withdrawFiller.includes(clipId))
412
- withdrawFiller.push(clipId);
413
- const base = { runwaySeconds: runway, refillActive: filling, withdraw, withdrawFiller, commit };
414
- // Physical sources are independent queues. A move never ranks across them.
415
- let offset = 0;
416
- for (const session of engine.ready.length === 0 ? [] : engine.sessions) {
417
- const actual = engine.ready.filter((clip) => clip.sessionId === session.sessionId);
418
- if (session.availability !== "Ready") {
419
- offset += actual.length;
420
- continue;
421
- }
422
- if (actual.length === 0)
423
- continue;
424
- const desired = [...actual].sort((a, b) => compareRank(rankClip(a.clipId, owned), rankClip(b.clipId, owned)));
425
- for (let index = 0; index < actual.length; index++) {
426
- if (actual[index]?.clipId === desired[index]?.clipId)
427
- continue;
428
- const wanted = desired[index];
429
- if (owned.has(wanted.clipId)) {
430
- const action = { _tag: "Order", clipId: wanted.clipId, position: offset + index };
431
- const signature = engine.ready.map((record) => record.clipId).join(",") +
432
- ":" +
433
- action.clipId +
434
- ":" +
435
- action.position;
436
- if (snapshot.blockedMove !== signature)
437
- return { ...base, action };
438
- }
439
- const displaced = actual[index];
440
- if (owned.has(displaced.clipId)) {
441
- const action = {
442
- _tag: "Order",
443
- clipId: displaced.clipId,
444
- position: offset + desired.findIndex((clip) => clip.clipId === displaced.clipId),
445
- };
446
- const signature = engine.ready.map((record) => record.clipId).join(",") +
447
- ":" +
448
- action.clipId +
449
- ":" +
450
- action.position;
451
- if (snapshot.blockedMove !== signature)
452
- return { ...base, action };
453
- }
454
- }
455
- offset += actual.length;
456
- }
457
- // A cut lane's Ready item at the front of its session cuts the playing clip there, once
458
- // the provider has it at the front.
459
- if (snapshot.cutLanes.size > 0) {
460
- const current = Option.getOrUndefined(engine.playing);
461
- const record = current === undefined ? undefined : Option.getOrUndefined(current.record);
462
- const since = playingSince(current, snapshot.playingStartedMs);
463
- const front = record === undefined
464
- ? undefined
465
- : engine.ready.find((clip) => clip.sessionId === record.sessionId);
466
- const owner = front === undefined ? undefined : owned.get(front.clipId);
467
- const cutter = owner?._tag === "Item" ? items.find((item) => item.key === owner.key) : undefined;
468
- // Only filler or a clip of a strictly lower lane is cut, never a clip of the cutter's
469
- // own lane, whatever its rank.
470
- const playingOwner = current === undefined ? undefined : owned.get(current.clipId);
471
- const playingItem = playingOwner?._tag === "Item"
472
- ? items.find((item) => item.key === playingOwner.key)
473
- : undefined;
474
- const lower = cutter !== undefined &&
475
- (playingOwner?._tag === "Filler" ||
476
- (playingItem !== undefined &&
477
- snapshot.lanes.indexOf(playingItem.lane) > snapshot.lanes.indexOf(cutter.lane)));
478
- if (current !== undefined &&
479
- record !== undefined &&
480
- since !== undefined &&
481
- front !== undefined &&
482
- cutter !== undefined &&
483
- snapshot.cutLanes.has(cutter.lane) &&
484
- snapshot.blockedCut !== current.clipId &&
485
- lower &&
486
- record.durationSeconds - (nowMs - since) / 1000 > cutMarginSeconds)
487
- return { ...base, action: { _tag: "Cut", clipId: current.clipId } };
488
- }
489
- // Reorder movable Ready runway before treating a future At clip as exposed.
490
- // A wall-clock correction can otherwise require removing and rebuilding it.
491
- const playing = Option.getOrUndefined(engine.playing);
492
- const playingRecord = playing === undefined ? undefined : Option.getOrUndefined(playing.record);
493
- const playingStarted = playingSince(playing, snapshot.playingStartedMs);
494
- const playingRest = playingRecord === undefined || playingStarted === undefined
495
- ? 0
496
- : Math.max(0, playingRecord.durationSeconds - (nowMs - playingStarted) / 1000);
497
- const exposedAnchor = items.find((item) => {
498
- const held = item.held === true;
499
- if (item.phase !== "Ready" ||
500
- item.clipId === undefined ||
501
- (!held && (item.atMs === undefined || item.atMs <= nowMs)))
502
- return false;
503
- const index = engine.ready.findIndex((clip) => clip.clipId === item.clipId);
504
- if (index < 0)
505
- return false;
506
- const sessionId = engine.ready[index].sessionId;
507
- const ahead = engine.ready
508
- .slice(0, index)
509
- .filter((clip) => {
510
- if (clip.sessionId !== sessionId)
511
- return false;
512
- const owner = owned.get(clip.clipId);
513
- if (owner?._tag !== "Item")
514
- return true;
515
- const prior = items.find((candidate) => candidate.key === owner.key);
516
- return prior?.held !== true && (prior?.atMs === undefined || prior.atMs <= nowMs);
517
- })
518
- .reduce((seconds, clip) => seconds + clip.durationSeconds, 0);
519
- return held
520
- ? ahead === 0 && playingRest < exposureMarginSeconds
521
- : playingRest + ahead < (item.atMs - nowMs) / 1000;
522
- });
523
- if (exposedAnchor?.clipId !== undefined)
524
- return {
525
- ...base,
526
- action: { _tag: "DeferAt", key: exposedAnchor.key, clipId: exposedAnchor.clipId },
527
- };
528
- const preferredAvailability = engine.sessions.find((session) => session.sessionId === preferred)?.availability;
529
- if (!(snapshot.accepting || snapshot.drain === "accepted") || preferredAvailability !== "Ready")
530
- return base;
531
- const activeFiller = [...owned.entries()].filter(([clipId, owner]) => owner._tag === "Filler" &&
532
- (owner.sessionId === undefined || owner.sessionId === preferred) &&
533
- !engine.ready.some((clip) => clip.clipId === clipId) &&
534
- Option.getOrUndefined(engine.playing)?.clipId !== clipId &&
535
- !engine.failed.includes(clipId)).length;
536
- const inflight = items.filter((item) => (item.phase === "Building" || item.phase === "Unknown") &&
537
- (item.sessionId ?? item.unknownSessionId ?? preferred) === preferred).length +
538
- activeFiller +
539
- snapshot.unknownFillerCount;
540
- if (inflight >= snapshot.maxBuildsInFlight)
541
- return base;
542
- const eligible = items
543
- .filter((item) => item.phase === "Accepted" &&
544
- !listed.has(item.key) &&
545
- !snapshot.withdrawing.has(item.key) &&
546
- previousAdmitted(item) &&
547
- (item.retryAtMs === undefined || nowMs >= item.retryAtMs) &&
548
- (item.notBeforeMs === undefined || nowMs >= item.notBeforeMs) &&
549
- // Autoplay cannot hold a Ready clip. Admit a future anchor only once
550
- // known material ahead of it covers the time until that anchor.
551
- (item.atMs === undefined || item.atMs <= nowMs || runway >= (item.atMs - nowMs) / 1000) &&
552
- // A held item is built ahead only while filler keeps the runway at its floor.
553
- (item.held !== true || (floorSeconds > 0 && runway >= floorSeconds)) &&
554
- // A continuing clip waits for the clip it continues from to be built.
555
- (item.continuity !== "previous" || continuation(item)._tag !== "wait"))
556
- .sort(buildOrder(snapshot.lanes));
557
- const next = eligible[0];
558
- if (next !== undefined) {
559
- const from = next.continuity === "previous" ? continuation(next) : undefined;
560
- return {
561
- ...base,
562
- action: from?._tag === "from" && from.clipId !== undefined
563
- ? { _tag: "Build", key: next.key, continueFrom: from.clipId }
564
- : { _tag: "Build", key: next.key },
565
- };
566
- }
567
- if ((snapshot.drain === undefined || fillerHeld) &&
568
- filling &&
569
- runway < fillTarget &&
570
- snapshot.unknownFillerCount === 0 &&
571
- nowMs >= snapshot.fillerRetryAtMs)
572
- return {
573
- ...base,
574
- action: {
575
- _tag: "BuildFiller",
576
- targetSeconds: fillTarget - runway,
577
- durationSeconds: fillLength(anchorGapSeconds - runway, snapshot.fillLengths, snapshot.estimates.length),
578
- },
579
- };
580
- return base;
581
- };
582
- //# sourceMappingURL=scheduler-policy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scheduler-policy.js","sourceRoot":"","sources":["../../src/orchestration/scheduler-policy.ts"],"names":[],"mappings":"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"}