@purepageio/fetch-engines 0.2.9 → 0.2.11

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 (60) hide show
  1. package/dist/FetchEngine.d.ts +47 -0
  2. package/dist/FetchEngine.d.ts.map +1 -0
  3. package/dist/FetchEngine.js +114 -0
  4. package/dist/FetchEngine.js.map +1 -0
  5. package/dist/FetchEngine.test.d.ts +2 -0
  6. package/dist/FetchEngine.test.d.ts.map +1 -0
  7. package/dist/FetchEngine.test.js +44 -0
  8. package/dist/FetchEngine.test.js.map +1 -0
  9. package/dist/HybridEngine.d.ts +21 -0
  10. package/dist/HybridEngine.d.ts.map +1 -0
  11. package/dist/HybridEngine.js +62 -0
  12. package/dist/HybridEngine.js.map +1 -0
  13. package/dist/IEngine.d.ts +22 -0
  14. package/dist/IEngine.d.ts.map +1 -0
  15. package/dist/IEngine.js +2 -0
  16. package/dist/IEngine.js.map +1 -0
  17. package/dist/PlaywrightEngine.d.ts +90 -0
  18. package/dist/PlaywrightEngine.d.ts.map +1 -0
  19. package/dist/PlaywrightEngine.js +558 -0
  20. package/dist/PlaywrightEngine.js.map +1 -0
  21. package/dist/PlaywrightEngine.test.d.ts +2 -0
  22. package/dist/PlaywrightEngine.test.d.ts.map +1 -0
  23. package/dist/PlaywrightEngine.test.js +207 -0
  24. package/dist/PlaywrightEngine.test.js.map +1 -0
  25. package/dist/PuppeteerEngine.d.ts +21 -0
  26. package/dist/PuppeteerEngine.d.ts.map +1 -0
  27. package/dist/PuppeteerEngine.js +412 -0
  28. package/dist/PuppeteerEngine.js.map +1 -0
  29. package/dist/browser/BrowserPool.d.ts +29 -0
  30. package/dist/browser/BrowserPool.d.ts.map +1 -0
  31. package/dist/browser/BrowserPool.js +378 -0
  32. package/dist/browser/BrowserPool.js.map +1 -0
  33. package/dist/browser/PlaywrightBrowserPool.d.ts +48 -0
  34. package/dist/browser/PlaywrightBrowserPool.d.ts.map +1 -0
  35. package/dist/browser/PlaywrightBrowserPool.js +378 -0
  36. package/dist/browser/PlaywrightBrowserPool.js.map +1 -0
  37. package/dist/browser/PlaywrightBrowserPool.test.d.ts +2 -0
  38. package/dist/browser/PlaywrightBrowserPool.test.d.ts.map +1 -0
  39. package/dist/browser/PlaywrightBrowserPool.test.js +422 -0
  40. package/dist/browser/PlaywrightBrowserPool.test.js.map +1 -0
  41. package/dist/errors.d.ts +20 -0
  42. package/dist/errors.d.ts.map +1 -0
  43. package/dist/errors.js +30 -0
  44. package/dist/errors.js.map +1 -0
  45. package/dist/index.d.ts +8 -323
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +4 -1617
  48. package/dist/index.js.map +1 -1
  49. package/dist/types.d.ts +167 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +2 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/utils/markdown-converter.d.ts +31 -0
  54. package/dist/utils/markdown-converter.d.ts.map +1 -0
  55. package/dist/utils/markdown-converter.js +796 -0
  56. package/dist/utils/markdown-converter.js.map +1 -0
  57. package/package.json +5 -14
  58. package/dist/index.cjs +0 -1657
  59. package/dist/index.cjs.map +0 -1
  60. package/dist/index.d.cts +0 -323
