camofox-browser 2.1.0 → 2.4.1

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.
Files changed (102) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/README.md +304 -33
  3. package/dist/src/cli/commands/content.d.ts.map +1 -1
  4. package/dist/src/cli/commands/content.js +37 -0
  5. package/dist/src/cli/commands/content.js.map +1 -1
  6. package/dist/src/cli/commands/core.d.ts.map +1 -1
  7. package/dist/src/cli/commands/core.js +21 -4
  8. package/dist/src/cli/commands/core.js.map +1 -1
  9. package/dist/src/cli/commands/interaction.d.ts.map +1 -1
  10. package/dist/src/cli/commands/interaction.js +5 -14
  11. package/dist/src/cli/commands/interaction.js.map +1 -1
  12. package/dist/src/cli/commands/navigation.d.ts.map +1 -1
  13. package/dist/src/cli/commands/navigation.js +12 -6
  14. package/dist/src/cli/commands/navigation.js.map +1 -1
  15. package/dist/src/cli/commands/server.d.ts.map +1 -1
  16. package/dist/src/cli/commands/server.js +9 -3
  17. package/dist/src/cli/commands/server.js.map +1 -1
  18. package/dist/src/cli/commands/session.d.ts.map +1 -1
  19. package/dist/src/cli/commands/session.js +23 -5
  20. package/dist/src/cli/commands/session.js.map +1 -1
  21. package/dist/src/cli/server/manager.d.ts +1 -0
  22. package/dist/src/cli/server/manager.d.ts.map +1 -1
  23. package/dist/src/cli/server/manager.js +7 -12
  24. package/dist/src/cli/server/manager.js.map +1 -1
  25. package/dist/src/middleware/lifecycle-activity.d.ts +9 -0
  26. package/dist/src/middleware/lifecycle-activity.d.ts.map +1 -0
  27. package/dist/src/middleware/lifecycle-activity.js +21 -0
  28. package/dist/src/middleware/lifecycle-activity.js.map +1 -0
  29. package/dist/src/openapi/spec.d.ts +4 -0
  30. package/dist/src/openapi/spec.d.ts.map +1 -0
  31. package/dist/src/openapi/spec.js +730 -0
  32. package/dist/src/openapi/spec.js.map +1 -0
  33. package/dist/src/routes/core.d.ts.map +1 -1
  34. package/dist/src/routes/core.js +428 -53
  35. package/dist/src/routes/core.js.map +1 -1
  36. package/dist/src/routes/docs.d.ts +3 -0
  37. package/dist/src/routes/docs.d.ts.map +1 -0
  38. package/dist/src/routes/docs.js +23 -0
  39. package/dist/src/routes/docs.js.map +1 -0
  40. package/dist/src/routes/openclaw.d.ts.map +1 -1
  41. package/dist/src/routes/openclaw.js +244 -90
  42. package/dist/src/routes/openclaw.js.map +1 -1
  43. package/dist/src/server.js +55 -4
  44. package/dist/src/server.js.map +1 -1
  45. package/dist/src/services/context-pool.d.ts +19 -3
  46. package/dist/src/services/context-pool.d.ts.map +1 -1
  47. package/dist/src/services/context-pool.js +248 -65
  48. package/dist/src/services/context-pool.js.map +1 -1
  49. package/dist/src/services/download.d.ts +2 -0
  50. package/dist/src/services/download.d.ts.map +1 -1
  51. package/dist/src/services/download.js +110 -80
  52. package/dist/src/services/download.js.map +1 -1
  53. package/dist/src/services/lifecycle-controller.d.ts +40 -0
  54. package/dist/src/services/lifecycle-controller.d.ts.map +1 -0
  55. package/dist/src/services/lifecycle-controller.js +106 -0
  56. package/dist/src/services/lifecycle-controller.js.map +1 -0
  57. package/dist/src/services/resource-extractor.d.ts +1 -0
  58. package/dist/src/services/resource-extractor.d.ts.map +1 -1
  59. package/dist/src/services/resource-extractor.js +7 -0
  60. package/dist/src/services/resource-extractor.js.map +1 -1
  61. package/dist/src/services/session.d.ts +84 -2
  62. package/dist/src/services/session.d.ts.map +1 -1
  63. package/dist/src/services/session.js +349 -47
  64. package/dist/src/services/session.js.map +1 -1
  65. package/dist/src/services/structured-extractor.d.ts +39 -0
  66. package/dist/src/services/structured-extractor.d.ts.map +1 -0
  67. package/dist/src/services/structured-extractor.js +487 -0
  68. package/dist/src/services/structured-extractor.js.map +1 -0
  69. package/dist/src/services/tab.d.ts +30 -3
  70. package/dist/src/services/tab.d.ts.map +1 -1
  71. package/dist/src/services/tab.js +877 -124
  72. package/dist/src/services/tab.js.map +1 -1
  73. package/dist/src/services/tracing.d.ts +7 -0
  74. package/dist/src/services/tracing.d.ts.map +1 -1
  75. package/dist/src/services/tracing.js +162 -19
  76. package/dist/src/services/tracing.js.map +1 -1
  77. package/dist/src/services/vnc.d.ts.map +1 -1
  78. package/dist/src/services/vnc.js +5 -3
  79. package/dist/src/services/vnc.js.map +1 -1
  80. package/dist/src/services/youtube.js +1 -1
  81. package/dist/src/services/youtube.js.map +1 -1
  82. package/dist/src/types.d.ts +71 -1
  83. package/dist/src/types.d.ts.map +1 -1
  84. package/dist/src/utils/config.d.ts +79 -3
  85. package/dist/src/utils/config.d.ts.map +1 -1
  86. package/dist/src/utils/config.js +145 -3
  87. package/dist/src/utils/config.js.map +1 -1
  88. package/dist/src/utils/presets.d.ts.map +1 -1
  89. package/dist/src/utils/presets.js +3 -1
  90. package/dist/src/utils/presets.js.map +1 -1
  91. package/dist/src/utils/proxy-profiles.d.ts +18 -0
  92. package/dist/src/utils/proxy-profiles.d.ts.map +1 -0
  93. package/dist/src/utils/proxy-profiles.js +197 -0
  94. package/dist/src/utils/proxy-profiles.js.map +1 -0
  95. package/dist/src/utils/sidecar-version.d.ts +12 -0
  96. package/dist/src/utils/sidecar-version.d.ts.map +1 -0
  97. package/dist/src/utils/sidecar-version.js +63 -0
  98. package/dist/src/utils/sidecar-version.js.map +1 -0
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/openclaw.plugin.json +39 -0
  101. package/package.json +16 -4
  102. package/plugin.ts +949 -0
