@purepageio/fetch-engines 0.1.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 +21 -0
- package/README.md +205 -0
- package/dist/FetchEngine.d.ts +46 -0
- package/dist/FetchEngine.d.ts.map +1 -0
- package/dist/FetchEngine.js +137 -0
- package/dist/FetchEngine.js.map +1 -0
- package/dist/FetchEngine.test.d.ts +2 -0
- package/dist/FetchEngine.test.d.ts.map +1 -0
- package/dist/FetchEngine.test.js +44 -0
- package/dist/FetchEngine.test.js.map +1 -0
- package/dist/HybridEngine.d.ts +15 -0
- package/dist/HybridEngine.d.ts.map +1 -0
- package/dist/HybridEngine.js +45 -0
- package/dist/HybridEngine.js.map +1 -0
- package/dist/IEngine.d.ts +22 -0
- package/dist/IEngine.d.ts.map +1 -0
- package/dist/IEngine.js +2 -0
- package/dist/IEngine.js.map +1 -0
- package/dist/PlaywrightEngine.d.ts +88 -0
- package/dist/PlaywrightEngine.d.ts.map +1 -0
- package/dist/PlaywrightEngine.js +484 -0
- package/dist/PlaywrightEngine.js.map +1 -0
- package/dist/PlaywrightEngine.test.d.ts +2 -0
- package/dist/PlaywrightEngine.test.d.ts.map +1 -0
- package/dist/PlaywrightEngine.test.js +299 -0
- package/dist/PlaywrightEngine.test.js.map +1 -0
- package/dist/PuppeteerEngine.d.ts +21 -0
- package/dist/PuppeteerEngine.d.ts.map +1 -0
- package/dist/PuppeteerEngine.js +412 -0
- package/dist/PuppeteerEngine.js.map +1 -0
- package/dist/browser/BrowserPool.d.ts +29 -0
- package/dist/browser/BrowserPool.d.ts.map +1 -0
- package/dist/browser/BrowserPool.js +378 -0
- package/dist/browser/BrowserPool.js.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.d.ts +78 -0
- package/dist/browser/PlaywrightBrowserPool.d.ts.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.js +429 -0
- package/dist/browser/PlaywrightBrowserPool.js.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.test.d.ts +2 -0
- package/dist/browser/PlaywrightBrowserPool.test.d.ts.map +1 -0
- package/dist/browser/PlaywrightBrowserPool.test.js +422 -0
- package/dist/browser/PlaywrightBrowserPool.test.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +151 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { PlaywrightEngine } from "./PlaywrightEngine.js";
|
|
3
|
+
import { PlaywrightBrowserPool } from "./browser/PlaywrightBrowserPool.js";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
import { EventEmitter } from "events";
|
|
6
|
+
// Mock axios
|
|
7
|
+
vi.mock("axios");
|
|
8
|
+
// Mock the BrowserPool itself
|
|
9
|
+
vi.mock("./browser/PlaywrightBrowserPool.js", () => {
|
|
10
|
+
// console.log("Mocking PlaywrightBrowserPool...");
|
|
11
|
+
const MockBrowserPool = vi.fn();
|
|
12
|
+
MockBrowserPool.prototype.initialize = vi.fn().mockResolvedValue(undefined);
|
|
13
|
+
MockBrowserPool.prototype.acquirePage = vi.fn(); // Mocked per test
|
|
14
|
+
MockBrowserPool.prototype.releasePage = vi.fn().mockResolvedValue(undefined);
|
|
15
|
+
MockBrowserPool.prototype.cleanup = vi.fn().mockResolvedValue(undefined);
|
|
16
|
+
MockBrowserPool.prototype.getMetrics = vi.fn().mockReturnValue([]); // Default to empty metrics
|
|
17
|
+
return { PlaywrightBrowserPool: MockBrowserPool };
|
|
18
|
+
});
|
|
19
|
+
// Helper function to create a mock Playwright Response
|
|
20
|
+
const createMockResponse = () => {
|
|
21
|
+
return {
|
|
22
|
+
ok: vi.fn().mockReturnValue(true),
|
|
23
|
+
status: vi.fn().mockReturnValue(200),
|
|
24
|
+
headers: vi.fn().mockReturnValue({ "content-type": "text/html" }),
|
|
25
|
+
// Add other methods/properties if needed by the engine
|
|
26
|
+
// body: vi.fn().mockResolvedValue(Buffer.from("")),
|
|
27
|
+
// text: vi.fn().mockResolvedValue(""),
|
|
28
|
+
// json: vi.fn().mockResolvedValue({}),
|
|
29
|
+
// etc.
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
// Helper to create mock Page
|
|
33
|
+
const createMockPage = () => {
|
|
34
|
+
const pageEmitter = new EventEmitter();
|
|
35
|
+
const mockPage = {
|
|
36
|
+
goto: vi.fn().mockResolvedValue(createMockResponse()), // Mock goto to return mock response
|
|
37
|
+
content: vi.fn().mockResolvedValue("<html>Mock HTML</html>"),
|
|
38
|
+
title: vi.fn().mockResolvedValue("Mock Title"),
|
|
39
|
+
url: vi.fn().mockReturnValue("http://mock.example.com"),
|
|
40
|
+
close: vi.fn().mockImplementation(() => {
|
|
41
|
+
pageEmitter.emit("close");
|
|
42
|
+
return Promise.resolve();
|
|
43
|
+
}),
|
|
44
|
+
isClosed: vi.fn().mockReturnValue(false),
|
|
45
|
+
on: pageEmitter.on.bind(pageEmitter),
|
|
46
|
+
once: pageEmitter.once.bind(pageEmitter),
|
|
47
|
+
off: pageEmitter.off.bind(pageEmitter),
|
|
48
|
+
evaluate: vi.fn(), // Mock evaluate if needed
|
|
49
|
+
mouse: { move: vi.fn().mockResolvedValue(undefined) }, // Mock mouse if behavior simulation tested
|
|
50
|
+
// Add other methods/properties as needed by the engine
|
|
51
|
+
};
|
|
52
|
+
return mockPage;
|
|
53
|
+
};
|
|
54
|
+
describe("PlaywrightEngine", () => {
|
|
55
|
+
let engine;
|
|
56
|
+
let mockAcquirePage;
|
|
57
|
+
let mockCleanupPool;
|
|
58
|
+
let mockGetMetrics;
|
|
59
|
+
let mockAxiosGet;
|
|
60
|
+
let browserPoolMock;
|
|
61
|
+
// Store spies to restore them
|
|
62
|
+
let spies = [];
|
|
63
|
+
beforeEach(() => {
|
|
64
|
+
vi.clearAllMocks();
|
|
65
|
+
vi.useRealTimers(); // Ensure real timers by default
|
|
66
|
+
mockAcquirePage = vi.fn();
|
|
67
|
+
mockCleanupPool = vi.fn();
|
|
68
|
+
mockGetMetrics = vi.fn().mockReturnValue([]);
|
|
69
|
+
// Use vi.spyOn for prototype methods
|
|
70
|
+
spies = [
|
|
71
|
+
vi
|
|
72
|
+
.spyOn(PlaywrightBrowserPool.prototype, "initialize")
|
|
73
|
+
.mockResolvedValue(undefined),
|
|
74
|
+
vi
|
|
75
|
+
.spyOn(PlaywrightBrowserPool.prototype, "acquirePage")
|
|
76
|
+
.mockImplementation(mockAcquirePage),
|
|
77
|
+
vi
|
|
78
|
+
.spyOn(PlaywrightBrowserPool.prototype, "cleanup")
|
|
79
|
+
.mockImplementation(mockCleanupPool),
|
|
80
|
+
vi
|
|
81
|
+
.spyOn(PlaywrightBrowserPool.prototype, "getMetrics")
|
|
82
|
+
.mockImplementation(mockGetMetrics),
|
|
83
|
+
];
|
|
84
|
+
mockAxiosGet = vi.fn();
|
|
85
|
+
// Use mocked implementation signature
|
|
86
|
+
vi.mocked(axios.get).mockImplementation(mockAxiosGet);
|
|
87
|
+
// Get the mocked constructor instance
|
|
88
|
+
browserPoolMock = new PlaywrightBrowserPool();
|
|
89
|
+
// Mock acquirePage for default success case
|
|
90
|
+
vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(createMockPage());
|
|
91
|
+
// Ensure the engine constructor uses the mocked pool
|
|
92
|
+
vi.mocked(PlaywrightBrowserPool).mockImplementation(() => browserPoolMock);
|
|
93
|
+
});
|
|
94
|
+
// Restore spies after each test
|
|
95
|
+
afterEach(async () => {
|
|
96
|
+
spies.forEach((spy) => spy.mockRestore());
|
|
97
|
+
if (engine) {
|
|
98
|
+
await engine.cleanup(); // Ensure engine resources are released
|
|
99
|
+
}
|
|
100
|
+
vi.restoreAllMocks();
|
|
101
|
+
});
|
|
102
|
+
it("should initialize the browser pool on first fetch and return content", async () => {
|
|
103
|
+
engine = new PlaywrightEngine({ useHttpFallback: false }); // Test without fallback initially
|
|
104
|
+
const url = "http://example-success.com";
|
|
105
|
+
const expectedHtml = "<html><body>Success</body></html>";
|
|
106
|
+
const expectedTitle = "Success Title";
|
|
107
|
+
const mockPage = createMockPage();
|
|
108
|
+
mockAcquirePage.mockResolvedValue(mockPage);
|
|
109
|
+
// Mock axios fallback - though not used here due to useHttpFallback: false
|
|
110
|
+
mockAxiosGet.mockRejectedValue(new Error("Axios fallback failed"));
|
|
111
|
+
const result = await engine.fetchHTML(url);
|
|
112
|
+
// Check prototype spies were involved
|
|
113
|
+
expect(PlaywrightBrowserPool.prototype.initialize).toHaveBeenCalledTimes(1);
|
|
114
|
+
expect(mockAcquirePage).toHaveBeenCalledTimes(1); // acquirePage spy
|
|
115
|
+
expect(mockPage.goto).toHaveBeenCalledWith(url, expect.anything());
|
|
116
|
+
expect(mockPage.close).toHaveBeenCalledTimes(1);
|
|
117
|
+
expect(result).toEqual({
|
|
118
|
+
html: expectedHtml,
|
|
119
|
+
title: expectedTitle,
|
|
120
|
+
url: url,
|
|
121
|
+
});
|
|
122
|
+
// Verify axios was NOT called for fallback attempt
|
|
123
|
+
expect(mockAxiosGet).not.toHaveBeenCalled(); // Fallback explicitly disabled
|
|
124
|
+
});
|
|
125
|
+
it("should use HTTP fallback if enabled and successful", async () => {
|
|
126
|
+
engine = new PlaywrightEngine({ useHttpFallback: true }); // Enable fallback
|
|
127
|
+
const url = "http://example.com/fallback-works";
|
|
128
|
+
const fallbackHtml = "<html><head><title>Fallback Title</title></head><body>Fallback HTML</body></html>";
|
|
129
|
+
// Setup successful axios fallback
|
|
130
|
+
mockAxiosGet.mockResolvedValue({
|
|
131
|
+
data: fallbackHtml,
|
|
132
|
+
status: 200,
|
|
133
|
+
headers: { "content-type": "text/html" },
|
|
134
|
+
request: { res: { responseUrl: url } },
|
|
135
|
+
config: { url: url },
|
|
136
|
+
});
|
|
137
|
+
const result = await engine.fetchHTML(url);
|
|
138
|
+
expect(mockAcquirePage).not.toHaveBeenCalled(); // Browser pool should not be used
|
|
139
|
+
expect(mockAxiosGet).toHaveBeenCalledTimes(1);
|
|
140
|
+
expect(mockAxiosGet).toHaveBeenCalledWith(url, expect.anything());
|
|
141
|
+
expect(result.title).toBe("Fallback Title"); // Title extracted by fallback regex
|
|
142
|
+
expect(result.html).toBe(fallbackHtml);
|
|
143
|
+
expect(result.url).toBe(url);
|
|
144
|
+
});
|
|
145
|
+
it("should retry browser fetch if initial attempt fails and fallback also fails", async () => {
|
|
146
|
+
// Explicitly configure retries and delay for predictability
|
|
147
|
+
engine = new PlaywrightEngine({
|
|
148
|
+
useHttpFallback: true,
|
|
149
|
+
maxRetries: 1, // Allow 1 retry (2 total attempts)
|
|
150
|
+
retryDelay: 100, // Short delay (won't be hit due to FAST->THOROUGH)
|
|
151
|
+
});
|
|
152
|
+
const url = "http://example.com/retry";
|
|
153
|
+
const expectedHtml = "<html><body>Retry Success</body></html>";
|
|
154
|
+
const expectedTitle = "Retry Title";
|
|
155
|
+
const mockPage = createMockPage();
|
|
156
|
+
const failureError = new Error("Initial fetch failed");
|
|
157
|
+
// Fail first browser attempt (FAST mode), succeed second (THOROUGH mode)
|
|
158
|
+
// Note: acquirePage is called for *both* FAST and THOROUGH in the first attempt
|
|
159
|
+
mockAcquirePage
|
|
160
|
+
.mockRejectedValueOnce(failureError) // Fails in FAST
|
|
161
|
+
.mockResolvedValueOnce(mockPage); // Succeeds in THOROUGH
|
|
162
|
+
// Fail axios fallback
|
|
163
|
+
mockAxiosGet.mockRejectedValue(new Error("Axios fallback failed"));
|
|
164
|
+
const result = await engine.fetchHTML(url); // Await directly
|
|
165
|
+
expect(mockAxiosGet).toHaveBeenCalledTimes(2); // Fallback tried at start of FAST and start of THOROUGH
|
|
166
|
+
expect(mockAcquirePage).toHaveBeenCalledTimes(2); // Called for FAST (fail) then THOROUGH (success)
|
|
167
|
+
expect(mockPage.goto).toHaveBeenCalledTimes(1); // Only called on the successful THOROUGH attempt
|
|
168
|
+
expect(result.title).toBe(expectedTitle);
|
|
169
|
+
expect(result.html).toBe(expectedHtml);
|
|
170
|
+
});
|
|
171
|
+
it("should exhaust retries and throw if browser fetch consistently fails", async () => {
|
|
172
|
+
const maxRetries = 1; // 2 total attempts
|
|
173
|
+
const retryDelay = 100;
|
|
174
|
+
engine = new PlaywrightEngine({
|
|
175
|
+
useHttpFallback: true,
|
|
176
|
+
maxRetries: maxRetries,
|
|
177
|
+
retryDelay: retryDelay,
|
|
178
|
+
});
|
|
179
|
+
const url = "http://example.com/persistent-fail";
|
|
180
|
+
const failureError = new Error("Browser fetch failed persistently");
|
|
181
|
+
mockAcquirePage.mockRejectedValue(failureError); // Always fail
|
|
182
|
+
mockAxiosGet.mockRejectedValue(new Error("Axios fallback failed")); // Always fail fallback
|
|
183
|
+
vi.useFakeTimers();
|
|
184
|
+
const fetchPromise = engine.fetchHTML(url);
|
|
185
|
+
const maxAttempts = maxRetries + 1; // 2
|
|
186
|
+
// Need to advance timers ONLY for the delay *between* overall attempts
|
|
187
|
+
// Attempt 1 (FAST -> THOROUGH) happens without delay.
|
|
188
|
+
// Then delay happens. Then Attempt 2 (FAST -> THOROUGH) happens.
|
|
189
|
+
if (maxRetries > 0) {
|
|
190
|
+
// Only advance if retries > 0
|
|
191
|
+
await vi.advanceTimersByTimeAsync(retryDelay + 10);
|
|
192
|
+
}
|
|
193
|
+
// Removed the loop for advancing timers multiple times
|
|
194
|
+
// Final error message should reflect the *last* error encountered
|
|
195
|
+
// In this case, the error comes from the _fetchWithBrowser call (mockAcquirePage rejection)
|
|
196
|
+
await expect(fetchPromise).rejects.toThrow(`Failed to fetch ${url} after ${maxAttempts} attempts: ${failureError.message}`);
|
|
197
|
+
vi.useRealTimers();
|
|
198
|
+
// Fallback called at start of attempt 1 and start of attempt 2
|
|
199
|
+
expect(mockAxiosGet).toHaveBeenCalledTimes(2);
|
|
200
|
+
// acquirePage called for FAST (fails), THOROUGH (fails) on attempt 1, then THOROUGH (fails) on attempt 2
|
|
201
|
+
expect(mockAcquirePage).toHaveBeenCalledTimes(3);
|
|
202
|
+
});
|
|
203
|
+
it("should call pool cleanup when engine cleanup is called", async () => {
|
|
204
|
+
engine = new PlaywrightEngine(); // Create default engine for this test
|
|
205
|
+
// --- Add initialization step ---
|
|
206
|
+
const initUrl = "http://example.com/initpool";
|
|
207
|
+
const mockInitPage = createMockPage();
|
|
208
|
+
mockAxiosGet.mockRejectedValueOnce(new Error("Axios fallback failed for init")); // Ensure browser path
|
|
209
|
+
mockAcquirePage.mockResolvedValueOnce(mockInitPage); // Provide a page
|
|
210
|
+
try {
|
|
211
|
+
await engine.fetchHTML(initUrl);
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
/* Ignore errors during init fetch */
|
|
215
|
+
}
|
|
216
|
+
// Reset mocks if needed, although clearAllMocks runs in next beforeEach
|
|
217
|
+
mockAxiosGet.mockClear(); // Clear init call history
|
|
218
|
+
mockAcquirePage.mockClear();
|
|
219
|
+
// --- End initialization step ---
|
|
220
|
+
await engine.cleanup();
|
|
221
|
+
// Check prototype spy was called
|
|
222
|
+
expect(PlaywrightBrowserPool.prototype.cleanup).toHaveBeenCalledTimes(1);
|
|
223
|
+
expect(mockCleanupPool).toHaveBeenCalledTimes(1); // Check the specific mock function too
|
|
224
|
+
});
|
|
225
|
+
it("should handle errors during HTTP fallback", async () => {
|
|
226
|
+
// Mock fetchHTMLWithHttpFallback to reject
|
|
227
|
+
vi.spyOn(PlaywrightEngine.prototype, "fetchHTMLWithHttpFallback").mockRejectedValue(new Error("HTTP Fallback Failed"));
|
|
228
|
+
engine = new PlaywrightEngine({ useHttpFallback: true });
|
|
229
|
+
// We expect it to fail the fallback, then proceed to playwright (which is mocked to succeed)
|
|
230
|
+
const result = await engine.fetchHTML("http://example.com/fail-fallback");
|
|
231
|
+
expect(result).toBeDefined(); // Should still succeed via Playwright mock
|
|
232
|
+
expect(PlaywrightBrowserPool.prototype.acquirePage).toHaveBeenCalled();
|
|
233
|
+
});
|
|
234
|
+
it("should handle pool acquirePage errors", async () => {
|
|
235
|
+
// Mock acquirePage to reject
|
|
236
|
+
vi.mocked(PlaywrightBrowserPool.prototype.acquirePage).mockRejectedValue(new Error("Pool Error"));
|
|
237
|
+
engine = new PlaywrightEngine({ useHttpFallback: false }); // Disable fallback
|
|
238
|
+
await expect(engine.fetchHTML("http://example.com/pool-error")).rejects.toThrow(/Fetch failed after/);
|
|
239
|
+
expect(PlaywrightBrowserPool.prototype.acquirePage).toHaveBeenCalledTimes(1 + 3); // Initial + 3 retries
|
|
240
|
+
});
|
|
241
|
+
it("should handle page.goto errors", async () => {
|
|
242
|
+
// Mock page.goto to reject
|
|
243
|
+
const mockPage = createMockPage();
|
|
244
|
+
vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(mockPage);
|
|
245
|
+
vi.mocked(mockPage.goto).mockRejectedValue(new Error("Navigation Failed"));
|
|
246
|
+
engine = new PlaywrightEngine({ useHttpFallback: false });
|
|
247
|
+
await expect(engine.fetchHTML("http://example.com/goto-error")).rejects.toThrow(/Fetch failed after/);
|
|
248
|
+
expect(mockPage.goto).toHaveBeenCalledTimes(1 + 3); // Initial + 3 retries
|
|
249
|
+
});
|
|
250
|
+
// Example for testing retry logic
|
|
251
|
+
it("should exhaust retries and throw if browser fetch consistently fails", async () => {
|
|
252
|
+
const mockPage = createMockPage();
|
|
253
|
+
vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(mockPage);
|
|
254
|
+
vi.mocked(mockPage.goto).mockRejectedValue(new Error("Consistent Fail"));
|
|
255
|
+
engine = new PlaywrightEngine({
|
|
256
|
+
maxRetries: 2,
|
|
257
|
+
retryDelay: 10,
|
|
258
|
+
useHttpFallback: false,
|
|
259
|
+
}); // 2 retries
|
|
260
|
+
await expect(engine.fetchHTML("http://example.com/retry-fail")).rejects.toThrow(/Fetch failed after 2 retries: Playwright navigation failed: Consistent Fail/);
|
|
261
|
+
// acquirePage called once initially
|
|
262
|
+
// goto called initial + 2 retries = 3 times
|
|
263
|
+
expect(browserPoolMock.acquirePage).toHaveBeenCalledTimes(1);
|
|
264
|
+
expect(mockPage.goto).toHaveBeenCalledTimes(3);
|
|
265
|
+
});
|
|
266
|
+
it("should switch to thorough mode on first fast mode failure", async () => {
|
|
267
|
+
const mockPage = createMockPage();
|
|
268
|
+
vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(mockPage);
|
|
269
|
+
// Fail once, then succeed
|
|
270
|
+
vi.mocked(mockPage.goto)
|
|
271
|
+
.mockRejectedValueOnce(new Error("Fast Mode Fail"))
|
|
272
|
+
.mockResolvedValue(createMockResponse()); // Succeed on second (thorough) try
|
|
273
|
+
vi.mocked(mockPage.content).mockResolvedValue("<html>Thorough Success</html>");
|
|
274
|
+
vi.mocked(mockPage.title).mockResolvedValue("Thorough Title");
|
|
275
|
+
engine = new PlaywrightEngine({
|
|
276
|
+
defaultFastMode: true,
|
|
277
|
+
maxRetries: 1,
|
|
278
|
+
retryDelay: 10,
|
|
279
|
+
useHttpFallback: false,
|
|
280
|
+
});
|
|
281
|
+
// Mock simulateHumanBehavior before calling fetchHTML
|
|
282
|
+
const simulateSpy = vi
|
|
283
|
+
.spyOn(engine, "simulateHumanBehavior")
|
|
284
|
+
.mockResolvedValue(undefined);
|
|
285
|
+
const result = await engine.fetchHTML("http://example.com/fast-fail");
|
|
286
|
+
expect(mockPage.goto).toHaveBeenCalledTimes(2);
|
|
287
|
+
expect(result.html).toBe("<html>Thorough Success</html>");
|
|
288
|
+
expect(result.title).toBe("Thorough Title");
|
|
289
|
+
// Check simulateHumanBehavior was called on the second (thorough) attempt
|
|
290
|
+
expect(simulateSpy).toHaveBeenCalledTimes(1);
|
|
291
|
+
simulateSpy.mockRestore(); // Clean up spy
|
|
292
|
+
});
|
|
293
|
+
// TODO: Test headed mode fallback logic
|
|
294
|
+
// TODO: Test caching logic
|
|
295
|
+
}, {
|
|
296
|
+
// Increase timeout for tests involving retries and delays
|
|
297
|
+
timeout: 20000,
|
|
298
|
+
});
|
|
299
|
+
//# sourceMappingURL=PlaywrightEngine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightEngine.test.js","sourceRoot":"","sources":["../src/PlaywrightEngine.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HTMLFetchResult, BrowserMetrics } from "./types";
|
|
2
|
+
import type { IEngine } from "./IEngine";
|
|
3
|
+
/**
|
|
4
|
+
* PuppeteerEngine - A headless browser engine that uses Puppeteer to render JavaScript-heavy pages
|
|
5
|
+
* Ideal for SPAs and sites with anti-scraping measures
|
|
6
|
+
*/
|
|
7
|
+
export declare class PuppeteerEngine implements IEngine {
|
|
8
|
+
private static browserPool;
|
|
9
|
+
private readonly queue;
|
|
10
|
+
private readonly cache;
|
|
11
|
+
private readonly cacheTTL;
|
|
12
|
+
private isInitializing;
|
|
13
|
+
constructor(concurrentPages?: number);
|
|
14
|
+
private initializeBrowserPool;
|
|
15
|
+
fetchHTML(url: string): Promise<HTMLFetchResult>;
|
|
16
|
+
private checkCache;
|
|
17
|
+
private cacheResult;
|
|
18
|
+
cleanup(): Promise<void>;
|
|
19
|
+
getMetrics(): BrowserMetrics[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=PuppeteerEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PuppeteerEngine.d.ts","sourceRoot":"","sources":["../src/PuppeteerEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,OAAO;IAC7C,OAAO,CAAC,MAAM,CAAC,WAAW,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,cAAc,CAAkB;gBAE5B,eAAe,SAAI;YAmBjB,qBAAqB;IA6B7B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAiUtD,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAoBb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B,UAAU,IAAI,cAAc,EAAE;CAG/B"}
|