@@ -0,0 +1,207 @@
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
+ // --- Tests --- //
55
+ // Increase timeout for tests involving retries and delays
56
+ describe("PlaywrightEngine", { timeout: 20000 }, () => {
57
+ let engine;
58
+ let browserPoolMock;
59
+ beforeEach(() => {
60
+ vi.clearAllMocks(); // Clear mocks between tests
61
+ // --- Set up mocks BEFORE engine creation ---
62
+ // Get the mocked constructor instance from the module mock
63
+ browserPoolMock = new PlaywrightBrowserPool();
64
+ // Mock methods directly on the instance used by the engine
65
+ // Ensure acquirePage returns a fresh mock page for each test
66
+ vi.mocked(browserPoolMock.acquirePage).mockImplementation(async () => createMockPage());
67
+ vi.mocked(browserPoolMock.initialize).mockResolvedValue(undefined);
68
+ vi.mocked(browserPoolMock.cleanup).mockResolvedValue(undefined);
69
+ vi.mocked(browserPoolMock.getMetrics).mockReturnValue([]);
70
+ // Ensure the engine constructor uses THIS specific mocked instance
71
+ vi.mocked(PlaywrightBrowserPool).mockImplementation(() => browserPoolMock);
72
+ // Mock axios.get for HTTP fallback tests
73
+ const mockAxiosGet = vi.fn();
74
+ vi.mocked(axios.get).mockImplementation(mockAxiosGet);
75
+ });
76
+ afterEach(async () => {
77
+ if (engine) {
78
+ await engine.cleanup(); // Ensure engine resources are released
79
+ }
80
+ vi.restoreAllMocks();
81
+ });
82
+ it("should initialize the browser pool on first fetch and return content", async () => {
83
+ engine = new PlaywrightEngine({ useHttpFallback: false }); // Disable fallback for direct test
84
+ const url = "http://example.com/init";
85
+ const result = await engine.fetchHTML(url);
86
+ // Check calls on the INSTANCE mock
87
+ expect(browserPoolMock.initialize).toHaveBeenCalledTimes(1);
88
+ expect(browserPoolMock.acquirePage).toHaveBeenCalledTimes(1);
89
+ expect(result.html).toBe("<html>Mock HTML</html>");
90
+ expect(result.title).toBe("Mock Title");
91
+ });
92
+ it("should use HTTP fallback if enabled and successful", async () => {
93
+ engine = new PlaywrightEngine({ useHttpFallback: true });
94
+ const url = "http://example.com/fallback-success";
95
+ const mockHtml = "<html>Fallback OK</html>";
96
+ const mockAxiosGet = vi.mocked(axios.get).mockResolvedValue({
97
+ data: mockHtml,
98
+ status: 200,
99
+ headers: { "content-type": "text/html" },
100
+ config: { url: url }, // Mock config for URL extraction
101
+ request: { res: { responseUrl: url } }, // Mock responseUrl
102
+ });
103
+ const result = await engine.fetchHTML(url);
104
+ expect(mockAxiosGet).toHaveBeenCalledWith(url, expect.any(Object));
105
+ expect(browserPoolMock.acquirePage).not.toHaveBeenCalled(); // Browser pool should NOT be used
106
+ expect(result.html).toBe(mockHtml);
107
+ expect(result.title).toMatch(/Fallback OK/i); // Regex for simple title extraction
108
+ });
109
+ it("should retry browser fetch if initial attempt fails and fallback also fails", async () => {
110
+ engine = new PlaywrightEngine({
111
+ useHttpFallback: true,
112
+ maxRetries: 1,
113
+ retryDelay: 10,
114
+ });
115
+ const url = "http://example.com/retry";
116
+ // Mock HTTP fallback to fail
117
+ vi.mocked(axios.get).mockRejectedValue(new Error("Axios fallback failed"));
118
+ // Mock acquirePage -> goto to fail once, then succeed
119
+ const mockPage = createMockPage();
120
+ vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(mockPage); // Use instance mock
121
+ vi.mocked(mockPage.goto)
122
+ .mockRejectedValueOnce(new Error("First goto failed"))
123
+ .mockResolvedValue(createMockResponse()); // Success on retry
124
+ const result = await engine.fetchHTML(url);
125
+ expect(axios.get).toHaveBeenCalledTimes(1);
126
+ expect(browserPoolMock.acquirePage).toHaveBeenCalledTimes(1); // Only acquired once
127
+ expect(mockPage.goto).toHaveBeenCalledTimes(2); // Initial attempt + 1 retry
128
+ expect(result.html).toBe("<html>Mock HTML</html>");
129
+ });
130
+ it("should call pool cleanup when engine cleanup is called", async () => {
131
+ engine = new PlaywrightEngine();
132
+ await engine.fetchHTML("http://example.com/cleanup-test");
133
+ await engine.cleanup();
134
+ expect(browserPoolMock.cleanup).toHaveBeenCalledTimes(1); // Check instance mock
135
+ });
136
+ it("should handle errors during HTTP fallback", async () => {
137
+ // Mock fetchHTMLWithHttpFallback to reject
138
+ vi.spyOn(PlaywrightEngine.prototype, "fetchHTMLWithHttpFallback").mockRejectedValue(new Error("HTTP Fallback Failed"));
139
+ engine = new PlaywrightEngine({ useHttpFallback: true, retryDelay: 10 });
140
+ // We expect it to fail the fallback, then proceed to playwright (which is mocked to succeed)
141
+ const result = await engine.fetchHTML("http://example.com/fail-fallback");
142
+ expect(result).toBeDefined(); // Should still succeed via Playwright mock
143
+ expect(browserPoolMock.acquirePage).toHaveBeenCalled(); // Check instance mock
144
+ });
145
+ it("should handle pool acquirePage errors", async () => {
146
+ // Mock acquirePage on the instance to reject
147
+ vi.mocked(browserPoolMock.acquirePage).mockRejectedValue(new Error("Pool Error"));
148
+ engine = new PlaywrightEngine({ useHttpFallback: false, retryDelay: 10 }); // Disable fallback
149
+ await expect(engine.fetchHTML("http://example.com/pool-error")).rejects.toThrow(/Fetch failed after/);
150
+ expect(browserPoolMock.acquirePage).toHaveBeenCalledTimes(1 + 3); // Check instance mock (Initial + 3 retries)
151
+ });
152
+ it("should handle page.goto errors", async () => {
153
+ // Mock page.goto to reject
154
+ const mockPage = createMockPage();
155
+ vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(mockPage); // Use instance mock
156
+ vi.mocked(mockPage.goto).mockRejectedValue(new Error("Navigation Failed"));
157
+ engine = new PlaywrightEngine({ useHttpFallback: false, retryDelay: 10 });
158
+ await expect(engine.fetchHTML("http://example.com/goto-error")).rejects.toThrow(/Fetch failed after/);
159
+ expect(mockPage.goto).toHaveBeenCalledTimes(1 + 3); // Initial + 3 retries
160
+ });
161
+ // Example for testing retry logic
162
+ it("should exhaust retries and throw if browser fetch consistently fails", async () => {
163
+ const mockPage = createMockPage();
164
+ vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(mockPage); // Use instance mock
165
+ vi.mocked(mockPage.goto).mockRejectedValue(new Error("Consistent Fail"));
166
+ engine = new PlaywrightEngine({
167
+ maxRetries: 2,
168
+ retryDelay: 10,
169
+ useHttpFallback: false,
170
+ }); // 2 retries
171
+ await expect(engine.fetchHTML("http://example.com/retry-fail")).rejects.toThrow(/Fetch failed after 2 retries: Playwright navigation failed: Consistent Fail/);
172
+ // acquirePage called once initially
173
+ // goto called initial + 2 retries = 3 times
174
+ expect(browserPoolMock.acquirePage).toHaveBeenCalledTimes(1); // Check instance mock
175
+ expect(mockPage.goto).toHaveBeenCalledTimes(3);
176
+ });
177
+ it("should switch to thorough mode on first fast mode failure", async () => {
178
+ const mockPage = createMockPage();
179
+ vi.mocked(browserPoolMock.acquirePage).mockResolvedValue(mockPage); // Use instance mock
180
+ // Fail once, then succeed
181
+ vi.mocked(mockPage.goto)
182
+ .mockRejectedValueOnce(new Error("Fast Mode Fail"))
183
+ .mockResolvedValue(createMockResponse()); // Succeed on second (thorough) try
184
+ vi.mocked(mockPage.content).mockResolvedValue("<html>Thorough Success</html>");
185
+ vi.mocked(mockPage.title).mockResolvedValue("Thorough Title");
186
+ engine = new PlaywrightEngine({
187
+ defaultFastMode: true,
188
+ maxRetries: 1,
189
+ retryDelay: 10,
190
+ useHttpFallback: false,
191
+ });
192
+ // Mock simulateHumanBehavior before calling fetchHTML
193
+ const simulateSpy = vi
194
+ .spyOn(engine, "simulateHumanBehavior")
195
+ .mockResolvedValue(undefined);
196
+ const result = await engine.fetchHTML("http://example.com/fast-fail");
197
+ expect(mockPage.goto).toHaveBeenCalledTimes(2);
198
+ expect(result.html).toBe("<html>Thorough Success</html>");
199
+ expect(result.title).toBe("Thorough Title");
200
+ // Check simulateHumanBehavior was called on the second (thorough) attempt
201
+ expect(simulateSpy).toHaveBeenCalledTimes(1);
202
+ simulateSpy.mockRestore(); // Clean up spy
203
+ });
204
+ // TODO: Test headed mode fallback logic
205
+ // TODO: Test caching logic
206
+ });
207
+ //# 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"}