@@ -1,16 +1,36 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.MAX_TABS_PER_SESSION = exports.MAX_SESSIONS = exports.SESSION_TIMEOUT_MS = void 0;
4
7
  exports.__getUserConcurrencyStateForTests = __getUserConcurrencyStateForTests;
8
+ exports.__getSessionsMapForTests = __getSessionsMapForTests;
5
9
  exports.withUserLimit = withUserLimit;
10
+ exports.cleanupSessionsForUserId = cleanupSessionsForUserId;
6
11
  exports.normalizeUserId = normalizeUserId;
7
12
  exports.getSessionMapKey = getSessionMapKey;
13
+ exports.getEstablishedSessionProfile = getEstablishedSessionProfile;
14
+ exports.getCanonicalProfile = getCanonicalProfile;
15
+ exports.hasCanonicalProfile = hasCanonicalProfile;
16
+ exports.acquireFirstCreateMutex = acquireFirstCreateMutex;
17
+ exports.commitCanonicalProfile = commitCanonicalProfile;
18
+ exports.rollbackCanonicalMutex = rollbackCanonicalMutex;
19
+ exports.createCanonicalProfile = createCanonicalProfile;
20
+ exports.clearCanonicalProfile = clearCanonicalProfile;
21
+ exports.establishSessionProfile = establishSessionProfile;
22
+ exports.clearSessionProfile = clearSessionProfile;
8
23
  exports.getSessionsForUser = getSessionsForUser;
9
24
  exports.getAllSessions = getAllSessions;
10
25
  exports.countTotalTabsForSessions = countTotalTabsForSessions;
26
+ exports.getLifecycleSessionSnapshot = getLifecycleSessionSnapshot;
27
+ exports.getSessionsSnapshot = getSessionsSnapshot;
11
28
  exports.getTabGroup = getTabGroup;
12
29
  exports.unindexSessionTabs = unindexSessionTabs;
13
30
  exports.findTabById = findTabById;
31
+ exports.createStagedSession = createStagedSession;
32
+ exports.commitStagedFirstUse = commitStagedFirstUse;
33
+ exports.rollbackStagedFirstUse = rollbackStagedFirstUse;
14
34
  exports.getSession = getSession;
15
35
  exports.indexTab = indexTab;
16
36
  exports.unindexTab = unindexTab;
@@ -19,9 +39,12 @@ exports.closeSessionsForUser = closeSessionsForUser;
19
39
  exports.closeAllSessions = closeAllSessions;
20
40
  exports.startCleanupInterval = startCleanupInterval;
21
41
  exports.stopCleanupInterval = stopCleanupInterval;
42
+ exports.runLifecycleIdleCleanup = runLifecycleIdleCleanup;
43
+ const node_crypto_1 = __importDefault(require("node:crypto"));
22
44
  const logging_1 = require("../middleware/logging");
23
45
  const tab_1 = require("./tab");
24
46
  const config_1 = require("../utils/config");
47
+ const presets_1 = require("../utils/presets");
25
48
  const context_pool_1 = require("./context-pool");
