reactor-effect-client 0.0.0-reserved.0 → 0.2.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 (267) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +29 -0
  3. package/README.md +124 -2
  4. package/dist/FetchHttp.d.ts +9 -0
  5. package/dist/FetchHttp.d.ts.map +1 -0
  6. package/dist/FetchHttp.js +63 -0
  7. package/dist/FetchHttp.js.map +1 -0
  8. package/dist/PeerFactory.d.ts +15 -0
  9. package/dist/PeerFactory.d.ts.map +1 -0
  10. package/dist/PeerFactory.js +4 -0
  11. package/dist/PeerFactory.js.map +1 -0
  12. package/dist/PeerTypes.d.ts +64 -0
  13. package/dist/PeerTypes.d.ts.map +1 -0
  14. package/dist/PeerTypes.js +2 -0
  15. package/dist/PeerTypes.js.map +1 -0
  16. package/dist/Sequence.d.ts +81 -0
  17. package/dist/Sequence.d.ts.map +1 -0
  18. package/dist/Sequence.js +215 -0
  19. package/dist/Sequence.js.map +1 -0
  20. package/dist/SessionTypes.d.ts +164 -0
  21. package/dist/SessionTypes.d.ts.map +1 -0
  22. package/dist/SessionTypes.js +2 -0
  23. package/dist/SessionTypes.js.map +1 -0
  24. package/dist/Submission.d.ts +42 -0
  25. package/dist/Submission.d.ts.map +1 -0
  26. package/dist/Submission.js +52 -0
  27. package/dist/Submission.js.map +1 -0
  28. package/dist/bytes.d.ts +6 -0
  29. package/dist/bytes.d.ts.map +1 -0
  30. package/dist/bytes.js +32 -0
  31. package/dist/bytes.js.map +1 -0
  32. package/dist/contract.d.ts +58 -0
  33. package/dist/contract.d.ts.map +1 -0
  34. package/dist/contract.js +87 -0
  35. package/dist/contract.js.map +1 -0
  36. package/dist/coordinator/_internal/client.d.ts +127 -0
  37. package/dist/coordinator/_internal/client.d.ts.map +1 -0
  38. package/dist/coordinator/_internal/client.js +450 -0
  39. package/dist/coordinator/_internal/client.js.map +1 -0
  40. package/dist/coordinator/_internal/response.d.ts +15 -0
  41. package/dist/coordinator/_internal/response.d.ts.map +1 -0
  42. package/dist/coordinator/_internal/response.js +57 -0
  43. package/dist/coordinator/_internal/response.js.map +1 -0
  44. package/dist/coordinator/_internal/schemas.d.ts +51 -0
  45. package/dist/coordinator/_internal/schemas.d.ts.map +1 -0
  46. package/dist/coordinator/_internal/schemas.js +170 -0
  47. package/dist/coordinator/_internal/schemas.js.map +1 -0
  48. package/dist/coordinator/index.d.ts +28 -0
  49. package/dist/coordinator/index.d.ts.map +1 -0
  50. package/dist/coordinator/index.js +25 -0
  51. package/dist/coordinator/index.js.map +1 -0
  52. package/dist/correlation.d.ts +32 -0
  53. package/dist/correlation.d.ts.map +1 -0
  54. package/dist/correlation.js +113 -0
  55. package/dist/correlation.js.map +1 -0
  56. package/dist/errors.d.ts +88 -0
  57. package/dist/errors.d.ts.map +1 -0
  58. package/dist/errors.js +93 -0
  59. package/dist/errors.js.map +1 -0
  60. package/dist/h3/_internal/client.d.ts +9 -0
  61. package/dist/h3/_internal/client.d.ts.map +1 -0
  62. package/dist/h3/_internal/client.js +510 -0
  63. package/dist/h3/_internal/client.js.map +1 -0
  64. package/dist/h3/_internal/contracts.d.ts +123 -0
  65. package/dist/h3/_internal/contracts.d.ts.map +1 -0
  66. package/dist/h3/_internal/contracts.js +113 -0
  67. package/dist/h3/_internal/contracts.js.map +1 -0
  68. package/dist/h3/_internal/deployment.d.ts +8 -0
  69. package/dist/h3/_internal/deployment.d.ts.map +1 -0
  70. package/dist/h3/_internal/deployment.js +132 -0
  71. package/dist/h3/_internal/deployment.js.map +1 -0
  72. package/dist/h3/_internal/evidence.d.ts +17 -0
  73. package/dist/h3/_internal/evidence.d.ts.map +1 -0
  74. package/dist/h3/_internal/evidence.js +48 -0
  75. package/dist/h3/_internal/evidence.js.map +1 -0
  76. package/dist/h3/_internal/references.d.ts +18 -0
  77. package/dist/h3/_internal/references.d.ts.map +1 -0
  78. package/dist/h3/_internal/references.js +186 -0
  79. package/dist/h3/_internal/references.js.map +1 -0
  80. package/dist/h3/_internal/request.d.ts +16 -0
  81. package/dist/h3/_internal/request.d.ts.map +1 -0
  82. package/dist/h3/_internal/request.js +79 -0
  83. package/dist/h3/_internal/request.js.map +1 -0
  84. package/dist/h3/_internal/state.d.ts +30 -0
  85. package/dist/h3/_internal/state.d.ts.map +1 -0
  86. package/dist/h3/_internal/state.js +243 -0
  87. package/dist/h3/_internal/state.js.map +1 -0
  88. package/dist/h3/index.d.ts +10 -0
  89. package/dist/h3/index.d.ts.map +1 -0
  90. package/dist/h3/index.js +7 -0
  91. package/dist/h3/index.js.map +1 -0
  92. package/dist/h3/messages.d.ts +310 -0
  93. package/dist/h3/messages.d.ts.map +1 -0
  94. package/dist/h3/messages.js +114 -0
  95. package/dist/h3/messages.js.map +1 -0
  96. package/dist/h3/profile.d.ts +109 -0
  97. package/dist/h3/profile.d.ts.map +1 -0
  98. package/dist/h3/profile.js +70 -0
  99. package/dist/h3/profile.js.map +1 -0
  100. package/dist/h3/types.d.ts +173 -0
  101. package/dist/h3/types.d.ts.map +1 -0
  102. package/dist/h3/types.js +2 -0
  103. package/dist/h3/types.js.map +1 -0
  104. package/dist/host.d.ts +25 -0
  105. package/dist/host.d.ts.map +1 -0
  106. package/dist/host.js +20 -0
  107. package/dist/host.js.map +1 -0
  108. package/dist/index.d.ts +17 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +8 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/json.d.ts +18 -0
  113. package/dist/json.d.ts.map +1 -0
  114. package/dist/json.js +123 -0
  115. package/dist/json.js.map +1 -0
  116. package/dist/media-stream.d.ts +10 -0
  117. package/dist/media-stream.d.ts.map +1 -0
  118. package/dist/media-stream.js +20 -0
  119. package/dist/media-stream.js.map +1 -0
  120. package/dist/observation.d.ts +26 -0
  121. package/dist/observation.d.ts.map +1 -0
  122. package/dist/observation.js +106 -0
  123. package/dist/observation.js.map +1 -0
  124. package/dist/orchestration/h3-source.d.ts +30 -0
  125. package/dist/orchestration/h3-source.d.ts.map +1 -0
  126. package/dist/orchestration/h3-source.js +303 -0
  127. package/dist/orchestration/h3-source.js.map +1 -0
  128. package/dist/orchestration/index.d.ts +12 -0
  129. package/dist/orchestration/index.d.ts.map +1 -0
  130. package/dist/orchestration/index.js +9 -0
  131. package/dist/orchestration/index.js.map +1 -0
  132. package/dist/orchestration/media-buffer.d.ts +23 -0
  133. package/dist/orchestration/media-buffer.d.ts.map +1 -0
  134. package/dist/orchestration/media-buffer.js +73 -0
  135. package/dist/orchestration/media-buffer.js.map +1 -0
  136. package/dist/orchestration/queries.d.ts +10 -0
  137. package/dist/orchestration/queries.d.ts.map +1 -0
  138. package/dist/orchestration/queries.js +40 -0
  139. package/dist/orchestration/queries.js.map +1 -0
  140. package/dist/orchestration/references.d.ts +16 -0
  141. package/dist/orchestration/references.d.ts.map +1 -0
  142. package/dist/orchestration/references.js +76 -0
  143. package/dist/orchestration/references.js.map +1 -0
  144. package/dist/orchestration/renewal-state.d.ts +58 -0
  145. package/dist/orchestration/renewal-state.d.ts.map +1 -0
  146. package/dist/orchestration/renewal-state.js +60 -0
  147. package/dist/orchestration/renewal-state.js.map +1 -0
  148. package/dist/orchestration/renewal.d.ts +76 -0
  149. package/dist/orchestration/renewal.d.ts.map +1 -0
  150. package/dist/orchestration/renewal.js +633 -0
  151. package/dist/orchestration/renewal.js.map +1 -0
  152. package/dist/orchestration/request.d.ts +53 -0
  153. package/dist/orchestration/request.d.ts.map +1 -0
  154. package/dist/orchestration/request.js +122 -0
  155. package/dist/orchestration/request.js.map +1 -0
  156. package/dist/orchestration/routing.d.ts +21 -0
  157. package/dist/orchestration/routing.d.ts.map +1 -0
  158. package/dist/orchestration/routing.js +90 -0
  159. package/dist/orchestration/routing.js.map +1 -0
  160. package/dist/orchestration/source-slot.d.ts +99 -0
  161. package/dist/orchestration/source-slot.d.ts.map +1 -0
  162. package/dist/orchestration/source-slot.js +206 -0
  163. package/dist/orchestration/source-slot.js.map +1 -0
  164. package/dist/orchestration/types.d.ts +334 -0
  165. package/dist/orchestration/types.d.ts.map +1 -0
  166. package/dist/orchestration/types.js +11 -0
  167. package/dist/orchestration/types.js.map +1 -0
  168. package/dist/protobuf.d.ts +63 -0
  169. package/dist/protobuf.d.ts.map +1 -0
  170. package/dist/protobuf.js +252 -0
  171. package/dist/protobuf.js.map +1 -0
  172. package/dist/session/_internal/acquire.d.ts +23 -0
  173. package/dist/session/_internal/acquire.d.ts.map +1 -0
  174. package/dist/session/_internal/acquire.js +167 -0
  175. package/dist/session/_internal/acquire.js.map +1 -0
  176. package/dist/session/_internal/cleanup.d.ts +18 -0
  177. package/dist/session/_internal/cleanup.d.ts.map +1 -0
  178. package/dist/session/_internal/cleanup.js +94 -0
  179. package/dist/session/_internal/cleanup.js.map +1 -0
  180. package/dist/session/_internal/lifecycle.d.ts +62 -0
  181. package/dist/session/_internal/lifecycle.d.ts.map +1 -0
  182. package/dist/session/_internal/lifecycle.js +132 -0
  183. package/dist/session/_internal/lifecycle.js.map +1 -0
  184. package/dist/session/_internal/remote.d.ts +28 -0
  185. package/dist/session/_internal/remote.d.ts.map +1 -0
  186. package/dist/session/_internal/remote.js +61 -0
  187. package/dist/session/_internal/remote.js.map +1 -0
  188. package/dist/session/_internal/uploads.d.ts +4 -0
  189. package/dist/session/_internal/uploads.d.ts.map +1 -0
  190. package/dist/session/_internal/uploads.js +33 -0
  191. package/dist/session/_internal/uploads.js.map +1 -0
  192. package/dist/session/commands.d.ts +22 -0
  193. package/dist/session/commands.d.ts.map +1 -0
  194. package/dist/session/commands.js +13 -0
  195. package/dist/session/commands.js.map +1 -0
  196. package/dist/session/files.d.ts +15 -0
  197. package/dist/session/files.d.ts.map +1 -0
  198. package/dist/session/files.js +54 -0
  199. package/dist/session/files.js.map +1 -0
  200. package/dist/session/index.d.ts +76 -0
  201. package/dist/session/index.d.ts.map +1 -0
  202. package/dist/session/index.js +16 -0
  203. package/dist/session/index.js.map +1 -0
  204. package/dist/session/media.d.ts +67 -0
  205. package/dist/session/media.d.ts.map +1 -0
  206. package/dist/session/media.js +2 -0
  207. package/dist/session/media.js.map +1 -0
  208. package/dist/session.d.ts +104 -0
  209. package/dist/session.d.ts.map +1 -0
  210. package/dist/session.js +872 -0
  211. package/dist/session.js.map +1 -0
  212. package/dist/simulation/_internal/source.d.ts +12 -0
  213. package/dist/simulation/_internal/source.d.ts.map +1 -0
  214. package/dist/simulation/_internal/source.js +477 -0
  215. package/dist/simulation/_internal/source.js.map +1 -0
  216. package/dist/simulation/index.d.ts +14 -0
  217. package/dist/simulation/index.d.ts.map +1 -0
  218. package/dist/simulation/index.js +13 -0
  219. package/dist/simulation/index.js.map +1 -0
  220. package/dist/simulation/types.d.ts +29 -0
  221. package/dist/simulation/types.d.ts.map +1 -0
  222. package/dist/simulation/types.js +2 -0
  223. package/dist/simulation/types.js.map +1 -0
  224. package/dist/stats.d.ts +33 -0
  225. package/dist/stats.d.ts.map +1 -0
  226. package/dist/stats.js +134 -0
  227. package/dist/stats.js.map +1 -0
  228. package/dist/testing/Faults.d.ts +4 -0
  229. package/dist/testing/Faults.d.ts.map +1 -0
  230. package/dist/testing/Faults.js +7 -0
  231. package/dist/testing/Faults.js.map +1 -0
  232. package/dist/testing/Png.d.ts +3 -0
  233. package/dist/testing/Png.d.ts.map +1 -0
  234. package/dist/testing/Png.js +68 -0
  235. package/dist/testing/Png.js.map +1 -0
  236. package/dist/testing/index.d.ts +3 -0
  237. package/dist/testing/index.d.ts.map +1 -0
  238. package/dist/testing/index.js +3 -0
  239. package/dist/testing/index.js.map +1 -0
  240. package/dist/wire.d.ts +7 -0
  241. package/dist/wire.d.ts.map +1 -0
  242. package/dist/wire.generated.d.ts +305 -0
  243. package/dist/wire.generated.d.ts.map +1 -0
  244. package/dist/wire.generated.js +1257 -0
  245. package/dist/wire.generated.js.map +1 -0
  246. package/dist/wire.js +5 -0
  247. package/dist/wire.js.map +1 -0
  248. package/notices/effect-LICENSE +21 -0
  249. package/notices/google-protobuf-LICENSE +32 -0
  250. package/notices/owned-webrtc/Effect-MIT.txt +21 -0
  251. package/notices/owned-webrtc/IETF.txt +43 -0
  252. package/notices/owned-webrtc/LICENSE +21 -0
  253. package/notices/owned-webrtc/UPSTREAM.md +20 -0
  254. package/notices/owned-webrtc/VP8-ADAPTATION.md +32 -0
  255. package/notices/owned-webrtc/VP8-AUTHORS.txt +42 -0
  256. package/notices/owned-webrtc/VP8-LICENSE.txt +25 -0
  257. package/notices/owned-webrtc/VP8-PATENTS.txt +21 -0
  258. package/notices/owned-webrtc/Werift-MIT.txt +21 -0
  259. package/notices/owned-webrtc/libvpx-v1.12.0-LICENSE.txt +28 -0
  260. package/notices/owned-webrtc/libvpx-v1.12.0-PATENTS.txt +22 -0
  261. package/notices/owned-webrtc/rfc3711.txt +3139 -0
  262. package/notices/owned-webrtc/str0m-MIT.txt +7 -0
  263. package/notices/owned-webrtc-LICENSE +21 -0
  264. package/notices/reactor-runtime-LICENSE +201 -0
  265. package/notices/reactor-runtime-NOTICE +5 -0
  266. package/notices/reactor-sdk-LICENSE +201 -0
  267. package/package.json +62 -4
