Node.js SDK
Node.js 核心能力
当前 client、session、context、extension、download、CDP、错误和日志 API。
Client 与区域
import { Lexmount } from "lexmount";
const client = new Lexmount({
region: "<region-id>",
timeout: 60_000,
});
console.log(await client.regionInfo());
console.log(await client.catalogInfo());Client 从构造函数参数或环境变量读取凭据。区域目录发现是尽力而为:目录或探测不可用时,会回退到配置的 base URL。
Sessions
创建选项
const session = await client.sessions.create({
browserMode: "normal",
windowSize: "1920,1080",
downloads: { enabled: true },
recording: { persistent: true },
});| 选项 | 用途 |
|---|---|
browserMode | normal 表示 Chromium,light 表示 Moli |
context / contextDescription | 复用或创建持久化浏览器状态 |
extensionIds | 挂载已上传扩展 |
proxy / officialProxy | 使用自定义上游代理或 Lexmount 官方代理池 |
downloads | 开启或关闭 session 存储下载 |
recording | 开启或关闭持久化回放;Moli 会强制关闭 |
customImageId | 使用获准的自定义浏览器镜像 |
windowSize | 以 width,height 设置 ACE 浏览器尺寸 |
enableLightmountLayout | 开启 LightMount layout 集成,默认 true |
enableLightmountResource | 覆盖当前 session 的 layout-resource 集成 |
asyncCreate | 异步创建并等待 active,默认 true |
pollIntervalMs / pollTimeoutMs | 控制激活状态轮询 |
officialProxy: true 与 proxy 不能同时使用。Context、扩展、代理和自定义镜像是否可用由套餐能力决定。
查询、列表、targets 与关闭
const current = await client.sessions.get(session.id);
const sessions = await client.sessions.list({ status: "active" });
console.log(sessions.pagination.totalCount);
for (const item of sessions) {
console.log(item.id, item.status, item.regionId, item.browserType);
}
for (const target of await client.sessions.listTargets(session.id)) {
console.log(target.title, target.url, target.inspectUrl);
}
await session.close();
// 只有 ID 时等价调用:
await client.sessions.delete({ sessionId: session.id });下载
const result = await client.sessions.downloads.list(session.id);
console.log(result.summary.count, result.summary.totalSize);
const file = await client.sessions.downloads.get(session.id, "<download-id>");
const archive = await client.sessions.downloads.archive(session.id);
const deleted = await client.sessions.downloads.delete(session.id);
console.log(file.length, archive.length, deleted.deletedCount);存储下载默认开启。请参考 quickstart 仓库配置远端浏览器下载行为,使文件进入持久化下载目录。
Contexts
const context = await client.contexts.create({
description: "Authenticated storefront",
metadata: { owner: "agent-a" },
});
const session = await client.sessions.create({
context: { id: context.id, mode: "readWrite" },
});
const contexts = await client.contexts.list({ status: "available", limit: 20 });
const details = await client.contexts.get(context.id);
const forked = await client.contexts.fork(context.id);
await client.contexts.forceRelease(context.id);
await client.contexts.delete(forked.id);Context 被活跃的读写 session 使用时会锁定。当前 fork 只会复制离线且状态为 available 的 context;不支持热 fork、copy-on-write 或父子谱系追踪。
Extensions
const extension = await client.extensions.upload(
"/absolute/path/to/extension.zip",
{
name: "demo-extension",
},
);
const extensions = await client.extensions.list({ limit: 20, offset: 0 });
const details = await client.extensions.get(extension.id);
const session = await client.sessions.create({ extensionIds: [extension.id] });
await session.close();
await client.extensions.delete(extension.id);服务接受 .zip 和 .crx。活跃 session 正在使用扩展时不能删除该扩展。
CDP 辅助方法与集成鉴权
import { connectOverCDP, Lexmount } from "lexmount";
const client = new Lexmount();
const session = await client.sessions.create();
const cdp = await connectOverCDP(session);
console.log(await cdp.send("Browser.getVersion"));
await cdp.close();
await session.close();
client.close();包还导出 registerIntegratedAuthCallback 和 deregisterIntegratedAuthCallback,供应用处理集成鉴权。
错误与日志
import {
APIError,
AuthenticationError,
ContextLockedError,
NetworkError,
TimeoutError,
setLogLevel,
} from "lexmount";
setLogLevel("INFO");
try {
await client.sessions.create();
} catch (error) {
if (error instanceof AuthenticationError) {
console.error("Check API Key and Project ID");
} else if (error instanceof ContextLockedError) {
console.error(error.activeSessionId, error.retryAfter);
} else if (error instanceof NetworkError || error instanceof TimeoutError) {
console.error("Check whether a session was reserved before retrying");
} else if (error instanceof APIError) {
console.error(error.statusCode);
} else {
throw error;
}
}日志辅助方法包括 setLogLevel、enableLogging、disableLogging 和 getLogger。
Lexmount Browser