Socket
Socket
Sign inDemoInstall

scene-stealer

Package Overview
Dependencies
199
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.1 to 1.0.2

docker-compose.yml

21

package.json
{
"name": "scene-stealer",
"version": "1.0.1",
"version": "1.0.2",
"description": "An HTTP Interface to take a screenshot via puppeteer of a part of a website and send it to you via slack",

@@ -30,11 +30,12 @@ "main": "index.js",

"dependencies": {
"@google-cloud/storage": "^1.5.2",
"body-parser": "^1.18.2",
"express": "^4.16.2",
"lodash": "^4.17.5",
"moment": "^2.20.1",
"performance-now": "^2.1.0",
"puppeteer": "^1.0.0",
"request": "^2.83.0",
"request-promise": "^4.2.2"
"@google-cloud/storage": "1.5.2",
"aigle": "1.11.0",
"body-parser": "1.18.2",
"express": "4.16.2",
"lodash": "4.17.5",
"moment": "2.20.1",
"performance-now": "2.1.0",
"puppeteer": "1.0.0",
"request": "2.83.0",
"request-promise": "4.2.2"
},

@@ -41,0 +42,0 @@ "devDependencies": {

@@ -32,2 +32,7 @@ # scene-stealer

## Known issues
- 1.0.0: Didn't consider well addressing reusing puppeteer broweser. So it's very leaky so don't use it.
- 1.0.1: [This part](https://github.com/Rainist/scene-stealer/blob/612ba9b30d805199ea3c18acb59a1976c5ed784d/src/stealer.js#L27) doesn't seem to release the memory of the page so therefore there is a memory leak for several MB every time it steals the scene.
> So WIP to fix this issue
## Contribution

@@ -34,0 +39,0 @@ [any contributions are welcome.](https://github.com/rainist/scene-stealer/issues/new)

@@ -14,2 +14,3 @@ 'use strict'

scene,
keys,
storage,

@@ -20,3 +21,3 @@ markets

const start = now()
const localImagePath = await steal(scene)
const localImagePath = await steal(scene, keys)
const remoteImageURL = await store(localImagePath, storage) // currently only support gcs

@@ -23,0 +24,0 @@ fs.unlinkSync(localImagePath)

'use strict'
const puppeteer = require('puppeteer');
const crypto = require("crypto");
const puppeteer = require('puppeteer')
const crypto = require('crypto')
const { unlock } = require('./locksmith')
const NO_SANDBOX = !!process.env.NO_SANDBOX
let browser = undefined
let isBrowserReady = false
async function steal({ url, selector, dom_index: domIndex = 0, viewport }) {
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
async function steal({ url, selector, dom_index: domIndex = 0, viewport, wait_ms: waitMS = 100 }, keys = undefined) {
if (!isBrowserReady) {

@@ -16,9 +21,15 @@ throw 'Puppeteer browser is not ready please try again in a bit!'

if (keys) {
await unlock(page, keys)
}
await page.goto(url, {waitUntil: 'networkidle0'})
await page.setViewport(viewport)
page.setViewport(viewport)
await sleep(waitMS)
const elements = await page.$$(selector)
const ele = elements[domIndex]
const randomFilename = crypto.randomBytes(5).toString('hex');
const randomFilename = crypto.randomBytes(5).toString('hex')
const path = `${randomFilename}.png`

@@ -35,3 +46,5 @@

await kill(true)
browser = await puppeteer.launch()
const launchOptions = NO_SANDBOX ? {args: ['--no-sandbox']} : null
browser = await puppeteer.launch(launchOptions)
isBrowserReady = true

@@ -48,3 +61,3 @@ }

await browser.close();
await browser.close()
isBrowserReady = false

@@ -51,0 +64,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc