AbstractProtectedfeaturesThe capability flags for the backend this driver instance serves. Populated from the
RemoteBrowserProviderContext at BaseRemoteBrowserProvider.Connect time (call
this.applyContext(ctx) first). Drives BaseRemoteBrowserProvider.RequireFeature.
ProtectedproviderThe backend's display name for this driver instance, used in capability-error messages. Populated from the RemoteBrowserProviderContext; falls back to the driver class name.
The backend's supported-feature flags for this driver instance.
Read-only accessor over the internally-held BaseRemoteBrowserProvider.features. The engine consults this (and the underlying provider metadata) to decide which capability-gated session methods are safe to call; a driver consults it via BaseRemoteBrowserProvider.RequireFeature.
ProtectedapplyCaptures the connection context onto the instance so BaseRemoteBrowserProvider.Features, BaseRemoteBrowserProvider.RequireFeature, and capability-error messages have the backend's flags and name. A concrete BaseRemoteBrowserProvider.Connect should call this first.
The provider context handed to Connect.
AbstractConnectOpens or attaches a browser session on the backend over CDP and returns the live handle.
Implementations must normalize the backend's capability flags + provider name into the
instance (typically by calling this.applyContext(ctx) first), then establish the CDP-connected
browser and return an IRemoteBrowserSession wrapping it.
The host services and connection parameters for this session.
A promise resolving to the live remote-browser session handle.
AbstractDisconnectTears down / releases the backend session this driver opened (closes the container, ends the
browser-as-a-service session, …). Distinct from IRemoteBrowserSession.Close, which the
engine may call on the session handle; Disconnect releases the driver's own backend resources.
A promise that resolves once the backend session has been released.
ProtectednotBuilds the standard RemoteBrowserCapabilityNotSupportedError for an un-overridden capability or a failed feature requirement, stamped with this driver's backend name.
The feature / method name to report.
The error to throw or reject with.
ProtectedRequireDefense-in-depth guard: asserts a SupportedFeatures flag is enabled before the driver performs
a capability-gated action, throwing RemoteBrowserCapabilityNotSupportedError if it is
false/omitted. A driver should call this at the top of any capability-gated work so that even a
direct (engine-bypassing) caller cannot run an action the metadata says is off.
The IRemoteBrowserProviderFeatures flag to require.
Abstract base class for a Remote Browser provider driver — a pluggable backend that opens (or attaches to) a real Chromium browser over the Chrome DevTools Protocol and returns a live IRemoteBrowserSession the agent drives.
This is the sibling of
BaseRealtimeBridge: the Remote Browser channel is built exactly like the bridge subsystem (registry table + base driver + EngineBase/Engine pair + pluggable backends). A concrete driver (SelfHostedChromeRemoteBrowser,BrowserbaseRemoteBrowser, …) implements only the irreducibly backend-specific primitives — everything generic (control arbitration, the viewport→screen-track encode, session bookkeeping) lives in the server engine above. Drivers self-register with the MemberJunctionClassFactory— e.g.@RegisterClass(BaseRemoteBrowserProvider, 'BrowserbaseRemoteBrowser'). The base class itself is abstract and unregistered; the engine resolves a driver viaMJGlobal.ClassFactory.CreateInstance(BaseRemoteBrowserProvider, provider.DriverClass).Capability gating (two layers, defense-in-depth). The engine FIRST checks a provider's
SupportedFeaturesflag and never calls a session method whose feature is off. The driver's own capability-gated work is the SECOND layer: it calls BaseRemoteBrowserProvider.RequireFeature (or builds an error via BaseRemoteBrowserProvider.notSupported) so a metadata flag that lied — or a caller that bypassed the gate — fails loudly rather than silently degrading.Universal CDP substrate. Every backend (self-hosted Chrome and every browser-as-a-service) exposes a CDP endpoint; the engine standardizes on CDP-connect (reusing
@memberjunction/computer-useserver-side) so this Base package itself stays dependency-light and universal.See
/plans/realtime/realtime-bridges-architecture.md§4d / §4d-i.