effect-browser 0.2.0-beta.9 → 0.3.0-beta.11
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 +861 -1161
- package/dist/Browser-B4qncxe7.mjs +628 -0
- package/dist/Browser-B4qncxe7.mjs.map +1 -0
- package/dist/Browser.d.mts +129 -3
- package/dist/Browser.mjs +2 -22
- package/dist/BrowserError-Coy7EW1N.d.mts +140 -0
- package/dist/BrowserError.d.mts +2 -0
- package/dist/BrowserError.mjs +211 -0
- package/dist/BrowserError.mjs.map +1 -0
- package/dist/BrowserEvent-BRu2juEz.d.mts +279 -0
- package/dist/BrowserEvent.d.mts +2 -0
- package/dist/BrowserEvent.mjs +297 -0
- package/dist/BrowserEvent.mjs.map +1 -0
- package/dist/Cdp.d.mts +32 -0
- package/dist/Cdp.mjs +61 -0
- package/dist/Cdp.mjs.map +1 -0
- package/dist/Change-DNvztNLu.mjs +138 -0
- package/dist/Change-DNvztNLu.mjs.map +1 -0
- package/dist/Change-iMlcuzVD.d.mts +71 -0
- package/dist/Change.d.mts +2 -0
- package/dist/Change.mjs +2 -0
- package/dist/Chromium.d.mts +29 -81
- package/dist/Chromium.mjs +57 -392
- package/dist/Chromium.mjs.map +1 -1
- package/dist/Expect.d.mts +62 -0
- package/dist/Expect.mjs +114 -0
- package/dist/Expect.mjs.map +1 -0
- package/dist/Frame-Di2PxyF7.d.mts +119 -0
- package/dist/Frame.d.mts +2 -0
- package/dist/Frame.mjs +125 -0
- package/dist/Frame.mjs.map +1 -0
- package/dist/Moment.d.mts +2 -0
- package/dist/Moment.mjs +288 -0
- package/dist/Moment.mjs.map +1 -0
- package/dist/Motion.d.mts +40 -0
- package/dist/Motion.mjs +122 -0
- package/dist/Motion.mjs.map +1 -0
- package/dist/Page-B5cjaUp5.mjs +618 -0
- package/dist/Page-B5cjaUp5.mjs.map +1 -0
- package/dist/Page-B7X6DQUn.d.mts +595 -0
- package/dist/Page.d.mts +2 -0
- package/dist/Page.mjs +2 -0
- package/dist/Plan-Akcac63g.d.mts +209 -0
- package/dist/Plan-D1wrJVs8.mjs +508 -0
- package/dist/Plan-D1wrJVs8.mjs.map +1 -0
- package/dist/Plan.d.mts +2 -3
- package/dist/Plan.mjs +2 -2
- package/dist/Policy.d.mts +76 -0
- package/dist/Policy.mjs +237 -0
- package/dist/Policy.mjs.map +1 -0
- package/dist/Presentation.d.mts +48 -0
- package/dist/Presentation.mjs +117 -0
- package/dist/Presentation.mjs.map +1 -0
- package/dist/Snapshot-B34hZ4Jl.d.mts +68 -0
- package/dist/Snapshot.d.mts +2 -0
- package/dist/Snapshot.mjs +79 -0
- package/dist/Snapshot.mjs.map +1 -0
- package/dist/Stage.d.mts +64 -0
- package/dist/Stage.mjs +237 -0
- package/dist/Stage.mjs.map +1 -0
- package/dist/Supervisor-CYWFK3vM.d.mts +280 -0
- package/dist/Supervisor-TNKNOVzu.mjs +599 -0
- package/dist/Supervisor-TNKNOVzu.mjs.map +1 -0
- package/dist/Supervisor.d.mts +2 -0
- package/dist/Supervisor.mjs +2 -0
- package/dist/context-B6xr8nVi.mjs +261 -0
- package/dist/context-B6xr8nVi.mjs.map +1 -0
- package/dist/index.d.mts +17 -14
- package/dist/index.mjs +18 -13
- package/dist/match.inpage-xOe9LNO0.mjs +48 -0
- package/dist/match.inpage-xOe9LNO0.mjs.map +1 -0
- package/dist/page-BAf__WKX.mjs +5075 -0
- package/dist/page-BAf__WKX.mjs.map +1 -0
- package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
- package/dist/url-Cd04Okid.mjs +264 -0
- package/dist/url-Cd04Okid.mjs.map +1 -0
- package/package.json +96 -61
- package/src/Browser.ts +672 -0
- package/src/BrowserError.ts +234 -0
- package/src/BrowserEvent.ts +296 -0
- package/src/Cdp.ts +101 -0
- package/src/Change.ts +88 -0
- package/src/Chromium.ts +102 -0
- package/src/Expect.ts +180 -0
- package/src/Frame.ts +132 -0
- package/src/Moment.ts +479 -0
- package/src/Motion.ts +166 -0
- package/src/Page.ts +522 -0
- package/src/Plan.ts +663 -0
- package/src/Policy.ts +325 -0
- package/src/Presentation.ts +195 -0
- package/src/Snapshot.ts +89 -0
- package/src/Stage.ts +467 -0
- package/src/Supervisor.ts +599 -0
- package/src/index.ts +20 -0
- package/src/internal/input/actions.ts +610 -0
- package/src/internal/input/dispatch.ts +161 -0
- package/src/internal/input/edit.inpage.ts +162 -0
- package/src/internal/input/evidence.inpage.ts +164 -0
- package/src/internal/input/gate.ts +224 -0
- package/src/internal/input/guard.inpage.ts +605 -0
- package/src/internal/input/guard.ts +184 -0
- package/src/internal/input/keyboard.ts +112 -0
- package/src/internal/input/keys.ts +127 -0
- package/src/internal/input/perform.ts +376 -0
- package/src/internal/input/pointer.ts +153 -0
- package/src/internal/input/replies.ts +195 -0
- package/src/internal/input/settle.ts +50 -0
- package/src/internal/input/style.ts +186 -0
- package/src/internal/input/targets.inpage.ts +293 -0
- package/src/internal/input/targets.ts +148 -0
- package/src/internal/page/bridge.ts +391 -0
- package/src/internal/page/context.ts +314 -0
- package/src/internal/page/identity.ts +35 -0
- package/src/internal/page/lane.ts +311 -0
- package/src/internal/page/navigation.ts +183 -0
- package/src/internal/page/openings.ts +87 -0
- package/src/internal/page/page.ts +165 -0
- package/src/internal/page/url.ts +100 -0
- package/src/internal/page/viewport.ts +43 -0
- package/src/internal/pictures/capture.ts +776 -0
- package/src/internal/pictures/clock.ts +141 -0
- package/src/internal/pictures/counts.ts +92 -0
- package/src/internal/pictures/pictures.ts +521 -0
- package/src/internal/pictures/transport.ts +243 -0
- package/src/internal/reading/choose.ts +100 -0
- package/src/internal/reading/context.inpage.ts +201 -0
- package/src/internal/reading/controls.inpage.ts +158 -0
- package/src/internal/reading/expect.inpage.ts +70 -0
- package/src/internal/reading/match.inpage.ts +92 -0
- package/src/internal/reading/names.inpage.ts +306 -0
- package/src/internal/reading/outline.inpage.ts +260 -0
- package/src/internal/reading/reading.ts +223 -0
- package/src/internal/reading/ready.inpage.ts +164 -0
- package/src/internal/reading/ready.ts +111 -0
- package/src/internal/reading/subjects.inpage.ts +188 -0
- package/src/internal/reading/text.inpage.ts +135 -0
- package/src/internal/reading/walk.inpage.ts +220 -0
- package/src/internal/supervisor/lifecycle.ts +416 -0
- package/src/internal/timeline/changes.inpage.ts +216 -0
- package/src/internal/timeline/changes.ts +100 -0
- package/src/internal/timeline/events.ts +94 -0
- package/src/internal/timeline/fold.inpage.ts +123 -0
- package/src/internal/timeline/history.inpage.ts +229 -0
- package/src/internal/timeline/marks.inpage.ts +207 -0
- package/src/internal/timeline/record.inpage.ts +133 -0
- package/src/internal/timeline/sight.inpage.ts +122 -0
- package/src/internal/timeline/window.ts +96 -0
- package/src/internal/timeline/words.ts +65 -0
- package/dist/Bootstrap-B9UUXsvF.d.mts +0 -183
- package/dist/Bootstrap-CeQOWBy6.mjs +0 -189
- package/dist/Bootstrap-CeQOWBy6.mjs.map +0 -1
- package/dist/Bootstrap.d.mts +0 -3
- package/dist/Bootstrap.mjs +0 -2
- package/dist/Browser-BF9_sORP.d.mts +0 -388
- package/dist/Browser.mjs.map +0 -1
- package/dist/BrowserData-CPIIIHol.d.mts +0 -585
- package/dist/BrowserData.d.mts +0 -3
- package/dist/BrowserData.mjs +0 -695
- package/dist/BrowserData.mjs.map +0 -1
- package/dist/BrowserRuntime-B6nT1G4X.d.mts +0 -148
- package/dist/BrowserRuntime-C1r2aSRK.mjs +0 -6820
- package/dist/BrowserRuntime-C1r2aSRK.mjs.map +0 -1
- package/dist/BrowserRuntime.d.mts +0 -3
- package/dist/BrowserRuntime.mjs +0 -3
- package/dist/Capture.d.mts +0 -56
- package/dist/Capture.mjs +0 -678
- package/dist/Capture.mjs.map +0 -1
- package/dist/CaptureData-CYriZHX1.mjs +0 -201
- package/dist/CaptureData-CYriZHX1.mjs.map +0 -1
- package/dist/CaptureData.d.mts +0 -219
- package/dist/CaptureData.mjs +0 -2
- package/dist/Errors.d.mts +0 -158
- package/dist/Errors.mjs +0 -207
- package/dist/Errors.mjs.map +0 -1
- package/dist/Images-yCG9BmRU.mjs +0 -76
- package/dist/Images-yCG9BmRU.mjs.map +0 -1
- package/dist/OperationOptions-DAeRS6O9.mjs +0 -55
- package/dist/OperationOptions-DAeRS6O9.mjs.map +0 -1
- package/dist/PageControl.d.mts +0 -15
- package/dist/PageControl.mjs +0 -34
- package/dist/PageControl.mjs.map +0 -1
- package/dist/PageRegistry-B3q9DS3g.mjs +0 -164
- package/dist/PageRegistry-B3q9DS3g.mjs.map +0 -1
- package/dist/Plan-Dyxu2q8C.mjs +0 -543
- package/dist/Plan-Dyxu2q8C.mjs.map +0 -1
- package/dist/PlanData-B668RxbQ.d.mts +0 -4831
- package/dist/PlanData.d.mts +0 -3
- package/dist/PlanData.mjs +0 -268
- package/dist/PlanData.mjs.map +0 -1
- package/dist/PlanInput-BJcPPncs.mjs +0 -75
- package/dist/PlanInput-BJcPPncs.mjs.map +0 -1
- package/dist/PublicSession-DCSMMqOj.mjs +0 -5602
- package/dist/PublicSession-DCSMMqOj.mjs.map +0 -1
- package/dist/Testing.d.mts +0 -479
- package/dist/Testing.mjs +0 -2147
- package/dist/Testing.mjs.map +0 -1
- package/dist/Timeline-fV22Xk-S.d.mts +0 -29
- package/dist/Timeline.d.mts +0 -4
- package/dist/Timeline.mjs +0 -20
- package/dist/Timeline.mjs.map +0 -1
- package/dist/TimelineData-BsOn-YGZ.d.mts +0 -3818
- package/dist/TimelineData.d.mts +0 -3
- package/dist/TimelineData.mjs +0 -482
- package/dist/TimelineData.mjs.map +0 -1
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { BrowserError, InitializationError } from "./Errors.mjs";
|
|
2
|
-
import { Cause, Effect, Schema } from "effect";
|
|
3
|
-
declare namespace BindingRegistration_d_exports {
|
|
4
|
-
export { FailureMode, Origin$1 as Origin, Registration, invoke, make, schema, snapshot };
|
|
5
|
-
}
|
|
6
|
-
declare const Invoke: unique symbol;
|
|
7
|
-
declare const Origin$1: Schema.NonEmptyString;
|
|
8
|
-
declare const FailureMode: Schema.Literals<readonly ["reject-call", "fail-session"]>;
|
|
9
|
-
declare const metadataSchema: Schema.Struct<{
|
|
10
|
-
readonly name: Schema.NonEmptyString;
|
|
11
|
-
readonly origins: Schema.$Array<Schema.NonEmptyString>;
|
|
12
|
-
readonly maxConcurrent: Schema.Int;
|
|
13
|
-
readonly maxInputBytes: Schema.Int;
|
|
14
|
-
readonly maxOutputBytes: Schema.Int;
|
|
15
|
-
readonly timeoutMillis: Schema.Int;
|
|
16
|
-
readonly failureMode: Schema.Literals<readonly ["reject-call", "fail-session"]>;
|
|
17
|
-
}>;
|
|
18
|
-
type Metadata = typeof metadataSchema.Type;
|
|
19
|
-
interface Registration<E, R> extends Metadata {
|
|
20
|
-
readonly [Invoke]: (text: string, check: Effect.Effect<void, InitializationError>) => Effect.Effect<string, E | InitializationError, R>;
|
|
21
|
-
}
|
|
22
|
-
/** Retain an issued live capability at schema boundaries; a copied shape is not authority. */
|
|
23
|
-
declare const schema: Schema.declare<Registration<unknown, unknown>, Registration<unknown, unknown>>;
|
|
24
|
-
/** Pack heterogeneous codecs and handlers while their concrete input/output types are known. */
|
|
25
|
-
declare const make: <I, IEncoded, O, OEncoded, E, R>(options: BindingOptions<I, IEncoded, O, OEncoded, E, R>) => Registration<E, R>;
|
|
26
|
-
/** Authentication is identity-based even when a caller copies every enumerable field/symbol. */
|
|
27
|
-
declare const snapshot: <E, R>(registration: Registration<E, R>) => Effect.Effect<Registration<E, R>, BrowserError, never>;
|
|
28
|
-
declare const invoke: <E, R>(registration: Registration<E, R>, text: string, check: Effect.Effect<void, InitializationError>) => Effect.Effect<string, E | InitializationError, R>;
|
|
29
|
-
declare namespace Bootstrap_d_exports {
|
|
30
|
-
export { BindingDiagnostics, BindingFailure, BindingFailureMode, BindingOptions, BindingRegistration, BindingStatistics, InitScript, Origin, Permission, PermissionGrant, Plan, PlanError, PlanRequirements, Readiness, ReadinessOutcome, binding, combine, empty, init, permissions };
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Exact scheme-and-host origin, as a document reports it. Patterns are deliberately absent:
|
|
34
|
-
* a registration that cannot say exactly where it applies does not belong in a plan.
|
|
35
|
-
*/
|
|
36
|
-
declare const Origin: Schema.NonEmptyString;
|
|
37
|
-
type Origin = typeof Origin.Type;
|
|
38
|
-
/**
|
|
39
|
-
* The reviewed subset of native permission capabilities. Each name is checked against a real
|
|
40
|
-
* browser in native acceptance; an unsupported capability is refused before it is exposed.
|
|
41
|
-
*/
|
|
42
|
-
declare const Permission: Schema.Literals<readonly ["accelerometer", "background-sync", "camera", "clipboard-read", "clipboard-write", "geolocation", "gyroscope", "magnetometer", "microphone", "midi", "notifications", "payment-handler", "storage-access"]>;
|
|
43
|
-
type Permission = typeof Permission.Type;
|
|
44
|
-
declare const PermissionGrant: Schema.Struct<{
|
|
45
|
-
readonly origin: Schema.NonEmptyString;
|
|
46
|
-
readonly permissions: Schema.$Array<Schema.Literals<readonly ["accelerometer", "background-sync", "camera", "clipboard-read", "clipboard-write", "geolocation", "gyroscope", "magnetometer", "microphone", "midi", "notifications", "payment-handler", "storage-access"]>>;
|
|
47
|
-
}>;
|
|
48
|
-
type PermissionGrant = typeof PermissionGrant.Type;
|
|
49
|
-
/**
|
|
50
|
-
* Registration is not readiness. A script may start asynchronous work, but it cannot pause the
|
|
51
|
-
* website's own scripts, so a document is ready only when its expression resolves to exactly
|
|
52
|
-
* `true`. A document that was already running when the bundle was registered never ran it:
|
|
53
|
-
* `RequireFreshNavigation` reports that instead of pretending otherwise, and an explicit
|
|
54
|
-
* reload of possibly uncertain work stays a caller's decision.
|
|
55
|
-
*/
|
|
56
|
-
declare const Readiness: Schema.Struct<{
|
|
57
|
-
readonly expression: Schema.NonEmptyString;
|
|
58
|
-
readonly timeoutMillis: Schema.Int;
|
|
59
|
-
readonly existingDocuments: Schema.Literals<readonly ["RequireFreshNavigation", "AcceptAlreadyRunning"]>;
|
|
60
|
-
}>;
|
|
61
|
-
type Readiness = typeof Readiness.Type;
|
|
62
|
-
/** Trusted host configuration. Script content is never model output or page input. */
|
|
63
|
-
declare const InitScript: Schema.Struct<{
|
|
64
|
-
readonly id: Schema.NonEmptyString;
|
|
65
|
-
readonly content: Schema.NonEmptyString;
|
|
66
|
-
/** When present, the step runs only on these documents and readiness skips the rest. */
|
|
67
|
-
readonly origins: Schema.optionalKey<Schema.$Array<Schema.NonEmptyString>>;
|
|
68
|
-
readonly readiness: Schema.optionalKey<Schema.Struct<{
|
|
69
|
-
readonly expression: Schema.NonEmptyString;
|
|
70
|
-
readonly timeoutMillis: Schema.Int;
|
|
71
|
-
readonly existingDocuments: Schema.Literals<readonly ["RequireFreshNavigation", "AcceptAlreadyRunning"]>;
|
|
72
|
-
}>>;
|
|
73
|
-
}>;
|
|
74
|
-
type InitScript = typeof InitScript.Type;
|
|
75
|
-
/** A callback failure can reject one page invocation or permanently fence the session. */
|
|
76
|
-
declare const BindingFailureMode: Schema.Literals<readonly ["reject-call", "fail-session"]>;
|
|
77
|
-
type BindingFailureMode = typeof BindingFailureMode.Type;
|
|
78
|
-
/**
|
|
79
|
-
* A registration issued by `binding`. Its private executable closure carries the real consumer
|
|
80
|
-
* E/R; copying the metadata or fabricating an object does not grant callback authority.
|
|
81
|
-
*/
|
|
82
|
-
type BindingRegistration<E = never, R = never> = Registration<E, R>;
|
|
83
|
-
/**
|
|
84
|
-
* Environment-free boundary codecs keep page data validation separate from consumer services.
|
|
85
|
-
* The handler's E/R remain visible on the Plan and are supplied only by the trusted host.
|
|
86
|
-
*/
|
|
87
|
-
interface BindingOptions<I, IEncoded, O, OEncoded, E, R> {
|
|
88
|
-
readonly name: string;
|
|
89
|
-
readonly origins: ReadonlyArray<Origin>;
|
|
90
|
-
readonly input: Schema.ConstraintCodec<I, IEncoded, never, never>;
|
|
91
|
-
readonly output: Schema.ConstraintCodec<O, OEncoded, never, never>;
|
|
92
|
-
/** Defaults to one concurrent invocation. Explicit values still pass the bounded schema. */
|
|
93
|
-
readonly maxConcurrent?: number;
|
|
94
|
-
/** Defaults to 64 KiB. */
|
|
95
|
-
readonly maxInputBytes?: number;
|
|
96
|
-
/** Defaults to 64 KiB. */
|
|
97
|
-
readonly maxOutputBytes?: number;
|
|
98
|
-
/** Defaults to 10 seconds for the complete invocation. */
|
|
99
|
-
readonly timeoutMillis?: number;
|
|
100
|
-
/** Defaults to rejecting this invocation without terminating the session. */
|
|
101
|
-
readonly failureMode?: BindingFailureMode;
|
|
102
|
-
readonly handle: (input: I) => Effect.Effect<O, E, R>;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* One ordered bundle plus its host capabilities. Callback registrations preserve E/R through
|
|
106
|
-
* their executable closures; static script/permission plans remain serializable values.
|
|
107
|
-
*/
|
|
108
|
-
interface Plan<E = unknown, R = unknown> {
|
|
109
|
-
readonly scripts: ReadonlyArray<InitScript>;
|
|
110
|
-
readonly permissions: ReadonlyArray<PermissionGrant>;
|
|
111
|
-
readonly bindings?: ReadonlyArray<BindingRegistration<E, R>>;
|
|
112
|
-
}
|
|
113
|
-
/** Host-only typed evidence. Causes are never logged or returned to page callers. */
|
|
114
|
-
interface BindingFailure<E> {
|
|
115
|
-
readonly name: string;
|
|
116
|
-
readonly mode: BindingFailureMode;
|
|
117
|
-
readonly cause: Cause.Cause<E | InitializationError>;
|
|
118
|
-
}
|
|
119
|
-
interface BindingStatistics {
|
|
120
|
-
readonly name: string;
|
|
121
|
-
readonly inFlight: number;
|
|
122
|
-
readonly pendingNative: number;
|
|
123
|
-
/** Finished/interrupted invocations whose native work or disposal has not settled. */
|
|
124
|
-
readonly retired: number;
|
|
125
|
-
readonly accepted: number;
|
|
126
|
-
readonly succeeded: number;
|
|
127
|
-
readonly rejected: number;
|
|
128
|
-
}
|
|
129
|
-
/** Copied snapshot: at most sixteen bindings and the latest thirty-two failure records. */
|
|
130
|
-
interface BindingDiagnostics<E> {
|
|
131
|
-
readonly faulted: boolean;
|
|
132
|
-
readonly bindings: ReadonlyArray<BindingStatistics>;
|
|
133
|
-
readonly failures: ReadonlyArray<BindingFailure<E>>;
|
|
134
|
-
readonly droppedFailures: number;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Static plans remain serializable. Live binding plans retain issued registrations by identity;
|
|
138
|
-
* this schema neither executes their callbacks nor turns copied metadata into authority. Typed
|
|
139
|
-
* acquisition validates a separate snapshot so consumer E/R is not erased by a generic decoder.
|
|
140
|
-
*/
|
|
141
|
-
declare const Plan: Schema.Struct<{
|
|
142
|
-
readonly scripts: Schema.$Array<Schema.Struct<{
|
|
143
|
-
readonly id: Schema.NonEmptyString;
|
|
144
|
-
readonly content: Schema.NonEmptyString;
|
|
145
|
-
/** When present, the step runs only on these documents and readiness skips the rest. */
|
|
146
|
-
readonly origins: Schema.optionalKey<Schema.$Array<Schema.NonEmptyString>>;
|
|
147
|
-
readonly readiness: Schema.optionalKey<Schema.Struct<{
|
|
148
|
-
readonly expression: Schema.NonEmptyString;
|
|
149
|
-
readonly timeoutMillis: Schema.Int;
|
|
150
|
-
readonly existingDocuments: Schema.Literals<readonly ["RequireFreshNavigation", "AcceptAlreadyRunning"]>;
|
|
151
|
-
}>>;
|
|
152
|
-
}>>;
|
|
153
|
-
readonly permissions: Schema.$Array<Schema.Struct<{
|
|
154
|
-
readonly origin: Schema.NonEmptyString;
|
|
155
|
-
readonly permissions: Schema.$Array<Schema.Literals<readonly ["accelerometer", "background-sync", "camera", "clipboard-read", "clipboard-write", "geolocation", "gyroscope", "magnetometer", "microphone", "midi", "notifications", "payment-handler", "storage-access"]>>;
|
|
156
|
-
}>>;
|
|
157
|
-
readonly bindings: Schema.optionalKey<Schema.$Array<Schema.declare<Registration<unknown, unknown>, Registration<unknown, unknown>>>>;
|
|
158
|
-
}>;
|
|
159
|
-
type AnyPlan = Plan<unknown, unknown>;
|
|
160
|
-
type PlanError<P extends AnyPlan> = P extends Plan<infer E, infer _R> ? E : never;
|
|
161
|
-
type PlanRequirements<P extends AnyPlan> = P extends Plan<infer _E, infer R> ? R : never;
|
|
162
|
-
declare const empty: Plan<never, never>;
|
|
163
|
-
declare const init: (script: InitScript) => Plan<never, never>;
|
|
164
|
-
declare const permissions: (grant: PermissionGrant) => Plan<never, never>;
|
|
165
|
-
/**
|
|
166
|
-
* Register a page-callable host callback without running it or capturing an ambient runtime.
|
|
167
|
-
* Native installation later owns origin/document checks, bounded admission and disposal.
|
|
168
|
-
*/
|
|
169
|
-
declare const binding: <I, IEncoded, O, OEncoded, E, R>(options: BindingOptions<I, IEncoded, O, OEncoded, E, R>) => Plan<E, R>;
|
|
170
|
-
/** Combination is ordered and preserves every callback's consumer E/R union. */
|
|
171
|
-
declare function combine<const Plans extends ReadonlyArray<AnyPlan>>(...plans: Plans): Plan<PlanError<Plans[number]>, PlanRequirements<Plans[number]>>;
|
|
172
|
-
/** What the current document is, not a promise about any other document. */
|
|
173
|
-
type ReadinessOutcome = {
|
|
174
|
-
readonly _tag: "Ready";
|
|
175
|
-
} | {
|
|
176
|
-
readonly _tag: "NotApplicable";
|
|
177
|
-
} | {
|
|
178
|
-
readonly _tag: "RequiresNavigation";
|
|
179
|
-
};
|
|
180
|
-
//#endregion
|
|
181
|
-
export { binding as _, BindingRegistration as a, init as b, InitScript as c, PermissionGrant as d, Plan as f, ReadinessOutcome as g, Readiness as h, BindingOptions as i, Origin as l, PlanRequirements as m, BindingFailure as n, BindingStatistics as o, PlanError as p, BindingFailureMode as r, Bootstrap_d_exports as s, BindingDiagnostics as t, Permission as u, combine as v, permissions as x, empty as y };
|
|
182
|
-
export {};
|
|
183
|
-
//# sourceMappingURL=Bootstrap-B9UUXsvF.d.mts.map
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { BrowserError, InitializationError, Reasons } from "./Errors.mjs";
|
|
2
|
-
import { Identifier } from "./BrowserData.mjs";
|
|
3
|
-
import { Effect, Result, Schema } from "effect";
|
|
4
|
-
//#region src/internal/browser/BindingRegistration.ts
|
|
5
|
-
const Invoke = Symbol("BrowserBindingRegistration");
|
|
6
|
-
const issued = /* @__PURE__ */ new WeakSet();
|
|
7
|
-
const Origin$1 = Schema.NonEmptyString.check(Schema.isMaxLength(2048), Schema.makeFilter((value) => {
|
|
8
|
-
try {
|
|
9
|
-
const url = new URL(value);
|
|
10
|
-
return ["http:", "https:"].includes(url.protocol) && url.origin === value && !url.username && !url.password;
|
|
11
|
-
} catch {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
}, { title: "an exact http(s) origin" }));
|
|
15
|
-
const FailureMode = Schema.Literals(["reject-call", "fail-session"]);
|
|
16
|
-
const metadataSchema = Schema.Struct({
|
|
17
|
-
name: Identifier,
|
|
18
|
-
origins: Schema.Array(Origin$1).check(Schema.isMaxLength(16), Schema.isUnique(), Schema.makeFilter((origins) => origins.length > 0, { title: "at least one allowed origin" })),
|
|
19
|
-
maxConcurrent: Schema.Int.check(Schema.isBetween({
|
|
20
|
-
minimum: 1,
|
|
21
|
-
maximum: 64
|
|
22
|
-
})),
|
|
23
|
-
maxInputBytes: Schema.Int.check(Schema.isBetween({
|
|
24
|
-
minimum: 1,
|
|
25
|
-
maximum: 1048576
|
|
26
|
-
})),
|
|
27
|
-
maxOutputBytes: Schema.Int.check(Schema.isBetween({
|
|
28
|
-
minimum: 1,
|
|
29
|
-
maximum: 4194304
|
|
30
|
-
})),
|
|
31
|
-
timeoutMillis: Schema.Int.check(Schema.isBetween({
|
|
32
|
-
minimum: 1,
|
|
33
|
-
maximum: 12e4
|
|
34
|
-
})),
|
|
35
|
-
failureMode: FailureMode
|
|
36
|
-
});
|
|
37
|
-
/** Retain an issued live capability at schema boundaries; a copied shape is not authority. */
|
|
38
|
-
const schema = Schema.declare((value) => typeof value === "object" && value !== null && issued.has(value), { title: "an issued browser binding registration" });
|
|
39
|
-
const issue = (metadata, invoke) => {
|
|
40
|
-
const registration = Object.freeze({
|
|
41
|
-
...metadata,
|
|
42
|
-
origins: Object.freeze([...metadata.origins]),
|
|
43
|
-
[Invoke]: invoke
|
|
44
|
-
});
|
|
45
|
-
issued.add(registration);
|
|
46
|
-
return registration;
|
|
47
|
-
};
|
|
48
|
-
/** Pack heterogeneous codecs and handlers while their concrete input/output types are known. */
|
|
49
|
-
const make = (options) => {
|
|
50
|
-
const { maxConcurrent = 1, maxInputBytes = 65536, maxOutputBytes = 65536, timeoutMillis = 1e4, failureMode = "reject-call" } = options;
|
|
51
|
-
const decoded = Schema.decodeResult(metadataSchema)({
|
|
52
|
-
...options,
|
|
53
|
-
maxConcurrent,
|
|
54
|
-
maxInputBytes,
|
|
55
|
-
maxOutputBytes,
|
|
56
|
-
timeoutMillis,
|
|
57
|
-
failureMode
|
|
58
|
-
});
|
|
59
|
-
if (Result.isFailure(decoded)) throw decoded.failure;
|
|
60
|
-
const metadata = decoded.success;
|
|
61
|
-
const { input, output, handle } = options;
|
|
62
|
-
if (!Schema.isSchema(input) || !Schema.isSchema(output) || typeof handle !== "function") throw new TypeError("Invalid binding registration");
|
|
63
|
-
const fail = (reason) => InitializationError.make({
|
|
64
|
-
operation: "callback",
|
|
65
|
-
step: metadata.name,
|
|
66
|
-
reason
|
|
67
|
-
});
|
|
68
|
-
return issue(metadata, Effect.fnUntraced(function* (text, check) {
|
|
69
|
-
if (new TextEncoder().encode(text).length > metadata.maxInputBytes) return yield* fail("input");
|
|
70
|
-
const decoded = yield* Schema.decodeEffect(Schema.fromJsonString(input))(text).pipe(Effect.catchCause(() => Effect.fail(fail("input"))));
|
|
71
|
-
yield* check;
|
|
72
|
-
const value = yield* Effect.suspend(() => handle(decoded));
|
|
73
|
-
const encoded = yield* Schema.encodeEffect(output)(value).pipe(Effect.catchCause(() => Effect.fail(fail("output"))));
|
|
74
|
-
const json = yield* Schema.decodeUnknownEffect(Schema.Json)(encoded).pipe(Effect.catchCause(() => Effect.fail(fail("output"))));
|
|
75
|
-
const result = yield* Schema.encodeEffect(Schema.fromJsonString(Schema.Json))(json).pipe(Effect.catchCause(() => Effect.fail(fail("output"))));
|
|
76
|
-
if (new TextEncoder().encode(result).length > metadata.maxOutputBytes) return yield* fail("output");
|
|
77
|
-
return result;
|
|
78
|
-
}));
|
|
79
|
-
};
|
|
80
|
-
/** Authentication is identity-based even when a caller copies every enumerable field/symbol. */
|
|
81
|
-
const snapshot = Effect.fnUntraced(function* (registration) {
|
|
82
|
-
const invalid = () => BrowserError.make({
|
|
83
|
-
operation: "configure",
|
|
84
|
-
reason: Reasons.Configuration.make({}),
|
|
85
|
-
outcome: "undispatched"
|
|
86
|
-
});
|
|
87
|
-
if (!issued.has(registration)) return yield* invalid();
|
|
88
|
-
const metadata = yield* Schema.decodeEffect(metadataSchema)(registration).pipe(Effect.mapError(invalid));
|
|
89
|
-
return issue(metadata, registration[Invoke]);
|
|
90
|
-
});
|
|
91
|
-
const invoke = (registration, text, check) => registration[Invoke](text, check);
|
|
92
|
-
//#endregion
|
|
93
|
-
//#region src/Bootstrap.ts
|
|
94
|
-
/**
|
|
95
|
-
* Exact scheme-and-host origin, as a document reports it. Patterns are deliberately absent:
|
|
96
|
-
* a registration that cannot say exactly where it applies does not belong in a plan.
|
|
97
|
-
*/
|
|
98
|
-
const Origin = Origin$1;
|
|
99
|
-
/**
|
|
100
|
-
* The reviewed subset of native permission capabilities. Each name is checked against a real
|
|
101
|
-
* browser in native acceptance; an unsupported capability is refused before it is exposed.
|
|
102
|
-
*/
|
|
103
|
-
const Permission = Schema.Literals([
|
|
104
|
-
"accelerometer",
|
|
105
|
-
"background-sync",
|
|
106
|
-
"camera",
|
|
107
|
-
"clipboard-read",
|
|
108
|
-
"clipboard-write",
|
|
109
|
-
"geolocation",
|
|
110
|
-
"gyroscope",
|
|
111
|
-
"magnetometer",
|
|
112
|
-
"microphone",
|
|
113
|
-
"midi",
|
|
114
|
-
"notifications",
|
|
115
|
-
"payment-handler",
|
|
116
|
-
"storage-access"
|
|
117
|
-
]);
|
|
118
|
-
const PermissionGrant = Schema.Struct({
|
|
119
|
-
origin: Origin,
|
|
120
|
-
permissions: Schema.Array(Permission).check(Schema.isMaxLength(16), Schema.isUnique())
|
|
121
|
-
});
|
|
122
|
-
/**
|
|
123
|
-
* Registration is not readiness. A script may start asynchronous work, but it cannot pause the
|
|
124
|
-
* website's own scripts, so a document is ready only when its expression resolves to exactly
|
|
125
|
-
* `true`. A document that was already running when the bundle was registered never ran it:
|
|
126
|
-
* `RequireFreshNavigation` reports that instead of pretending otherwise, and an explicit
|
|
127
|
-
* reload of possibly uncertain work stays a caller's decision.
|
|
128
|
-
*/
|
|
129
|
-
const Readiness = Schema.Struct({
|
|
130
|
-
expression: Schema.NonEmptyString.check(Schema.isMaxLength(4096)),
|
|
131
|
-
timeoutMillis: Schema.Int.check(Schema.isBetween({
|
|
132
|
-
minimum: 1,
|
|
133
|
-
maximum: 12e4
|
|
134
|
-
})),
|
|
135
|
-
existingDocuments: Schema.Literals(["RequireFreshNavigation", "AcceptAlreadyRunning"])
|
|
136
|
-
});
|
|
137
|
-
/** Trusted host configuration. Script content is never model output or page input. */
|
|
138
|
-
const InitScript = Schema.Struct({
|
|
139
|
-
id: Identifier,
|
|
140
|
-
content: Schema.NonEmptyString.check(Schema.isMaxLength(65536)),
|
|
141
|
-
/** When present, the step runs only on these documents and readiness skips the rest. */
|
|
142
|
-
origins: Schema.optionalKey(Schema.Array(Origin).check(Schema.isMaxLength(16), Schema.isUnique())),
|
|
143
|
-
readiness: Schema.optionalKey(Readiness)
|
|
144
|
-
});
|
|
145
|
-
/** A callback failure can reject one page invocation or permanently fence the session. */
|
|
146
|
-
const BindingFailureMode = FailureMode;
|
|
147
|
-
/**
|
|
148
|
-
* Static plans remain serializable. Live binding plans retain issued registrations by identity;
|
|
149
|
-
* this schema neither executes their callbacks nor turns copied metadata into authority. Typed
|
|
150
|
-
* acquisition validates a separate snapshot so consumer E/R is not erased by a generic decoder.
|
|
151
|
-
*/
|
|
152
|
-
const Plan = Schema.Struct({
|
|
153
|
-
scripts: Schema.Array(InitScript).check(Schema.isMaxLength(16)),
|
|
154
|
-
permissions: Schema.Array(PermissionGrant).check(Schema.isMaxLength(16)),
|
|
155
|
-
bindings: Schema.optionalKey(Schema.Array(schema).check(Schema.isMaxLength(16)))
|
|
156
|
-
});
|
|
157
|
-
const empty = {
|
|
158
|
-
scripts: [],
|
|
159
|
-
permissions: []
|
|
160
|
-
};
|
|
161
|
-
const init = (script) => ({
|
|
162
|
-
scripts: [script],
|
|
163
|
-
permissions: []
|
|
164
|
-
});
|
|
165
|
-
const permissions = (grant) => ({
|
|
166
|
-
scripts: [],
|
|
167
|
-
permissions: [grant]
|
|
168
|
-
});
|
|
169
|
-
/**
|
|
170
|
-
* Register a page-callable host callback without running it or capturing an ambient runtime.
|
|
171
|
-
* Native installation later owns origin/document checks, bounded admission and disposal.
|
|
172
|
-
*/
|
|
173
|
-
const binding = (options) => ({
|
|
174
|
-
scripts: [],
|
|
175
|
-
permissions: [],
|
|
176
|
-
bindings: [make(options)]
|
|
177
|
-
});
|
|
178
|
-
function combine(...plans) {
|
|
179
|
-
const bindings = plans.flatMap((plan) => plan.bindings === void 0 ? [] : [...plan.bindings]);
|
|
180
|
-
return {
|
|
181
|
-
scripts: plans.flatMap((plan) => [...plan.scripts]),
|
|
182
|
-
permissions: plans.flatMap((plan) => [...plan.permissions]),
|
|
183
|
-
...bindings.length === 0 ? {} : { bindings }
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
//#endregion
|
|
187
|
-
export { PermissionGrant as a, binding as c, init as d, permissions as f, Permission as i, combine as l, snapshot as m, InitScript as n, Plan as o, invoke as p, Origin as r, Readiness as s, BindingFailureMode as t, empty as u };
|
|
188
|
-
|
|
189
|
-
//# sourceMappingURL=Bootstrap-CeQOWBy6.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Bootstrap-CeQOWBy6.mjs","names":["Origin","Registration.Origin","Registration.FailureMode","Registration.schema","Registration.make"],"sources":["../src/internal/browser/BindingRegistration.ts","../src/Bootstrap.ts"],"sourcesContent":["import { Effect, Result, Schema } from \"effect\";\n\nimport type * as Bootstrap from \"../../Bootstrap.ts\";\nimport { Identifier } from \"../../BrowserData.ts\";\nimport { BrowserError, InitializationError, Reasons } from \"../../Errors.ts\";\n\nconst Invoke = Symbol(\"BrowserBindingRegistration\");\nconst issued = new WeakSet<object>();\n\nexport const Origin = Schema.NonEmptyString.check(\n Schema.isMaxLength(2048),\n Schema.makeFilter(\n (value) => {\n try {\n const url = new URL(value);\n\n return (\n [\"http:\", \"https:\"].includes(url.protocol) &&\n url.origin === value &&\n !url.username &&\n !url.password\n );\n } catch {\n return false;\n }\n },\n { title: \"an exact http(s) origin\" },\n ),\n);\n\nexport const FailureMode = Schema.Literals([\"reject-call\", \"fail-session\"]);\n\nconst metadataSchema = Schema.Struct({\n name: Identifier,\n origins: Schema.Array(Origin).check(\n Schema.isMaxLength(16),\n Schema.isUnique(),\n Schema.makeFilter((origins) => origins.length > 0, { title: \"at least one allowed origin\" }),\n ),\n maxConcurrent: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 64 })),\n maxInputBytes: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1024 * 1024 })),\n maxOutputBytes: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 4 * 1024 * 1024 })),\n timeoutMillis: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 120_000 })),\n failureMode: FailureMode,\n});\n\ntype Metadata = typeof metadataSchema.Type;\n\nexport interface Registration<E, R> extends Metadata {\n readonly [Invoke]: (\n text: string,\n check: Effect.Effect<void, InitializationError>,\n ) => Effect.Effect<string, E | InitializationError, R>;\n}\n\n/** Retain an issued live capability at schema boundaries; a copied shape is not authority. */\nexport const schema = Schema.declare<Registration<unknown, unknown>>(\n (value): value is Registration<unknown, unknown> =>\n typeof value === \"object\" && value !== null && issued.has(value),\n { title: \"an issued browser binding registration\" },\n);\n\nconst issue = <E, R>(\n metadata: Metadata,\n invoke: Registration<E, R>[typeof Invoke],\n): Registration<E, R> => {\n const registration = Object.freeze({\n ...metadata,\n origins: Object.freeze([...metadata.origins]),\n [Invoke]: invoke,\n });\n\n issued.add(registration);\n\n return registration;\n};\n\n/** Pack heterogeneous codecs and handlers while their concrete input/output types are known. */\nexport const make = <I, IEncoded, O, OEncoded, E, R>(\n options: Bootstrap.BindingOptions<I, IEncoded, O, OEncoded, E, R>,\n): Registration<E, R> => {\n const {\n maxConcurrent = 1,\n maxInputBytes = 65536,\n maxOutputBytes = 65536,\n timeoutMillis = 10000,\n failureMode = \"reject-call\",\n } = options;\n\n const decoded = Schema.decodeResult(metadataSchema)({\n ...options,\n maxConcurrent,\n maxInputBytes,\n maxOutputBytes,\n timeoutMillis,\n failureMode,\n });\n\n if (Result.isFailure(decoded)) throw decoded.failure;\n const metadata = decoded.success;\n\n const { input, output, handle } = options;\n\n if (!Schema.isSchema(input) || !Schema.isSchema(output) || typeof handle !== \"function\") {\n throw new TypeError(\"Invalid binding registration\");\n }\n\n const fail = (reason: \"input\" | \"output\") =>\n InitializationError.make({ operation: \"callback\", step: metadata.name, reason });\n\n return issue(\n metadata,\n Effect.fnUntraced(function* (text, check) {\n if (new TextEncoder().encode(text).length > metadata.maxInputBytes)\n return yield* fail(\"input\");\n\n const decoded = yield* Schema.decodeEffect(Schema.fromJsonString(input))(text).pipe(\n Effect.catchCause(() => Effect.fail(fail(\"input\"))),\n );\n\n yield* check;\n const value = yield* Effect.suspend(() => handle(decoded));\n\n const encoded = yield* Schema.encodeEffect(output)(value).pipe(\n Effect.catchCause(() => Effect.fail(fail(\"output\"))),\n );\n\n const json = yield* Schema.decodeUnknownEffect(Schema.Json)(encoded).pipe(\n Effect.catchCause(() => Effect.fail(fail(\"output\"))),\n );\n\n const result = yield* Schema.encodeEffect(Schema.fromJsonString(Schema.Json))(json).pipe(\n Effect.catchCause(() => Effect.fail(fail(\"output\"))),\n );\n\n if (new TextEncoder().encode(result).length > metadata.maxOutputBytes)\n return yield* fail(\"output\");\n\n return result;\n }),\n );\n};\n\n/** Authentication is identity-based even when a caller copies every enumerable field/symbol. */\nexport const snapshot = Effect.fnUntraced(function* <E, R>(\n registration: Registration<E, R>,\n): Effect.fn.Return<Registration<E, R>, BrowserError> {\n const invalid = () =>\n BrowserError.make({\n operation: \"configure\",\n reason: Reasons.Configuration.make({}),\n outcome: \"undispatched\",\n });\n\n if (!issued.has(registration)) return yield* invalid();\n\n const metadata = yield* Schema.decodeEffect(metadataSchema)(registration).pipe(\n Effect.mapError(invalid),\n );\n\n return issue(metadata, registration[Invoke]);\n});\n\nexport const invoke = <E, R>(\n registration: Registration<E, R>,\n text: string,\n check: Effect.Effect<void, InitializationError>,\n): Effect.Effect<string, E | InitializationError, R> => registration[Invoke](text, check);\n","import { type Cause, type Effect, Schema } from \"effect\";\n\nimport { Identifier } from \"./BrowserData.ts\";\nimport type { InitializationError } from \"./Errors.ts\";\nimport * as Registration from \"./internal/browser/BindingRegistration.ts\";\n\n/**\n * Exact scheme-and-host origin, as a document reports it. Patterns are deliberately absent:\n * a registration that cannot say exactly where it applies does not belong in a plan.\n */\nexport const Origin = Registration.Origin;\n\nexport type Origin = typeof Origin.Type;\n\n/**\n * The reviewed subset of native permission capabilities. Each name is checked against a real\n * browser in native acceptance; an unsupported capability is refused before it is exposed.\n */\nexport const Permission = Schema.Literals([\n \"accelerometer\",\n \"background-sync\",\n \"camera\",\n \"clipboard-read\",\n \"clipboard-write\",\n \"geolocation\",\n \"gyroscope\",\n \"magnetometer\",\n \"microphone\",\n \"midi\",\n \"notifications\",\n \"payment-handler\",\n \"storage-access\",\n]);\n\nexport type Permission = typeof Permission.Type;\n\nexport const PermissionGrant = Schema.Struct({\n origin: Origin,\n permissions: Schema.Array(Permission).check(Schema.isMaxLength(16), Schema.isUnique()),\n});\n\nexport type PermissionGrant = typeof PermissionGrant.Type;\n\n/**\n * Registration is not readiness. A script may start asynchronous work, but it cannot pause the\n * website's own scripts, so a document is ready only when its expression resolves to exactly\n * `true`. A document that was already running when the bundle was registered never ran it:\n * `RequireFreshNavigation` reports that instead of pretending otherwise, and an explicit\n * reload of possibly uncertain work stays a caller's decision.\n */\nexport const Readiness = Schema.Struct({\n expression: Schema.NonEmptyString.check(Schema.isMaxLength(4096)),\n timeoutMillis: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 120_000 })),\n existingDocuments: Schema.Literals([\"RequireFreshNavigation\", \"AcceptAlreadyRunning\"]),\n});\n\nexport type Readiness = typeof Readiness.Type;\n\n/** Trusted host configuration. Script content is never model output or page input. */\nexport const InitScript = Schema.Struct({\n id: Identifier,\n content: Schema.NonEmptyString.check(Schema.isMaxLength(64 * 1024)),\n /** When present, the step runs only on these documents and readiness skips the rest. */\n origins: Schema.optionalKey(\n Schema.Array(Origin).check(Schema.isMaxLength(16), Schema.isUnique()),\n ),\n readiness: Schema.optionalKey(Readiness),\n});\n\nexport type InitScript = typeof InitScript.Type;\n\n/** A callback failure can reject one page invocation or permanently fence the session. */\nexport const BindingFailureMode = Registration.FailureMode;\n\nexport type BindingFailureMode = typeof BindingFailureMode.Type;\n\n/**\n * A registration issued by `binding`. Its private executable closure carries the real consumer\n * E/R; copying the metadata or fabricating an object does not grant callback authority.\n */\nexport type BindingRegistration<E = never, R = never> = Registration.Registration<E, R>;\n\n/**\n * Environment-free boundary codecs keep page data validation separate from consumer services.\n * The handler's E/R remain visible on the Plan and are supplied only by the trusted host.\n */\nexport interface BindingOptions<I, IEncoded, O, OEncoded, E, R> {\n readonly name: string;\n readonly origins: ReadonlyArray<Origin>;\n readonly input: Schema.ConstraintCodec<I, IEncoded, never, never>;\n readonly output: Schema.ConstraintCodec<O, OEncoded, never, never>;\n /** Defaults to one concurrent invocation. Explicit values still pass the bounded schema. */\n readonly maxConcurrent?: number;\n /** Defaults to 64 KiB. */\n readonly maxInputBytes?: number;\n /** Defaults to 64 KiB. */\n readonly maxOutputBytes?: number;\n /** Defaults to 10 seconds for the complete invocation. */\n readonly timeoutMillis?: number;\n /** Defaults to rejecting this invocation without terminating the session. */\n readonly failureMode?: BindingFailureMode;\n readonly handle: (input: I) => Effect.Effect<O, E, R>;\n}\n\n/**\n * One ordered bundle plus its host capabilities. Callback registrations preserve E/R through\n * their executable closures; static script/permission plans remain serializable values.\n */\nexport interface Plan<E = unknown, R = unknown> {\n readonly scripts: ReadonlyArray<InitScript>;\n readonly permissions: ReadonlyArray<PermissionGrant>;\n readonly bindings?: ReadonlyArray<BindingRegistration<E, R>>;\n}\n\n/** Host-only typed evidence. Causes are never logged or returned to page callers. */\nexport interface BindingFailure<E> {\n readonly name: string;\n readonly mode: BindingFailureMode;\n readonly cause: Cause.Cause<E | InitializationError>;\n}\n\nexport interface BindingStatistics {\n readonly name: string;\n readonly inFlight: number;\n readonly pendingNative: number;\n /** Finished/interrupted invocations whose native work or disposal has not settled. */\n readonly retired: number;\n readonly accepted: number;\n readonly succeeded: number;\n readonly rejected: number;\n}\n\n/** Copied snapshot: at most sixteen bindings and the latest thirty-two failure records. */\nexport interface BindingDiagnostics<E> {\n readonly faulted: boolean;\n readonly bindings: ReadonlyArray<BindingStatistics>;\n readonly failures: ReadonlyArray<BindingFailure<E>>;\n readonly droppedFailures: number;\n}\n\n/**\n * Static plans remain serializable. Live binding plans retain issued registrations by identity;\n * this schema neither executes their callbacks nor turns copied metadata into authority. Typed\n * acquisition validates a separate snapshot so consumer E/R is not erased by a generic decoder.\n */\nexport const Plan = Schema.Struct({\n scripts: Schema.Array(InitScript).check(Schema.isMaxLength(16)),\n permissions: Schema.Array(PermissionGrant).check(Schema.isMaxLength(16)),\n bindings: Schema.optionalKey(Schema.Array(Registration.schema).check(Schema.isMaxLength(16))),\n});\n\ntype AnyPlan = Plan<unknown, unknown>;\n\nexport type PlanError<P extends AnyPlan> = P extends Plan<infer E, infer _R> ? E : never;\nexport type PlanRequirements<P extends AnyPlan> = P extends Plan<infer _E, infer R> ? R : never;\n\nexport const empty: Plan<never, never> = { scripts: [], permissions: [] };\n\nexport const init = (script: InitScript): Plan<never, never> => ({\n scripts: [script],\n permissions: [],\n});\n\nexport const permissions = (grant: PermissionGrant): Plan<never, never> => ({\n scripts: [],\n permissions: [grant],\n});\n\n/**\n * Register a page-callable host callback without running it or capturing an ambient runtime.\n * Native installation later owns origin/document checks, bounded admission and disposal.\n */\nexport const binding = <I, IEncoded, O, OEncoded, E, R>(\n options: BindingOptions<I, IEncoded, O, OEncoded, E, R>,\n): Plan<E, R> => ({\n scripts: [],\n permissions: [],\n bindings: [Registration.make(options)],\n});\n\n/** Combination is ordered and preserves every callback's consumer E/R union. */\nexport function combine<const Plans extends ReadonlyArray<AnyPlan>>(\n ...plans: Plans\n): Plan<PlanError<Plans[number]>, PlanRequirements<Plans[number]>>;\n\nexport function combine(...plans: ReadonlyArray<AnyPlan>): AnyPlan {\n const bindings = plans.flatMap((plan) => (plan.bindings === undefined ? [] : [...plan.bindings]));\n\n return {\n scripts: plans.flatMap((plan) => [...plan.scripts]),\n permissions: plans.flatMap((plan) => [...plan.permissions]),\n ...(bindings.length === 0 ? {} : { bindings }),\n };\n}\n\n/** What the current document is, not a promise about any other document. */\nexport type ReadinessOutcome =\n | { readonly _tag: \"Ready\" }\n | { readonly _tag: \"NotApplicable\" }\n | { readonly _tag: \"RequiresNavigation\" };\n"],"mappings":"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"}
|
package/dist/Bootstrap.d.mts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { _ as binding, a as BindingRegistration, b as init, c as InitScript, d as PermissionGrant, f as Plan, g as ReadinessOutcome, h as Readiness, i as BindingOptions, l as Origin, m as PlanRequirements, n as BindingFailure, o as BindingStatistics, p as PlanError, r as BindingFailureMode, t as BindingDiagnostics, u as Permission, v as combine, x as permissions, y as empty } from "./Bootstrap-B9UUXsvF.mjs";
|
|
2
|
-
export { BindingDiagnostics, BindingFailure, BindingFailureMode, BindingOptions, BindingRegistration, BindingStatistics, InitScript, Origin, Permission, PermissionGrant, Plan, PlanError, PlanRequirements, Readiness, ReadinessOutcome, binding, combine, empty, init, permissions };
|
|
3
|
-
export {};
|
package/dist/Bootstrap.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { a as PermissionGrant, c as binding, d as init, f as permissions, i as Permission, l as combine, n as InitScript, o as Plan, r as Origin, s as Readiness, t as BindingFailureMode, u as empty } from "./Bootstrap-CeQOWBy6.mjs";
|
|
2
|
-
export { BindingFailureMode, InitScript, Origin, Permission, PermissionGrant, Plan, Readiness, binding, combine, empty, init, permissions };
|