jumpy-lion 0.0.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 (58) hide show
  1. package/dist/browser-controller.d.ts +36 -0
  2. package/dist/browser-controller.d.ts.map +1 -0
  3. package/dist/browser-controller.js +84 -0
  4. package/dist/browser-controller.js.map +1 -0
  5. package/dist/browser-plugin.d.ts +56 -0
  6. package/dist/browser-plugin.d.ts.map +1 -0
  7. package/dist/browser-plugin.js +149 -0
  8. package/dist/browser-plugin.js.map +1 -0
  9. package/dist/browser-process.d.ts +10 -0
  10. package/dist/browser-process.d.ts.map +1 -0
  11. package/dist/browser-process.js +65 -0
  12. package/dist/browser-process.js.map +1 -0
  13. package/dist/browser-profiles/chrome/create.d.ts +5 -0
  14. package/dist/browser-profiles/chrome/create.d.ts.map +1 -0
  15. package/dist/browser-profiles/chrome/create.js +22 -0
  16. package/dist/browser-profiles/chrome/create.js.map +1 -0
  17. package/dist/browser-profiles/chrome/default.d.ts +175 -0
  18. package/dist/browser-profiles/chrome/default.d.ts.map +1 -0
  19. package/dist/browser-profiles/chrome/default.js +175 -0
  20. package/dist/browser-profiles/chrome/default.js.map +1 -0
  21. package/dist/browser-profiles/index.d.ts +3 -0
  22. package/dist/browser-profiles/index.d.ts.map +1 -0
  23. package/dist/browser-profiles/index.js +3 -0
  24. package/dist/browser-profiles/index.js.map +1 -0
  25. package/dist/crawler.d.ts +22 -0
  26. package/dist/crawler.d.ts.map +1 -0
  27. package/dist/crawler.js +42 -0
  28. package/dist/crawler.js.map +1 -0
  29. package/dist/events.d.ts +3 -0
  30. package/dist/events.d.ts.map +1 -0
  31. package/dist/events.js +3 -0
  32. package/dist/events.js.map +1 -0
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +4 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/launcher-wrap.d.ts +10 -0
  38. package/dist/launcher-wrap.d.ts.map +1 -0
  39. package/dist/launcher-wrap.js +11 -0
  40. package/dist/launcher-wrap.js.map +1 -0
  41. package/dist/page.d.ts +79 -0
  42. package/dist/page.d.ts.map +1 -0
  43. package/dist/page.js +304 -0
  44. package/dist/page.js.map +1 -0
  45. package/dist/proxy/anonymize-proxy.d.ts +4 -0
  46. package/dist/proxy/anonymize-proxy.d.ts.map +1 -0
  47. package/dist/proxy/anonymize-proxy.js +35 -0
  48. package/dist/proxy/anonymize-proxy.js.map +1 -0
  49. package/dist/proxy/proxy-server.d.ts +2 -0
  50. package/dist/proxy/proxy-server.d.ts.map +1 -0
  51. package/dist/proxy/proxy-server.js +13 -0
  52. package/dist/proxy/proxy-server.js.map +1 -0
  53. package/dist/tsconfig.build.tsbuildinfo +1 -0
  54. package/dist/utils.d.ts +3 -0
  55. package/dist/utils.d.ts.map +1 -0
  56. package/dist/utils.js +7 -0
  57. package/dist/utils.js.map +1 -0
  58. package/package.json +79 -0
