camofox-browser 1.0.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/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +328 -0
- package/bin/camofox-browser.js +6 -0
- package/dist/src/middleware/auth.d.ts +6 -0
- package/dist/src/middleware/auth.d.ts.map +1 -0
- package/dist/src/middleware/auth.js +41 -0
- package/dist/src/middleware/auth.js.map +1 -0
- package/dist/src/middleware/errors.d.ts +5 -0
- package/dist/src/middleware/errors.d.ts.map +1 -0
- package/dist/src/middleware/errors.js +33 -0
- package/dist/src/middleware/errors.js.map +1 -0
- package/dist/src/middleware/logging.d.ts +14 -0
- package/dist/src/middleware/logging.d.ts.map +1 -0
- package/dist/src/middleware/logging.js +57 -0
- package/dist/src/middleware/logging.js.map +1 -0
- package/dist/src/routes/core.d.ts +3 -0
- package/dist/src/routes/core.d.ts.map +1 -0
- package/dist/src/routes/core.js +579 -0
- package/dist/src/routes/core.js.map +1 -0
- package/dist/src/routes/openclaw.d.ts +3 -0
- package/dist/src/routes/openclaw.d.ts.map +1 -0
- package/dist/src/routes/openclaw.js +335 -0
- package/dist/src/routes/openclaw.js.map +1 -0
- package/dist/src/server.d.ts +2 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +74 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/services/browser.d.ts +5 -0
- package/dist/src/services/browser.d.ts.map +1 -0
- package/dist/src/services/browser.js +64 -0
- package/dist/src/services/browser.js.map +1 -0
- package/dist/src/services/session.d.ts +30 -0
- package/dist/src/services/session.d.ts.map +1 -0
- package/dist/src/services/session.js +204 -0
- package/dist/src/services/session.js.map +1 -0
- package/dist/src/services/tab.d.ts +85 -0
- package/dist/src/services/tab.d.ts.map +1 -0
- package/dist/src/services/tab.js +463 -0
- package/dist/src/services/tab.js.map +1 -0
- package/dist/src/types.d.ts +66 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/config.d.ts +49 -0
- package/dist/src/utils/config.d.ts.map +1 -0
- package/dist/src/utils/config.js +59 -0
- package/dist/src/utils/config.js.map +1 -0
- package/dist/src/utils/cookies.d.ts +30 -0
- package/dist/src/utils/cookies.d.ts.map +1 -0
- package/dist/src/utils/cookies.js +71 -0
- package/dist/src/utils/cookies.js.map +1 -0
- package/dist/src/utils/launcher.d.ts +19 -0
- package/dist/src/utils/launcher.d.ts.map +1 -0
- package/dist/src/utils/launcher.js +50 -0
- package/dist/src/utils/launcher.js.map +1 -0
- package/dist/src/utils/macros.d.ts +21 -0
- package/dist/src/utils/macros.d.ts.map +1 -0
- package/dist/src/utils/macros.js +29 -0
- package/dist/src/utils/macros.js.map +1 -0
- package/dist/src/utils/presets.d.ts +36 -0
- package/dist/src/utils/presets.d.ts.map +1 -0
- package/dist/src/utils/presets.js +276 -0
- package/dist/src/utils/presets.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_TABS_PER_SESSION = exports.MAX_SESSIONS = exports.SESSION_TIMEOUT_MS = void 0;
|
|
4
|
+
exports.normalizeUserId = normalizeUserId;
|
|
5
|
+
exports.getSessionMapKey = getSessionMapKey;
|
|
6
|
+
exports.getSessionsForUser = getSessionsForUser;
|
|
7
|
+
exports.getAllSessions = getAllSessions;
|
|
8
|
+
exports.countTotalTabsForSessions = countTotalTabsForSessions;
|
|
9
|
+
exports.getTabGroup = getTabGroup;
|
|
10
|
+
exports.unindexSessionTabs = unindexSessionTabs;
|
|
11
|
+
exports.findTabById = findTabById;
|
|
12
|
+
exports.getSession = getSession;
|
|
13
|
+
exports.indexTab = indexTab;
|
|
14
|
+
exports.unindexTab = unindexTab;
|
|
15
|
+
exports.clearAllState = clearAllState;
|
|
16
|
+
exports.closeSessionsForUser = closeSessionsForUser;
|
|
17
|
+
exports.closeAllSessions = closeAllSessions;
|
|
18
|
+
exports.startCleanupInterval = startCleanupInterval;
|
|
19
|
+
exports.stopCleanupInterval = stopCleanupInterval;
|
|
20
|
+
const presets_1 = require("../utils/presets");
|
|
21
|
+
const logging_1 = require("../middleware/logging");
|
|
22
|
+
const browser_1 = require("./browser");
|
|
23
|
+
const tab_1 = require("./tab");
|
|
24
|
+
const config_1 = require("../utils/config");
|
|
25
|
+
const CONFIG = (0, config_1.loadConfig)();
|
|
26
|
+
// userId -> { context, tabGroups: Map<sessionKey, Map<tabId, TabState>>, lastAccess }
|
|
27
|
+
// Note: sessionKey was previously called listItemId - both are accepted for backward compatibility
|
|
28
|
+
const sessions = new Map();
|
|
29
|
+
// tabId -> sessions map key
|
|
30
|
+
// Sessions may be keyed by composite `${userId}:${contextHash}`, while tab endpoints only get tabId.
|
|
31
|
+
const tabSessionIndex = new Map();
|
|
32
|
+
exports.SESSION_TIMEOUT_MS = Math.max(60000, Number.parseInt(process.env.CAMOFOX_SESSION_TIMEOUT || '', 10) || 1800000);
|
|
33
|
+
exports.MAX_SESSIONS = Math.max(1, Number.parseInt(process.env.CAMOFOX_MAX_SESSIONS || '', 10) || 50);
|
|
34
|
+
exports.MAX_TABS_PER_SESSION = Math.max(1, Number.parseInt(process.env.CAMOFOX_MAX_TABS || '', 10) || 10);
|
|
35
|
+
function normalizeUserId(userId) {
|
|
36
|
+
return String(userId);
|
|
37
|
+
}
|
|
38
|
+
function getSessionMapKey(userId, contextOverrides) {
|
|
39
|
+
return normalizeUserId(userId) + (0, presets_1.contextHash)(contextOverrides ?? null);
|
|
40
|
+
}
|
|
41
|
+
function getSessionsForUser(userId) {
|
|
42
|
+
if (userId === undefined || userId === null)
|
|
43
|
+
return [];
|
|
44
|
+
const prefix = normalizeUserId(userId);
|
|
45
|
+
const out = [];
|
|
46
|
+
for (const [key, session] of sessions) {
|
|
47
|
+
if (key === prefix || key.startsWith(prefix + ':'))
|
|
48
|
+
out.push([key, session]);
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
function getAllSessions() {
|
|
53
|
+
return sessions;
|
|
54
|
+
}
|
|
55
|
+
function countTotalTabsForSessions(sessionsForUser) {
|
|
56
|
+
let totalTabs = 0;
|
|
57
|
+
const iter = sessionsForUser ?? Array.from(sessions.entries());
|
|
58
|
+
for (const [, session] of iter) {
|
|
59
|
+
for (const group of session.tabGroups.values())
|
|
60
|
+
totalTabs += group.size;
|
|
61
|
+
}
|
|
62
|
+
return totalTabs;
|
|
63
|
+
}
|
|
64
|
+
function getTabGroup(session, sessionKey) {
|
|
65
|
+
let group = session.tabGroups.get(sessionKey);
|
|
66
|
+
if (!group) {
|
|
67
|
+
group = new Map();
|
|
68
|
+
session.tabGroups.set(sessionKey, group);
|
|
69
|
+
}
|
|
70
|
+
return group;
|
|
71
|
+
}
|
|
72
|
+
function findTab(session, tabId) {
|
|
73
|
+
for (const [listItemId, group] of session.tabGroups) {
|
|
74
|
+
if (group.has(tabId)) {
|
|
75
|
+
const tabState = group.get(tabId);
|
|
76
|
+
if (!tabState)
|
|
77
|
+
continue;
|
|
78
|
+
return { tabState, listItemId, group };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
function unindexSessionTabs(session) {
|
|
84
|
+
if (!session)
|
|
85
|
+
return;
|
|
86
|
+
for (const [, group] of session.tabGroups) {
|
|
87
|
+
for (const tabId of group.keys()) {
|
|
88
|
+
tabSessionIndex.delete(tabId);
|
|
89
|
+
(0, tab_1.clearTabLock)(tabId);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function findTabById(tabId, userId) {
|
|
94
|
+
if (userId === undefined || userId === null)
|
|
95
|
+
return null;
|
|
96
|
+
const prefix = normalizeUserId(userId);
|
|
97
|
+
const indexedKey = tabSessionIndex.get(tabId);
|
|
98
|
+
if (indexedKey) {
|
|
99
|
+
if (!(indexedKey === prefix || indexedKey.startsWith(prefix + ':'))) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const session = sessions.get(indexedKey);
|
|
103
|
+
if (session) {
|
|
104
|
+
const found = findTab(session, tabId);
|
|
105
|
+
if (found)
|
|
106
|
+
return { sessionKey: indexedKey, session, ...found };
|
|
107
|
+
}
|
|
108
|
+
tabSessionIndex.delete(tabId);
|
|
109
|
+
}
|
|
110
|
+
for (const [sessionKey, session] of sessions) {
|
|
111
|
+
if (!(sessionKey === prefix || sessionKey.startsWith(prefix + ':')))
|
|
112
|
+
continue;
|
|
113
|
+
const found = findTab(session, tabId);
|
|
114
|
+
if (found) {
|
|
115
|
+
tabSessionIndex.set(tabId, sessionKey);
|
|
116
|
+
return { sessionKey, session, ...found };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
async function getSession(userId, contextOverrides) {
|
|
122
|
+
const key = getSessionMapKey(userId, contextOverrides);
|
|
123
|
+
let session = sessions.get(key);
|
|
124
|
+
if (!session) {
|
|
125
|
+
if (sessions.size >= exports.MAX_SESSIONS) {
|
|
126
|
+
throw new Error('Maximum concurrent sessions reached');
|
|
127
|
+
}
|
|
128
|
+
const b = await (0, browser_1.ensureBrowser)();
|
|
129
|
+
const resolved = contextOverrides || {};
|
|
130
|
+
const contextOptions = {
|
|
131
|
+
viewport: resolved.viewport || { width: 1280, height: 720 },
|
|
132
|
+
permissions: ['geolocation'],
|
|
133
|
+
};
|
|
134
|
+
const hasOverrides = !!(contextOverrides &&
|
|
135
|
+
(contextOverrides.locale !== undefined || contextOverrides.timezoneId !== undefined || contextOverrides.geolocation !== undefined));
|
|
136
|
+
// With proxy+geoip, camoufox auto-configures locale/timezone/geo from proxy IP.
|
|
137
|
+
// If caller explicitly supplies overrides, apply them even when proxy is active.
|
|
138
|
+
if (!CONFIG.proxy.host || hasOverrides) {
|
|
139
|
+
contextOptions.locale = resolved.locale || 'en-US';
|
|
140
|
+
contextOptions.timezoneId = resolved.timezoneId || 'America/Los_Angeles';
|
|
141
|
+
contextOptions.geolocation = resolved.geolocation || { latitude: 37.7749, longitude: -122.4194 };
|
|
142
|
+
}
|
|
143
|
+
const context = await b.newContext(contextOptions);
|
|
144
|
+
session = { context, tabGroups: new Map(), lastAccess: Date.now() };
|
|
145
|
+
sessions.set(key, session);
|
|
146
|
+
(0, logging_1.log)('info', 'session created', { userId: key });
|
|
147
|
+
}
|
|
148
|
+
session.lastAccess = Date.now();
|
|
149
|
+
return session;
|
|
150
|
+
}
|
|
151
|
+
function indexTab(tabId, sessionKey) {
|
|
152
|
+
tabSessionIndex.set(tabId, sessionKey);
|
|
153
|
+
}
|
|
154
|
+
function unindexTab(tabId) {
|
|
155
|
+
tabSessionIndex.delete(tabId);
|
|
156
|
+
(0, tab_1.clearTabLock)(tabId);
|
|
157
|
+
}
|
|
158
|
+
function clearAllState() {
|
|
159
|
+
sessions.clear();
|
|
160
|
+
tabSessionIndex.clear();
|
|
161
|
+
(0, tab_1.clearAllTabLocks)();
|
|
162
|
+
}
|
|
163
|
+
async function closeSessionsForUser(userId) {
|
|
164
|
+
const prefix = userId;
|
|
165
|
+
for (const [key, session] of sessions) {
|
|
166
|
+
if (key === prefix || key.startsWith(prefix + ':')) {
|
|
167
|
+
await session.context.close().catch(() => { });
|
|
168
|
+
unindexSessionTabs(session);
|
|
169
|
+
sessions.delete(key);
|
|
170
|
+
(0, logging_1.log)('info', 'session closed', { userId: key });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async function closeAllSessions() {
|
|
175
|
+
for (const [userId, session] of sessions) {
|
|
176
|
+
await session.context.close().catch(() => { });
|
|
177
|
+
unindexSessionTabs(session);
|
|
178
|
+
sessions.delete(userId);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
let cleanupInterval = null;
|
|
182
|
+
function startCleanupInterval() {
|
|
183
|
+
if (cleanupInterval)
|
|
184
|
+
return cleanupInterval;
|
|
185
|
+
cleanupInterval = setInterval(() => {
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
for (const [sessionKey, session] of sessions) {
|
|
188
|
+
if (now - session.lastAccess > exports.SESSION_TIMEOUT_MS) {
|
|
189
|
+
session.context.close().catch(() => { });
|
|
190
|
+
unindexSessionTabs(session);
|
|
191
|
+
sessions.delete(sessionKey);
|
|
192
|
+
(0, logging_1.log)('info', 'session expired', { userId: sessionKey });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}, 60_000);
|
|
196
|
+
return cleanupInterval;
|
|
197
|
+
}
|
|
198
|
+
function stopCleanupInterval() {
|
|
199
|
+
if (cleanupInterval) {
|
|
200
|
+
clearInterval(cleanupInterval);
|
|
201
|
+
cleanupInterval = null;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/services/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { Locator, Page } from 'playwright-core';
|
|
2
|
+
import type { RefInfo, TabState, WaitForPageReadyOptions } from '../types';
|
|
3
|
+
export declare function withTabLock<T>(tabId: string, operation: () => Promise<T>): Promise<T>;
|
|
4
|
+
export declare function clearTabLock(tabId: string): void;
|
|
5
|
+
export declare function clearAllTabLocks(): void;
|
|
6
|
+
export declare function validateUrl(url: string): string | null;
|
|
7
|
+
export declare function annotateAriaYamlWithRefs(ariaYaml: string | null, refs: Map<string, RefInfo>): string;
|
|
8
|
+
export declare function waitForPageReady(page: Page, options?: WaitForPageReadyOptions): Promise<boolean>;
|
|
9
|
+
export declare function dismissConsentDialogs(page: Page): Promise<void>;
|
|
10
|
+
export declare function buildRefs(page: Page): Promise<Map<string, RefInfo>>;
|
|
11
|
+
export declare function getAriaSnapshot(page: Page): Promise<string | null>;
|
|
12
|
+
export declare function refToLocator(page: Page, ref: string, refs: Map<string, RefInfo>): Locator | null;
|
|
13
|
+
export declare function createTabState(page: Page): TabState;
|
|
14
|
+
export declare function navigateTab(tabId: string, tabState: TabState, params: {
|
|
15
|
+
url?: string;
|
|
16
|
+
macro?: string;
|
|
17
|
+
query?: string;
|
|
18
|
+
}): Promise<{
|
|
19
|
+
ok: true;
|
|
20
|
+
url: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function snapshotTab(tabState: TabState): Promise<{
|
|
23
|
+
url: string;
|
|
24
|
+
snapshot: string;
|
|
25
|
+
refsCount: number;
|
|
26
|
+
}>;
|
|
27
|
+
export declare function clickTab(tabId: string, tabState: TabState, params: {
|
|
28
|
+
ref?: string;
|
|
29
|
+
selector?: string;
|
|
30
|
+
}): Promise<{
|
|
31
|
+
ok: true;
|
|
32
|
+
url: string;
|
|
33
|
+
}>;
|
|
34
|
+
export declare function typeTab(tabId: string, tabState: TabState, params: {
|
|
35
|
+
ref?: string;
|
|
36
|
+
selector?: string;
|
|
37
|
+
text: string;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
ok: true;
|
|
40
|
+
}>;
|
|
41
|
+
export declare function pressTab(tabId: string, tabState: TabState, key: string): Promise<{
|
|
42
|
+
ok: true;
|
|
43
|
+
}>;
|
|
44
|
+
export declare function scrollTab(tabState: TabState, params: {
|
|
45
|
+
direction?: 'up' | 'down';
|
|
46
|
+
amount?: number;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
ok: true;
|
|
49
|
+
}>;
|
|
50
|
+
export declare function backTab(tabId: string, tabState: TabState): Promise<{
|
|
51
|
+
ok: true;
|
|
52
|
+
url: string;
|
|
53
|
+
}>;
|
|
54
|
+
export declare function forwardTab(tabId: string, tabState: TabState): Promise<{
|
|
55
|
+
ok: true;
|
|
56
|
+
url: string;
|
|
57
|
+
}>;
|
|
58
|
+
export declare function refreshTab(tabId: string, tabState: TabState): Promise<{
|
|
59
|
+
ok: true;
|
|
60
|
+
url: string;
|
|
61
|
+
}>;
|
|
62
|
+
export declare function getLinks(tabState: TabState, params: {
|
|
63
|
+
limit: number;
|
|
64
|
+
offset: number;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
links: Array<{
|
|
67
|
+
url: string;
|
|
68
|
+
text: string;
|
|
69
|
+
}>;
|
|
70
|
+
pagination: {
|
|
71
|
+
total: number;
|
|
72
|
+
offset: number;
|
|
73
|
+
limit: number;
|
|
74
|
+
hasMore: boolean;
|
|
75
|
+
};
|
|
76
|
+
}>;
|
|
77
|
+
export declare function screenshotTab(tabState: TabState, fullPage: boolean): Promise<Buffer>;
|
|
78
|
+
export declare function waitTab(tabState: TabState, params: {
|
|
79
|
+
timeout: number;
|
|
80
|
+
waitForNetwork: boolean;
|
|
81
|
+
}): Promise<{
|
|
82
|
+
ok: true;
|
|
83
|
+
ready: boolean;
|
|
84
|
+
}>;
|
|
85
|
+
//# sourceMappingURL=tab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab.d.ts","sourceRoot":"","sources":["../../../src/services/tab.ts"],"names":[],"mappings":"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"}
|