26
49
  const download_1 = require("./download");
27
50
  const health_1 = require("./health");
@@ -37,6 +60,14 @@ const launchingSessions = new Map();
37
60
  // tabId -> sessions map key
38
61
  // Persistent profiles are keyed only by userId, while tab endpoints only get tabId.
39
62
  const tabSessionIndex = new Map();
63
+ // Canonical per-user profile: stores resolved overrides from the first core POST /tabs.
64
+ // Survives passive context eviction; cleared only on explicit session close/cleanup.
65
+ const canonicalProfiles = new Map();
66
+ // Session profiles keyed by userId::sessionKey to track separate proxy/geo profiles per session
67
+ const sessionProfiles = new Map();
68
+ // Per-user mutex covering the entire first-create lifecycle (establishment -> tab commit).
69
+ // Prevents sibling requests from observing provisional canonical state.
70
+ const firstCreateMutexes = new Map();
40
71
  const userConcurrency = new Map();
41
72
  function __getUserConcurrencyStateForTests(userId) {
42
73
  const key = String(userId).toLowerCase().trim();
@@ -45,6 +76,9 @@ function __getUserConcurrencyStateForTests(userId) {
45
76
  return null;
46
77
  return { active: state.active, queueLength: state.queue.length };
47
78
  }
79
+ function __getSessionsMapForTests() {
80
+ return sessions;
81
+ }
48
82
  async function withUserLimit(userId, maxConcurrent, operation, operationTimeoutMs) {
49
83
  const key = String(userId).toLowerCase().trim();
50
84
  let state = userConcurrency.get(key);
@@ -96,52 +130,192 @@ async function withUserLimit(userId, maxConcurrent, operation, operationTimeoutM
96
130
  }
97
131
  }
98
132
  }
