@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 +3 -3
- package/src/index.js +14 -0
- package/src/template.js +13 -1
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.
|
|
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.
|
|
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": "
|
|
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
|
|
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 {
|