@hasna/browser 0.3.2 → 0.3.4
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/dist/cli/index.js +999 -299
- package/dist/index.js +75 -22
- package/dist/mcp/index.js +1086 -338
- package/dist/server/index.js +90 -40
- package/package.json +1 -1
- package/dashboard/dist/assets/index-Cy4XUbL1.js +0 -40
- package/dashboard/dist/index.html +0 -16
- package/dist/cli/commands/browse.d.ts +0 -3
- package/dist/cli/commands/browse.d.ts.map +0 -1
- package/dist/cli/commands/script.d.ts +0 -3
- package/dist/cli/commands/script.d.ts.map +0 -1
- package/dist/cli/commands/session.d.ts +0 -3
- package/dist/cli/commands/session.d.ts.map +0 -1
- package/dist/cli/commands/tools.d.ts +0 -3
- package/dist/cli/commands/tools.d.ts.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.test.d.ts +0 -2
- package/dist/cli/index.test.d.ts.map +0 -1
- package/dist/db/agents.d.ts +0 -16
- package/dist/db/agents.d.ts.map +0 -1
- package/dist/db/agents.test.d.ts +0 -2
- package/dist/db/agents.test.d.ts.map +0 -1
- package/dist/db/console-log.d.ts +0 -6
- package/dist/db/console-log.d.ts.map +0 -1
- package/dist/db/crawl-results.d.ts +0 -6
- package/dist/db/crawl-results.d.ts.map +0 -1
- package/dist/db/gallery.d.ts +0 -26
- package/dist/db/gallery.d.ts.map +0 -1
- package/dist/db/gallery.test.d.ts +0 -2
- package/dist/db/gallery.test.d.ts.map +0 -1
- package/dist/db/heartbeats.d.ts +0 -6
- package/dist/db/heartbeats.d.ts.map +0 -1
- package/dist/db/network-log.d.ts +0 -7
- package/dist/db/network-log.d.ts.map +0 -1
- package/dist/db/projects.d.ts +0 -9
- package/dist/db/projects.d.ts.map +0 -1
- package/dist/db/projects.test.d.ts +0 -2
- package/dist/db/projects.test.d.ts.map +0 -1
- package/dist/db/recordings.d.ts +0 -11
- package/dist/db/recordings.d.ts.map +0 -1
- package/dist/db/recordings.test.d.ts +0 -2
- package/dist/db/recordings.test.d.ts.map +0 -1
- package/dist/db/schema.d.ts +0 -5
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.test.d.ts +0 -2
- package/dist/db/schema.test.d.ts.map +0 -1
- package/dist/db/scripts.d.ts +0 -84
- package/dist/db/scripts.d.ts.map +0 -1
- package/dist/db/sessions.d.ts +0 -35
- package/dist/db/sessions.d.ts.map +0 -1
- package/dist/db/sessions.test.d.ts +0 -2
- package/dist/db/sessions.test.d.ts.map +0 -1
- package/dist/db/snapshots.d.ts +0 -7
- package/dist/db/snapshots.d.ts.map +0 -1
- package/dist/db/timeline.d.ts +0 -11
- package/dist/db/timeline.d.ts.map +0 -1
- package/dist/engines/bun-webview.d.ts +0 -147
- package/dist/engines/bun-webview.d.ts.map +0 -1
- package/dist/engines/bun-webview.test.d.ts +0 -2
- package/dist/engines/bun-webview.test.d.ts.map +0 -1
- package/dist/engines/cdp.d.ts +0 -27
- package/dist/engines/cdp.d.ts.map +0 -1
- package/dist/engines/lightpanda.d.ts +0 -25
- package/dist/engines/lightpanda.d.ts.map +0 -1
- package/dist/engines/playwright.d.ts +0 -27
- package/dist/engines/playwright.d.ts.map +0 -1
- package/dist/engines/selector.d.ts +0 -17
- package/dist/engines/selector.d.ts.map +0 -1
- package/dist/engines/selector.test.d.ts +0 -2
- package/dist/engines/selector.test.d.ts.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/actions-ref.test.d.ts +0 -2
- package/dist/lib/actions-ref.test.d.ts.map +0 -1
- package/dist/lib/actions.d.ts +0 -91
- package/dist/lib/actions.d.ts.map +0 -1
- package/dist/lib/actions.test.d.ts +0 -2
- package/dist/lib/actions.test.d.ts.map +0 -1
- package/dist/lib/agents.d.ts +0 -9
- package/dist/lib/agents.d.ts.map +0 -1
- package/dist/lib/agents.test.d.ts +0 -2
- package/dist/lib/agents.test.d.ts.map +0 -1
- package/dist/lib/ai-inference.d.ts +0 -21
- package/dist/lib/ai-inference.d.ts.map +0 -1
- package/dist/lib/ai-task.d.ts +0 -23
- package/dist/lib/ai-task.d.ts.map +0 -1
- package/dist/lib/annotate.d.ts +0 -18
- package/dist/lib/annotate.d.ts.map +0 -1
- package/dist/lib/annotate.test.d.ts +0 -2
- package/dist/lib/annotate.test.d.ts.map +0 -1
- package/dist/lib/api-detector.d.ts +0 -17
- package/dist/lib/api-detector.d.ts.map +0 -1
- package/dist/lib/auth-flow.d.ts +0 -43
- package/dist/lib/auth-flow.d.ts.map +0 -1
- package/dist/lib/auth.d.ts +0 -28
- package/dist/lib/auth.d.ts.map +0 -1
- package/dist/lib/console.d.ts +0 -6
- package/dist/lib/console.d.ts.map +0 -1
- package/dist/lib/coordination.d.ts +0 -12
- package/dist/lib/coordination.d.ts.map +0 -1
- package/dist/lib/crawler.d.ts +0 -3
- package/dist/lib/crawler.d.ts.map +0 -1
- package/dist/lib/cron-manager.d.ts +0 -43
- package/dist/lib/cron-manager.d.ts.map +0 -1
- package/dist/lib/daemon-client.d.ts +0 -16
- package/dist/lib/daemon-client.d.ts.map +0 -1
- package/dist/lib/datasets.d.ts +0 -33
- package/dist/lib/datasets.d.ts.map +0 -1
- package/dist/lib/deep-performance.d.ts +0 -49
- package/dist/lib/deep-performance.d.ts.map +0 -1
- package/dist/lib/dialogs.d.ts +0 -15
- package/dist/lib/dialogs.d.ts.map +0 -1
- package/dist/lib/downloads.d.ts +0 -15
- package/dist/lib/downloads.d.ts.map +0 -1
- package/dist/lib/downloads.test.d.ts +0 -2
- package/dist/lib/downloads.test.d.ts.map +0 -1
- package/dist/lib/env-detector.d.ts +0 -12
- package/dist/lib/env-detector.d.ts.map +0 -1
- package/dist/lib/extractor.d.ts +0 -22
- package/dist/lib/extractor.d.ts.map +0 -1
- package/dist/lib/extractor.test.d.ts +0 -2
- package/dist/lib/extractor.test.d.ts.map +0 -1
- package/dist/lib/files-integration.d.ts +0 -13
- package/dist/lib/files-integration.d.ts.map +0 -1
- package/dist/lib/gallery-diff.d.ts +0 -3
- package/dist/lib/gallery-diff.d.ts.map +0 -1
- package/dist/lib/integrations.test.d.ts +0 -2
- package/dist/lib/integrations.test.d.ts.map +0 -1
- package/dist/lib/login-scripts.d.ts +0 -89
- package/dist/lib/login-scripts.d.ts.map +0 -1
- package/dist/lib/network.d.ts +0 -11
- package/dist/lib/network.d.ts.map +0 -1
- package/dist/lib/network.test.d.ts +0 -2
- package/dist/lib/network.test.d.ts.map +0 -1
- package/dist/lib/page-memory.d.ts +0 -14
- package/dist/lib/page-memory.d.ts.map +0 -1
- package/dist/lib/performance.d.ts +0 -13
- package/dist/lib/performance.d.ts.map +0 -1
- package/dist/lib/profiles.d.ts +0 -23
- package/dist/lib/profiles.d.ts.map +0 -1
- package/dist/lib/qol.test.d.ts +0 -2
- package/dist/lib/qol.test.d.ts.map +0 -1
- package/dist/lib/recorder.d.ts +0 -11
- package/dist/lib/recorder.d.ts.map +0 -1
- package/dist/lib/recorder.test.d.ts +0 -2
- package/dist/lib/recorder.test.d.ts.map +0 -1
- package/dist/lib/ref-cache.d.ts +0 -9
- package/dist/lib/ref-cache.d.ts.map +0 -1
- package/dist/lib/sanitize.d.ts +0 -21
- package/dist/lib/sanitize.d.ts.map +0 -1
- package/dist/lib/screenshot-v4.test.d.ts +0 -2
- package/dist/lib/screenshot-v4.test.d.ts.map +0 -1
- package/dist/lib/screenshot.d.ts +0 -11
- package/dist/lib/screenshot.d.ts.map +0 -1
- package/dist/lib/screenshot.test.d.ts +0 -2
- package/dist/lib/screenshot.test.d.ts.map +0 -1
- package/dist/lib/script-engine.d.ts +0 -28
- package/dist/lib/script-engine.d.ts.map +0 -1
- package/dist/lib/self-heal.d.ts +0 -18
- package/dist/lib/self-heal.d.ts.map +0 -1
- package/dist/lib/session-v3.test.d.ts +0 -2
- package/dist/lib/session-v3.test.d.ts.map +0 -1
- package/dist/lib/session.d.ts +0 -38
- package/dist/lib/session.d.ts.map +0 -1
- package/dist/lib/skills-runner.d.ts +0 -14
- package/dist/lib/skills-runner.d.ts.map +0 -1
- package/dist/lib/snapshot-diff.test.d.ts +0 -2
- package/dist/lib/snapshot-diff.test.d.ts.map +0 -1
- package/dist/lib/snapshot.d.ts +0 -34
- package/dist/lib/snapshot.d.ts.map +0 -1
- package/dist/lib/snapshot.test.d.ts +0 -2
- package/dist/lib/snapshot.test.d.ts.map +0 -1
- package/dist/lib/stealth.d.ts +0 -5
- package/dist/lib/stealth.d.ts.map +0 -1
- package/dist/lib/stealth.test.d.ts +0 -2
- package/dist/lib/stealth.test.d.ts.map +0 -1
- package/dist/lib/storage-state.d.ts +0 -15
- package/dist/lib/storage-state.d.ts.map +0 -1
- package/dist/lib/storage.d.ts +0 -19
- package/dist/lib/storage.d.ts.map +0 -1
- package/dist/lib/structured-extract.d.ts +0 -26
- package/dist/lib/structured-extract.d.ts.map +0 -1
- package/dist/lib/tabs.d.ts +0 -18
- package/dist/lib/tabs.d.ts.map +0 -1
- package/dist/lib/task-queue.d.ts +0 -21
- package/dist/lib/task-queue.d.ts.map +0 -1
- package/dist/lib/url-watcher.d.ts +0 -33
- package/dist/lib/url-watcher.d.ts.map +0 -1
- package/dist/lib/vision-fallback.d.ts +0 -29
- package/dist/lib/vision-fallback.d.ts.map +0 -1
- package/dist/lib/workflows.d.ts +0 -46
- package/dist/lib/workflows.d.ts.map +0 -1
- package/dist/mcp/actions.d.ts +0 -3
- package/dist/mcp/actions.d.ts.map +0 -1
- package/dist/mcp/capture.d.ts +0 -3
- package/dist/mcp/capture.d.ts.map +0 -1
- package/dist/mcp/data.d.ts +0 -3
- package/dist/mcp/data.d.ts.map +0 -1
- package/dist/mcp/gallery.test.d.ts +0 -2
- package/dist/mcp/gallery.test.d.ts.map +0 -1
- package/dist/mcp/helpers.d.ts +0 -55
- package/dist/mcp/helpers.d.ts.map +0 -1
- package/dist/mcp/index.d.ts +0 -3
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.test.d.ts +0 -2
- package/dist/mcp/index.test.d.ts.map +0 -1
- package/dist/mcp/meta.d.ts +0 -3
- package/dist/mcp/meta.d.ts.map +0 -1
- package/dist/mcp/network.d.ts +0 -3
- package/dist/mcp/network.d.ts.map +0 -1
- package/dist/mcp/recordings.d.ts +0 -3
- package/dist/mcp/recordings.d.ts.map +0 -1
- package/dist/mcp/scripts.d.ts +0 -3
- package/dist/mcp/scripts.d.ts.map +0 -1
- package/dist/mcp/sessions.d.ts +0 -3
- package/dist/mcp/sessions.d.ts.map +0 -1
- package/dist/mcp/v4.test.d.ts +0 -2
- package/dist/mcp/v4.test.d.ts.map +0 -1
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.test.d.ts +0 -2
- package/dist/server/index.test.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -425
- package/dist/types/index.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -4,25 +4,43 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
function __accessProp(key) {
|
|
8
|
+
return this[key];
|
|
9
|
+
}
|
|
10
|
+
var __toESMCache_node;
|
|
11
|
+
var __toESMCache_esm;
|
|
7
12
|
var __toESM = (mod, isNodeMode, target) => {
|
|
13
|
+
var canCache = mod != null && typeof mod === "object";
|
|
14
|
+
if (canCache) {
|
|
15
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
16
|
+
var cached = cache.get(mod);
|
|
17
|
+
if (cached)
|
|
18
|
+
return cached;
|
|
19
|
+
}
|
|
8
20
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
21
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
22
|
for (let key of __getOwnPropNames(mod))
|
|
11
23
|
if (!__hasOwnProp.call(to, key))
|
|
12
24
|
__defProp(to, key, {
|
|
13
|
-
get: (
|
|
25
|
+
get: __accessProp.bind(mod, key),
|
|
14
26
|
enumerable: true
|
|
15
27
|
});
|
|
28
|
+
if (canCache)
|
|
29
|
+
cache.set(mod, to);
|
|
16
30
|
return to;
|
|
17
31
|
};
|
|
18
32
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
33
|
+
var __returnValue = (v) => v;
|
|
34
|
+
function __exportSetter(name, newValue) {
|
|
35
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
36
|
+
}
|
|
19
37
|
var __export = (target, all) => {
|
|
20
38
|
for (var name in all)
|
|
21
39
|
__defProp(target, name, {
|
|
22
40
|
get: all[name],
|
|
23
41
|
enumerable: true,
|
|
24
42
|
configurable: true,
|
|
25
|
-
set: (
|
|
43
|
+
set: __exportSetter.bind(all, name)
|
|
26
44
|
});
|
|
27
45
|
};
|
|
28
46
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
@@ -104,10 +122,30 @@ var init_types = __esm(() => {
|
|
|
104
122
|
// src/db/schema.ts
|
|
105
123
|
import { Database } from "bun:sqlite";
|
|
106
124
|
import { join } from "path";
|
|
107
|
-
import { mkdirSync } from "fs";
|
|
125
|
+
import { mkdirSync, existsSync, readdirSync, copyFileSync, statSync } from "fs";
|
|
108
126
|
import { homedir } from "os";
|
|
109
127
|
function getDataDir() {
|
|
110
|
-
|
|
128
|
+
if (process.env["BROWSER_DATA_DIR"])
|
|
129
|
+
return process.env["BROWSER_DATA_DIR"];
|
|
130
|
+
const home = process.env["HOME"] || process.env["USERPROFILE"] || homedir();
|
|
131
|
+
const newDir = join(home, ".hasna", "browser");
|
|
132
|
+
const oldDir = join(home, ".browser");
|
|
133
|
+
if (existsSync(oldDir) && !existsSync(newDir)) {
|
|
134
|
+
mkdirSync(newDir, { recursive: true });
|
|
135
|
+
try {
|
|
136
|
+
for (const file of readdirSync(oldDir)) {
|
|
137
|
+
const oldPath = join(oldDir, file);
|
|
138
|
+
const newPath = join(newDir, file);
|
|
139
|
+
try {
|
|
140
|
+
if (statSync(oldPath).isFile()) {
|
|
141
|
+
copyFileSync(oldPath, newPath);
|
|
142
|
+
}
|
|
143
|
+
} catch {}
|
|
144
|
+
}
|
|
145
|
+
} catch {}
|
|
146
|
+
}
|
|
147
|
+
mkdirSync(newDir, { recursive: true });
|
|
148
|
+
return newDir;
|
|
111
149
|
}
|
|
112
150
|
function getDatabase(path) {
|
|
113
151
|
const resolvedPath = path ?? process.env["BROWSER_DB_PATH"] ?? join(getDataDir(), "browser.db");
|
|
@@ -608,9 +646,8 @@ __export(exports_storage_state, {
|
|
|
608
646
|
listStates: () => listStates,
|
|
609
647
|
deleteState: () => deleteState
|
|
610
648
|
});
|
|
611
|
-
import { mkdirSync as mkdirSync3, existsSync, readdirSync, unlinkSync } from "fs";
|
|
649
|
+
import { mkdirSync as mkdirSync3, existsSync as existsSync2, readdirSync as readdirSync2, unlinkSync } from "fs";
|
|
612
650
|
import { join as join3 } from "path";
|
|
613
|
-
import { homedir as homedir3 } from "os";
|
|
614
651
|
function ensureDir() {
|
|
615
652
|
mkdirSync3(STATES_DIR, { recursive: true });
|
|
616
653
|
}
|
|
@@ -628,11 +665,11 @@ async function saveStateFromPage(page, name) {
|
|
|
628
665
|
}
|
|
629
666
|
function loadStatePath(name) {
|
|
630
667
|
const path = statePath(name);
|
|
631
|
-
return
|
|
668
|
+
return existsSync2(path) ? path : null;
|
|
632
669
|
}
|
|
633
670
|
function listStates() {
|
|
634
671
|
ensureDir();
|
|
635
|
-
return
|
|
672
|
+
return readdirSync2(STATES_DIR).filter((f) => f.endsWith(".json")).map((f) => {
|
|
636
673
|
const path = join3(STATES_DIR, f);
|
|
637
674
|
const stat = Bun.file(path);
|
|
638
675
|
return {
|
|
@@ -644,7 +681,7 @@ function listStates() {
|
|
|
644
681
|
}
|
|
645
682
|
function deleteState(name) {
|
|
646
683
|
const path = statePath(name);
|
|
647
|
-
if (
|
|
684
|
+
if (existsSync2(path)) {
|
|
648
685
|
unlinkSync(path);
|
|
649
686
|
return true;
|
|
650
687
|
}
|
|
@@ -652,7 +689,8 @@ function deleteState(name) {
|
|
|
652
689
|
}
|
|
653
690
|
var STATES_DIR;
|
|
654
691
|
var init_storage_state = __esm(() => {
|
|
655
|
-
|
|
692
|
+
init_schema();
|
|
693
|
+
STATES_DIR = join3(getDataDir(), "states");
|
|
656
694
|
});
|
|
657
695
|
|
|
658
696
|
// node_modules/sharp/lib/is.js
|
|
@@ -7494,10 +7532,15 @@ class BrowserPool {
|
|
|
7494
7532
|
this.pool.push({ browser, inUse: true, createdAt: Date.now() });
|
|
7495
7533
|
return browser;
|
|
7496
7534
|
}
|
|
7497
|
-
return new Promise((resolve) => {
|
|
7535
|
+
return new Promise((resolve, reject) => {
|
|
7536
|
+
const timeout = setTimeout(() => {
|
|
7537
|
+
clearInterval(interval);
|
|
7538
|
+
reject(new BrowserError("Browser pool exhausted \u2014 no browser became available within 30s", "POOL_TIMEOUT", true));
|
|
7539
|
+
}, 30000);
|
|
7498
7540
|
const interval = setInterval(() => {
|
|
7499
7541
|
const free = this.pool.find((e) => !e.inUse);
|
|
7500
7542
|
if (free) {
|
|
7543
|
+
clearTimeout(timeout);
|
|
7501
7544
|
clearInterval(interval);
|
|
7502
7545
|
free.inUse = true;
|
|
7503
7546
|
resolve(free.browser);
|
|
@@ -7539,7 +7582,7 @@ function isLightpandaAvailable() {
|
|
|
7539
7582
|
const paths = [
|
|
7540
7583
|
"/usr/local/bin/lightpanda",
|
|
7541
7584
|
"/usr/bin/lightpanda",
|
|
7542
|
-
`${process.env["HOME"]}/.browser/bin/lightpanda`
|
|
7585
|
+
`${process.env["HOME"]}/.hasna/browser/bin/lightpanda`
|
|
7543
7586
|
];
|
|
7544
7587
|
return paths.some((p) => {
|
|
7545
7588
|
try {
|
|
@@ -7558,7 +7601,7 @@ function getLightpandaBinaryPath() {
|
|
|
7558
7601
|
"lightpanda",
|
|
7559
7602
|
"/usr/local/bin/lightpanda",
|
|
7560
7603
|
"/usr/bin/lightpanda",
|
|
7561
|
-
`${process.env["HOME"]}/.browser/bin/lightpanda`
|
|
7604
|
+
`${process.env["HOME"]}/.hasna/browser/bin/lightpanda`
|
|
7562
7605
|
];
|
|
7563
7606
|
for (const p of paths) {
|
|
7564
7607
|
try {
|
|
@@ -7672,14 +7715,14 @@ class LightpandaPage {
|
|
|
7672
7715
|
init_types();
|
|
7673
7716
|
|
|
7674
7717
|
// src/engines/bun-webview.ts
|
|
7718
|
+
init_schema();
|
|
7675
7719
|
import { join as join2 } from "path";
|
|
7676
7720
|
import { mkdirSync as mkdirSync2 } from "fs";
|
|
7677
|
-
import { homedir as homedir2 } from "os";
|
|
7678
7721
|
function isBunWebViewAvailable() {
|
|
7679
7722
|
return typeof globalThis.Bun !== "undefined" && typeof globalThis.Bun.WebView !== "undefined";
|
|
7680
7723
|
}
|
|
7681
7724
|
function getProfileDir(profileName) {
|
|
7682
|
-
const base =
|
|
7725
|
+
const base = getDataDir();
|
|
7683
7726
|
const dir = join2(base, "profiles", profileName);
|
|
7684
7727
|
mkdirSync2(dir, { recursive: true });
|
|
7685
7728
|
return dir;
|
|
@@ -8156,6 +8199,7 @@ function enableNetworkLogging(page, sessionId) {
|
|
|
8156
8199
|
};
|
|
8157
8200
|
const onResponse = (res) => {
|
|
8158
8201
|
const start = requestStart.get(res.url()) ?? Date.now();
|
|
8202
|
+
requestStart.delete(res.url());
|
|
8159
8203
|
const duration = Date.now() - start;
|
|
8160
8204
|
const req = res.request();
|
|
8161
8205
|
try {
|
|
@@ -8172,11 +8216,17 @@ function enableNetworkLogging(page, sessionId) {
|
|
|
8172
8216
|
});
|
|
8173
8217
|
} catch {}
|
|
8174
8218
|
};
|
|
8219
|
+
const onRequestFailed = (req) => {
|
|
8220
|
+
requestStart.delete(req.url());
|
|
8221
|
+
};
|
|
8175
8222
|
page.on("request", onRequest);
|
|
8176
8223
|
page.on("response", onResponse);
|
|
8224
|
+
page.on("requestfailed", onRequestFailed);
|
|
8177
8225
|
return () => {
|
|
8178
8226
|
page.off("request", onRequest);
|
|
8179
8227
|
page.off("response", onResponse);
|
|
8228
|
+
page.off("requestfailed", onRequestFailed);
|
|
8229
|
+
requestStart.clear();
|
|
8180
8230
|
};
|
|
8181
8231
|
}
|
|
8182
8232
|
async function addInterceptRule(page, rule) {
|
|
@@ -8213,6 +8263,7 @@ function startHAR(page) {
|
|
|
8213
8263
|
const start = requestStart.get(key);
|
|
8214
8264
|
if (!start)
|
|
8215
8265
|
return;
|
|
8266
|
+
requestStart.delete(key);
|
|
8216
8267
|
const duration = Date.now() - start.time;
|
|
8217
8268
|
const entry = {
|
|
8218
8269
|
startedDateTime: new Date(start.time).toISOString(),
|
|
@@ -8235,15 +8286,20 @@ function startHAR(page) {
|
|
|
8235
8286
|
timings: { send: 0, wait: duration, receive: 0 }
|
|
8236
8287
|
};
|
|
8237
8288
|
entries.push(entry);
|
|
8238
|
-
|
|
8289
|
+
};
|
|
8290
|
+
const onRequestFailed = (req) => {
|
|
8291
|
+
requestStart.delete(req.url() + req.method());
|
|
8239
8292
|
};
|
|
8240
8293
|
page.on("request", onRequest);
|
|
8241
8294
|
page.on("response", onResponse);
|
|
8295
|
+
page.on("requestfailed", onRequestFailed);
|
|
8242
8296
|
return {
|
|
8243
8297
|
entries,
|
|
8244
8298
|
stop: () => {
|
|
8245
8299
|
page.off("request", onRequest);
|
|
8246
8300
|
page.off("response", onResponse);
|
|
8301
|
+
page.off("requestfailed", onRequestFailed);
|
|
8302
|
+
requestStart.clear();
|
|
8247
8303
|
return {
|
|
8248
8304
|
log: {
|
|
8249
8305
|
version: "1.2",
|
|
@@ -9401,7 +9457,6 @@ init_types();
|
|
|
9401
9457
|
var import_sharp = __toESM(require_lib(), 1);
|
|
9402
9458
|
import { join as join4 } from "path";
|
|
9403
9459
|
import { mkdirSync as mkdirSync4 } from "fs";
|
|
9404
|
-
import { homedir as homedir4 } from "os";
|
|
9405
9460
|
|
|
9406
9461
|
// src/db/gallery.ts
|
|
9407
9462
|
init_schema();
|
|
@@ -9446,11 +9501,9 @@ function getEntry(id) {
|
|
|
9446
9501
|
}
|
|
9447
9502
|
|
|
9448
9503
|
// src/lib/screenshot.ts
|
|
9449
|
-
|
|
9450
|
-
return process.env["BROWSER_DATA_DIR"] ?? join4(homedir4(), ".browser");
|
|
9451
|
-
}
|
|
9504
|
+
init_schema();
|
|
9452
9505
|
function getScreenshotDir(projectId) {
|
|
9453
|
-
const base = join4(
|
|
9506
|
+
const base = join4(getDataDir(), "screenshots");
|
|
9454
9507
|
const date = new Date().toISOString().split("T")[0];
|
|
9455
9508
|
const dir = projectId ? join4(base, projectId, date) : join4(base, date);
|
|
9456
9509
|
mkdirSync4(dir, { recursive: true });
|
|
@@ -9585,7 +9638,7 @@ async function takeScreenshot(page, opts) {
|
|
|
9585
9638
|
}
|
|
9586
9639
|
async function generatePDF(page, opts) {
|
|
9587
9640
|
try {
|
|
9588
|
-
const base = join4(
|
|
9641
|
+
const base = join4(getDataDir(), "pdfs");
|
|
9589
9642
|
const date = new Date().toISOString().split("T")[0];
|
|
9590
9643
|
const dir = opts?.projectId ? join4(base, opts.projectId, date) : join4(base, date);
|
|
9591
9644
|
mkdirSync4(dir, { recursive: true });
|