effect-browser 0.2.0-beta.9 → 0.3.0-beta.6

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 (202) hide show
  1. package/README.md +707 -1184
  2. package/dist/Browser-B5AV7zPS.mjs +437 -0
  3. package/dist/Browser-B5AV7zPS.mjs.map +1 -0
  4. package/dist/Browser.d.mts +115 -3
  5. package/dist/Browser.mjs +2 -22
  6. package/dist/BrowserError-DXXIA6Rk.d.mts +135 -0
  7. package/dist/BrowserError.d.mts +2 -0
  8. package/dist/BrowserError.mjs +202 -0
  9. package/dist/BrowserError.mjs.map +1 -0
  10. package/dist/BrowserEvent-DzdNdvoh.d.mts +277 -0
  11. package/dist/BrowserEvent.d.mts +2 -0
  12. package/dist/BrowserEvent.mjs +295 -0
  13. package/dist/BrowserEvent.mjs.map +1 -0
  14. package/dist/Cdp.d.mts +32 -0
  15. package/dist/Cdp.mjs +61 -0
  16. package/dist/Cdp.mjs.map +1 -0
  17. package/dist/Change-DNvztNLu.mjs +138 -0
  18. package/dist/Change-DNvztNLu.mjs.map +1 -0
  19. package/dist/Change-DVP2IJWm.d.mts +71 -0
  20. package/dist/Change.d.mts +2 -0
  21. package/dist/Change.mjs +2 -0
  22. package/dist/Chromium.d.mts +29 -81
  23. package/dist/Chromium.mjs +57 -392
  24. package/dist/Chromium.mjs.map +1 -1
  25. package/dist/Expect.d.mts +62 -0
  26. package/dist/Expect.mjs +114 -0
  27. package/dist/Expect.mjs.map +1 -0
  28. package/dist/Frame-BERmf_gM.d.mts +117 -0
  29. package/dist/Frame.d.mts +2 -0
  30. package/dist/Frame.mjs +123 -0
  31. package/dist/Frame.mjs.map +1 -0
  32. package/dist/Moment.d.mts +2 -0
  33. package/dist/Moment.mjs +288 -0
  34. package/dist/Moment.mjs.map +1 -0
  35. package/dist/Motion.d.mts +40 -0
  36. package/dist/Motion.mjs +122 -0
  37. package/dist/Motion.mjs.map +1 -0
  38. package/dist/Page-D4281dIi.mjs +618 -0
  39. package/dist/Page-D4281dIi.mjs.map +1 -0
  40. package/dist/Page-DYTdVhYa.d.mts +593 -0
  41. package/dist/Page.d.mts +2 -0
  42. package/dist/Page.mjs +2 -0
  43. package/dist/Plan-5MdsRzE5.mjs +314 -0
  44. package/dist/Plan-5MdsRzE5.mjs.map +1 -0
  45. package/dist/Plan-CNNOU1Tx.d.mts +112 -0
  46. package/dist/Plan.d.mts +2 -3
  47. package/dist/Plan.mjs +2 -2
  48. package/dist/Policy.d.mts +76 -0
  49. package/dist/Policy.mjs +237 -0
  50. package/dist/Policy.mjs.map +1 -0
  51. package/dist/Presentation.d.mts +48 -0
  52. package/dist/Presentation.mjs +117 -0
  53. package/dist/Presentation.mjs.map +1 -0
  54. package/dist/Snapshot-B34hZ4Jl.d.mts +68 -0
  55. package/dist/Snapshot.d.mts +2 -0
  56. package/dist/Snapshot.mjs +79 -0
  57. package/dist/Snapshot.mjs.map +1 -0
  58. package/dist/Stage.d.mts +54 -0
  59. package/dist/Stage.mjs +133 -0
  60. package/dist/Stage.mjs.map +1 -0
  61. package/dist/Supervisor-BtEG93gR.mjs +420 -0
  62. package/dist/Supervisor-BtEG93gR.mjs.map +1 -0
  63. package/dist/Supervisor-Im6-wbg5.d.mts +230 -0
  64. package/dist/Supervisor.d.mts +2 -0
  65. package/dist/Supervisor.mjs +2 -0
  66. package/dist/context-DAYjATgC.mjs +137 -0
  67. package/dist/context-DAYjATgC.mjs.map +1 -0
  68. package/dist/index.d.mts +17 -14
  69. package/dist/index.mjs +18 -13
  70. package/dist/match.inpage-xOe9LNO0.mjs +48 -0
  71. package/dist/match.inpage-xOe9LNO0.mjs.map +1 -0
  72. package/dist/page-BkRcLCWZ.mjs +5097 -0
  73. package/dist/page-BkRcLCWZ.mjs.map +1 -0
  74. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  75. package/dist/url-CcL0K7S0.mjs +262 -0
  76. package/dist/url-CcL0K7S0.mjs.map +1 -0
  77. package/package.json +96 -61
  78. package/src/Browser.ts +625 -0
  79. package/src/BrowserError.ts +225 -0
  80. package/src/BrowserEvent.ts +294 -0
  81. package/src/Cdp.ts +101 -0
  82. package/src/Change.ts +88 -0
  83. package/src/Chromium.ts +102 -0
  84. package/src/Expect.ts +180 -0
  85. package/src/Frame.ts +130 -0
  86. package/src/Moment.ts +479 -0
  87. package/src/Motion.ts +166 -0
  88. package/src/Page.ts +520 -0
  89. package/src/Plan.ts +354 -0
  90. package/src/Policy.ts +325 -0
  91. package/src/Presentation.ts +195 -0
  92. package/src/Snapshot.ts +89 -0
  93. package/src/Stage.ts +223 -0
  94. package/src/Supervisor.ts +353 -0
  95. package/src/index.ts +20 -0
  96. package/src/internal/input/actions.ts +610 -0
  97. package/src/internal/input/dispatch.ts +161 -0
  98. package/src/internal/input/edit.inpage.ts +162 -0
  99. package/src/internal/input/evidence.inpage.ts +164 -0
  100. package/src/internal/input/guard.inpage.ts +605 -0
  101. package/src/internal/input/guard.ts +183 -0
  102. package/src/internal/input/keyboard.ts +112 -0
  103. package/src/internal/input/keys.ts +127 -0
  104. package/src/internal/input/perform.ts +322 -0
  105. package/src/internal/input/pointer.ts +153 -0
  106. package/src/internal/input/replies.ts +159 -0
  107. package/src/internal/input/settle.ts +50 -0
  108. package/src/internal/input/style.ts +186 -0
  109. package/src/internal/input/targets.inpage.ts +293 -0
  110. package/src/internal/input/targets.ts +148 -0
  111. package/src/internal/page/bridge.ts +386 -0
  112. package/src/internal/page/context.ts +302 -0
  113. package/src/internal/page/lane.ts +301 -0
  114. package/src/internal/page/navigation.ts +183 -0
  115. package/src/internal/page/openings.ts +87 -0
  116. package/src/internal/page/page.ts +137 -0
  117. package/src/internal/page/url.ts +100 -0
  118. package/src/internal/page/viewport.ts +43 -0
  119. package/src/internal/pictures/capture.ts +778 -0
  120. package/src/internal/pictures/clock.ts +141 -0
  121. package/src/internal/pictures/pictures.ts +520 -0
  122. package/src/internal/pictures/transport.ts +242 -0
  123. package/src/internal/reading/choose.ts +100 -0
  124. package/src/internal/reading/context.inpage.ts +201 -0
  125. package/src/internal/reading/controls.inpage.ts +158 -0
  126. package/src/internal/reading/expect.inpage.ts +70 -0
  127. package/src/internal/reading/match.inpage.ts +92 -0
  128. package/src/internal/reading/names.inpage.ts +306 -0
  129. package/src/internal/reading/outline.inpage.ts +260 -0
  130. package/src/internal/reading/reading.ts +223 -0
  131. package/src/internal/reading/ready.inpage.ts +154 -0
  132. package/src/internal/reading/ready.ts +105 -0
  133. package/src/internal/reading/subjects.inpage.ts +188 -0
  134. package/src/internal/reading/text.inpage.ts +135 -0
  135. package/src/internal/reading/walk.inpage.ts +220 -0
  136. package/src/internal/supervisor/lifecycle.ts +265 -0
  137. package/src/internal/timeline/changes.inpage.ts +216 -0
  138. package/src/internal/timeline/changes.ts +100 -0
  139. package/src/internal/timeline/events.ts +93 -0
  140. package/src/internal/timeline/fold.inpage.ts +123 -0
  141. package/src/internal/timeline/history.inpage.ts +229 -0
  142. package/src/internal/timeline/marks.inpage.ts +207 -0
  143. package/src/internal/timeline/record.inpage.ts +133 -0
  144. package/src/internal/timeline/sight.inpage.ts +122 -0
  145. package/src/internal/timeline/window.ts +96 -0
  146. package/src/internal/timeline/words.ts +65 -0
  147. package/dist/Bootstrap-B9UUXsvF.d.mts +0 -183
  148. package/dist/Bootstrap-CeQOWBy6.mjs +0 -189
  149. package/dist/Bootstrap-CeQOWBy6.mjs.map +0 -1
  150. package/dist/Bootstrap.d.mts +0 -3
  151. package/dist/Bootstrap.mjs +0 -2
  152. package/dist/Browser-BF9_sORP.d.mts +0 -388
  153. package/dist/Browser.mjs.map +0 -1
  154. package/dist/BrowserData-CPIIIHol.d.mts +0 -585
  155. package/dist/BrowserData.d.mts +0 -3
  156. package/dist/BrowserData.mjs +0 -695
  157. package/dist/BrowserData.mjs.map +0 -1
  158. package/dist/BrowserRuntime-B6nT1G4X.d.mts +0 -148
  159. package/dist/BrowserRuntime-C1r2aSRK.mjs +0 -6820
  160. package/dist/BrowserRuntime-C1r2aSRK.mjs.map +0 -1
  161. package/dist/BrowserRuntime.d.mts +0 -3
  162. package/dist/BrowserRuntime.mjs +0 -3
  163. package/dist/Capture.d.mts +0 -56
  164. package/dist/Capture.mjs +0 -678
  165. package/dist/Capture.mjs.map +0 -1
  166. package/dist/CaptureData-CYriZHX1.mjs +0 -201
  167. package/dist/CaptureData-CYriZHX1.mjs.map +0 -1
  168. package/dist/CaptureData.d.mts +0 -219
  169. package/dist/CaptureData.mjs +0 -2
  170. package/dist/Errors.d.mts +0 -158
  171. package/dist/Errors.mjs +0 -207
  172. package/dist/Errors.mjs.map +0 -1
  173. package/dist/Images-yCG9BmRU.mjs +0 -76
  174. package/dist/Images-yCG9BmRU.mjs.map +0 -1
  175. package/dist/OperationOptions-DAeRS6O9.mjs +0 -55
  176. package/dist/OperationOptions-DAeRS6O9.mjs.map +0 -1
  177. package/dist/PageControl.d.mts +0 -15
  178. package/dist/PageControl.mjs +0 -34
  179. package/dist/PageControl.mjs.map +0 -1
  180. package/dist/PageRegistry-B3q9DS3g.mjs +0 -164
  181. package/dist/PageRegistry-B3q9DS3g.mjs.map +0 -1
  182. package/dist/Plan-Dyxu2q8C.mjs +0 -543
  183. package/dist/Plan-Dyxu2q8C.mjs.map +0 -1
  184. package/dist/PlanData-B668RxbQ.d.mts +0 -4831
  185. package/dist/PlanData.d.mts +0 -3
  186. package/dist/PlanData.mjs +0 -268
  187. package/dist/PlanData.mjs.map +0 -1
  188. package/dist/PlanInput-BJcPPncs.mjs +0 -75
  189. package/dist/PlanInput-BJcPPncs.mjs.map +0 -1
  190. package/dist/PublicSession-DCSMMqOj.mjs +0 -5602
  191. package/dist/PublicSession-DCSMMqOj.mjs.map +0 -1
  192. package/dist/Testing.d.mts +0 -479
  193. package/dist/Testing.mjs +0 -2147
  194. package/dist/Testing.mjs.map +0 -1
  195. package/dist/Timeline-fV22Xk-S.d.mts +0 -29
  196. package/dist/Timeline.d.mts +0 -4
  197. package/dist/Timeline.mjs +0 -20
  198. package/dist/Timeline.mjs.map +0 -1
  199. package/dist/TimelineData-BsOn-YGZ.d.mts +0 -3818
  200. package/dist/TimelineData.d.mts +0 -3
  201. package/dist/TimelineData.mjs +0 -482
  202. package/dist/TimelineData.mjs.map +0 -1
@@ -1,3 +0,0 @@
1
- import { A as Stamp, B as TimelineLimit, C as PayloadTag, D as Snapshot, E as SelectorJson, F as TerminalReason, H as TimelineMaximums, I as TimelineCursorError, L as TimelineDefaults, M as StoreIdentity, N as Terminal, O as SnapshotJson, P as TerminalJson, R as TimelineError, S as PayloadJson, T as Selector, V as TimelineMalformed, _ as Interval, a as ClientPage, b as PagesInventory, c as ClientPagesInventory, d as Correlation, f as Cursor, g as EvidenceTarget, h as EventJson, i as ClientEventJson, j as StampJson, k as SnapshotOptions, l as ClientPayload, m as Event, n as CaptureReason, o as ClientPageEvent, p as CursorJson, r as ClientEvent, s as ClientPageEventJson, t as CachedPage, u as ClientPayloadJson, v as IntervalJson, w as Retention, x as Payload, y as PageEvent, z as TimelineGap } from "./TimelineData-BsOn-YGZ.mjs";
2
- export { CachedPage, CaptureReason, ClientEvent, ClientEventJson, ClientPage, ClientPageEvent, ClientPageEventJson, ClientPagesInventory, ClientPayload, ClientPayloadJson, Correlation, Cursor, CursorJson, Event, EventJson, EvidenceTarget, Interval, IntervalJson, PageEvent, PagesInventory, Payload, PayloadJson, PayloadTag, Retention, Selector, SelectorJson, Snapshot, SnapshotJson, SnapshotOptions, Stamp, StampJson, StoreIdentity, Terminal, TerminalJson, TerminalReason, TimelineCursorError, TimelineDefaults, TimelineError, TimelineGap, TimelineLimit, TimelineMalformed, TimelineMaximums };
3
- export {};
@@ -1,482 +0,0 @@
1
- import { BrowserOperation, BrowserOutcome, Containment, Reasons } from "./Errors.mjs";
2
- import { Identifier } from "./BrowserData.mjs";
3
- import { Action } from "./PlanData.mjs";
4
- import { n as CaptureQualification } from "./CaptureData-CYriZHX1.mjs";
5
- import { Schema, Struct } from "effect";
6
- //#region src/TimelineData.ts
7
- /** One journal identity on one captured host clock; neither is a native credential. */
8
- const StoreIdentity = Schema.Struct({
9
- storeId: Identifier,
10
- clockId: Identifier
11
- });
12
- const TimelineDefaults = Object.freeze({
13
- maxDurationMillis: 6e4,
14
- maxEvents: 4096,
15
- maxBytes: 4194304,
16
- maxSubscribers: 32,
17
- maxEventBytes: 65536
18
- });
19
- const TimelineMaximums = Object.freeze({
20
- maxDurationMillis: 216e5,
21
- maxEvents: 65536,
22
- maxBytes: 67108864,
23
- maxSubscribers: 256,
24
- maxEventBytes: 1048576
25
- });
26
- const maximumInteger = (1n << 128n) - 1n;
27
- const Sequence = Schema.BigInt.check(Schema.isGreaterThanOrEqualToBigInt(0n), Schema.isLessThanOrEqualToBigInt(maximumInteger));
28
- const Counter = Schema.Natural.check(Schema.isLessThanOrEqualTo(Number.MAX_SAFE_INTEGER));
29
- const Geometry = Schema.Struct({
30
- x: Schema.Finite,
31
- y: Schema.Finite
32
- });
33
- const Cursor = Schema.Struct({
34
- ...StoreIdentity.fields,
35
- sequence: Sequence
36
- });
37
- const CursorJson = Schema.toCodecJson(Cursor);
38
- /** An offset from this clock domain's origin, never a portable absolute monotonic instant. */
39
- const Stamp = Schema.Struct({
40
- clockId: Identifier,
41
- offsetNanos: Sequence
42
- });
43
- const StampJson = Schema.toCodecJson(Stamp);
44
- const Selector = Schema.Union([Cursor, Schema.Struct({ at: Stamp })]);
45
- const SelectorJson = Schema.toCodecJson(Selector);
46
- /** Null frame/document fields disclose unavailable attribution instead of inventing it. */
47
- const EvidenceTarget = Schema.Struct({
48
- generation: Counter,
49
- pageId: Identifier,
50
- frameId: Schema.NullOr(Identifier),
51
- document: Schema.NullOr(Counter)
52
- });
53
- const Correlation = Schema.Struct({
54
- runId: Identifier,
55
- stepId: Identifier,
56
- attemptId: Identifier,
57
- fieldIndex: Schema.optionalKey(Schema.Natural.check(Schema.isLessThanOrEqualTo(127)))
58
- });
59
- const TerminalReason = Schema.Literals([
60
- "closed",
61
- "detached",
62
- "disconnected",
63
- "faulted",
64
- "uncertain",
65
- "expired",
66
- "stale",
67
- "contained",
68
- "cancelled"
69
- ]);
70
- const CaptureReason = Schema.Literals([
71
- "stopped",
72
- "parent-unavailable",
73
- "malformed-frame",
74
- "frame-limit",
75
- "timestamp-discontinuity",
76
- "resized",
77
- "target-changed",
78
- "duration-limit"
79
- ]);
80
- const TerminalScope = Schema.Literals(["session", "page"]);
81
- /** The planned action's tag, from the plan schema itself. */
82
- const ActionKind = Schema.Literals(Struct.keys(Action.cases));
83
- /** A failure records only its reason's tag, from the host reasons themselves. */
84
- const FailureReason = Schema.Literals(Struct.keys(Reasons));
85
- /** Every payload tag; an omission names the one it stands for when that tag was readable. */
86
- const PayloadTag = Schema.Literals([
87
- "Planned",
88
- "Prepared",
89
- "Dispatched",
90
- "Acknowledged",
91
- "FollowUp",
92
- "Pointer",
93
- "Press",
94
- "Keys",
95
- "Scroll",
96
- "Glide",
97
- "Navigated",
98
- "CaptureBoundary",
99
- "Capture",
100
- "FirstFrame",
101
- "Picture",
102
- "Settled",
103
- "Contained",
104
- "Failed",
105
- "Cancelled",
106
- "Lifecycle",
107
- "PageOpened",
108
- "PageClosed",
109
- "DisplayChanged",
110
- "MetadataChanged",
111
- "Terminal",
112
- "MetadataOmitted"
113
- ]);
114
- const Interval = Schema.Struct({
115
- start: Stamp,
116
- end: Stamp,
117
- qualification: Schema.Literal("native-call-interval")
118
- });
119
- const IntervalJson = Schema.toCodecJson(Interval);
120
- const makePayload = (address) => {
121
- const operationId = Schema.optionalKey(Identifier);
122
- const phase = {
123
- operation: BrowserOperation,
124
- operationId: Identifier,
125
- late: Schema.Boolean,
126
- nativeOrdinal: Schema.optionalKey(Counter),
127
- mutation: Schema.optionalKey(Schema.Boolean)
128
- };
129
- /** A preparatory or burst acknowledgement; absent when the reply completed the logical input. */
130
- const acknowledgement = Schema.Struct({
131
- subphase: Schema.Literals([
132
- "scroll-into-view",
133
- "focus",
134
- "key-burst",
135
- "scroll-burst"
136
- ]),
137
- logicalComplete: Schema.Boolean
138
- });
139
- return Schema.Union([
140
- Schema.TaggedStruct("Planned", { action: ActionKind }),
141
- Schema.TaggedStruct("Prepared", phase),
142
- Schema.TaggedStruct("Dispatched", phase),
143
- Schema.TaggedStruct("Acknowledged", {
144
- ...phase,
145
- acknowledgement: Schema.optionalKey(acknowledgement)
146
- }),
147
- Schema.TaggedStruct("FollowUp", phase),
148
- Schema.TaggedStruct("Pointer", {
149
- kind: Schema.Literals(["pointer-move", "hover"]),
150
- position: Schema.NullOr(Geometry),
151
- interval: Interval,
152
- operationId
153
- }),
154
- Schema.TaggedStruct("Press", {
155
- position: Schema.NullOr(Geometry),
156
- intended: Schema.optionalKey(Schema.Struct({
157
- position: Geometry,
158
- relativePosition: Geometry,
159
- qualification: Schema.Literal("checked-exact-node-sample")
160
- })),
161
- interval: Interval,
162
- operationId
163
- }),
164
- Schema.TaggedStruct("Keys", {
165
- kind: Schema.Literals(["press", "type"]),
166
- count: Counter,
167
- countUnit: Schema.Literals(["unicode-codepoints", "logical-strokes"]),
168
- interval: Interval,
169
- operationId
170
- }),
171
- Schema.TaggedStruct("Scroll", {
172
- kind: Schema.Literals(["wheel", "scroll"]),
173
- delta: Schema.NullOr(Geometry),
174
- interval: Interval,
175
- operationId,
176
- qualification: Schema.optionalKey(Schema.Literal("exact-node-scroll-into-view"))
177
- }),
178
- Schema.TaggedStruct("Glide", {
179
- operationId,
180
- schedule: Schema.Array(Schema.Struct({
181
- at: Stamp,
182
- position: Geometry
183
- })).check(Schema.isMinLength(2), Schema.isMaxLength(128)),
184
- qualification: Schema.Literal("intended-schedule")
185
- }),
186
- Schema.TaggedStruct("Navigated", {
187
- sameDocument: Schema.Boolean,
188
- ...address
189
- }),
190
- Schema.TaggedStruct("CaptureBoundary", {
191
- captureId: Identifier,
192
- captureBoundary: Counter,
193
- captureDocument: Counter,
194
- sameDocument: Schema.Boolean,
195
- afterSequence: Schema.NullOr(Counter),
196
- observed: Stamp,
197
- qualification: Schema.Literal("received-boundary-attribution"),
198
- ...address
199
- }),
200
- Schema.TaggedStruct("Capture", {
201
- captureId: Identifier,
202
- phase: Schema.Literals([
203
- "Reserved",
204
- "Watching",
205
- "Started",
206
- "Ended",
207
- "Stopped"
208
- ]),
209
- latePhase: Schema.Boolean,
210
- observed: Stamp,
211
- captureBoundary: Counter,
212
- captureDocument: Counter,
213
- qualification: CaptureQualification,
214
- reason: Schema.NullOr(CaptureReason),
215
- nativeStop: Schema.NullOr(Schema.Literals(["confirmed", "unconfirmed"])),
216
- received: Counter,
217
- delivered: Counter,
218
- discarded: Counter,
219
- overflow: Counter,
220
- late: Counter,
221
- duplicates: Counter,
222
- rejected: Counter,
223
- upstreamDrops: Schema.Literal("unknown")
224
- }),
225
- Schema.TaggedStruct("FirstFrame", {
226
- captureId: Identifier,
227
- frameSequence: Counter,
228
- captureDocument: Counter,
229
- captureBoundary: Counter,
230
- sourceTimeMillis: Schema.Finite.check(Schema.isGreaterThan(0)),
231
- sourceClock: Schema.Literal("presentation-unix-millis"),
232
- received: Stamp,
233
- width: Schema.Int.check(Schema.isBetween({
234
- minimum: 1,
235
- maximum: 16384
236
- })),
237
- height: Schema.Int.check(Schema.isBetween({
238
- minimum: 1,
239
- maximum: 16384
240
- })),
241
- viewportWidth: Schema.Int.check(Schema.isBetween({
242
- minimum: 1,
243
- maximum: 16384
244
- })),
245
- viewportHeight: Schema.Int.check(Schema.isBetween({
246
- minimum: 1,
247
- maximum: 16384
248
- })),
249
- qualification: Schema.Literal("received-boundary-attribution")
250
- }),
251
- Schema.TaggedStruct("Picture", {
252
- mediaType: Schema.Literals(["image/png", "image/jpeg"]),
253
- nativeRequest: Stamp,
254
- nativeReturn: Stamp,
255
- requestDocument: Schema.NullOr(Counter),
256
- returnDocument: Schema.NullOr(Counter),
257
- width: Schema.optionalKey(Schema.Int.check(Schema.isBetween({
258
- minimum: 1,
259
- maximum: 16384
260
- }))),
261
- height: Schema.optionalKey(Schema.Int.check(Schema.isBetween({
262
- minimum: 1,
263
- maximum: 16384
264
- }))),
265
- qualification: Schema.Literal("native-call-interval"),
266
- operationId
267
- }),
268
- Schema.TaggedStruct("Settled", {
269
- quietMillis: Schema.Finite.check(Schema.isGreaterThan(0)),
270
- withinMillis: Schema.Finite.check(Schema.isGreaterThan(0)),
271
- signals: Schema.Array(Schema.Literals([
272
- "dom-mutation",
273
- "scroll",
274
- "root-geometry",
275
- "viewport"
276
- ])).check(Schema.isMinLength(1), Schema.isMaxLength(4)),
277
- operationId
278
- }),
279
- Schema.TaggedStruct("Contained", { containment: Containment }),
280
- Schema.TaggedStruct("Failed", {
281
- operation: BrowserOperation,
282
- reason: FailureReason,
283
- outcome: BrowserOutcome,
284
- operationId
285
- }),
286
- Schema.TaggedStruct("Cancelled", {
287
- outcome: BrowserOutcome,
288
- operationId
289
- }),
290
- Schema.TaggedStruct("Lifecycle", { phase: Schema.Literals([
291
- "acquiring",
292
- "open",
293
- "paused",
294
- "detached",
295
- "faulted",
296
- "uncertain",
297
- "closing",
298
- "closed"
299
- ]) }),
300
- Schema.TaggedStruct("PageOpened", {}),
301
- Schema.TaggedStruct("PageClosed", {}),
302
- Schema.TaggedStruct("DisplayChanged", {
303
- selected: Schema.Boolean,
304
- displayState: Schema.Literals([
305
- "running",
306
- "held",
307
- "unknown"
308
- ])
309
- }),
310
- Schema.TaggedStruct("MetadataChanged", {}),
311
- Schema.TaggedStruct("Terminal", {
312
- scope: TerminalScope,
313
- reason: TerminalReason
314
- }),
315
- Schema.TaggedStruct("MetadataOmitted", {
316
- reason: Schema.Literals(["Malformed", "Oversized"]),
317
- originalTag: Schema.NullOr(PayloadTag)
318
- })
319
- ]);
320
- };
321
- /** Host metadata: addresses are qualified facts; text, descriptors, bytes and native objects stay absent. */
322
- const Payload = makePayload({
323
- url: Schema.NullOr(Schema.String.check(Schema.isMaxLength(8192))),
324
- urlQualification: Schema.Literals([
325
- "NativeCached",
326
- "Unread",
327
- "Omitted"
328
- ])
329
- });
330
- const PayloadJson = Schema.toCodecJson(Payload);
331
- const ClientPayload = makePayload({});
332
- const ClientPayloadJson = Schema.toCodecJson(ClientPayload);
333
- const envelopeFields = {
334
- version: Schema.Literal(1),
335
- ...StoreIdentity.fields,
336
- target: Schema.NullOr(EvidenceTarget),
337
- correlation: Schema.NullOr(Correlation)
338
- };
339
- const coherentClock = (value) => {
340
- if (value.at.clockId !== value.clockId) return false;
341
- const matches = (stamp) => stamp.clockId === value.clockId;
342
- const event = value.event;
343
- switch (event._tag) {
344
- case "Pointer":
345
- case "Press":
346
- case "Keys":
347
- case "Scroll": return matches(event.interval.start) && matches(event.interval.end) && event.interval.end.offsetNanos >= event.interval.start.offsetNanos;
348
- case "Picture": return matches(event.nativeRequest) && matches(event.nativeReturn) && event.nativeReturn.offsetNanos >= event.nativeRequest.offsetNanos;
349
- case "FirstFrame": return matches(event.received);
350
- case "Capture":
351
- case "CaptureBoundary": return matches(event.observed);
352
- case "Glide": return event.schedule.every((sample, index) => matches(sample.at) && (index === 0 || sample.at.offsetNanos >= (event.schedule[index - 1]?.at.offsetNanos ?? 0n)));
353
- case "Planned":
354
- case "Prepared":
355
- case "Dispatched":
356
- case "Acknowledged":
357
- case "FollowUp":
358
- case "Navigated":
359
- case "Settled":
360
- case "Contained":
361
- case "Failed":
362
- case "Cancelled":
363
- case "Lifecycle":
364
- case "PageOpened":
365
- case "PageClosed":
366
- case "DisplayChanged":
367
- case "MetadataChanged":
368
- case "Terminal":
369
- case "MetadataOmitted": return true;
370
- }
371
- };
372
- const clockCheck = Schema.makeFilter(coherentClock, { title: "coherent clock domain and ordered native intervals" });
373
- const Event = Schema.Struct({
374
- ...envelopeFields,
375
- sequence: Sequence,
376
- at: Stamp,
377
- event: Payload
378
- }).check(clockCheck);
379
- const EventJson = Schema.toCodecJson(Event);
380
- const ClientEvent = Schema.Struct({
381
- ...envelopeFields,
382
- sequence: Sequence,
383
- at: Stamp,
384
- event: ClientPayload
385
- }).check(clockCheck);
386
- const ClientEventJson = Schema.toCodecJson(ClientEvent);
387
- const Terminal = Schema.Struct({
388
- cursor: Cursor,
389
- at: Stamp,
390
- scope: TerminalScope,
391
- reason: TerminalReason
392
- });
393
- const TerminalJson = Schema.toCodecJson(Terminal);
394
- const snapshotFields = {
395
- evicted: Counter,
396
- retainedBytes: Counter
397
- };
398
- const Snapshot = Schema.Struct({
399
- ...snapshotFields,
400
- events: Schema.Array(Event).check(Schema.isMaxLength(65536)),
401
- oldest: Schema.NullOr(Cursor),
402
- newest: Schema.NullOr(Cursor),
403
- resumeAfter: Cursor,
404
- evictedThrough: Cursor,
405
- terminal: Schema.NullOr(Terminal)
406
- });
407
- const SnapshotJson = Schema.toCodecJson(Snapshot);
408
- const SnapshotOptions = Schema.Struct({ from: Schema.optionalKey(Selector) });
409
- var TimelineGap = class extends Schema.TaggedError()("TimelineGap", {
410
- requested: Selector,
411
- oldest: Schema.NullOr(Cursor),
412
- newest: Schema.NullOr(Cursor),
413
- resumeAfter: Cursor,
414
- evictedThrough: Cursor
415
- }) {};
416
- var TimelineCursorError = class extends Schema.TaggedError()("TimelineCursorError", {
417
- reason: Schema.Literals([
418
- "Store",
419
- "Clock",
420
- "Future"
421
- ]),
422
- requested: Selector,
423
- current: Cursor
424
- }) {};
425
- var TimelineLimit = class extends Schema.TaggedError()("TimelineLimit", {
426
- maximum: Counter,
427
- observed: Counter
428
- }) {};
429
- var TimelineMalformed = class extends Schema.TaggedError()("TimelineMalformed", { path: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(64))) }) {};
430
- /** Cached host state from the canonical native registry; it grants no Page authority. */
431
- const CachedPage = Schema.Struct({
432
- identity: EvidenceTarget,
433
- targetId: Schema.NullOr(Identifier),
434
- url: Schema.NullOr(Schema.String.check(Schema.isMaxLength(8192))),
435
- urlQualification: Schema.Literals([
436
- "NativeCached",
437
- "Unread",
438
- "Omitted"
439
- ]),
440
- title: Schema.NullOr(Schema.String.check(Schema.isMaxLength(512))),
441
- titleQualification: Schema.Literals([
442
- "ObservedCached",
443
- "Unread",
444
- "Omitted"
445
- ]),
446
- selected: Schema.Boolean,
447
- displayState: Schema.Literals([
448
- "running",
449
- "held",
450
- "unknown"
451
- ]),
452
- phase: Schema.Literals([
453
- "open",
454
- "paused",
455
- "closing",
456
- "closed",
457
- "stale"
458
- ]),
459
- containment: Containment
460
- });
461
- const PagesInventory = Schema.TaggedStruct("Inventory", {
462
- pages: Schema.Array(CachedPage).check(Schema.isMaxLength(32)),
463
- resumeAfter: Cursor
464
- });
465
- const PageEvent = Schema.Union([PagesInventory, Event]);
466
- const ClientPage = Schema.Struct({
467
- identity: EvidenceTarget,
468
- selected: Schema.Boolean,
469
- displayState: CachedPage.fields.displayState,
470
- phase: CachedPage.fields.phase,
471
- containment: Containment
472
- });
473
- const ClientPagesInventory = Schema.TaggedStruct("Inventory", {
474
- pages: Schema.Array(ClientPage).check(Schema.isMaxLength(32)),
475
- resumeAfter: Cursor
476
- });
477
- const ClientPageEvent = Schema.Union([ClientPagesInventory, ClientEvent]);
478
- const ClientPageEventJson = Schema.toCodecJson(ClientPageEvent);
479
- //#endregion
480
- export { CachedPage, CaptureReason, ClientEvent, ClientEventJson, ClientPage, ClientPageEvent, ClientPageEventJson, ClientPagesInventory, ClientPayload, ClientPayloadJson, Correlation, Cursor, CursorJson, Event, EventJson, EvidenceTarget, Interval, IntervalJson, PageEvent, PagesInventory, Payload, PayloadJson, PayloadTag, Selector, SelectorJson, Snapshot, SnapshotJson, SnapshotOptions, Stamp, StampJson, StoreIdentity, Terminal, TerminalJson, TerminalReason, TimelineCursorError, TimelineDefaults, TimelineGap, TimelineLimit, TimelineMalformed, TimelineMaximums };
481
-
482
- //# sourceMappingURL=TimelineData.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimelineData.mjs","names":[],"sources":["../src/TimelineData.ts"],"sourcesContent":["import { Schema, Struct } from \"effect\";\n\nimport { Identifier } from \"./BrowserData.ts\";\nimport { CaptureQualification } from \"./CaptureData.ts\";\nimport { BrowserOperation, BrowserOutcome, Containment, Reasons } from \"./Errors.ts\";\nimport { Action } from \"./PlanData.ts\";\n\n/** One journal identity on one captured host clock; neither is a native credential. */\nexport const StoreIdentity = Schema.Struct({ storeId: Identifier, clockId: Identifier });\nexport type StoreIdentity = typeof StoreIdentity.Type;\n\nexport interface Retention {\n readonly maxDurationMillis: number;\n readonly maxEvents: number;\n readonly maxBytes: number;\n readonly maxSubscribers: number;\n readonly maxEventBytes: number;\n}\n\nexport const TimelineDefaults: Retention = Object.freeze({\n maxDurationMillis: 60000,\n maxEvents: 4096,\n maxBytes: 4 * 1024 * 1024,\n maxSubscribers: 32,\n maxEventBytes: 64 * 1024,\n});\n\nexport const TimelineMaximums: Retention = Object.freeze({\n maxDurationMillis: 21600000,\n maxEvents: 65536,\n maxBytes: 64 * 1024 * 1024,\n maxSubscribers: 256,\n maxEventBytes: 1024 * 1024,\n});\n\nconst maximumInteger = (1n << 128n) - 1n;\n\nconst Sequence = Schema.BigInt.check(\n Schema.isGreaterThanOrEqualToBigInt(0n),\n Schema.isLessThanOrEqualToBigInt(maximumInteger),\n);\n\nconst Counter = Schema.Natural.check(Schema.isLessThanOrEqualTo(Number.MAX_SAFE_INTEGER));\nconst Geometry = Schema.Struct({ x: Schema.Finite, y: Schema.Finite });\n\n/*\n * Each `*Json` codec is derived from its schema: bigint sequences and offsets encode as decimal\n * strings and every other field as itself, so the wire format cannot drift from the types.\n */\n\nexport const Cursor = Schema.Struct({ ...StoreIdentity.fields, sequence: Sequence });\nexport type Cursor = typeof Cursor.Type;\nexport const CursorJson = Schema.toCodecJson(Cursor);\n\n/** An offset from this clock domain's origin, never a portable absolute monotonic instant. */\nexport const Stamp = Schema.Struct({ clockId: Identifier, offsetNanos: Sequence });\nexport type Stamp = typeof Stamp.Type;\nexport const StampJson = Schema.toCodecJson(Stamp);\n\nexport const Selector = Schema.Union([Cursor, Schema.Struct({ at: Stamp })]);\nexport type Selector = typeof Selector.Type;\nexport const SelectorJson = Schema.toCodecJson(Selector);\n\n/** Null frame/document fields disclose unavailable attribution instead of inventing it. */\nexport const EvidenceTarget = Schema.Struct({\n generation: Counter,\n pageId: Identifier,\n frameId: Schema.NullOr(Identifier),\n document: Schema.NullOr(Counter),\n});\n\nexport type EvidenceTarget = typeof EvidenceTarget.Type;\n\nexport const Correlation = Schema.Struct({\n runId: Identifier,\n stepId: Identifier,\n attemptId: Identifier,\n fieldIndex: Schema.optionalKey(Schema.Natural.check(Schema.isLessThanOrEqualTo(127))),\n});\n\nexport type Correlation = typeof Correlation.Type;\n\nexport const TerminalReason = Schema.Literals([\n \"closed\",\n \"detached\",\n \"disconnected\",\n \"faulted\",\n \"uncertain\",\n \"expired\",\n \"stale\",\n \"contained\",\n \"cancelled\",\n]);\n\nexport type TerminalReason = typeof TerminalReason.Type;\n\nexport const CaptureReason = Schema.Literals([\n \"stopped\",\n \"parent-unavailable\",\n \"malformed-frame\",\n \"frame-limit\",\n \"timestamp-discontinuity\",\n \"resized\",\n \"target-changed\",\n \"duration-limit\",\n]);\n\nexport type CaptureReason = typeof CaptureReason.Type;\nconst TerminalScope = Schema.Literals([\"session\", \"page\"]);\n\n/** The planned action's tag, from the plan schema itself. */\nconst ActionKind = Schema.Literals(Struct.keys(Action.cases));\n\n/** A failure records only its reason's tag, from the host reasons themselves. */\nconst FailureReason = Schema.Literals(Struct.keys(Reasons));\n\n/** Every payload tag; an omission names the one it stands for when that tag was readable. */\nexport const PayloadTag = Schema.Literals([\n \"Planned\",\n \"Prepared\",\n \"Dispatched\",\n \"Acknowledged\",\n \"FollowUp\",\n \"Pointer\",\n \"Press\",\n \"Keys\",\n \"Scroll\",\n \"Glide\",\n \"Navigated\",\n \"CaptureBoundary\",\n \"Capture\",\n \"FirstFrame\",\n \"Picture\",\n \"Settled\",\n \"Contained\",\n \"Failed\",\n \"Cancelled\",\n \"Lifecycle\",\n \"PageOpened\",\n \"PageClosed\",\n \"DisplayChanged\",\n \"MetadataChanged\",\n \"Terminal\",\n \"MetadataOmitted\",\n]);\n\nexport type PayloadTag = typeof PayloadTag.Type;\n\nexport const Interval = Schema.Struct({\n start: Stamp,\n end: Stamp,\n qualification: Schema.Literal(\"native-call-interval\"),\n});\n\nexport type Interval = typeof Interval.Type;\nexport const IntervalJson = Schema.toCodecJson(Interval);\n\nconst makePayload = <A extends Schema.Struct.Fields>(address: A) => {\n const operationId = Schema.optionalKey(Identifier);\n\n const phase = {\n operation: BrowserOperation,\n operationId: Identifier,\n late: Schema.Boolean,\n nativeOrdinal: Schema.optionalKey(Counter),\n mutation: Schema.optionalKey(Schema.Boolean),\n };\n\n /** A preparatory or burst acknowledgement; absent when the reply completed the logical input. */\n const acknowledgement = Schema.Struct({\n subphase: Schema.Literals([\"scroll-into-view\", \"focus\", \"key-burst\", \"scroll-burst\"]),\n logicalComplete: Schema.Boolean,\n });\n\n return Schema.Union([\n Schema.TaggedStruct(\"Planned\", { action: ActionKind }),\n Schema.TaggedStruct(\"Prepared\", phase),\n Schema.TaggedStruct(\"Dispatched\", phase),\n Schema.TaggedStruct(\"Acknowledged\", {\n ...phase,\n acknowledgement: Schema.optionalKey(acknowledgement),\n }),\n Schema.TaggedStruct(\"FollowUp\", phase),\n Schema.TaggedStruct(\"Pointer\", {\n kind: Schema.Literals([\"pointer-move\", \"hover\"]),\n position: Schema.NullOr(Geometry),\n interval: Interval,\n operationId,\n }),\n Schema.TaggedStruct(\"Press\", {\n position: Schema.NullOr(Geometry),\n intended: Schema.optionalKey(\n Schema.Struct({\n position: Geometry,\n relativePosition: Geometry,\n qualification: Schema.Literal(\"checked-exact-node-sample\"),\n }),\n ),\n interval: Interval,\n operationId,\n }),\n Schema.TaggedStruct(\"Keys\", {\n kind: Schema.Literals([\"press\", \"type\"]),\n count: Counter,\n countUnit: Schema.Literals([\"unicode-codepoints\", \"logical-strokes\"]),\n interval: Interval,\n operationId,\n }),\n Schema.TaggedStruct(\"Scroll\", {\n kind: Schema.Literals([\"wheel\", \"scroll\"]),\n delta: Schema.NullOr(Geometry),\n interval: Interval,\n operationId,\n qualification: Schema.optionalKey(Schema.Literal(\"exact-node-scroll-into-view\")),\n }),\n /** Reserved for an actual bounded intended schedule; individual pointer calls are Pointer. */\n Schema.TaggedStruct(\"Glide\", {\n operationId,\n schedule: Schema.Array(Schema.Struct({ at: Stamp, position: Geometry })).check(\n Schema.isMinLength(2),\n Schema.isMaxLength(128),\n ),\n qualification: Schema.Literal(\"intended-schedule\"),\n }),\n Schema.TaggedStruct(\"Navigated\", { sameDocument: Schema.Boolean, ...address }),\n Schema.TaggedStruct(\"CaptureBoundary\", {\n captureId: Identifier,\n captureBoundary: Counter,\n captureDocument: Counter,\n sameDocument: Schema.Boolean,\n afterSequence: Schema.NullOr(Counter),\n observed: Stamp,\n qualification: Schema.Literal(\"received-boundary-attribution\"),\n ...address,\n }),\n Schema.TaggedStruct(\"Capture\", {\n captureId: Identifier,\n phase: Schema.Literals([\"Reserved\", \"Watching\", \"Started\", \"Ended\", \"Stopped\"]),\n latePhase: Schema.Boolean,\n observed: Stamp,\n captureBoundary: Counter,\n captureDocument: Counter,\n qualification: CaptureQualification,\n reason: Schema.NullOr(CaptureReason),\n nativeStop: Schema.NullOr(Schema.Literals([\"confirmed\", \"unconfirmed\"])),\n received: Counter,\n delivered: Counter,\n discarded: Counter,\n overflow: Counter,\n late: Counter,\n duplicates: Counter,\n rejected: Counter,\n upstreamDrops: Schema.Literal(\"unknown\"),\n }),\n Schema.TaggedStruct(\"FirstFrame\", {\n captureId: Identifier,\n frameSequence: Counter,\n captureDocument: Counter,\n captureBoundary: Counter,\n sourceTimeMillis: Schema.Finite.check(Schema.isGreaterThan(0)),\n sourceClock: Schema.Literal(\"presentation-unix-millis\"),\n received: Stamp,\n width: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 16384 })),\n height: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 16384 })),\n viewportWidth: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 16384 })),\n viewportHeight: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 16384 })),\n qualification: Schema.Literal(\"received-boundary-attribution\"),\n }),\n Schema.TaggedStruct(\"Picture\", {\n mediaType: Schema.Literals([\"image/png\", \"image/jpeg\"]),\n nativeRequest: Stamp,\n nativeReturn: Stamp,\n requestDocument: Schema.NullOr(Counter),\n returnDocument: Schema.NullOr(Counter),\n width: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 16384 }))),\n height: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 16384 })),\n ),\n qualification: Schema.Literal(\"native-call-interval\"),\n operationId,\n }),\n Schema.TaggedStruct(\"Settled\", {\n quietMillis: Schema.Finite.check(Schema.isGreaterThan(0)),\n withinMillis: Schema.Finite.check(Schema.isGreaterThan(0)),\n signals: Schema.Array(\n Schema.Literals([\"dom-mutation\", \"scroll\", \"root-geometry\", \"viewport\"]),\n ).check(Schema.isMinLength(1), Schema.isMaxLength(4)),\n operationId,\n }),\n Schema.TaggedStruct(\"Contained\", { containment: Containment }),\n Schema.TaggedStruct(\"Failed\", {\n operation: BrowserOperation,\n reason: FailureReason,\n outcome: BrowserOutcome,\n operationId,\n }),\n Schema.TaggedStruct(\"Cancelled\", { outcome: BrowserOutcome, operationId }),\n Schema.TaggedStruct(\"Lifecycle\", {\n phase: Schema.Literals([\n \"acquiring\",\n \"open\",\n \"paused\",\n \"detached\",\n \"faulted\",\n \"uncertain\",\n \"closing\",\n \"closed\",\n ]),\n }),\n Schema.TaggedStruct(\"PageOpened\", {}),\n Schema.TaggedStruct(\"PageClosed\", {}),\n Schema.TaggedStruct(\"DisplayChanged\", {\n selected: Schema.Boolean,\n displayState: Schema.Literals([\"running\", \"held\", \"unknown\"]),\n }),\n Schema.TaggedStruct(\"MetadataChanged\", {}),\n Schema.TaggedStruct(\"Terminal\", { scope: TerminalScope, reason: TerminalReason }),\n Schema.TaggedStruct(\"MetadataOmitted\", {\n reason: Schema.Literals([\"Malformed\", \"Oversized\"]),\n originalTag: Schema.NullOr(PayloadTag),\n }),\n ]);\n};\n\nconst hostAddress = {\n url: Schema.NullOr(Schema.String.check(Schema.isMaxLength(8192))),\n urlQualification: Schema.Literals([\"NativeCached\", \"Unread\", \"Omitted\"]),\n};\n\n/** Host metadata: addresses are qualified facts; text, descriptors, bytes and native objects stay absent. */\nexport const Payload = makePayload(hostAddress);\nexport type Payload = typeof Payload.Type;\nexport const PayloadJson = Schema.toCodecJson(Payload);\nexport const ClientPayload = makePayload({});\nexport type ClientPayload = typeof ClientPayload.Type;\nexport const ClientPayloadJson = Schema.toCodecJson(ClientPayload);\n\nconst envelopeFields = {\n version: Schema.Literal(1),\n ...StoreIdentity.fields,\n target: Schema.NullOr(EvidenceTarget),\n correlation: Schema.NullOr(Correlation),\n};\n\nconst coherentClock = (value: {\n readonly clockId: string;\n readonly at: Stamp;\n readonly event: ClientPayload;\n}): boolean => {\n if (value.at.clockId !== value.clockId) return false;\n const matches = (stamp: Stamp) => stamp.clockId === value.clockId;\n const event = value.event;\n\n switch (event._tag) {\n case \"Pointer\":\n case \"Press\":\n case \"Keys\":\n case \"Scroll\":\n return (\n matches(event.interval.start) &&\n matches(event.interval.end) &&\n event.interval.end.offsetNanos >= event.interval.start.offsetNanos\n );\n case \"Picture\":\n return (\n matches(event.nativeRequest) &&\n matches(event.nativeReturn) &&\n event.nativeReturn.offsetNanos >= event.nativeRequest.offsetNanos\n );\n case \"FirstFrame\":\n return matches(event.received);\n case \"Capture\":\n case \"CaptureBoundary\":\n return matches(event.observed);\n case \"Glide\":\n return event.schedule.every(\n (sample, index) =>\n matches(sample.at) &&\n (index === 0 ||\n sample.at.offsetNanos >= (event.schedule[index - 1]?.at.offsetNanos ?? 0n)),\n );\n case \"Planned\":\n case \"Prepared\":\n case \"Dispatched\":\n case \"Acknowledged\":\n case \"FollowUp\":\n case \"Navigated\":\n case \"Settled\":\n case \"Contained\":\n case \"Failed\":\n case \"Cancelled\":\n case \"Lifecycle\":\n case \"PageOpened\":\n case \"PageClosed\":\n case \"DisplayChanged\":\n case \"MetadataChanged\":\n case \"Terminal\":\n case \"MetadataOmitted\":\n return true;\n }\n};\n\nconst clockCheck = Schema.makeFilter(coherentClock, {\n title: \"coherent clock domain and ordered native intervals\",\n});\n\nexport const Event = Schema.Struct({\n ...envelopeFields,\n sequence: Sequence,\n at: Stamp,\n event: Payload,\n}).check(clockCheck);\n\nexport type Event = typeof Event.Type;\n\nexport const EventJson = Schema.toCodecJson(Event);\n\nexport const ClientEvent = Schema.Struct({\n ...envelopeFields,\n sequence: Sequence,\n at: Stamp,\n event: ClientPayload,\n}).check(clockCheck);\n\nexport type ClientEvent = typeof ClientEvent.Type;\n\nexport const ClientEventJson = Schema.toCodecJson(ClientEvent);\n\nexport const Terminal = Schema.Struct({\n cursor: Cursor,\n at: Stamp,\n scope: TerminalScope,\n reason: TerminalReason,\n});\n\nexport type Terminal = typeof Terminal.Type;\n\nexport const TerminalJson = Schema.toCodecJson(Terminal);\n\nconst snapshotFields = { evicted: Counter, retainedBytes: Counter };\n\nexport const Snapshot = Schema.Struct({\n ...snapshotFields,\n events: Schema.Array(Event).check(Schema.isMaxLength(65536)),\n oldest: Schema.NullOr(Cursor),\n newest: Schema.NullOr(Cursor),\n resumeAfter: Cursor,\n evictedThrough: Cursor,\n terminal: Schema.NullOr(Terminal),\n});\n\nexport type Snapshot = typeof Snapshot.Type;\n\nexport const SnapshotJson = Schema.toCodecJson(Snapshot);\n\nexport const SnapshotOptions = Schema.Struct({ from: Schema.optionalKey(Selector) });\nexport type SnapshotOptions = typeof SnapshotOptions.Type;\n\nexport class TimelineGap extends Schema.TaggedError<TimelineGap>()(\"TimelineGap\", {\n requested: Selector,\n oldest: Schema.NullOr(Cursor),\n newest: Schema.NullOr(Cursor),\n resumeAfter: Cursor,\n evictedThrough: Cursor,\n}) {}\n\nexport class TimelineCursorError extends Schema.TaggedError<TimelineCursorError>()(\n \"TimelineCursorError\",\n {\n reason: Schema.Literals([\"Store\", \"Clock\", \"Future\"]),\n requested: Selector,\n current: Cursor,\n },\n) {}\n\nexport class TimelineLimit extends Schema.TaggedError<TimelineLimit>()(\"TimelineLimit\", {\n maximum: Counter,\n observed: Counter,\n}) {}\n\nexport class TimelineMalformed extends Schema.TaggedError<TimelineMalformed>()(\n \"TimelineMalformed\",\n {\n path: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(64))),\n },\n) {}\n\nexport type TimelineError = TimelineGap | TimelineCursorError | TimelineLimit | TimelineMalformed;\n\n/** Cached host state from the canonical native registry; it grants no Page authority. */\nexport const CachedPage = Schema.Struct({\n identity: EvidenceTarget,\n targetId: Schema.NullOr(Identifier),\n url: Schema.NullOr(Schema.String.check(Schema.isMaxLength(8192))),\n urlQualification: Schema.Literals([\"NativeCached\", \"Unread\", \"Omitted\"]),\n title: Schema.NullOr(Schema.String.check(Schema.isMaxLength(512))),\n titleQualification: Schema.Literals([\"ObservedCached\", \"Unread\", \"Omitted\"]),\n selected: Schema.Boolean,\n displayState: Schema.Literals([\"running\", \"held\", \"unknown\"]),\n phase: Schema.Literals([\"open\", \"paused\", \"closing\", \"closed\", \"stale\"]),\n containment: Containment,\n});\n\nexport type CachedPage = typeof CachedPage.Type;\n\nexport const PagesInventory = Schema.TaggedStruct(\"Inventory\", {\n pages: Schema.Array(CachedPage).check(Schema.isMaxLength(32)),\n resumeAfter: Cursor,\n});\n\nexport type PagesInventory = typeof PagesInventory.Type;\nexport const PageEvent = Schema.Union([PagesInventory, Event]);\nexport type PageEvent = typeof PageEvent.Type;\n\nexport const ClientPage = Schema.Struct({\n identity: EvidenceTarget,\n selected: Schema.Boolean,\n displayState: CachedPage.fields.displayState,\n phase: CachedPage.fields.phase,\n containment: Containment,\n});\n\nexport type ClientPage = typeof ClientPage.Type;\n\nexport const ClientPagesInventory = Schema.TaggedStruct(\"Inventory\", {\n pages: Schema.Array(ClientPage).check(Schema.isMaxLength(32)),\n resumeAfter: Cursor,\n});\n\nexport type ClientPagesInventory = typeof ClientPagesInventory.Type;\nexport const ClientPageEvent = Schema.Union([ClientPagesInventory, ClientEvent]);\nexport type ClientPageEvent = typeof ClientPageEvent.Type;\n\nexport const ClientPageEventJson = Schema.toCodecJson(ClientPageEvent);\n"],"mappings":"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"}