@@ -0,0 +1,76 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Path from "effect/Path";
4
+ import * as Schema from "effect/Schema";
5
+ import * as Http from "effect/unstable/http/HttpClient";
6
+ import { ReactorError } from "../errors.js";
7
+ import { collectBytes } from "../bytes.js";
8
+ import { readFileBytes } from "../session/files.js";
9
+ const failure = (message, detail) => new ReactorError("Upload", message, {
10
+ operation: "load reference",
11
+ outcome: "not-submitted",
12
+ ...(detail === undefined ? {} : { detail }),
13
+ });
14
+ /**
15
+ * Every call rereads the URI. The H3 provider deduplicates subsequent uploads by
16
+ * the bytes' hash; a URI cache cannot establish that mutable content is unchanged.
17
+ * This loader works independently of any live provider session.
18
+ */
19
+ export const loadReferenceBytes = (uri, limits) => Effect.gen(function* () {
20
+ if (typeof uri !== "string" ||
21
+ !Number.isSafeInteger(limits.maxBytes) ||
22
+ limits.maxBytes <= 0 ||
23
+ !Number.isFinite(limits.timeoutMs) ||
24
+ limits.timeoutMs <= 0) {
25
+ return yield* Effect.fail(failure("Reference URI and positive finite loading bounds are required"));
26
+ }
27
+ if (uri.startsWith("data:")) {
28
+ const comma = uri.indexOf(",");
29
+ if (comma < 0 || !uri.slice(0, comma).endsWith(";base64"))
30
+ return yield* Effect.fail(failure("Only base64 data URIs are supported"));
31
+ const encoded = uri.slice(comma + 1);
32
+ if (encoded.length > 4 * Math.ceil(limits.maxBytes / 3))
33
+ return yield* Effect.fail(failure("Reference exceeds the byte bound"));
34
+ const result = Schema.decodeUnknownResult(Schema.Uint8ArrayFromBase64)(encoded);
35
+ if (result._tag === "Failure")
36
+ return yield* Effect.fail(failure("Invalid base64 reference", result.failure));
37
+ if (result.success.byteLength > limits.maxBytes)
38
+ return yield* Effect.fail(failure("Reference exceeds the byte bound"));
39
+ return result.success;
40
+ }
41
+ if (uri.startsWith("/") || uri.startsWith("file://")) {
42
+ const path = uri.startsWith("/")
43
+ ? uri
44
+ : yield* Effect.gen(function* () {
45
+ const url = yield* Effect.try({
46
+ try: () => new URL(uri),
47
+ catch: (cause) => failure("Invalid file URI", cause),
48
+ });
49
+ return yield* (yield* Path.Path)
50
+ .fromFileUrl(url)
51
+ .pipe(Effect.mapError((cause) => failure("Invalid file URI", cause)));
52
+ });
53
+ return yield* readFileBytes(path, limits.maxBytes).pipe(Effect.mapError((cause) => cause instanceof ReactorError
54
+ ? cause
55
+ : failure("Reference file could not be read", cause)));
56
+ }
57
+ if (uri.startsWith("http://") || uri.startsWith("https://")) {
58
+ const http = Http.withScope(yield* Http.HttpClient);
59
+ return yield* Effect.scoped(Effect.gen(function* () {
60
+ const response = yield* http
61
+ .get(uri)
62
+ .pipe(Effect.mapError((cause) => failure("Reference download failed", cause)));
63
+ if (response.status < 200 || response.status >= 300)
64
+ return yield* Effect.fail(failure(`Reference download returned HTTP ${response.status}`));
65
+ const declared = Number(response.headers["content-length"] ?? "0");
66
+ if (Number.isFinite(declared) && declared > limits.maxBytes)
67
+ return yield* Effect.fail(failure("Reference exceeds the byte bound"));
68
+ return yield* collectBytes(response.stream, limits.maxBytes).pipe(Effect.mapError((cause) => cause instanceof ReactorError ? cause : failure("Reference download failed", cause)));
69
+ }));
70
+ }
71
+ return yield* Effect.fail(failure("Unsupported reference URI scheme"));
72
+ }).pipe(Effect.timeoutOrElse({
73
+ duration: limits.timeoutMs,
74
+ orElse: () => Effect.fail(failure("Reference loading timed out")),
75
+ }));
76
+ //# sourceMappingURL=references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/orchestration/references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /** Pure renewal policy. Inputs are observations, never resource handles or effects. */
2
+ export type RecoveryMode = "reconnect" | "replace";
3
+ export type SourcePhase = {
4
+ readonly _tag: "Active";
5
+ } | {
6
+ readonly _tag: "Recovering";
7
+ readonly mode: RecoveryMode;
8
+ } | {
9
+ readonly _tag: "Closing";
10
+ } | {
11
+ readonly _tag: "Closed";
12
+ };
13
+ export type SourceTransition = {
14
+ readonly _tag: "Recover";
15
+ readonly mode: RecoveryMode;
16
+ } | {
17
+ readonly _tag: "Recovered";
18
+ } | {
19
+ readonly _tag: "Close";
20
+ } | {
21
+ readonly _tag: "Closed";
22
+ };
23
+ /** Recovery can escalate, but neither a late completion nor another error can reopen a source. */
24
+ export declare const transitionSource: (phase: SourcePhase, event: SourceTransition) => SourcePhase;
25
+ export declare const isClosed: (phase: SourcePhase) => boolean;
26
+ export interface Lifetime {
27
+ readonly openedAt: number;
28
+ readonly maxSeconds: number;
29
+ }
30
+ export declare const ageMillis: (source: Lifetime, now: number) => number;
31
+ export declare const expired: (source: Lifetime, now: number) => boolean;
32
+ /** Recovery shares the remote lifetime; post-lease accounting has a separate cleanup budget. */
33
+ export declare const recoveryBudget: (source: Lifetime, now: number, timeoutMs: number) => number;
34
+ export interface RenewalFacts {
35
+ readonly running: boolean;
36
+ readonly now: number;
37
+ readonly current: (Lifetime & {
38
+ readonly phase: SourcePhase;
39
+ }) | undefined;
40
+ readonly replacement: "Absent" | "Opening" | SourcePhase;
41
+ readonly leadSeconds: number;
42
+ readonly retryAt: number;
43
+ }
44
+ export type RenewalDecision = "Retain" | "Prepare" | "InspectHandoff" | "Expire";
45
+ /** Expiry is checked before sequence, queue, or media readiness can delay retirement. */
46
+ export declare const decideRenewal: (facts: RenewalFacts) => RenewalDecision;
47
+ export interface HandoffFacts {
48
+ readonly sequenceOpen: boolean;
49
+ readonly currentIdle: boolean;
50
+ readonly replacementReady: boolean;
51
+ readonly video: "not-started" | "count-complete" | "incomplete";
52
+ readonly droppedVideo: bigint | null;
53
+ readonly droppedAudio: bigint | null;
54
+ }
55
+ /** Unknown pressure never establishes a clean handoff. Queued output remains caller-owned. */
56
+ export declare const canHandoff: (facts: HandoffFacts) => boolean;
57
+ export declare const needsReplacement: (phase: SourcePhase, indeterminate: boolean, isExpired: boolean) => boolean;
58
+ //# sourceMappingURL=renewal-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renewal-state.d.ts","sourceRoot":"","sources":["../../src/orchestration/renewal-state.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnD,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC5D;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,UAAW,WAAW,SAAS,gBAAgB,KAAG,WA2B9E,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,WAAW,KAAG,OACO,CAAC;AAEtD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,WAAY,QAAQ,OAAO,MAAM,KAAG,MAA+B,CAAC;AAC1F,eAAO,MAAM,OAAO,WAAY,QAAQ,OAAO,MAAM,KAAG,OACJ,CAAC;AAErD,gGAAgG;AAChG,eAAO,MAAM,cAAc,WAAY,QAAQ,OAAO,MAAM,aAAa,MAAM,KAAG,MACG,CAAC;AAEtF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IAC3E,QAAQ,CAAC,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,QAAQ,CAAC;AAEjF,yFAAyF;AACzF,eAAO,MAAM,aAAa,UAAW,YAAY,KAAG,eAanD,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC;IAChE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,8FAA8F;AAC9F,eAAO,MAAM,UAAU,UAAW,YAAY,KAAG,OAMtB,CAAC;AAE5B,eAAO,MAAM,gBAAgB,UACpB,WAAW,iBACH,OAAO,aACX,OAAO,KACjB,OACsF,CAAC"}
@@ -0,0 +1,60 @@
1
+ /** Recovery can escalate, but neither a late completion nor another error can reopen a source. */
2
+ export const transitionSource = (phase, event) => {
3
+ switch (phase._tag) {
4
+ case "Closed":
5
+ return phase;
6
+ case "Closing":
7
+ return event._tag === "Closed" ? { _tag: "Closed" } : phase;
8
+ case "Active":
9
+ switch (event._tag) {
10
+ case "Recover":
11
+ return { _tag: "Recovering", mode: event.mode };
12
+ case "Close":
13
+ return { _tag: "Closing" };
14
+ default:
15
+ return phase;
16
+ }
17
+ case "Recovering":
18
+ switch (event._tag) {
19
+ case "Recover":
20
+ return event.mode === "replace" ? { _tag: "Recovering", mode: "replace" } : phase;
21
+ case "Recovered":
22
+ return phase.mode === "reconnect" ? { _tag: "Active" } : phase;
23
+ case "Close":
24
+ return { _tag: "Closing" };
25
+ default:
26
+ return phase;
27
+ }
28
+ }
29
+ };
30
+ export const isClosed = (phase) => phase._tag === "Closing" || phase._tag === "Closed";
31
+ export const ageMillis = (source, now) => now - source.openedAt;
32
+ export const expired = (source, now) => ageMillis(source, now) >= source.maxSeconds * 1000;
33
+ /** Recovery shares the remote lifetime; post-lease accounting has a separate cleanup budget. */
34
+ export const recoveryBudget = (source, now, timeoutMs) => Math.min(timeoutMs, Math.max(1, source.maxSeconds * 1000 - ageMillis(source, now)));
35
+ /** Expiry is checked before sequence, queue, or media readiness can delay retirement. */
36
+ export const decideRenewal = (facts) => {
37
+ const current = facts.current;
38
+ if (!facts.running || current === undefined || current.phase._tag !== "Active")
39
+ return "Retain";
40
+ if (expired(current, facts.now))
41
+ return "Expire";
42
+ if (facts.replacement === "Absent") {
43
+ return ageMillis(current, facts.now) >= (current.maxSeconds - facts.leadSeconds) * 1000 &&
44
+ facts.now >= facts.retryAt
45
+ ? "Prepare"
46
+ : "Retain";
47
+ }
48
+ return facts.replacement !== "Opening" && facts.replacement._tag === "Active"
49
+ ? "InspectHandoff"
50
+ : "Retain";
51
+ };
52
+ /** Unknown pressure never establishes a clean handoff. Queued output remains caller-owned. */
53
+ export const canHandoff = (facts) => !facts.sequenceOpen &&
54
+ facts.currentIdle &&
55
+ facts.replacementReady &&
56
+ facts.video !== "incomplete" &&
57
+ facts.droppedVideo === 0n &&
58
+ facts.droppedAudio === 0n;
59
+ export const needsReplacement = (phase, indeterminate, isExpired) => indeterminate || isExpired || (phase._tag === "Recovering" && phase.mode === "replace");
60
+ //# sourceMappingURL=renewal-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renewal-state.js","sourceRoot":"","sources":["../../src/orchestration/renewal-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import * as Crypto from "effect/Crypto";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Scope from "effect/Scope";
4
+ import { ReactorError } from "../errors.js";
5
+ import type { HandleShape, Source } from "./types.js";
6
+ export interface Options<R = never> {
7
+ readonly open: Effect.Effect<{
8
+ readonly source: Source;
9
+ readonly maxSeconds: number;
10
+ }, unknown, Scope.Scope | R>;
11
+ readonly leadSeconds?: number;
12
+ readonly reconnectTimeoutMs?: number;
13
+ readonly maxSessions?: number;
14
+ readonly log?: (message: string) => void;
15
+ readonly onRenewal?: (event: Renewal) => Effect.Effect<void>;
16
+ }
17
+ export interface MediaTail {
18
+ readonly video: {
19
+ readonly framesPerSecond: number;
20
+ readonly expectedFrames: number;
21
+ readonly receivedFrames: number;
22
+ readonly status: "not-started" | "count-complete" | "incomplete";
23
+ };
24
+ readonly audio: {
25
+ readonly receivedSamples: number;
26
+ readonly status: "unverified";
27
+ };
28
+ readonly sourceDrops: {
29
+ readonly video: bigint | null;
30
+ readonly audio: bigint | null;
31
+ };
32
+ readonly forwarded: {
33
+ readonly queuedVideoFrames: number;
34
+ readonly queuedAudioSamples: number;
35
+ };
36
+ }
37
+ export type Renewal = {
38
+ readonly _tag: "Opened";
39
+ readonly sessionId: string;
40
+ readonly maxSeconds: number;
41
+ } | {
42
+ readonly _tag: "Prepared";
43
+ } | {
44
+ readonly _tag: "SetupFailed";
45
+ readonly reason: string;
46
+ readonly consecutive: number;
47
+ } | {
48
+ readonly _tag: "Recovering";
49
+ readonly sessionId: string;
50
+ readonly reason: string;
51
+ } | {
52
+ readonly _tag: "Reconnected";
53
+ readonly sessionId: string;
54
+ readonly generation: bigint;
55
+ } | {
56
+ readonly _tag: "Switched";
57
+ readonly sessionId: string;
58
+ readonly ageSeconds: number;
59
+ readonly tail: MediaTail;
60
+ } | {
61
+ readonly _tag: "Replaced";
62
+ readonly reason: string;
63
+ readonly lostClips: number;
64
+ readonly sessionId: string;
65
+ readonly ageSeconds: number;
66
+ readonly tail: MediaTail;
67
+ } | {
68
+ readonly _tag: "Failed";
69
+ readonly reason: string;
70
+ };
71
+ /**
72
+ * Explicit application policy for renewal, sequence affinity and continuous
73
+ * recovering media. A physical source still owns each connection generation.
74
+ */
75
+ export declare const make: <R>(options: Options<R>) => Effect.Effect<HandleShape, ReactorError, Scope.Scope | Crypto.Crypto | R>;
76
+ //# sourceMappingURL=renewal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renewal.d.ts","sourceRoot":"","sources":["../../src/orchestration/renewal.ts"],"names":[],"mappings":"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"}