package/dist/page.js ADDED
@@ -0,0 +1,304 @@
1
+ import { EventEmitter } from 'events';
2
+ import { PAGE_CLOSED, PAGE_CREATED } from './events.js';
3
+ export default class CdpPage extends EventEmitter {
4
+ constructor(client) {
5
+ super();
6
+ Object.defineProperty(this, "client", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: void 0
11
+ });
12
+ Object.defineProperty(this, "loadedUrl", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: null
17
+ });
18
+ this.client = client;
19
+ this.emit(PAGE_CREATED);
20
+ }
21
+ // @TODO: The enabling of API can cause blocking.
22
+ // We need to discover this more and add options to the crawler.
23
+ static async create(client) {
24
+ const page = new CdpPage(client);
25
+ await page.initialize();
26
+ return page;
27
+ }
28
+ async initialize() {
29
+ const { Page, DOM, Network, Runtime } = this.client;
30
+ await Promise.all([Page.enable(), DOM.enable(), Network.enable(), Runtime.enable()]);
31
+ }
32
+ async url() {
33
+ if (!this.loadedUrl) {
34
+ return await this.evaluate("window.location.href");
35
+ }
36
+ return this.loadedUrl;
37
+ }
38
+ // Navigation method
39
+ async goto(url, options) {
40
+ const { Page, Runtime } = this.client;
41
+ const timeout = options?.timeout ?? 30000;
42
+ await Page.navigate({ url });
43
+ const waitUntil = options?.waitUntil ?? 'load';
44
+ const waitEvents = Array.isArray(waitUntil) ? waitUntil : [waitUntil];
45
+ const eventPromises = waitEvents.map(async (event) => {
46
+ switch (event) {
47
+ case 'load':
48
+ return new Promise((resolve) => Page.loadEventFired(() => resolve()));
49
+ case 'domcontentloaded':
50
+ return new Promise((resolve) => Page.domContentEventFired(() => resolve()));
51
+ default:
52
+ throw new Error(`Unsupported waitUntil event: ${event}`);
53
+ }
54
+ });
55
+ await Promise.race([
56
+ Promise.all(eventPromises),
57
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Navigation timeout')), timeout)),
58
+ ]);
59
+ const { result } = await Runtime.evaluate({ expression: 'window.location.href' });
60
+ this.loadedUrl = result.value;
61
+ }
62
+ // Evaluate method
63
+ async evaluate(pageFunction, ...args) {
64
+ const { Runtime } = this.client;
65
+ let expression;
66
+ if (typeof pageFunction === 'function') {
67
+ const fnStr = pageFunction.toString();
68
+ const argsStr = args.map((a) => JSON.stringify(a)).join(',');
69
+ expression = `(${fnStr})(${argsStr})`;
70
+ }
71
+ else if (typeof pageFunction === 'string') {
72
+ expression = pageFunction;
73
+ }
74
+ else {
75
+ throw new Error('First argument to evaluate must be a function or string');
76
+ }
77
+ const { result, exceptionDetails } = await Runtime.evaluate({
78
+ expression,
79
+ awaitPromise: true,
80
+ returnByValue: true,
81
+ });
82
+ if (exceptionDetails) {
83
+ throw new Error(`Evaluation failed: ${exceptionDetails.text}`);
84
+ }
85
+ return result.value;
86
+ }
87
+ // Click method
88
+ async click(selector) {
89
+ await this.waitForSelector(selector);
90
+ const { DOM, Input } = this.client;
91
+ const { nodeId } = await this.getNodeId(selector);
92
+ const { model } = await DOM.getBoxModel({ nodeId });
93
+ if (!model) {
94
+ throw new Error(`Could not get box model for node: ${nodeId}`);
95
+ }
96
+ const x = (model.content[0] + model.content[4]) / 2;
97
+ const y = (model.content[1] + model.content[5]) / 2;
98
+ await Input.dispatchMouseEvent({ type: 'mouseMoved', x, y });
99
+ await Input.dispatchMouseEvent({ type: 'mousePressed', x, y, button: 'left', clickCount: 1 });
100
+ await Input.dispatchMouseEvent({ type: 'mouseReleased', x, y, button: 'left', clickCount: 1 });
101
+ }
102
+ // Type method
103
+ async type(selector, text, options) {
104
+ const { Input } = this.client;
105
+ await this.click(selector);
106
+ const delay = options?.delay ?? 0;
107
+ for (const char of text) {
108
+ await Input.dispatchKeyEvent({ type: 'keyDown', text: char });
109
+ await Input.dispatchKeyEvent({ type: 'keyUp', text: char });
110
+ if (delay > 0) {
111
+ await new Promise((resolve) => setTimeout(resolve, delay));
112
+ }
113
+ }
114
+ }
115
+ // Set viewport
116
+ async setViewport(viewport) {
117
+ const { Emulation } = this.client;
118
+ await Emulation.setDeviceMetricsOverride({
119
+ width: viewport.width,
120
+ height: viewport.height,
121
+ deviceScaleFactor: 1,
122
+ mobile: false,
123
+ });
124
+ }
125
+ // Set User-Agent
126
+ async setUserAgent(userAgent) {
127
+ const { Network } = this.client;
128
+ await Network.setUserAgentOverride({ userAgent });
129
+ }
130
+ // Set extra HTTP headers
131
+ async setExtraHTTPHeaders(headers) {
132
+ const { Network } = this.client;
133
+ await Network.setExtraHTTPHeaders({ headers });
134
+ }
135
+ // Wait for selector
136
+ async waitForSelector(selector, options) {
137
+ const timeout = options?.timeout ?? 30000;
138
+ const pollingInterval = 100;
139
+ const maxAttempts = Math.ceil(timeout / pollingInterval);
140
+ let attempts = 0;
141
+ while (attempts < maxAttempts) {
142
+ const exists = await this.elementExists(selector);
143
+ if (exists) {
144
+ return;
145
+ }
146
+ await new Promise((resolve) => setTimeout(resolve, pollingInterval));
147
+ attempts++;
148
+ }
149
+ throw new Error(`Timeout waiting for selector: ${selector}`);
150
+ }
151
+ // Wait for response
152
+ async waitForResponse(urlPart, statusCode = 200, timeout = 180000) {
153
+ await this.client.Network.enable(); // Ensure Network monitoring is enabled
154
+ return new Promise((resolve, reject) => {
155
+ let timer;
156
+ const onResponseReceived = async ({ requestId, response }) => {
157
+ if (response.url.includes(urlPart) && response.status === statusCode) {
158
+ clearTimeout(timer);
159
+ try {
160
+ const { body } = await this.client.Network.getResponseBody({ requestId });
161
+ resolve({
162
+ ...response,
163
+ body: JSON.parse(body),
164
+ });
165
+ }
166
+ catch (err) {
167
+ // Retry logic with exponential backoff
168
+ for (let attempt = 1; attempt <= 3; attempt++) {
169
+ try {
170
+ await this.client.Network.enable();
171
+ await new Promise((resolveTimeout) => setTimeout(resolveTimeout, 1000 * 2 ** attempt)); // Exponential backoff
172
+ const { body } = await this.client.Network.getResponseBody({ requestId });
173
+ resolve({
174
+ ...response,
175
+ body: JSON.parse(body),
176
+ });
177
+ return;
178
+ }
179
+ catch (retryErr) {
180
+ if (attempt === 3)
181
+ reject(new Error(`Failed to get response body after ${attempt} attempts`));
182
+ }
183
+ }
184
+ }
185
+ }
186
+ };
187
+ // @ts-expect-error it exists
188
+ this.client.Network.on('responseReceived', onResponseReceived);
189
+ timer = setTimeout(() => {
190
+ reject(new Error(`Timeout after ${timeout / 1000} seconds`));
191
+ }, timeout);
192
+ });
193
+ }
194
+ // Screenshot method
195
+ async screenshot(options) {
196
+ const { Page } = this.client;
197
+ if (options?.fullPage) {
198
+ const { contentSize } = await Page.getLayoutMetrics();
199
+ await this.setViewport({ width: contentSize.width, height: contentSize.height });
200
+ }
201
+ const { data } = await Page.captureScreenshot({ format: 'png' });
202
+ const buffer = Buffer.from(data, 'base64');
203
+ if (options?.path) {
204
+ const fs = await import('fs');
205
+ await fs.promises.writeFile(options.path, buffer);
206
+ }
207
+ return buffer;
208
+ }
209
+ // Get page content
210
+ async content() {
211
+ return await this.evaluate(() => document.documentElement.outerHTML);
212
+ }
213
+ // Close method
214
+ async close() {
215
+ const { Page } = this.client;
216
+ await Page.close();
217
+ this.emit(PAGE_CLOSED);
218
+ }
219
+ // Check if element exists
220
+ async elementExists(selector) {
221
+ return await this.evaluate((sel) => !!document.querySelector(sel), selector);
222
+ }
223
+ // Get text content of an element
224
+ async getTextContent(selector) {
225
+ await this.waitForSelector(selector);
226
+ return await this.evaluate((sel) => {
227
+ const element = document.querySelector(sel);
228
+ return element ? element.textContent || '' : '';
229
+ }, selector);
230
+ }
231
+ // Get href attribute of an element
232
+ async getHref(selector) {
233
+ await this.waitForSelector(selector);
234
+ return await this.evaluate((sel) => {
235
+ const element = document.querySelector(sel);
236
+ return element ? element.href : '';
237
+ }, selector);
238
+ }
239
+ // Scroll an element into view
240
+ async scrollIntoView(selector) {
241
+ await this.evaluate((sel) => {
242
+ const element = document.querySelector(sel);
243
+ if (element) {
244
+ element.scrollIntoView({ behavior: 'smooth', block: 'center' });
245
+ }
246
+ }, selector);
247
+ }
248
+ // Block requests matching URL patterns
249
+ async blockRequests(urlPatterns) {
250
+ const { Network } = this.client;
251
+ await Network.enable();
252
+ await Network.setRequestInterception({ patterns: [{ urlPattern: '*' }] });
253
+ Network.on('requestIntercepted', async (params) => {
254
+ const shouldBlock = urlPatterns.some((pattern) => {
255
+ const regex = new RegExp(pattern.replace(/\*/g, '.*'));
256
+ return regex.test(params.request.url);
257
+ });
258
+ if (shouldBlock) {
259
+ await Network.continueInterceptedRequest({
260
+ interceptionId: params.interceptionId,
261
+ errorReason: 'Aborted',
262
+ });
263
+ }
264
+ else {
265
+ await Network.continueInterceptedRequest({ interceptionId: params.interceptionId });
266
+ }
267
+ });
268
+ }
269
+ // Helper method to get node ID from selector
270
+ async getNodeId(selector) {
271
+ const { DOM } = this.client;
272
+ const { root: { nodeId: documentNodeId } } = await DOM.getDocument();
273
+ const { nodeId } = await DOM.querySelector({ selector, nodeId: documentNodeId });
274
+ if (!nodeId) {
275
+ throw new Error(`No node found for selector: ${selector}`);
276
+ }
277
+ return { nodeId };
278
+ }
279
+ async setCookies(cookies) {
280
+ if (cookies.length === 0) {
281
+ return;
282
+ }
283
+ for (const cookie of cookies) {
284
+ await this.client.Network.setCookie(cookie);
285
+ }
286
+ }
287
+ /**
288
+ * Retrieves all cookies associated with the given URLs or all cookies for the current page if no URLs are provided.
289
+ *
290
+ * @param {string[]} [urls] - An optional array of URLs for which to retrieve cookies.
291
+ * If no URLs are provided, the method will return all cookies associated with the current page.
292
+ *
293
+ * @returns {Promise<Cookie[]>} - A promise that resolves to an array of cookies.
294
+ * Each cookie contains information such as name, value, domain, path, expiration, and flags like httpOnly, secure, etc.
295
+ *
296
+ *
297
+ */
298
+ async getCookies(urls) {
299
+ const { Network } = this.client;
300
+ const cookiesResult = await Network.getCookies({ urls });
301
+ return cookiesResult.cookies;
302
+ }
303
+ }
304
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ type PromiseVoid = () => Promise<void>;
2
+ export declare function anonymizeProxySugar(proxyUrl?: string, username?: string, password?: string): Promise<[string | undefined, PromiseVoid]>;
3
+ export {};
4
+ //# sourceMappingURL=anonymize-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anonymize-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/anonymize-proxy.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAIvC,wBAAsB,mBAAmB,CACrC,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC,CAmC5C"}
@@ -0,0 +1,35 @@
1
+ import { anonymizeProxy, closeAnonymizedProxy } from 'proxy-chain';
2
+ const noopAsyncFunction = async () => { };
3
+ export async function anonymizeProxySugar(proxyUrl, username, password) {
4
+ // Early return if no proxy URL is provided
5
+ if (!proxyUrl) {
6
+ return [undefined, noopAsyncFunction];
7
+ }
8
+ try {
9
+ const url = new URL(proxyUrl);
10
+ // Set username and password if provided and non-empty
11
+ if (username) {
12
+ url.username = username;
13
+ }
14
+ if (password) {
15
+ url.password = password;
16
+ }
17
+ // Proceed to anonymize if credentials are present
18
+ if (url.username || url.password) {
19
+ const anonymizedUrl = await anonymizeProxy(url.toString());
20
+ return [
21
+ anonymizedUrl,
22
+ async () => {
23
+ await closeAnonymizedProxy(anonymizedUrl, true);
24
+ },
25
+ ];
26
+ }
27
+ // No credentials to anonymize
28
+ return [undefined, noopAsyncFunction];
29
+ }
30
+ catch {
31
+ // Handle invalid proxy URL
32
+ return [undefined, noopAsyncFunction];
33
+ }
34
+ }
35
+ //# sourceMappingURL=anonymize-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anonymize-proxy.js","sourceRoot":"","sources":["../../src/proxy/anonymize-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAInE,MAAM,iBAAiB,GAAgB,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,QAAiB,EACjB,QAAiB,EACjB,QAAiB;IAEjB,2CAA2C;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9B,sDAAsD;QACtD,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,CAAC;QAED,kDAAkD;QAClD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE3D,OAAO;gBACH,aAAa;gBACb,KAAK,IAAI,EAAE;oBACP,MAAM,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBACpD,CAAC;aACJ,CAAC;QACN,CAAC;QAED,8BAA8B;QAC9B,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,2BAA2B;QAC3B,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1C,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getLocalProxyAddress(): Promise<string>;
2
+ //# sourceMappingURL=proxy-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-server.d.ts","sourceRoot":"","sources":["../../src/proxy/proxy-server.ts"],"names":[],"mappings":"AAYA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG5D"}
@@ -0,0 +1,13 @@
1
+ import { Server as ProxyChainServer } from 'proxy-chain';
2
+ const server = new ProxyChainServer({
3
+ port: 0,
4
+ });
5
+ server.server.unref();
6
+ const listenPromise = server.listen();
7
+ listenPromise.catch(() => { });
8
+ // https://github.com/microsoft/playwright/blob/2e4722d460b5142267e0e506ca7ea9a259556b5f/packages/playwright-core/src/server/browserContext.ts#L423-L427
9
+ export async function getLocalProxyAddress() {
10
+ await listenPromise;
11
+ return `http://127.0.0.1:${server.port}`;
12
+ }
13
+ //# sourceMappingURL=proxy-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-server.js","sourceRoot":"","sources":["../../src/proxy/proxy-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC;IAChC,IAAI,EAAE,CAAC;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAEtB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACtC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE/B,wJAAwJ;AACxJ,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACtC,MAAM,aAAa,CAAC;IACpB,OAAO,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC"}