99
- function cleanupSessionsForUserId(userId, reason) {
100
- const prefix = normalizeUserId(userId);
133
+ function cleanupSessionsForUserId(userId, reason, clearCanonical = true) {
134
+ const key = normalizeUserId(userId);
101
135
  // If a session is currently being created, drop our reference so callers don't keep a stale placeholder.
102
- launchingSessions.delete(prefix);
103
- void (0, vnc_1.stopVnc)(prefix).catch(() => { });
136
+ launchingSessions.delete(key);
137
+ void (0, vnc_1.stopVnc)(key).catch(() => { });
104
138
  try {
105
- (0, download_1.cleanupUserDownloads)(prefix);
139
+ (0, download_1.cleanupUserDownloads)(key);
106
140
  }
107
141
  catch {
108
142
  // ignore cleanup errors
109
143
  }
110
- (0, tracing_1.cleanupTracing)(prefix);
111
- for (const [key, session] of sessions) {
112
- if (key === prefix || key.startsWith(prefix + ':')) {
113
- unindexSessionTabs(session);
114
- sessions.delete(key);
115
- (0, logging_1.log)('info', 'session cleaned up', { userId: key, reason });
144
+ (0, tracing_1.cleanupTracing)(key);
145
+ const session = sessions.get(key);
146
+ if (session) {
147
+ unindexSessionTabs(session);
148
+ sessions.delete(key);
149
+ (0, logging_1.log)('info', 'session cleaned up', { userId: key, reason });
150
+ }
151
+ if (clearCanonical) {
152
+ canonicalProfiles.delete(key);
153
+ const mutex = firstCreateMutexes.get(key);
154
+ if (mutex) {
155
+ mutex.resolve(false);
156
+ firstCreateMutexes.delete(key);
157
+ }
158
+ // Also clear all session profiles for this user
159
+ const profileKeysToDelete = [];
160
+ for (const [profileKey, profile] of sessionProfiles.entries()) {
161
+ if (profile.userId === key) {
162
+ profileKeysToDelete.push(profileKey);
163
+ }
164
+ }
165
+ for (const profileKey of profileKeysToDelete) {
166
+ sessionProfiles.delete(profileKey);
116
167
  }
117
168
  }
118
- userConcurrency.delete(prefix);
169
+ userConcurrency.delete(key);
119
170
  }
120
171
  context_pool_1.contextPool.onEvict((userId) => {
121
- cleanupSessionsForUserId(userId, 'context_evicted');
172
+ cleanupSessionsForUserId(userId, 'context_evicted', false);
122
173
  // Note: the pool will close the context; session cleanup only removes dead Page references.
123
174
  });
124
- exports.SESSION_TIMEOUT_MS = Math.max(60000, Number.parseInt(process.env.CAMOFOX_SESSION_TIMEOUT || '', 10) || 1800000);
125
- exports.MAX_SESSIONS = Math.max(1, Number.parseInt(process.env.CAMOFOX_MAX_SESSIONS || '', 10) || 50);
126
- exports.MAX_TABS_PER_SESSION = Math.max(1, Number.parseInt(process.env.CAMOFOX_MAX_TABS || '', 10) || 10);
175
+ exports.SESSION_TIMEOUT_MS = CONFIG.sessionTimeoutMs;
176
+ exports.MAX_SESSIONS = CONFIG.maxSessions;
177
+ exports.MAX_TABS_PER_SESSION = CONFIG.maxTabsPerSession;
127
178
  function normalizeUserId(userId) {
128
179
  return String(userId);
129
180
  }
130
- function getSessionMapKey(userId, contextOverrides) {
131
- // Persistent profiles are keyed only by userId; overrides are applied on first launch.
132
- void contextOverrides;
181
+ function sessionOverlayKey(userId, sessionKey) {
182
+ return `${normalizeUserId(userId)}::${sessionKey}`;
183
+ }
184
+ // Backward compatible version - takes contextOverrides instead of session profile
185
+ function getSessionMapKey(userId, contextOverridesOrSessionKey, profileSignature) {
186
+ // New signature: (userId, sessionKey, profileSignature)
187
+ if (typeof contextOverridesOrSessionKey === 'string') {
188
+ const sessionKey = contextOverridesOrSessionKey;
189
+ if (profileSignature) {
190
+ return `${normalizeUserId(userId)}::${sessionKey}::${profileSignature}`;
191
+ }
192
+ return `${normalizeUserId(userId)}::${sessionKey}`;
193
+ }
194
+ // Old signature: (userId, contextOverrides) - backward compatibility
195
+ // This maintains the user-scoped behavior for existing routes
196
+ void contextOverridesOrSessionKey;
133
197
  return normalizeUserId(userId);
134
198
  }
199
+ function getEstablishedSessionProfile(userId, sessionKey) {
200
+ return sessionProfiles.get(sessionOverlayKey(userId, sessionKey));
201
+ }
202
+ function getCanonicalProfile(userId) {
203
+ return canonicalProfiles.get(normalizeUserId(userId));
204
+ }
205
+ function hasCanonicalProfile(userId) {
206
+ return canonicalProfiles.has(normalizeUserId(userId));
207
+ }
208
+ /**
209
+ * Try to acquire the first-create mutex for a user.
210
+ * Returns { acquired: true } if we are the first creator (mutex acquired).
211
+ * Returns { acquired: false, wait: Promise<boolean> } if another request is first-creating.
212
+ * The promise resolves to true (committed) or false (rolled back).
213
+ * If canonical already exists (committed), returns { acquired: false, wait: resolved-true }.
214
+ */
215
+ function acquireFirstCreateMutex(userId) {
216
+ const key = normalizeUserId(userId);
217
+ if (canonicalProfiles.has(key)) {
218
+ return { acquired: false, wait: Promise.resolve(true) };
219
+ }
220
+ const existing = firstCreateMutexes.get(key);
221
+ if (existing) {
222
+ return { acquired: false, wait: existing.promise };
223
+ }
224
+ let resolve;
225
+ const promise = new Promise((r) => {
226
+ resolve = r;
227
+ });
228
+ firstCreateMutexes.set(key, { promise, resolve });
229
+ return { acquired: true };
230
+ }
231
+ /**
232
+ * Commit: store the canonical profile and release the mutex (signaling success to waiters).
233
+ */
234
+ function commitCanonicalProfile(userId, resolved) {
235
+ const key = normalizeUserId(userId);
236
+ const profile = {
237
+ resolvedOverrides: resolved,
238
+ hash: (0, presets_1.contextHash)(resolved),
239
+ establishedAt: Date.now(),
240
+ };
241
+ canonicalProfiles.set(key, profile);
242
+ const mutex = firstCreateMutexes.get(key);
243
+ if (mutex) {
244
+ mutex.resolve(true);
245
+ firstCreateMutexes.delete(key);
246
+ }
247
+ (0, logging_1.log)('info', 'canonical profile committed', { userId: key, hash: profile.hash });
248
+ return profile;
249
+ }
250
+ /**
251
+ * Rollback: release the mutex (signaling failure to waiters). No canonical is stored.
252
+ */
253
+ function rollbackCanonicalMutex(userId) {
254
+ const key = normalizeUserId(userId);
255
+ const mutex = firstCreateMutexes.get(key);
256
+ if (mutex) {
257
+ mutex.resolve(false);
258
+ firstCreateMutexes.delete(key);
259
+ }
260
+ }
261
+ /**
262
+ * Create a CanonicalProfile object without storing it (for hash comparison during first-create).
263
+ */
264
+ function createCanonicalProfile(resolved) {
265
+ return {
266
+ resolvedOverrides: resolved,
267
+ hash: (0, presets_1.contextHash)(resolved),
268
+ establishedAt: Date.now(),
269
+ };
270
+ }
271
+ function clearCanonicalProfile(userId) {
272
+ const key = normalizeUserId(userId);
273
+ canonicalProfiles.delete(key);
274
+ const mutex = firstCreateMutexes.get(key);
275
+ if (mutex) {
276
+ mutex.resolve(false);
277
+ firstCreateMutexes.delete(key);
278
+ }
279
+ }
280
+ /**
281
+ * Store or validate a session profile for a specific userId + sessionKey combination.
282
+ * Returns the established profile if successful.
283
+ * Throws if a conflicting profile is already established for the same userId + sessionKey.
284
+ */
285
+ function establishSessionProfile(userId, sessionKey, profile) {
286
+ const key = sessionOverlayKey(userId, sessionKey);
287
+ const existing = sessionProfiles.get(key);
288
+ if (existing) {
289
+ if (existing.signature !== profile.signature) {
290
+ throw new Error('Session profile conflict');
291
+ }
292
+ return existing;
293
+ }
294
+ const established = {
295
+ userId: normalizeUserId(userId),
296
+ sessionKey,
297
+ signature: profile.signature,
298
+ resolvedProfile: profile,
299
+ establishedAt: Date.now(),
300
+ };
301
+ sessionProfiles.set(key, established);
302
+ (0, logging_1.log)('info', 'session profile established', {
303
+ userId: established.userId,
304
+ sessionKey,
305
+ signature: profile.signature,
306
+ });
307
+ return established;
308
+ }
309
+ function clearSessionProfile(userId, sessionKey) {
310
+ const key = sessionOverlayKey(userId, sessionKey);
311
+ sessionProfiles.delete(key);
312
+ }
135
313
  function getSessionsForUser(userId) {
136
314
  if (userId === undefined || userId === null)
137
315
  return [];
138
- const prefix = normalizeUserId(userId);
139
- const out = [];
140
- for (const [key, session] of sessions) {
141
- if (key === prefix || key.startsWith(prefix + ':'))
142
- out.push([key, session]);
143
- }
144
- return out;
316
+ const key = normalizeUserId(userId);
317
+ const session = sessions.get(key);
318
+ return session ? [[key, session]] : [];
145
319
  }
146
320
  function getAllSessions() {
147
321
  return sessions;
@@ -155,6 +329,16 @@ function countTotalTabsForSessions(sessionsForUser) {
155
329
  }
156
330
  return totalTabs;
157
331
  }
332
+ function getLifecycleSessionSnapshot() {
333
+ return {
334
+ liveSessions: sessions.size,
335
+ liveTabs: countTotalTabsForSessions(),
336
+ stagedCreates: launchingSessions.size,
337
+ };
338
+ }
339
+ function getSessionsSnapshot() {
340
+ return new Map(sessions);
341
+ }
158
342
  function getTabGroup(session, sessionKey) {
159
343
  let group = session.tabGroups.get(sessionKey);
160
344
  if (!group) {
@@ -187,10 +371,10 @@ function unindexSessionTabs(session) {
187
371
  function findTabById(tabId, userId) {
188
372
  if (userId === undefined || userId === null)
189
373
  return null;
190
- const prefix = normalizeUserId(userId);
374
+ const key = normalizeUserId(userId);
191
375
  const indexedKey = tabSessionIndex.get(tabId);
192
376
  if (indexedKey) {
193
- if (!(indexedKey === prefix || indexedKey.startsWith(prefix + ':'))) {
377
+ if (indexedKey !== key) {
194
378
  return null;
195
379
  }
196
380
  const session = sessions.get(indexedKey);
@@ -201,27 +385,26 @@ function findTabById(tabId, userId) {
201
385
  }
202
386
  tabSessionIndex.delete(tabId);
203
387
  }
204
- for (const [sessionKey, session] of sessions) {
205
- if (!(sessionKey === prefix || sessionKey.startsWith(prefix + ':')))
206
- continue;
207
- const found = findTab(session, tabId);
208
- if (found) {
209
- tabSessionIndex.set(tabId, sessionKey);
210
- return { sessionKey, session, ...found };
211
- }
388
+ const session = sessions.get(key);
389
+ if (!session)
390
+ return null;
391
+ const found = findTab(session, tabId);
392
+ if (found) {
393
+ tabSessionIndex.set(tabId, key);
394
+ return { sessionKey: key, session, ...found };
212
395
  }
213
396
  return null;
214
397
  }
215
- async function getSession(userId, contextOverrides) {
216
- const key = getSessionMapKey(userId, contextOverrides);
217
- let session = sessions.get(key);
398
+ function buildBrowserContextOptions(contextOverrides) {
218
399
  const resolved = contextOverrides || {};
219
400
  const contextOptions = {
220
401
  viewport: resolved.viewport || { width: 1280, height: 720 },
221
402
  permissions: ['geolocation'],
222
403
  };
223
404
  const hasOverrides = !!(contextOverrides &&
224
- (contextOverrides.locale !== undefined || contextOverrides.timezoneId !== undefined || contextOverrides.geolocation !== undefined));
405
+ (contextOverrides.locale !== undefined ||
406
+ contextOverrides.timezoneId !== undefined ||
407
+ contextOverrides.geolocation !== undefined));
225
408
  // With proxy+geoip, camoufox auto-configures locale/timezone/geo from proxy IP.
226
409
  // If caller explicitly supplies overrides, apply them even when proxy is active.
227
410
  if (!CONFIG.proxy.host || hasOverrides) {
@@ -229,6 +412,60 @@ async function getSession(userId, contextOverrides) {
229
412
  contextOptions.timezoneId = resolved.timezoneId || 'America/Los_Angeles';
230
413
  contextOptions.geolocation = resolved.geolocation || { latitude: 37.7749, longitude: -122.4194 };
231
414
  }
415
+ return contextOptions;
416
+ }
417
+ async function createStagedSession(userId, contextOverrides) {
418
+ const key = normalizeUserId(userId);
419
+ if (context_pool_1.contextPool.size() >= exports.MAX_SESSIONS) {
420
+ throw new Error('Maximum concurrent sessions reached');
421
+ }
422
+ const generation = node_crypto_1.default.randomUUID();
423
+ const contextOptions = buildBrowserContextOptions(contextOverrides);
424
+ // For backward compatibility, use userId as profileKey when no session profile is provided
425
+ const entry = await context_pool_1.contextPool.ensureContext(key, key, contextOptions, null, true, generation);
426
+ const session = {
427
+ context: entry.context,
428
+ tabGroups: new Map(),
429
+ lastAccess: Date.now(),
430
+ };
431
+ return { session, contextEntry: entry, generation };
432
+ }
433
+ function commitStagedFirstUse(userId, session, contextOverrides, tabInfo, generation) {
434
+ const key = normalizeUserId(userId);
435
+ const entry = context_pool_1.contextPool.getEntry(key);
436
+ if (!entry || entry.stagedGeneration !== generation)
437
+ return false;
438
+ if (!firstCreateMutexes.has(key) || canonicalProfiles.has(key)) {
439
+ return false;
440
+ }
441
+ session.lastAccess = Date.now();
442
+ const group = getTabGroup(session, tabInfo.sessionKey);
443
+ group.set(tabInfo.tabId, tabInfo.tabState);
444
+ sessions.set(key, session);
445
+ entry.staged = false;
446
+ entry.stagedGeneration = undefined;
447
+ indexTab(tabInfo.tabId, tabInfo.sessionMapKey);
448
+ commitCanonicalProfile(userId, contextOverrides);
449
+ return true;
450
+ }
451
+ async function rollbackStagedFirstUse(userId, generation) {
452
+ const key = normalizeUserId(userId);
453
+ const entry = context_pool_1.contextPool.getEntry(key);
454
+ if (!(entry?.staged === true && entry.stagedGeneration === generation))
455
+ return;
456
+ try {
457
+ (0, download_1.cleanupUserDownloads)(key);
458
+ }
459
+ catch {
460
+ // ignore cleanup errors
461
+ }
462
+ await context_pool_1.contextPool.closeStagedContext(key, generation);
463
+ rollbackCanonicalMutex(userId);
464
+ }
465
+ async function getSession(userId, contextOverrides) {
466
+ const key = normalizeUserId(userId);
467
+ let session = sessions.get(key);
468
+ const contextOptions = buildBrowserContextOptions(contextOverrides);
232
469
  if (!session) {
233
470
  const existingLaunch = launchingSessions.get(key);
234
471
  if (existingLaunch) {
@@ -236,11 +473,11 @@ async function getSession(userId, contextOverrides) {
236
473
  session.lastAccess = Date.now();
237
474
  return session;
238
475
  }
239
- if (sessions.size + launchingSessions.size >= exports.MAX_SESSIONS) {
476
+ if (context_pool_1.contextPool.size() >= exports.MAX_SESSIONS) {
240
477
  throw new Error('Maximum concurrent sessions reached');
241
478
  }
242
479
  const launchPromise = (async () => {
243
- const entry = await context_pool_1.contextPool.ensureContext(normalizeUserId(userId), contextOptions);
480
+ const entry = await context_pool_1.contextPool.ensureContext(key, key, contextOptions);
244
481
  const created = { context: entry.context, tabGroups: new Map(), lastAccess: Date.now() };
245
482
  sessions.set(key, created);
246
483
  (0, logging_1.log)('info', 'session created', { userId: key });
@@ -256,7 +493,7 @@ async function getSession(userId, contextOverrides) {
256
493
  }
257
494
  else {
258
495
  // Re-resolve context on each access; ContextPool de-dupes launches and detects unexpected closes.
259
- const entry = await context_pool_1.contextPool.ensureContext(normalizeUserId(userId), contextOptions);
496
+ const entry = await context_pool_1.contextPool.ensureContext(key, key, contextOptions);
260
497
  session.context = entry.context;
261
498
  session.lastAccess = Date.now();
262
499
  }
@@ -274,13 +511,19 @@ function unindexTab(tabId) {
274
511
  function clearAllState() {
275
512
  sessions.clear();
276
513
  tabSessionIndex.clear();
514
+ canonicalProfiles.clear();
515
+ sessionProfiles.clear();
516
+ for (const [, mutex] of firstCreateMutexes)
517
+ mutex.resolve(false);
518
+ firstCreateMutexes.clear();
277
519
  (0, tab_1.clearAllTabLocks)();
278
520
  userConcurrency.clear();
279
521
  }
280
522
  async function closeSessionsForUser(userId) {
281
- const prefix = userId;
282
- await context_pool_1.contextPool.closeContext(prefix).catch(() => { });
283
- cleanupSessionsForUserId(prefix, 'explicit_close');
523
+ const key = normalizeUserId(userId);
524
+ await context_pool_1.contextPool.closeStagedContextByUserId(key).catch(() => { });
525
+ await context_pool_1.contextPool.closeContextByUserId(key).catch(() => { });
526
+ cleanupSessionsForUserId(key, 'explicit_close');
284
527
  }
285
528
  async function closeAllSessions() {
286
529
  await context_pool_1.contextPool.closeAll().catch(() => { });
@@ -297,6 +540,11 @@ async function closeAllSessions() {
297
540
  }
298
541
  }
299
542
  launchingSessions.clear();
543
+ canonicalProfiles.clear();
544
+ sessionProfiles.clear();
545
+ for (const [, mutex] of firstCreateMutexes)
546
+ mutex.resolve(false);
547
+ firstCreateMutexes.clear();
300
548
  }
301
549
  let cleanupInterval = null;
302
550
  function startCleanupInterval() {
@@ -307,7 +555,7 @@ function startCleanupInterval() {
307
555
  for (const [sessionKey, session] of sessions) {
308
556
  if (now - session.lastAccess > exports.SESSION_TIMEOUT_MS) {
309
557
  // Persistent profile is preserved on disk; closing the context frees resources.
310
- context_pool_1.contextPool.closeContext(sessionKey).catch(() => { });
558
+ context_pool_1.contextPool.closeContextByUserId(sessionKey).catch(() => { });
311
559
  unindexSessionTabs(session);
312
560
  sessions.delete(sessionKey);
313
561
  (0, tracing_1.cleanupTracing)(sessionKey);
@@ -323,4 +571,58 @@ function stopCleanupInterval() {
323
571
  cleanupInterval = null;
324
572
  }
325
573
  }
574
+ /**
575
+ * Stage 1 idle cleanup: close runtime state (contexts, session data) for users with no tabs.
576
+ * Does NOT clear stored session profiles - they survive idle cleanup.
577
+ * Does NOT exit the daemon - that is Stage 2 (Task 4).
578
+ * @param sessionSnapshot Snapshot of sessions map taken before cleanup started
579
+ * @param contextSnapshot Snapshot of context pool entries taken before cleanup started
580
+ * @param cleanupStartedMs Timestamp when cleanup was triggered (used to avoid closing newly-created contexts)
581
+ */
582
+ async function runLifecycleIdleCleanup(sessionSnapshot, contextSnapshot, cleanupStartedMs) {
583
+ const closedUsers = [];
584
+ // Use the provided snapshots to avoid race with new context creation
585
+ const usersToCleanup = new Set();
586
+ for (const [userId, session] of sessionSnapshot.entries()) {
587
+ const tabCount = countTotalTabsForSessions([[userId, session]]);
588
+ // Only cleanup sessions with zero tabs
589
+ if (tabCount === 0) {
590
+ usersToCleanup.add(userId);
591
+ }
592
+ }
593
+ // Close only the specific contexts from the snapshot that were created before cleanup started
594
+ const contextsToClose = [];
595
+ for (const [profileKey, entry] of contextSnapshot.entries()) {
596
+ // Skip staged, launching, or newly-created contexts
597
+ if (usersToCleanup.has(entry.userId) && !entry.staged && !entry.launching && entry.createdAt < cleanupStartedMs) {
598
+ contextsToClose.push({ profileKey, createdAt: entry.createdAt, lastAccess: entry.lastAccess });
599
+ }
600
+ }
601
+ // Close the specific contexts from the snapshot
602
+ const actuallyClosedUsers = new Set();
603
+ for (const { profileKey, createdAt, lastAccess } of contextsToClose) {
604
+ try {
605
+ await context_pool_1.contextPool.closeContextIfMatches(profileKey, createdAt, lastAccess);
606
+ // Verify the context was actually closed (not skipped due to reuse)
607
+ const stillExists = context_pool_1.contextPool.getEntry(profileKey);
608
+ if (!stillExists) {
609
+ // Context was actually closed, mark user for session cleanup
610
+ const entry = contextSnapshot.get(profileKey);
611
+ if (entry) {
612
+ actuallyClosedUsers.add(entry.userId);
613
+ }
614
+ }
615
+ }
616
+ catch (err) {
617
+ const message = err instanceof Error ? err.message : String(err);
618
+ (0, logging_1.log)('error', 'idle cleanup failed to close context', { profileKey, error: message });
619
+ }
620
+ }
621
+ // Clean up session data ONLY for users whose contexts were actually closed
622
+ for (const userId of actuallyClosedUsers) {
623
+ cleanupSessionsForUserId(userId, 'idle_cleanup', false);
624
+ closedUsers.push(userId);
625
+ }
626
+ return { closedUsers };
627
+ }
326
628
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/services/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/services/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Locator, Page } from 'playwright-core';
2
+ import type { StructuredExtractListSchema, StructuredExtractObjectSchema, StructuredExtractResult, StructuredExtractRootSchema, StructuredExtractScalarSchema } from '../types';
3
+ type CompiledStructuredExtractScalarSchema = StructuredExtractScalarSchema & {
4
+ path: string;
5
+ };
6
+ type CompiledStructuredExtractObjectSchema = Omit<StructuredExtractObjectSchema, 'fields'> & {
7
+ fields: Record<string, CompiledStructuredExtractSchema>;
8
+ path: string;
9
+ };
10
+ type CompiledStructuredExtractListSchema = Omit<StructuredExtractListSchema, 'item'> & {
11
+ item: CompiledStructuredExtractSchema;
12
+ path: string;
13
+ };
14
+ export type CompiledStructuredExtractSchema = CompiledStructuredExtractScalarSchema | CompiledStructuredExtractObjectSchema | CompiledStructuredExtractListSchema;
15
+ export type CompiledStructuredExtractRootSchema = CompiledStructuredExtractObjectSchema | CompiledStructuredExtractListSchema;
16
+ export declare class StructuredExtractSchemaError extends Error {
17
+ readonly statusCode = 400;
18
+ constructor(message: string);
19
+ }
20
+ export interface StructuredScopeAdapter {
21
+ queryAll(selector: string): Promise<StructuredScopeAdapter[]>;
22
+ text(): Promise<string | null>;
23
+ html(): Promise<string | null>;
24
+ attr(name: string): Promise<string | null>;
25
+ getBaseUrl(): string;
26
+ }
27
+ export declare class StructuredExtractRuntimeError extends Error {
28
+ readonly statusCode = 422;
29
+ readonly fieldPath: string;
30
+ readonly reason: string;
31
+ constructor(fieldPath: string, reason: string);
32
+ }
33
+ export declare function validateStructuredExtractSchema(schema: StructuredExtractRootSchema): CompiledStructuredExtractRootSchema;
34
+ export declare function buildFieldPath(path: string, key: string | number): string;
35
+ export declare function createLocatorScope(locator: Locator, baseUrl: string): StructuredScopeAdapter;
36
+ export declare function extractStructuredFromScope(scope: StructuredScopeAdapter, schema: StructuredExtractRootSchema, path?: string): Promise<unknown>;
37
+ export declare function extractStructuredData(page: Page, schema: StructuredExtractRootSchema): Promise<StructuredExtractResult>;
38
+ export {};
39
+ //# sourceMappingURL=structured-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-extractor.d.ts","sourceRoot":"","sources":["../../../src/services/structured-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EACX,2BAA2B,EAC3B,6BAA6B,EAC7B,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAG7B,MAAM,UAAU,CAAC;AAOlB,KAAK,qCAAqC,GAAG,6BAA6B,GAAG;IAC5E,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,qCAAqC,GAAG,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC,GAAG;IAC5F,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;IACxD,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,mCAAmC,GAAG,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,GAAG;IACtF,IAAI,EAAE,+BAA+B,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,+BAA+B,GACxC,qCAAqC,GACrC,qCAAqC,GACrC,mCAAmC,CAAC;AAEvC,MAAM,MAAM,mCAAmC,GAC5C,qCAAqC,GACrC,mCAAmC,CAAC;AA4FvC,qBAAa,4BAA6B,SAAQ,KAAK;IACtD,SAAgB,UAAU,OAAO;gBAErB,OAAO,EAAE,MAAM;CAI3B;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC9D,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,UAAU,IAAI,MAAM,CAAC;CACrB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACvD,SAAgB,UAAU,OAAO;IACjC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM7C;AA0OD,wBAAgB,+BAA+B,CAC9C,MAAM,EAAE,2BAA2B,GACjC,mCAAmC,CAMrC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKzE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAwB5F;AAsKD,wBAAsB,0BAA0B,CAC/C,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,2BAA2B,EACnC,IAAI,SAAS,GACX,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,2BAA2B,GACjC,OAAO,CAAC,uBAAuB,CAAC,CAelC"}