reactor-effect-client 0.7.1 → 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 -1099
  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 -246
  414. package/dist/orchestration/scheduler-policy.d.ts.map +0 -1
  415. package/dist/orchestration/scheduler-policy.js +0 -668
  416. package/dist/orchestration/scheduler-policy.js.map +0 -1
  417. package/dist/orchestration/scheduler.d.ts +0 -393
  418. package/dist/orchestration/scheduler.d.ts.map +0 -1
  419. package/dist/orchestration/scheduler.js +0 -2621
  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
@@ -0,0 +1,401 @@
1
+ /**
2
+ * H3 over one Reactor session as a playout `Source`: `open` mints a token,
3
+ * allocates, lets a supervisor record the owner, connects and sets the
4
+ * session up; `resume` adopts a session a dead owner recorded. Either keeps
5
+ * the session's token fresh with tokens bound to it. Both make sure of
6
+ * every session default the playout depends on, since H3's defaults are not
7
+ * what a playout wants: autoplay is off until the playout turns it on,
8
+ * `flush_on_clip_end` is set as asked when the session has it otherwise, and
9
+ * the canvas is set before the first enqueue, the only moment H3 accepts it.
10
+ */
11
+ import * as Cause from "effect/Cause";
12
+ import * as Clock from "effect/Clock";
13
+ import * as Duration from "effect/Duration";
14
+ import * as Effect from "effect/Effect";
15
+ import * as Exit from "effect/Exit";
16
+ import * as Option from "effect/Option";
17
+ import * as Predicate from "effect/Predicate";
18
+ import * as PubSub from "effect/PubSub";
19
+ import * as Redacted from "effect/Redacted";
20
+ import * as Ref from "effect/Ref";
21
+ import * as Schema from "effect/Schema";
22
+ import * as Stream from "effect/Stream";
23
+ import * as SubscriptionRef from "effect/SubscriptionRef";
24
+ import * as H3 from "./H3.js";
25
+ import * as Tag from "./internal/playout/tag.js";
26
+ import { noAcquisition, Reactor } from "./Reactor.js";
27
+ import { AcquisitionFailure, CommandFailure, ReactorError } from "./ReactorError.js";
28
+ /**
29
+ * A durable owner record of an allocated session, without a token: enough to
30
+ * find it again, adopt it with a token bound to it, or terminate it with one
31
+ * or with the API key, stored as the application decides.
32
+ */
33
+ export const Allocation = Schema.Struct({
34
+ sessionId: Schema.String,
35
+ ownership: Schema.Literals(["owned", "attached"]),
36
+ model: Schema.String,
37
+ /**
38
+ * The end of the session's cap counted from the allocation request, in
39
+ * seconds since the epoch; absent for a session without a cap, which runs
40
+ * until it is terminated. The server starts the cap no earlier than the
41
+ * request, so the cap cannot end the session before this: plan to be done
42
+ * by it, and read the session before counting it ended.
43
+ */
44
+ endsAt: Schema.optionalKey(Schema.Finite),
45
+ });
46
+ const clipOf = (clip) => ({
47
+ clipId: clip.clip_id,
48
+ tag: Tag.decode(clip.metadata),
49
+ seconds: clip.seconds,
50
+ });
51
+ const factsOf = (snapshot) => snapshot._tag === "Ready" ? { state: snapshot.state, queue: snapshot.queue } : snapshot.lastFacts;
52
+ /** The clip H3 reports playing, or armed to play. */
53
+ const playingOf = (snapshot) => factsOf(snapshot)?.state.playing_clip_id ?? undefined;
54
+ const stateOf = (snapshot) => {
55
+ const facts = factsOf(snapshot);
56
+ const known = new Map(snapshot.clips.map((entry) => [entry.clip.clip_id, entry.clip]));
57
+ const playingId = facts?.state.playing_clip_id ?? null;
58
+ const playing = playingId === null ? undefined : known.get(playingId);
59
+ return {
60
+ available: snapshot._tag === "Ready",
61
+ building: (facts?.queue.generation ?? []).map(clipOf),
62
+ ready: (facts?.queue.playout ?? []).map(clipOf),
63
+ // H3 keeps no history: a clip that started before this provider attached is known by its
64
+ // id alone until its end message brings its metadata and length.
65
+ playing: playingId === null
66
+ ? undefined
67
+ : playing === undefined
68
+ ? { clipId: playingId, tag: undefined, seconds: undefined }
69
+ : clipOf(playing),
70
+ continuable: snapshot.clips
71
+ .filter((entry) => entry.clip.ready && entry.lifecycle !== "clip_failed")
72
+ .sort((a, b) => a.source.sequence < b.source.sequence ? -1 : a.source.sequence > b.source.sequence ? 1 : 0)
73
+ .slice(-H3.h3ReferenceTurboRealtime.continuationWindow)
74
+ .map((entry) => entry.clip.clip_id),
75
+ };
76
+ };
77
+ /**
78
+ * Sends each generation's decoded track, following the session across
79
+ * reconnects. A reader that falls behind its bound fails with `Overflow` and
80
+ * misses the rest, so it reads again from the next frame: the picture goes on,
81
+ * the host counts the loss in `readerOverflows`, and `overflowed` reports it
82
+ * with the pressure that follows.
83
+ */
84
+ const track = (session, read, overflowed) => session.changes.pipe(Stream.filter((snapshot) => snapshot.status === "ready"), Stream.map((snapshot) => snapshot.generation), Stream.changes, Stream.switchMap((generation) => {
85
+ const frames = Stream.unwrap(Effect.map(session.decoded, (media) => read(media).pipe(Stream.catchIf((error) => error.reason._tag === "Overflow", () => Stream.concat(Stream.fromEffectDrain(Effect.flatMap(media.pressure, overflowed)), frames)))));
86
+ // A retired generation's failure ends its frames until the next is ready. A generation
87
+ // retires before its media fails for it, so a failure while it is still the ready one is
88
+ // the host's or the reader's, such as a host without decoded media, and fails the track.
89
+ // A defect stays one.
90
+ return frames.pipe(Stream.catch((error) => Stream.unwrap(session.ready.pipe(Effect.option, Effect.map((ready) => Option.isSome(ready) && ready.value.generation === generation
91
+ ? Stream.fail(error)
92
+ : Stream.empty)))));
93
+ }));
94
+ /** The session's connection is down and may come back: it dropped, or a new one is on its way. */
95
+ const down = (snapshot) => snapshot.status === "connecting" ||
96
+ snapshot.status === "waiting" ||
97
+ snapshot.status === "disconnected";
98
+ /** Why a session whose connection dropped will not be ready again: it closes, or stopped trying. */
99
+ const unrecoverable = (snapshot) => {
100
+ switch (snapshot.status) {
101
+ case "closing":
102
+ case "closed":
103
+ return ReactorError.fromCode("Closed", "the session closed");
104
+ case "disconnected":
105
+ if (snapshot.reconnecting)
106
+ return undefined;
107
+ return snapshot.lastError ?? ReactorError.fromCode("Disconnected", "the session dropped");
108
+ default:
109
+ return undefined;
110
+ }
111
+ };
112
+ /** The first generation a session whose connection is down may be ready on again. */
113
+ const readyFrom = (snapshot) => snapshot.status === "connecting" || snapshot.status === "waiting"
114
+ ? snapshot.generation
115
+ : snapshot.generation + 1n;
116
+ /** What a reader waiting on a recovery from `from` on can know yet: that recovery, or the loss. */
117
+ const outcomeFrom = (from) => (held) => {
118
+ const recovered = held.recovered.find((each) => each.to >= from);
119
+ if (recovered !== undefined)
120
+ return Exit.succeed(recovered);
121
+ return held.lost === undefined ? undefined : Exit.failCause(held.lost);
122
+ };
123
+ /** A connected session as a playout source, all but its lifetime. */
124
+ const fromSession = Effect.fnUntraced(function* (session, options) {
125
+ const provider = yield* H3.make(session, options.provider);
126
+ // A resumed session usually has the setting its owner gave it, so resuming only reads.
127
+ const flush = !(options.holdLastFrame ?? true);
128
+ if (factsOf(yield* provider.snapshot)?.state.flush_on_clip_end !== flush)
129
+ yield* provider.setFlushOnClipEnd(flush);
130
+ if (options.canvas !== undefined && !options.resumed)
131
+ yield* provider.setCanvas(options.canvas);
132
+ // `seconds_sent` is the session's running total, so a clip's air is the difference from its start.
133
+ const sent = yield* Ref.make({ total: 0, starts: new Map() });
134
+ const recovery = Duration.fromInputUnsafe(options.recovery ?? "20 seconds");
135
+ // The session reconnects a dropped connection itself, and the source follows it once, however
136
+ // many read its events: it gives the session `recovery` to be ready again, then reads H3's
137
+ // facts afresh. Every reader reports that one recovery where it sees the drop, in order, and
138
+ // fails there once the source has stopped recovering.
139
+ const recoveries = yield* SubscriptionRef.make({ recovered: [], lost: undefined });
140
+ /** The first snapshot of the session `accept` takes, now or once it changes. */
141
+ const first = (accept) => session.changes.pipe(Stream.filter(accept), Stream.runHead, Effect.map(Option.getOrThrow));
142
+ /**
143
+ * Waits for a connection ready after the one on `up`, then reads H3 on it; its generation. A
144
+ * connection that drops under the read is not back yet, so the source waits for the next.
145
+ */
146
+ const readBack = (up) => Effect.gen(function* () {
147
+ const back = yield* first((snapshot) => (snapshot.status === "ready" && snapshot.generation !== up) ||
148
+ unrecoverable(snapshot) !== undefined);
149
+ const why = unrecoverable(back);
150
+ if (why !== undefined)
151
+ return yield* why;
152
+ const read = yield* Effect.result(provider.refresh);
153
+ if (read._tag === "Success")
154
+ return back.generation;
155
+ // A connection retires before a read on it fails for its drop: a read that failed while its
156
+ // connection is still the ready one failed for another reason.
157
+ const ready = yield* Effect.option(session.ready);
158
+ if (Option.isSome(ready) && ready.value.generation === back.generation)
159
+ return yield* read.failure;
160
+ return yield* readBack(back.generation);
161
+ });
162
+ /** The recovery from a drop of the connection on `up`, within `recovery`; how long it took. */
163
+ const recover = (up) => readBack(up).pipe(Effect.timeoutOrElse({
164
+ duration: recovery,
165
+ orElse: () => Effect.fail(ReactorError.fromCode("Timeout", "reconnecting took too long")),
166
+ }), Effect.mapError((error) => CommandFailure.is(error)
167
+ ? ReactorError.make({ reason: error.reason, context: error.context })
168
+ : error), Effect.timed);
169
+ // Set up on a ready connection, unless it dropped meanwhile.
170
+ const start = yield* session.snapshot;
171
+ yield* Effect.gen(function* () {
172
+ const up = (yield* SubscriptionRef.get(recoveries)).recovered.at(-1)?.to ??
173
+ (start.status === "ready" ? start.generation : undefined);
174
+ // A close is no drop: the source ends with its session.
175
+ if (up !== undefined)
176
+ yield* first((snapshot) => down(snapshot) || snapshot.generation !== up);
177
+ const [took, to] = yield* recover(up);
178
+ yield* SubscriptionRef.update(recoveries, (held) => ({
179
+ ...held,
180
+ recovered: [...held.recovered, { to, afterMillis: Duration.toMillis(took) }],
181
+ }));
182
+ }).pipe(Effect.forever, Effect.onError((cause) => Cause.hasInterruptsOnly(cause)
183
+ ? Effect.void
184
+ : SubscriptionRef.update(recoveries, (held) => ({ ...held, lost: cause }))), Effect.forkScoped);
185
+ /** The recovery that ended on `from` or later, once there is one, or why the source was lost. */
186
+ const recoveredFrom = (from) => SubscriptionRef.changes(recoveries).pipe(Stream.map(outcomeFrom(from)), Stream.filter(Predicate.isNotUndefined), Stream.runHead, Effect.flatMap(Option.getOrThrow));
187
+ /**
188
+ * A reader's report of the recovery from `from` on; `past` keeps where it ended. A recovery the
189
+ * session cannot make is the source's loss alone: no `Reconnecting` comes before it.
190
+ */
191
+ const reconnect = (from, past) => Stream.unwrap(Effect.gen(function* () {
192
+ const outcome = Stream.fromIterableEffect(Effect.gen(function* () {
193
+ const recovered = yield* recoveredFrom(from);
194
+ yield* Ref.set(past, recovered.to);
195
+ return [
196
+ { _tag: "Reconnected", afterMillis: recovered.afterMillis },
197
+ { _tag: "State", state: stateOf(yield* provider.snapshot) },
198
+ ];
199
+ }));
200
+ // A reader can see the drop after the source has recovered from it.
201
+ const held = yield* SubscriptionRef.get(recoveries);
202
+ const lasting = !held.recovered.some((each) => each.to >= from) &&
203
+ unrecoverable(yield* session.snapshot) !== undefined;
204
+ return lasting
205
+ ? outcome
206
+ : Stream.concat(Stream.succeed({ _tag: "Reconnecting" }), outcome);
207
+ }));
208
+ /** A reader's report of a drop of `generation`, unless a recovery it reported came back past it. */
209
+ const dropped = (generation, past) => past.pipe(Ref.get, Effect.map((seen) => (generation < seen ? Stream.empty : reconnect(generation + 1n, past))), Stream.unwrap);
210
+ const translate = (event) => Effect.gen(function* () {
211
+ if (event._tag === "Session" && event.source._tag === "Moderation")
212
+ return [
213
+ { _tag: "Moderated", action: event.source.action, categories: event.source.categories },
214
+ ];
215
+ if (event._tag !== "Message" || event.disposition !== "applied")
216
+ return [];
217
+ const message = event.message;
218
+ const state = { _tag: "State", state: stateOf(yield* provider.snapshot) };
219
+ switch (message.type) {
220
+ case "state_update":
221
+ yield* Ref.update(sent, (value) => ({ ...value, total: message.data.seconds_sent }));
222
+ return [state];
223
+ case "clip_started": {
224
+ yield* Ref.update(sent, (value) => ({
225
+ ...value,
226
+ starts: new Map(value.starts).set(message.data.clip.clip_id, value.total),
227
+ }));
228
+ return [{ _tag: "Started", clip: clipOf(message.data.clip) }, state];
229
+ }
230
+ case "clip_finished":
231
+ case "clip_stopped": {
232
+ const clip = message.data.clip;
233
+ const start = (yield* Ref.get(sent)).starts.get(clip.clip_id);
234
+ yield* Ref.update(sent, (value) => ({ ...value, total: message.data.seconds_sent }));
235
+ return [
236
+ {
237
+ _tag: "Ended",
238
+ clip: clipOf(clip),
239
+ termination: message.type === "clip_finished" ? "finished" : "stopped",
240
+ airedSeconds: start === undefined ? undefined : Math.max(0, message.data.seconds_sent - start),
241
+ },
242
+ state,
243
+ ];
244
+ }
245
+ case "clip_failed":
246
+ return [
247
+ {
248
+ _tag: "Failed",
249
+ clip: clipOf(message.data.clip),
250
+ message: "H3 failed the clip",
251
+ provider: Redacted.make(message.data.reason),
252
+ },
253
+ state,
254
+ ];
255
+ default:
256
+ return [state];
257
+ }
258
+ });
259
+ // Overflow reports never hold up a reader: a slow consumer of them loses the oldest.
260
+ const overflows = yield* PubSub.sliding(64);
261
+ const overflowed = (track) => (pressure) => Effect.asVoid(PubSub.publish(overflows, { _tag: "ReaderOverflow", track, pressure }));
262
+ const events = Stream.unwrap(Effect.gen(function* () {
263
+ const observation = yield* provider.observe({ capacity: 1024 });
264
+ const initial = Stream.succeed({
265
+ _tag: "State",
266
+ state: stateOf(observation.initial),
267
+ });
268
+ // A reader that comes after the source was lost learns it at once.
269
+ const lost = (yield* SubscriptionRef.get(recoveries)).lost;
270
+ if (lost !== undefined)
271
+ return Stream.concat(initial, Stream.failCause(lost));
272
+ const past = yield* Ref.make(0n);
273
+ // A reader that comes while the connection is down reports the recovery under way first.
274
+ const now = yield* session.snapshot;
275
+ const underway = down(now) ? reconnect(readyFrom(now), past) : Stream.empty;
276
+ return initial.pipe(Stream.concat(underway), Stream.concat(observation.events.pipe(Stream.flatMap((event) => event._tag === "Session" &&
277
+ event.source._tag === "Status" &&
278
+ event.source.status === "disconnected"
279
+ ? dropped(event.source.generation, past)
280
+ : Stream.fromIterableEffect(translate(event))))));
281
+ })).pipe(Stream.merge(Stream.fromPubSub(overflows), { haltStrategy: "left" }));
282
+ const replied = (error) => error.context.outcome === "replied";
283
+ const replyTimeout = Duration.fromInputUnsafe(options.provider?.replyTimeout ?? "15 seconds");
284
+ /**
285
+ * H3 answers `stop` before the clip ends; until H3 reports that, the clip
286
+ * plays and `play` would be refused.
287
+ */
288
+ const landed = (clipId, stop) => provider.changes.pipe(Stream.filter((snapshot) => playingOf(snapshot) !== clipId), Stream.runHead, Effect.timeoutOrElse({
289
+ duration: replyTimeout,
290
+ orElse: () => Effect.fail(CommandFailure.from(ReactorError.fromCode("Timeout", "H3 did not report the stopped clip ended"), {
291
+ operation: "stop",
292
+ outcome: "unknown",
293
+ requestId: stop.source.requestId,
294
+ generation: stop.source.generation,
295
+ })),
296
+ }));
297
+ return {
298
+ sessionId: session.id,
299
+ events,
300
+ enqueue: (request, tag, continueFrom) => Effect.gen(function* () {
301
+ const caller = Tag.encode({ tag, metadata: request.metadata });
302
+ if (caller === undefined)
303
+ return yield* CommandFailure.from(ReactorError.fromCode("InvalidInput", "clip metadata could not be encoded"), { operation: "enqueue", outcome: "not-submitted" });
304
+ const acceptance = yield* provider.enqueue({
305
+ ...request,
306
+ metadata: caller,
307
+ ...(continueFrom === undefined ? {} : { continueFrom }),
308
+ });
309
+ return acceptance.clip.clip_id;
310
+ }),
311
+ remove: (clipId) => Effect.asVoid(provider.pop(clipId)),
312
+ move: (clipId, position) => Effect.asVoid(provider.move(clipId, position)),
313
+ setAutoplay: (enabled) => Effect.asVoid(provider.setAutoplay(enabled)),
314
+ // With autoplay off nothing starts after the clip, so H3's stop, which names no clip, can
315
+ // only hit it. It may have ended on its own first: a refusal because nothing plays is
316
+ // harmless, and a clip that took its place is not stopped.
317
+ stop: (clipId) => Effect.gen(function* () {
318
+ if (playingOf(yield* provider.snapshot) !== clipId)
319
+ return;
320
+ yield* provider.stop.pipe(Effect.flatMap((stopped) => landed(clipId, stopped)), Effect.catchIf(replied, () => Effect.void));
321
+ }),
322
+ play: (clipId) => Effect.asVoid(provider.play(clipId)),
323
+ video: track(session, (media) => media.video(H3.h3ReferenceTurboRealtime.tracks.video), overflowed("video")),
324
+ audio: track(session, (media) => media.audio(H3.h3ReferenceTurboRealtime.tracks.audio), overflowed("audio")),
325
+ close: session.close,
326
+ };
327
+ });
328
+ const failAcquisition = (session) => (error) => Effect.flatMap(session.close, (report) => Effect.fail(AcquisitionFailure.from(error, report)));
329
+ /** What remains now until `endsAt`, in milliseconds since the epoch; unending without one. */
330
+ const lifetimeUntil = (endsAt) => endsAt === undefined
331
+ ? Effect.succeed(Duration.infinity)
332
+ : Effect.map(Clock.currentTimeMillis, (now) => Duration.millis(Math.max(0, endsAt - now)));
333
+ /**
334
+ * Opens a paid H3 session as a playout source: mint its token, allocate it, run
335
+ * `onAllocated`, connect, and set it up. Its lifetime is what remains, when it
336
+ * returns, of the token's session cap counted from the allocation request, or
337
+ * unending without a cap. Any failure after allocation, `onAllocated`'s
338
+ * included, closes the session and fails with an `AcquisitionFailure` carrying
339
+ * the close's report.
340
+ * `Playout.make({ open: H3Source.open({ tokens }), ... })`.
341
+ */
342
+ export const open = (options) => Effect.gen(function* () {
343
+ const reactor = yield* Reactor;
344
+ const grant = yield* options.tokens.create.pipe(Effect.mapError((error) => AcquisitionFailure.from(error, noAcquisition)));
345
+ const cap = grant.maxSessionSeconds;
346
+ // The server starts the granted length no earlier than the request, so the cap counted
347
+ // from here ends no later than the session.
348
+ const requested = yield* Clock.currentTimeMillis;
349
+ const endsAt = cap === undefined ? undefined : requested + cap * 1000;
350
+ const onAllocated = options.onAllocated;
351
+ const session = yield* reactor.create({
352
+ ...options.create,
353
+ model: H3.modelName,
354
+ tokens: { create: Effect.succeed(grant), bind: options.tokens.bind },
355
+ ...(onAllocated === undefined
356
+ ? {}
357
+ : {
358
+ onAllocated: (allocated) => onAllocated({
359
+ session: allocated,
360
+ grant,
361
+ allocation: {
362
+ sessionId: allocated.id,
363
+ ownership: allocated.ownership,
364
+ model: H3.modelName,
365
+ ...(cap === undefined ? {} : { endsAt: requested / 1000 + cap }),
366
+ },
367
+ }),
368
+ }),
369
+ });
370
+ const source = yield* fromSession(session, { ...options, resumed: false }).pipe(Effect.catch(failAcquisition(session)));
371
+ return { ...source, lifetime: yield* lifetimeUntil(endsAt) };
372
+ }).pipe(Effect.withSpan("H3Source.open", { kind: "client" }, { captureStackTrace: false }));
373
+ /**
374
+ * Adopts a session `open` allocated, from its owner record and a token bound
375
+ * to it, after its owner died: this process then owns its remote lifetime. It
376
+ * keeps the session's canvas, queue and playback; its lifetime is what remains,
377
+ * when it returns, until the record's `endsAt`, if it has one. A resume that
378
+ * fails ends the session it adopted, as a failed adopting attach does, one
379
+ * whose first connection drops as it becomes ready included.
380
+ */
381
+ export const resume = (options) => Effect.gen(function* () {
382
+ const refuse = (message) => AcquisitionFailure.from(ReactorError.fromCode("InvalidInput", message, {
383
+ operation: "resume",
384
+ outcome: "not-submitted",
385
+ }), noAcquisition);
386
+ const { allocation } = options;
387
+ if (allocation.model !== H3.modelName)
388
+ return yield* refuse("the allocation is not an H3 session");
389
+ const endsAt = allocation.endsAt === undefined ? undefined : allocation.endsAt * 1000;
390
+ if (endsAt !== undefined && !(endsAt > (yield* Clock.currentTimeMillis)))
391
+ return yield* refuse("the allocation's granted length has ended");
392
+ const reactor = yield* Reactor;
393
+ const session = yield* reactor.attach({
394
+ sessionId: allocation.sessionId,
395
+ tokens: options.tokens,
396
+ adopt: true,
397
+ });
398
+ const source = yield* fromSession(session, { ...options, resumed: true }).pipe(Effect.catch(failAcquisition(session)));
399
+ return { ...source, lifetime: yield* lifetimeUntil(endsAt) };
400
+ }).pipe(Effect.withSpan("H3Source.resume", { kind: "client" }, { captureStackTrace: false }));
401
+ //# sourceMappingURL=H3Source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"H3Source.js","sourceRoot":"","sources":["../src/H3Source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import * as Duration from "effect/Duration";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Scope from "effect/Scope";
4
+ import type { Request } from "./H3.js";
5
+ import type { AudioFrame, VideoFrame } from "./Media.js";
6
+ import type { ClipTag, Source } from "./Playout.js";
7
+ import { ReactorError } from "./ReactorError.js";
8
+ /** A clip as the renderer's hooks see it. */
9
+ export interface LocalClip {
10
+ readonly clipId: string;
11
+ readonly request: Request;
12
+ readonly tag: ClipTag;
13
+ /** Its length in seconds: as requested when `build` sees it, as built when `present` does. */
14
+ readonly seconds: number;
15
+ }
16
+ /** What `build` made of a clip. */
17
+ export interface Rendered<A> {
18
+ /** Handed to `present` when the clip plays. */
19
+ readonly value: A;
20
+ /**
21
+ * The built length in seconds, when it differs from the requested one. It
22
+ * must be positive and finite, or the clip fails, since a playout times its
23
+ * plan by the lengths its clips report.
24
+ */
25
+ readonly seconds?: number | undefined;
26
+ }
27
+ /** Where a presentation sends its media; the source's `video` and `audio` streams read it. */
28
+ export interface Sink {
29
+ readonly video: (frame: VideoFrame) => Effect.Effect<void>;
30
+ readonly audio: (frame: AudioFrame) => Effect.Effect<void>;
31
+ }
32
+ /**
33
+ * The application's hooks, which render each clip; or none, for a stand-in
34
+ * whose clips build for `buildRatio` of their length and play for their length.
35
+ */
36
+ export type Options<A = void, E = never, R = never, E2 = never, R2 = never> = {
37
+ /** Renders a clip before it is Ready, in a scope the clip owns. */
38
+ readonly build: (clip: LocalClip) => Effect.Effect<Rendered<A>, E, R | Scope.Scope>;
39
+ /**
40
+ * Plays a clip, given the value its build made, in the same scope;
41
+ * `clip.seconds` is its built length. The clip ends when this completes,
42
+ * or when it is stopped, which interrupts it. Without it a clip plays
43
+ * for its length.
44
+ */
45
+ readonly present?: ((clip: LocalClip, value: A, sink: Sink) => Effect.Effect<void, E2, R2 | Scope.Scope>) | undefined;
46
+ /**
47
+ * The session's granted length from when it opens, as a capped paid
48
+ * session has, which a playout renews it before; unending by default.
49
+ */
50
+ readonly lifetime?: Duration.Input | undefined;
51
+ } | {
52
+ readonly build?: undefined;
53
+ /** A presentation plays what a build made, so it comes only with `build`. */
54
+ readonly present?: undefined;
55
+ /** Build time per second of clip; zero by default. */
56
+ readonly buildRatio?: number | undefined;
57
+ /** The session's granted length from when it opens; unending by default. */
58
+ readonly lifetime?: Duration.Input | undefined;
59
+ };
60
+ /**
61
+ * A local source in the caller's scope, whose hooks run with the services the
62
+ * caller has. Closing the scope stops the source, waits for its presentation
63
+ * to stop, then releases every clip. It fails with `InvalidInput` for a
64
+ * `lifetime` that is not a positive, finite duration, or a `buildRatio` that
65
+ * is negative or not finite.
66
+ */
67
+ export declare const open: <A = void, E = never, R = never, E2 = never, R2 = never>(options?: Options<A, E, R, E2, R2>) => Effect.Effect<Source, ReactorError, R | R2 | Scope.Scope>;
68
+ //# sourceMappingURL=LocalSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalSource.d.ts","sourceRoot":"","sources":["../src/LocalSource.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAQxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAKtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAwC,MAAM,cAAc,CAAC;AAE1F,OAAO,EAAkB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjE,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,mCAAmC;AACnC,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,8FAA8F;AAC9F,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,IACtE;IACE,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EACb,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GACtF,SAAS,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;CAChD,GACD;IACE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;CAChD,CAAC;AA4YN;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,YAC/D,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KACjC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAW1D,CAAC"}