reactor-effect-client 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -2
- package/dist/_internal/queue.d.ts +6 -0
- package/dist/_internal/queue.d.ts.map +1 -0
- package/dist/_internal/queue.js +30 -0
- package/dist/_internal/queue.js.map +1 -0
- package/dist/duration.d.ts +2 -0
- package/dist/duration.d.ts.map +1 -1
- package/dist/duration.js +1 -1
- package/dist/duration.js.map +1 -1
- package/dist/host.d.ts +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +1 -0
- package/dist/host.js.map +1 -1
- package/dist/observation.d.ts +3 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +9 -4
- package/dist/observation.js.map +1 -1
- package/dist/orchestration/h3-source.d.ts.map +1 -1
- package/dist/orchestration/h3-source.js +28 -9
- package/dist/orchestration/h3-source.js.map +1 -1
- package/dist/orchestration/index.d.ts +6 -6
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +3 -3
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/media-buffer.d.ts +2 -1
- package/dist/orchestration/media-buffer.d.ts.map +1 -1
- package/dist/orchestration/media-buffer.js +5 -4
- package/dist/orchestration/media-buffer.js.map +1 -1
- package/dist/orchestration/queries.d.ts.map +1 -1
- package/dist/orchestration/queries.js +3 -0
- package/dist/orchestration/queries.js.map +1 -1
- package/dist/orchestration/renewal-state.d.ts +28 -4
- package/dist/orchestration/renewal-state.d.ts.map +1 -1
- package/dist/orchestration/renewal-state.js +42 -7
- package/dist/orchestration/renewal-state.js.map +1 -1
- package/dist/orchestration/renewal.d.ts +39 -3
- package/dist/orchestration/renewal.d.ts.map +1 -1
- package/dist/orchestration/renewal.js +490 -103
- package/dist/orchestration/renewal.js.map +1 -1
- package/dist/orchestration/retention.d.ts +100 -0
- package/dist/orchestration/retention.d.ts.map +1 -0
- package/dist/orchestration/retention.js +134 -0
- package/dist/orchestration/retention.js.map +1 -0
- package/dist/orchestration/scheduler-key.d.ts +13 -0
- package/dist/orchestration/scheduler-key.d.ts.map +1 -0
- package/dist/orchestration/scheduler-key.js +62 -0
- package/dist/orchestration/scheduler-key.js.map +1 -0
- package/dist/orchestration/scheduler-policy.d.ts +81 -0
- package/dist/orchestration/scheduler-policy.d.ts.map +1 -0
- package/dist/orchestration/scheduler-policy.js +200 -0
- package/dist/orchestration/scheduler-policy.js.map +1 -0
- package/dist/orchestration/scheduler.d.ts +184 -0
- package/dist/orchestration/scheduler.d.ts.map +1 -0
- package/dist/orchestration/scheduler.js +1680 -0
- package/dist/orchestration/scheduler.js.map +1 -0
- package/dist/orchestration/source-slot.d.ts +20 -5
- package/dist/orchestration/source-slot.d.ts.map +1 -1
- package/dist/orchestration/source-slot.js +151 -29
- package/dist/orchestration/source-slot.js.map +1 -1
- package/dist/orchestration/types.d.ts +545 -6
- package/dist/orchestration/types.d.ts.map +1 -1
- package/dist/orchestration/types.js +105 -1
- package/dist/orchestration/types.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +2 -1
- package/dist/session.js.map +1 -1
- package/dist/simulation/_internal/source.d.ts.map +1 -1
- package/dist/simulation/_internal/source.js +43 -31
- package/dist/simulation/_internal/source.js.map +1 -1
- package/package.json +2 -2
- package/dist/orchestration/lineup.d.ts +0 -109
- package/dist/orchestration/lineup.d.ts.map +0 -1
- package/dist/orchestration/lineup.js +0 -249
- package/dist/orchestration/lineup.js.map +0 -1
|
@@ -2,6 +2,7 @@ import * as Cause from "effect/Cause";
|
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Queue from "effect/Queue";
|
|
4
4
|
import * as Stream from "effect/Stream";
|
|
5
|
+
import { take as takeQueue } from "../_internal/queue.js";
|
|
5
6
|
import { ReactorError } from "../errors.js";
|
|
6
7
|
/**
|
|
7
8
|
* One reader at a time drains a queue. A second concurrent reader fails with
|
|
@@ -18,7 +19,7 @@ const singleReader = (kind, queue, taken) => {
|
|
|
18
19
|
return Effect.void;
|
|
19
20
|
}), () => Effect.sync(() => {
|
|
20
21
|
reading = false;
|
|
21
|
-
})).pipe(Effect.as(Stream.fromEffectRepeat(Effect.uninterruptibleMask((restore) => restore(
|
|
22
|
+
})).pipe(Effect.as(Stream.fromEffectRepeat(Effect.uninterruptibleMask((restore) => restore(takeQueue(queue)).pipe(Effect.map((value) => {
|
|
22
23
|
taken(value);
|
|
23
24
|
return value;
|
|
24
25
|
})))))));
|
|
@@ -74,12 +75,12 @@ export const make = (limits = defaultLimits) => Effect.gen(function* () {
|
|
|
74
75
|
queuedBytes: queuedVideoBytes + queuedSamples * 2,
|
|
75
76
|
}),
|
|
76
77
|
forwarded: () => ({ queuedVideoFrames: queuedFrames, queuedAudioSamples: queuedSamples }),
|
|
77
|
-
|
|
78
|
+
failCause: (cause) => {
|
|
78
79
|
if (ended)
|
|
79
80
|
return;
|
|
80
81
|
ended = true;
|
|
81
|
-
Queue.failCauseUnsafe(video,
|
|
82
|
-
Queue.failCauseUnsafe(audio,
|
|
82
|
+
Queue.failCauseUnsafe(video, cause);
|
|
83
|
+
Queue.failCauseUnsafe(audio, cause);
|
|
83
84
|
},
|
|
84
85
|
end: () => {
|
|
85
86
|
if (ended)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-buffer.js","sourceRoot":"","sources":["../../src/orchestration/media-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C;;;;;GAKG;AACH,MAAM,YAAY,GAAG,CACnB,IAAY,EACZ,KAAqC,EACrC,KAAyB,EACW,EAAE;IACtC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,cAAc,CACnB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,OAAO;YACT,OAAO,MAAM,CAAC,IAAI,CAChB,YAAY,CAAC,QAAQ,CACnB,gBAAgB,EAChB,iBAAiB,IAAI,+BAA+B,EACpD,EAAE,OAAO,EAAE,eAAe,EAAE,CAC7B,CACF,CAAC;QACJ,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC,CAAC,EACF,GAAG,EAAE,CACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC,CAAC,CACL,CAAC,IAAI,CACJ,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,gBAAgB,CACrB,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CACrC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"media-buffer.js","sourceRoot":"","sources":["../../src/orchestration/media-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/orchestration/queries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,UAAU,QAAO,
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/orchestration/queries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,UAAU,QAAO,WAe5B,CAAC;AAEH,4EAA4E;AAC5E,eAAO,MAAM,MAAM,UAAW,WAAW,KAAG,OAKd,CAAC;AAE/B,wEAAwE;AACxE,eAAO,MAAM,SAAS,UAAW,WAAW,OAAO,MAAM,KAAG,MAY3D,CAAC;AAEF,eAAO,MAAM,WAAW,UAAW,WAAW,OAAO,MAAM,KAAG,MAMgB,CAAC;AAE/E,eAAO,MAAM,YAAY,UAAW,WAAW,KAAG,MACkC,CAAC;AAErF,eAAO,MAAM,MAAM,UAAW,WAAW,KAAG,OAAwB,CAAC"}
|
|
@@ -2,6 +2,9 @@ import * as Option from "effect/Option";
|
|
|
2
2
|
import { h3ReferenceTurboRealtime } from "../h3/profile.js";
|
|
3
3
|
export const emptyState = () => ({
|
|
4
4
|
availability: "Synchronizing",
|
|
5
|
+
sessions: [],
|
|
6
|
+
preferredSessionId: Option.none(),
|
|
7
|
+
retiringSessionId: Option.none(),
|
|
5
8
|
queued: [],
|
|
6
9
|
generationOrder: [],
|
|
7
10
|
building: Option.none(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/orchestration/queries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/orchestration/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ClipId } from "./request.js";
|
|
2
|
+
import type { Renewal } from "./types.js";
|
|
1
3
|
/** Pure renewal policy. Inputs are observations, never resource handles or effects. */
|
|
2
4
|
export type RecoveryMode = "reconnect" | "replace";
|
|
3
5
|
export type SourcePhase = {
|
|
@@ -46,15 +48,37 @@ export interface RenewalFacts {
|
|
|
46
48
|
export type RenewalDecision = "Retain" | "Prepare" | "InspectHandoff" | "Expire";
|
|
47
49
|
/** Expiry is checked before sequence, queue, or media readiness can delay retirement. */
|
|
48
50
|
export declare const decideRenewal: (facts: RenewalFacts) => RenewalDecision;
|
|
51
|
+
/** The retiring source's last started clip, as its owner has observed it. */
|
|
52
|
+
export interface FinalClip {
|
|
53
|
+
readonly video: "not-started" | "count-complete" | "incomplete";
|
|
54
|
+
readonly clipId: ClipId | undefined;
|
|
55
|
+
readonly expectedVideoFrames: number;
|
|
56
|
+
readonly receivedVideoFrames: number;
|
|
57
|
+
/** Monotonic milliseconds since Ended or the idle fallback; undefined while it plays. */
|
|
58
|
+
readonly endedAgoMs: number | undefined;
|
|
59
|
+
readonly graceOrigin: "Ended" | "Idle" | undefined;
|
|
60
|
+
}
|
|
49
61
|
export interface HandoffFacts {
|
|
50
62
|
readonly sequenceOpen: boolean;
|
|
51
63
|
readonly currentIdle: boolean;
|
|
52
64
|
readonly replacementReady: boolean;
|
|
53
|
-
readonly
|
|
54
|
-
readonly
|
|
55
|
-
readonly droppedAudio: bigint | null;
|
|
65
|
+
readonly finalClip: FinalClip;
|
|
66
|
+
readonly graceMs: number;
|
|
56
67
|
}
|
|
57
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Media and provider events arrive on separate readers, so a clip's last frames
|
|
70
|
+
* can land after its Ended. A frame the provider never sent never lands, so a
|
|
71
|
+
* short clip is waited on only for the grace past Ended; waiting for the count
|
|
72
|
+
* instead left the retiring source idle until expiry. The shortfall is still
|
|
73
|
+
* reported, with any earlier loss, on the retirement's tail.
|
|
74
|
+
*/
|
|
75
|
+
export declare const finalClipSettled: (clip: Pick<FinalClip, "video" | "endedAgoMs">, graceMs: number) => boolean;
|
|
76
|
+
type Handoff = NonNullable<Extract<Renewal, {
|
|
77
|
+
readonly _tag: "Switched";
|
|
78
|
+
}>["handoff"]>;
|
|
79
|
+
/** One decision owns both admission and evidence, so the two cannot disagree at a grace boundary. */
|
|
80
|
+
export declare const handoffEvidence: (facts: HandoffFacts) => Omit<Handoff, "replacementSessionId"> | undefined;
|
|
58
81
|
export declare const canHandoff: (facts: HandoffFacts) => boolean;
|
|
59
82
|
export declare const needsReplacement: (phase: SourcePhase, indeterminate: boolean, isExpired: boolean) => boolean;
|
|
83
|
+
export {};
|
|
60
84
|
//# sourceMappingURL=renewal-state.d.ts.map
|
|
@@ -1 +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,kGAAkG;IAClG,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,wEAAwE;IACxE,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,
|
|
1
|
+
{"version":3,"file":"renewal-state.d.ts","sourceRoot":"","sources":["../../src/orchestration/renewal-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,12 +49,47 @@ export const decideRenewal = (facts) => {
|
|
|
49
49
|
? "InspectHandoff"
|
|
50
50
|
: "Retain";
|
|
51
51
|
};
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Media and provider events arrive on separate readers, so a clip's last frames
|
|
54
|
+
* can land after its Ended. A frame the provider never sent never lands, so a
|
|
55
|
+
* short clip is waited on only for the grace past Ended; waiting for the count
|
|
56
|
+
* instead left the retiring source idle until expiry. The shortfall is still
|
|
57
|
+
* reported, with any earlier loss, on the retirement's tail.
|
|
58
|
+
*/
|
|
59
|
+
export const finalClipSettled = (clip, graceMs) => clip.video !== "incomplete" || (clip.endedAgoMs !== undefined && clip.endedAgoMs >= graceMs);
|
|
60
|
+
/** One decision owns both admission and evidence, so the two cannot disagree at a grace boundary. */
|
|
61
|
+
export const handoffEvidence = (facts) => {
|
|
62
|
+
if (facts.sequenceOpen ||
|
|
63
|
+
!facts.currentIdle ||
|
|
64
|
+
!facts.replacementReady ||
|
|
65
|
+
!finalClipSettled(facts.finalClip, facts.graceMs))
|
|
66
|
+
return undefined;
|
|
67
|
+
const clip = facts.finalClip;
|
|
68
|
+
return Object.freeze({
|
|
69
|
+
decision: clip.clipId === undefined
|
|
70
|
+
? "no-observed-start"
|
|
71
|
+
: clip.video === "incomplete"
|
|
72
|
+
? "grace-elapsed"
|
|
73
|
+
: "count-complete",
|
|
74
|
+
finalClip: clip.clipId === undefined
|
|
75
|
+
? Object.freeze({ _tag: "NoObservedStart" })
|
|
76
|
+
: Object.freeze({
|
|
77
|
+
_tag: "Observed",
|
|
78
|
+
clipId: clip.clipId,
|
|
79
|
+
expectedVideoFrames: clip.expectedVideoFrames,
|
|
80
|
+
receivedVideoFrames: clip.receivedVideoFrames,
|
|
81
|
+
videoStatus: clip.video === "incomplete" ? "incomplete" : "count-complete",
|
|
82
|
+
}),
|
|
83
|
+
grace: clip.endedAgoMs === undefined || clip.graceOrigin === undefined
|
|
84
|
+
? Object.freeze({ _tag: "NotObserved" })
|
|
85
|
+
: Object.freeze({
|
|
86
|
+
_tag: "Observed",
|
|
87
|
+
origin: clip.graceOrigin,
|
|
88
|
+
elapsedMs: clip.endedAgoMs,
|
|
89
|
+
limitMs: facts.graceMs,
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
export const canHandoff = (facts) => handoffEvidence(facts) !== undefined;
|
|
59
94
|
export const needsReplacement = (phase, indeterminate, isExpired) => indeterminate || isExpired || (phase._tag === "Recovering" && phase.mode === "replace");
|
|
60
95
|
//# sourceMappingURL=renewal-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renewal-state.js","sourceRoot":"","sources":["../../src/orchestration/renewal-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renewal-state.js","sourceRoot":"","sources":["../../src/orchestration/renewal-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import * as Effect from "effect/Effect";
|
|
|
4
4
|
import * as Layer from "effect/Layer";
|
|
5
5
|
import * as Scope from "effect/Scope";
|
|
6
6
|
import { AcquisitionFailure, ReactorError } from "../errors.js";
|
|
7
|
-
import type { HandleShape, Renewal, Source } from "./types.js";
|
|
7
|
+
import type { ContinuousHandleShape, HandleShape, Renewal, Source } from "./types.js";
|
|
8
8
|
import type { Engine, Handle, Media } from "./types.js";
|
|
9
9
|
export type { MediaTail, Renewal } from "./types.js";
|
|
10
10
|
/** An opened source and how long its remote session may live. */
|
|
@@ -32,6 +32,18 @@ export interface Options<R = never> {
|
|
|
32
32
|
*/
|
|
33
33
|
readonly reconnectTimeout?: Duration.Input | undefined;
|
|
34
34
|
readonly maxSessions?: number;
|
|
35
|
+
/**
|
|
36
|
+
* How long past the retiring source's final clip a planned switch waits for
|
|
37
|
+
* that clip's missing video frames; 250 milliseconds by default. Frames can
|
|
38
|
+
* land after the clip's Ended, but one the provider never sent never does,
|
|
39
|
+
* so the switch then proceeds and `Switched.tail` reports the shortfall. The
|
|
40
|
+
* grace also starts when the source reports nothing playing, in case Ended
|
|
41
|
+
* was lost. At most 5 seconds, since the retiring source running dry within
|
|
42
|
+
* it is not reported as `Starved`. Renewal checks every 100 milliseconds, so
|
|
43
|
+
* the switch can come up to one check after the grace. A bare number is
|
|
44
|
+
* milliseconds.
|
|
45
|
+
*/
|
|
46
|
+
readonly handoffGrace?: Duration.Input | undefined;
|
|
35
47
|
/**
|
|
36
48
|
* The video frames the media output keeps for a reader that has not taken
|
|
37
49
|
* them, 96 by default (4 seconds at 24 fps). Past it the orchestration fails
|
|
@@ -54,10 +66,34 @@ export interface Options<R = never> {
|
|
|
54
66
|
readonly onRenewal?: (event: Renewal) => Effect.Effect<void>;
|
|
55
67
|
}
|
|
56
68
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
69
|
+
* Each open must supply a globally unique physical source ID; clip IDs must
|
|
70
|
+
* never be reassigned during this handle's lifetime. Continuous mode checks live
|
|
71
|
+
* collisions, but cannot detect historical reuse after eviction with bounded memory.
|
|
72
|
+
* Source/clip IDs are limited to 1024 UTF-16 code units; each source admits at most
|
|
73
|
+
* 4096 accepted IDs and 4096 distinct Started IDs. Sequence history still requires
|
|
74
|
+
* explicit acknowledgement/release and keeps its independent bounds.
|
|
59
75
|
*/
|
|
76
|
+
export interface ContinuousOptions<R = never> extends Options<R> {
|
|
77
|
+
/** Supply globally unique source IDs and never reassign clip IDs; historical reuse cannot be checked after eviction. */
|
|
78
|
+
readonly open: Options<R>["open"];
|
|
79
|
+
/** No cumulative successful-open cap when omitted; explicit values retain legacy semantics. */
|
|
80
|
+
readonly maxSessions?: number;
|
|
81
|
+
/** Newest complete cleanup details retained, 0..4096; defaults to 64. */
|
|
82
|
+
readonly retainedSuccessfulCleanups?: number;
|
|
83
|
+
/**
|
|
84
|
+
* Incomplete cleanup or unknown-submission records plus outstanding reservations,
|
|
85
|
+
* 2..4096; defaults to 16. Unknown outcomes can exhaust it despite confirmed termination.
|
|
86
|
+
*/
|
|
87
|
+
readonly maxUnresolvedCleanups?: number;
|
|
88
|
+
}
|
|
89
|
+
/** Legacy renewal retains complete cleanup history and defaults to 64 successful opens. */
|
|
60
90
|
export declare const make: <R>(options: Options<R>) => Effect.Effect<HandleShape, ReactorError | AcquisitionFailure, Scope.Scope | Crypto.Crypto | R>;
|
|
91
|
+
/**
|
|
92
|
+
* Bounded continuous renewal. Adapters must meet ContinuousOptions' unique-ID
|
|
93
|
+
* precondition. Retired anchors no longer retained can refuse as missing rather
|
|
94
|
+
* than SessionRetired; captured operations remain fenced to their exact incarnation.
|
|
95
|
+
*/
|
|
96
|
+
export declare const makeContinuous: <R>(options: ContinuousOptions<R>) => Effect.Effect<ContinuousHandleShape, ReactorError | AcquisitionFailure, Scope.Scope | Crypto.Crypto | R>;
|
|
61
97
|
/**
|
|
62
98
|
* The handle's `Engine`, `Media` and `Handle` services from one orchestration,
|
|
63
99
|
* so the three can never come from two paid session chains. Each build of the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renewal.d.ts","sourceRoot":"","sources":["../../src/orchestration/renewal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,OAAO,EACL,kBAAkB,EAElB,YAAY,EAIb,MAAM,cAAc,CAAC;AAiBtB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"renewal.d.ts","sourceRoot":"","sources":["../../src/orchestration/renewal.ts"],"names":[],"mappings":"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"}
|