@browserless/function 10.12.9 → 10.12.12

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/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@browserless/function",
3
3
  "description": "Execute arbitrary JavaScript code in a secure browser sandbox with access to page DOM and network.",
4
4
  "homepage": "https://browserless.js.org",
5
- "version": "10.12.9",
5
+ "version": "10.12.12",
6
6
  "main": "src/index.js",
7
7
  "author": {
8
8
  "email": "hello@microlink.io",
@@ -31,7 +31,7 @@
31
31
  "vm"
32
32
  ],
33
33
  "dependencies": {
34
- "@browserless/errors": "^10.12.9",
34
+ "@browserless/errors": "^10.12.12",
35
35
  "isolated-function": "~0.1.51",
36
36
  "require-one-of": "~1.0.24"
37
37
  },
@@ -57,5 +57,5 @@
57
57
  "timeout": "2m",
58
58
  "workerThreads": false
59
59
  },
60
- "gitHead": "d07a808e13dd69583ffe6235359fcd33862887af"
60
+ "gitHead": "824570864568b193af8ab3679390b4ab5dbfe502"
61
61
  }
package/src/index.js CHANGED
@@ -6,6 +6,17 @@ const runFunction = require('./function')
6
6
 
7
7
  const stringify = fn => fn.toString().trim().replace(/;$/, '')
8
8
 
9
+ const getTargetId = async page => {
10
+ try {
11
+ const session = await page.createCDPSession()
12
+ const { targetInfo } = await session.send('Target.getTargetInfo')
13
+ await session.detach()
14
+ return targetInfo.targetId
15
+ } catch {
16
+ return undefined
17
+ }
18
+ }
19
+
9
20
  const serializeResponse = response => ({
10
21
  status: response.status(),
11
22
  statusText: response.statusText(),
@@ -50,6 +61,8 @@ module.exports = (
50
61
  return browserless.withPage((page, goto) => async () => {
51
62
  const { device, response } = await goto(page, { url, timeout, ...gotoOpts })
52
63
 
64
+ const targetId = await getTargetId(page)
65
+
53
66
  const runFunctionOpts = {
54
67
  url,
55
68
  code,
@@ -73,6 +86,7 @@ module.exports = (
73
86
 
74
87
  if (!browserWSEndpoint) throw new Error('Browser WebSocket endpoint not found')
75
88
  runFunctionOpts.browserWSEndpoint = browserWSEndpoint
89
+ runFunctionOpts.targetId = targetId
76
90
  }
77
91
 
78
92
  const result = await runFunction(runFunctionOpts)
package/src/template.js CHANGED
@@ -50,7 +50,19 @@ const template = (code, usesPage = isUsingPage(code)) => {
50
50
  const puppeteer = require('@cloudflare/puppeteer')
51
51
  const browser = await puppeteer.connect({ browserWSEndpoint })
52
52
  const pages = await browser.pages()
53
- const page = pages[pages.length - 1]
53
+ const { targetId } = opts
54
+ let page
55
+ if (targetId && pages.length > 1) {
56
+ for (const p of pages) {
57
+ try {
58
+ const session = await p.createCDPSession()
59
+ const { targetInfo } = await session.send('Target.getTargetInfo')
60
+ await session.detach()
61
+ if (targetInfo.targetId === targetId) { page = p; break }
62
+ } catch {}
63
+ }
64
+ }
65
+ if (!page) page = pages[pages.length - 1]
54
66
  try {
55
67
  return await (${code})({ page, response, ...rest })
56
68
  } finally {