@mearl/native-host 2.22.0 → 3.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +4 -0
- package/dist/THIRD_PARTY_NOTICES.txt +773 -0
- package/dist/agent/event-transport.d.ts +3 -0
- package/dist/agent/manager.d.ts +59 -0
- package/dist/agent/skill-manager.d.ts +52 -0
- package/dist/agent/workspace-directory.d.ts +4 -0
- package/dist/alipay-auth-code.d.ts +13 -0
- package/dist/analytics.d.ts +3 -0
- package/dist/app-profile-catalog.d.ts +11 -0
- package/dist/browser-artifacts.d.ts +26 -0
- package/dist/browser-inventory.d.ts +22 -0
- package/dist/browser-provider-coordinator.d.ts +24 -0
- package/dist/browser-provider.d.ts +30 -0
- package/dist/browser-registry.d.ts +93 -0
- package/dist/browser-socket-request.d.ts +5 -0
- package/dist/builtin-browser-providers.d.ts +8 -0
- package/dist/builtin-provider-options.d.ts +11 -0
- package/dist/capability-contracts.d.ts +73 -0
- package/dist/cdp-backend/action-registry.d.ts +36 -0
- package/dist/cdp-backend/app-profile-handlers.d.ts +62 -0
- package/dist/cdp-backend/browser-handlers.d.ts +6 -0
- package/dist/cdp-backend/buffers.d.ts +72 -0
- package/dist/cdp-backend/cdp-session.d.ts +102 -0
- package/dist/cdp-backend/cdp-utils.d.ts +41 -0
- package/dist/cdp-backend/client.d.ts +41 -0
- package/dist/cdp-backend/composite-handlers.d.ts +17 -0
- package/dist/cdp-backend/controlled-indicator.d.ts +18 -0
- package/dist/cdp-backend/cookie-handlers.d.ts +7 -0
- package/dist/cdp-backend/cookie-transfer.d.ts +37 -0
- package/dist/cdp-backend/device-shell.d.ts +26 -0
- package/dist/cdp-backend/discover.d.ts +29 -0
- package/dist/cdp-backend/domain-manager.d.ts +4 -0
- package/dist/cdp-backend/download-handlers.d.ts +9 -0
- package/dist/cdp-backend/fetch-interceptor.d.ts +26 -0
- package/dist/cdp-backend/frame-evaluation.d.ts +3 -0
- package/dist/cdp-backend/frame-tree.d.ts +16 -0
- package/dist/cdp-backend/handlers.d.ts +30 -0
- package/dist/cdp-backend/http-handlers.d.ts +33 -0
- package/dist/cdp-backend/interaction-handlers.d.ts +19 -0
- package/dist/cdp-backend/mock-handlers.d.ts +10 -0
- package/dist/cdp-backend/mtop-environment.d.ts +7 -0
- package/dist/cdp-backend/navigation-observer.d.ts +9 -0
- package/dist/cdp-backend/page-observer.d.ts +5 -0
- package/dist/cdp-backend/page-refs.d.ts +9 -0
- package/dist/cdp-backend/page-session-initializers.d.ts +6 -0
- package/dist/cdp-backend/plugin-pages.d.ts +12 -0
- package/dist/cdp-backend/release-control.d.ts +13 -0
- package/dist/cdp-backend/request-handlers.d.ts +10 -0
- package/dist/cdp-backend/rule-handlers.d.ts +11 -0
- package/dist/cdp-backend/send-request.d.ts +2 -0
- package/dist/cdp-backend/snapshot-handlers.d.ts +7 -0
- package/dist/cdp-backend/tab-handlers.d.ts +8 -0
- package/dist/cdp-backend/timezone-handlers.d.ts +4 -0
- package/dist/cloud-connector.d.ts +61 -0
- package/dist/config.d.ts +7 -0
- package/dist/control-session-manager.d.ts +30 -0
- package/dist/control-session.d.ts +31 -0
- package/dist/extension-file-transfer.d.ts +7 -0
- package/dist/extension-updater.d.ts +18 -0
- package/dist/host-updater.d.ts +39 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +263 -350
- package/dist/install.d.ts +1 -0
- package/dist/internal-extension-actions.d.ts +10 -0
- package/dist/launcher.d.ts +1 -0
- package/dist/managed-browser.d.ts +61 -0
- package/dist/native-capability-services.d.ts +21 -0
- package/dist/node-capabilities.d.ts +20 -0
- package/dist/node-capabilities.js +4 -0
- package/dist/page-runtime-store.d.ts +27 -0
- package/dist/persistent-browser-record.d.ts +8 -0
- package/dist/plugin-host-services.d.ts +7 -0
- package/dist/plugin-page-results.d.ts +7 -0
- package/dist/plugin-task-host.js +21 -21
- package/dist/plugin-worker.js +19 -19
- package/dist/pluginModelSessionWorker.js +1 -1
- package/dist/preset-components.d.ts +35 -0
- package/dist/preset-installation.d.ts +19 -0
- package/dist/provider-control-host.d.ts +1 -0
- package/dist/provider-control.d.ts +28 -0
- package/dist/provider-request-timeout.d.ts +2 -0
- package/dist/runtimeArgs.d.ts +14 -0
- package/dist/sandbox-browser-access.d.ts +10 -0
- package/dist/send-request-file-utils.d.ts +14 -0
- package/dist/socketLines.d.ts +12 -0
- package/dist/toolbox-permissions.d.ts +8 -0
- package/dist/toolbox-service.d.ts +26 -0
- package/dist/version.d.ts +1 -0
- package/package.json +26 -16
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud connector process management — start/stop/list cloud-connector
|
|
3
|
+
* child processes that bridge the local native-host to remote cloud servers.
|
|
4
|
+
*
|
|
5
|
+
* Lifecycle design
|
|
6
|
+
* ----------------
|
|
7
|
+
* cloud-connector processes are spawned `detached` and intentionally OUTLIVE
|
|
8
|
+
* the native-host that started them. The native-host is an ephemeral broker:
|
|
9
|
+
* Chrome kills it whenever the extension reloads / updates (stdin EOF). If a
|
|
10
|
+
* connector were a normal child it would die with that broker, tearing down the
|
|
11
|
+
* cloud bridge on every extension reload.
|
|
12
|
+
*
|
|
13
|
+
* Shared registry & ownership
|
|
14
|
+
* ---------------------------
|
|
15
|
+
* Connectors are also self-manageable from the terminal (`cloud-connector start
|
|
16
|
+
* <url>`), so the host-managed and self-managed modes must not fight over the
|
|
17
|
+
* same connector. They interoperate through a single shared registry under
|
|
18
|
+
* ~/.mearl/connectors/ (one JSON record per serverUrl), with paths
|
|
19
|
+
* derived via @mearl/daemon-core so both sides agree on locations.
|
|
20
|
+
*
|
|
21
|
+
* The daemon manager reserves a record while a connector starts; the connector
|
|
22
|
+
* process then owns its runtime state updates. This native-host reads the
|
|
23
|
+
* registry to adopt/list connectors and removes a record only while its pid still
|
|
24
|
+
* matches the process being stopped or reaped. A freshly started native-host
|
|
25
|
+
* verifies recorded pids and ADOPTS live connectors instead of spawning duplicates.
|
|
26
|
+
* Starting a connector is therefore idempotent: if a healthy one already exists
|
|
27
|
+
* for the serverUrl (started by us, a previous host, or the daemon CLI) we reuse
|
|
28
|
+
* it. Connectors die only when explicitly stopped, when they exit on their own,
|
|
29
|
+
* or when the machine reboots — never merely because the broker restarted.
|
|
30
|
+
*/
|
|
31
|
+
export interface CloudConnectorListItem {
|
|
32
|
+
serverUrl: string;
|
|
33
|
+
pid: number;
|
|
34
|
+
connectorId?: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CloudConnectorListResult {
|
|
38
|
+
connectors: CloudConnectorListItem[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Initialise module-level dependencies. Must be called before any other export.
|
|
42
|
+
*/
|
|
43
|
+
export declare function initCloudConnector(deps: {
|
|
44
|
+
log: (...args: any[]) => void;
|
|
45
|
+
isDaemonMode: boolean;
|
|
46
|
+
sendToExtension: (message: Record<string, any>) => void;
|
|
47
|
+
version: string;
|
|
48
|
+
}): void;
|
|
49
|
+
export declare function startCloudConnector(serverUrl: string): Promise<{
|
|
50
|
+
success: boolean;
|
|
51
|
+
pid?: number;
|
|
52
|
+
connectorId?: string;
|
|
53
|
+
name?: string;
|
|
54
|
+
reused?: boolean;
|
|
55
|
+
error?: string;
|
|
56
|
+
}>;
|
|
57
|
+
export declare function stopCloudConnector(serverUrl: string): {
|
|
58
|
+
success: boolean;
|
|
59
|
+
error?: string;
|
|
60
|
+
};
|
|
61
|
+
export declare function listCloudConnectors(): CloudConnectorListResult;
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface MearlConfig {
|
|
2
|
+
clientId?: string;
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
}
|
|
5
|
+
export declare const MEARL_CONFIG_FILE: string;
|
|
6
|
+
export declare function readMearlConfig(configFile?: string): MearlConfig;
|
|
7
|
+
export declare function writeMearlConfig(config: MearlConfig, configFile?: string): void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type ControlSessionInfo, type PageDownloadParams } from '@mearl/browser-core';
|
|
2
|
+
import { ControlSessionRegistry } from './control-session.js';
|
|
3
|
+
import { BrowserArtifactStore } from './browser-artifacts.js';
|
|
4
|
+
interface Dependencies {
|
|
5
|
+
browserId: () => string;
|
|
6
|
+
transport: () => ControlSessionInfo['transport'];
|
|
7
|
+
invoke: (action: string, data: any, transport: ControlSessionInfo['transport']) => Promise<any>;
|
|
8
|
+
deactivate?: (tabs: number[], transport: ControlSessionInfo['transport']) => Promise<void>;
|
|
9
|
+
cleanup: (tabs: number[], transport: ControlSessionInfo['transport'], preserveEnvironment: boolean) => Promise<void>;
|
|
10
|
+
download: (data: PageDownloadParams, transport: ControlSessionInfo['transport'], origin: string) => Promise<{
|
|
11
|
+
filename: string;
|
|
12
|
+
filePath: string;
|
|
13
|
+
action: unknown;
|
|
14
|
+
owned?: boolean;
|
|
15
|
+
directory?: string;
|
|
16
|
+
}>;
|
|
17
|
+
notify: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare class ControlSessionManager {
|
|
20
|
+
private dependencies;
|
|
21
|
+
readonly registry: ControlSessionRegistry;
|
|
22
|
+
readonly artifacts: BrowserArtifactStore;
|
|
23
|
+
private activityQueues;
|
|
24
|
+
private withActivity;
|
|
25
|
+
constructor(dependencies: Dependencies);
|
|
26
|
+
private closeTabs;
|
|
27
|
+
userControl(id: string, operation: 'handoff' | 'resume' | 'release', reason?: string): Promise<ControlSessionInfo>;
|
|
28
|
+
invoke(action: string, data: any, sessionId?: string, requestedTransport?: 'cdp', origin?: string): Promise<any>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ControlSessionInfo, type BrowserReleaseParams } from '@mearl/browser-core';
|
|
2
|
+
/** Resource ownership survives individual CLI connections; queues serialize shared pages. */
|
|
3
|
+
export declare class ControlSessionRegistry {
|
|
4
|
+
private browserId;
|
|
5
|
+
private sessions;
|
|
6
|
+
private owners;
|
|
7
|
+
private queues;
|
|
8
|
+
private pending;
|
|
9
|
+
private browserReleasing;
|
|
10
|
+
private resuming;
|
|
11
|
+
constructor(browserId: () => string);
|
|
12
|
+
private createSessionId;
|
|
13
|
+
create(transport: ControlSessionInfo['transport']): ControlSessionInfo;
|
|
14
|
+
info(id: string): ControlSessionInfo;
|
|
15
|
+
state(id: string): Omit<ControlSessionInfo, 'tabs'>;
|
|
16
|
+
find(id: string): ControlSessionInfo | undefined;
|
|
17
|
+
list(): ControlSessionInfo[];
|
|
18
|
+
private require;
|
|
19
|
+
private assertActive;
|
|
20
|
+
claim(id: string, tabId: number, source: 'created' | 'attached'): void;
|
|
21
|
+
blockedTabs(id?: string): number[];
|
|
22
|
+
assertBrowserRelease(): void;
|
|
23
|
+
releaseBrowser<T>(operation: () => Promise<T>): Promise<T>;
|
|
24
|
+
run<T>(id: string | undefined, action: string, data: any, operation: () => Promise<T>, transport?: ControlSessionInfo['transport']): Promise<T>;
|
|
25
|
+
waitForIdle(id: string): Promise<void>;
|
|
26
|
+
assertStep(id: string, generation: number): void;
|
|
27
|
+
recordResult(id: string, action: string, result: any, data?: any): void;
|
|
28
|
+
handoff(id: string, reason?: string): ControlSessionInfo;
|
|
29
|
+
resume(id: string, cleanup?: () => Promise<void>): Promise<ControlSessionInfo>;
|
|
30
|
+
release(id: string, params: BrowserReleaseParams, cleanup: (tabs: number[], close: number[]) => Promise<void>): Promise<ControlSessionInfo>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type RunActionsParams, type SendRequestParams } from '@mearl/browser-core';
|
|
2
|
+
type SendExtensionTransferAction = (action: string, data: any, timeoutMs: number) => Promise<any>;
|
|
3
|
+
export declare function hasSendRequestFiles(data: unknown): boolean;
|
|
4
|
+
export declare function hasRunActionsSendRequestFiles(data: unknown): boolean;
|
|
5
|
+
export declare function sendRequestWithTransferredFiles(data: SendRequestParams, send: SendExtensionTransferAction): Promise<any>;
|
|
6
|
+
export declare function sendRunActionsWithTransferredFiles(data: RunActionsParams, send: SendExtensionTransferAction, resolveTimeoutMs: (data: RunActionsParams) => number): Promise<any>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { updateSetupManagedBrowserExtensionFiles, type BrowserExtensionRelease } from '@mearl/setup/browser-extension';
|
|
2
|
+
export interface SetupExtensionUpdateRequest {
|
|
3
|
+
currentVersion: string;
|
|
4
|
+
setupManagedPath: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SetupExtensionUpdateResult {
|
|
7
|
+
changelogUrl: string;
|
|
8
|
+
updated: boolean;
|
|
9
|
+
version: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SetupExtensionUpdaterDependencies {
|
|
12
|
+
fetchRelease?: () => Promise<BrowserExtensionRelease>;
|
|
13
|
+
isProcessAlive?: (pid: number) => boolean;
|
|
14
|
+
lockPath?: string;
|
|
15
|
+
now?: () => number;
|
|
16
|
+
updateFiles?: typeof updateSetupManagedBrowserExtensionFiles;
|
|
17
|
+
}
|
|
18
|
+
export declare function updateSetupManagedExtension(request: SetupExtensionUpdateRequest, dependencies?: SetupExtensionUpdaterDependencies): Promise<SetupExtensionUpdateResult>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type CommandRunner } from '@mearl/daemon-core';
|
|
2
|
+
export declare const NATIVE_HOST_UPDATE_TIMEOUT_MS: number;
|
|
3
|
+
export type NativeHostUpdateError = 'lock-timeout' | 'network' | 'package-unavailable' | 'setup-failed' | 'timeout' | 'verification-failed' | 'unknown';
|
|
4
|
+
export interface NativeHostUpdateCommand {
|
|
5
|
+
args: string[];
|
|
6
|
+
}
|
|
7
|
+
type UpdateLockRunner = <T>(targetVersion: string, operation: () => Promise<T>) => Promise<T>;
|
|
8
|
+
export interface RunNativeHostUpdateOptions {
|
|
9
|
+
areTargetsInstalled?: (targetReleaseLine: string, environment: NodeJS.ProcessEnv) => Promise<boolean>;
|
|
10
|
+
environment?: NodeJS.ProcessEnv;
|
|
11
|
+
nodePath?: string;
|
|
12
|
+
packageBinDirectory?: string | null;
|
|
13
|
+
packageManagerCommand?: string | null;
|
|
14
|
+
packageRunner?: string;
|
|
15
|
+
platform?: NodeJS.Platform;
|
|
16
|
+
runner?: CommandRunner;
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
updateLockPath?: string;
|
|
19
|
+
withUpdateLock?: UpdateLockRunner;
|
|
20
|
+
}
|
|
21
|
+
export interface NativeHostUpdateCoordinatorOptions {
|
|
22
|
+
hostVersion: string;
|
|
23
|
+
log: (...args: unknown[]) => void;
|
|
24
|
+
requestRestart: () => void | Promise<void>;
|
|
25
|
+
runUpdate: (targetVersion: string) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export declare class NativeHostUpdateFailure extends Error {
|
|
28
|
+
readonly updateError: NativeHostUpdateError;
|
|
29
|
+
constructor(updateError: NativeHostUpdateError, message: string);
|
|
30
|
+
}
|
|
31
|
+
export declare function nativeHostUpdateCommand(targetVersion: string): NativeHostUpdateCommand;
|
|
32
|
+
export declare function runNativeHostUpdate(targetVersion: string, options?: RunNativeHostUpdateOptions): Promise<void>;
|
|
33
|
+
export declare class NativeHostUpdateCoordinator {
|
|
34
|
+
#private;
|
|
35
|
+
private readonly options;
|
|
36
|
+
constructor(options: NativeHostUpdateCoordinatorOptions);
|
|
37
|
+
evaluate(extensionVersion: unknown, checkForUpdates: unknown): void;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
package/dist/index.d.ts
ADDED