puppeteer-stream
Advanced tools
Comparing version 2.1.4 to 3.0.0
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
import { LaunchOptions, Browser, Page, BrowserLaunchArgumentOptions, BrowserConnectOptions } from "puppeteer-core"; | ||
import { Readable, ReadableOptions } from "stream"; | ||
type PageWithExtension = Omit<Page, "browser"> & { | ||
browser(): BrowserWithExtension; | ||
}; | ||
export declare class Stream extends Readable { | ||
private page; | ||
constructor(page: PageWithExtension, options?: ReadableOptions); | ||
timecode: number; | ||
_read(): void; | ||
destroy(): Promise<this>; | ||
} | ||
declare module "puppeteer-core" { | ||
interface Page { | ||
index: number; | ||
getStream(opts: getStreamOptions): Promise<Stream>; | ||
} | ||
} | ||
type BrowserWithExtension = Browser & { | ||
encoders?: Map<number, Stream>; | ||
videoCaptureExtension?: Page; | ||
}; | ||
import { Readable } from "stream"; | ||
import { Socket } from "dgram"; | ||
export declare function launch(arg1: (LaunchOptions & BrowserLaunchArgumentOptions & BrowserConnectOptions) | any, opts?: LaunchOptions & BrowserLaunchArgumentOptions & BrowserConnectOptions): Promise<Browser>; | ||
@@ -34,4 +16,12 @@ export type BrowserMimeType = "video/webm" | "video/webm;codecs=vp8" | "video/webm;codecs=vp9" | "video/webm;codecs=vp8.0" | "video/webm;codecs=vp9.0" | "video/webm;codecs=vp8,opus" | "video/webm;codecs=vp8,pcm" | "video/WEBM;codecs=VP8,OPUS" | "video/webm;codecs=vp9,opus" | "video/webm;codecs=vp8,vp9,opus" | "audio/webm" | "audio/webm;codecs=opus" | "audio/webm;codecs=pcm"; | ||
frameSize?: number; | ||
delay?: number; | ||
} | ||
export declare function getStream(page: PageWithExtension, opts: getStreamOptions): Promise<Stream>; | ||
export declare function getStream(page: Page, opts: getStreamOptions): Promise<UDPStream>; | ||
declare class UDPStream extends Readable { | ||
onDestroy: Function; | ||
socket: Socket; | ||
constructor(port: number, onDestroy: Function); | ||
_read(size: number): void; | ||
destroy(error?: Error): Promise<this>; | ||
} | ||
export {}; |
@@ -34,33 +34,16 @@ "use strict"; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getStream = exports.launch = exports.Stream = void 0; | ||
exports.getStream = exports.launch = void 0; | ||
const puppeteer_core_1 = require("puppeteer-core"); | ||
const path = __importStar(require("path")); | ||
const stream_1 = require("stream"); | ||
const path = __importStar(require("path")); | ||
const dgram_1 = __importDefault(require("dgram")); | ||
const extensionPath = path.join(__dirname, "..", "extension"); | ||
const extensionId = "jjndjgheafjngoipoacpjgeicjeomjli"; | ||
let currentIndex = 0; | ||
class Stream extends stream_1.Readable { | ||
constructor(page, options) { | ||
super(options); | ||
this.page = page; | ||
} | ||
_read() { } | ||
// @ts-ignore | ||
destroy() { | ||
const _super = Object.create(null, { | ||
destroy: { get: () => super.destroy } | ||
}); | ||
var _a; | ||
return __awaiter(this, void 0, void 0, function* () { | ||
yield ((_a = this.page.browser().videoCaptureExtension) === null || _a === void 0 ? void 0 : _a.evaluate((index) => { | ||
// @ts-ignore | ||
STOP_RECORDING(index); | ||
}, this.page.index)); | ||
_super.destroy.call(this); | ||
return this; | ||
}); | ||
} | ||
} | ||
exports.Stream = Stream; | ||
function launch(arg1, opts) { | ||
var _a, _b, _c, _d; | ||
var _a, _b; | ||
return __awaiter(this, void 0, void 0, function* () { | ||
@@ -75,30 +58,27 @@ //if puppeteer library is not passed as first argument, then first argument is options | ||
opts.args = []; | ||
const extensionPath = path.join(__dirname, "..", "extension"); | ||
const extensionId = "jjndjgheafjngoipoacpjgeicjeomjli"; | ||
let loadExtension = false; | ||
let loadExtensionExcept = false; | ||
let whitelisted = false; | ||
opts.args = opts.args.map((x) => { | ||
if (x.includes("--load-extension=")) { | ||
loadExtension = true; | ||
return x + "," + extensionPath; | ||
function addToArgs(arg, value) { | ||
if (!value) { | ||
if (opts.args.includes(arg)) | ||
return; | ||
return opts.args.push(arg); | ||
} | ||
else if (x.includes("--disable-extensions-except=")) { | ||
loadExtensionExcept = true; | ||
return "--disable-extensions-except=" + extensionPath + "," + x.split("=")[1]; | ||
} | ||
else if (x.includes("--whitelisted-extension-id")) { | ||
whitelisted = true; | ||
return x + "," + extensionId; | ||
} | ||
return x; | ||
}); | ||
if (!loadExtension) | ||
opts.args.push("--load-extension=" + extensionPath); | ||
if (!loadExtensionExcept) | ||
opts.args.push("--disable-extensions-except=" + extensionPath); | ||
if (!whitelisted) | ||
opts.args.push("--whitelisted-extension-id=" + extensionId); | ||
let found = false; | ||
opts.args = opts.args.map((x) => { | ||
if (x.includes(arg)) { | ||
found = true; | ||
return x + "," + value; | ||
} | ||
return x; | ||
}); | ||
if (!found) | ||
opts.args.push(arg + value); | ||
} | ||
addToArgs("--load-extension=", extensionPath); | ||
addToArgs("--disable-extensions-except=", extensionPath); | ||
addToArgs("--whitelisted-extension-id=", extensionId); | ||
// needed for the https2 server to receive the stream as it uses a self signed certificate | ||
addToArgs("--ignore-certificate-errors-spki-list=", "bgCsqE/dKTUFLVdLcQ6D6sUoCtwEAu0T5QGOxQ+MS7w="); | ||
addToArgs("--autoplay-policy=no-user-gesture-required"); | ||
if (((_a = opts.defaultViewport) === null || _a === void 0 ? void 0 : _a.width) && ((_b = opts.defaultViewport) === null || _b === void 0 ? void 0 : _b.height)) | ||
opts.args.push(`--window-size=${(_c = opts.defaultViewport) === null || _c === void 0 ? void 0 : _c.width}x${(_d = opts.defaultViewport) === null || _d === void 0 ? void 0 : _d.height}`); | ||
opts.args.push(`--window-size=${opts.defaultViewport.width}x${opts.defaultViewport.height}`); | ||
opts.headless = false; | ||
@@ -112,36 +92,21 @@ let browser; | ||
} | ||
browser.encoders = new Map(); | ||
const extensionTarget = yield browser.waitForTarget( | ||
// @ts-ignore | ||
(target) => target.type() === "background_page" && | ||
target.url() === `chrome-extension://${extensionId}/_generated_background_page.html`); | ||
if (!extensionTarget) { | ||
return browser; | ||
}); | ||
} | ||
exports.launch = launch; | ||
function getExtensionPage(browser) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const extensionTarget = yield browser.waitForTarget((target) => { | ||
return target.type() === "page" && target.url() === `chrome-extension://${extensionId}/options.html`; | ||
}); | ||
if (!extensionTarget) | ||
throw new Error("cannot load extension"); | ||
} | ||
const videoCaptureExtension = yield extensionTarget.page(); | ||
if (!videoCaptureExtension) { | ||
if (!videoCaptureExtension) | ||
throw new Error("cannot get page of extension"); | ||
} | ||
browser.videoCaptureExtension = videoCaptureExtension; | ||
yield browser.videoCaptureExtension.exposeFunction("sendData", (opts) => { | ||
var _a; | ||
const encoder = (_a = browser.encoders) === null || _a === void 0 ? void 0 : _a.get(opts.id); | ||
if (!encoder) { | ||
return; | ||
} | ||
const data = Buffer.from(str2ab(opts.data)); | ||
encoder.timecode = opts.timecode; | ||
encoder.push(data); | ||
}); | ||
yield browser.videoCaptureExtension.exposeFunction("log", (...opts) => { | ||
console.log("videoCaptureExtension", ...opts); | ||
}); | ||
return browser; | ||
return videoCaptureExtension; | ||
}); | ||
} | ||
exports.launch = launch; | ||
function getStream(page, opts) { | ||
var _a, _b; | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const encoder = new Stream(page); | ||
if (!opts.audio && !opts.video) | ||
@@ -157,24 +122,40 @@ throw new Error("At least audio or video must be true"); | ||
opts.frameSize = 20; | ||
const extension = yield getExtensionPage(page.browser()); | ||
const index = currentIndex++; | ||
const stream = new UDPStream(55200 + index, () => | ||
// @ts-ignore | ||
extension.evaluate((index) => STOP_RECORDING(index), index)); | ||
yield page.bringToFront(); | ||
if (page.index === undefined) { | ||
page.index = currentIndex++; | ||
} | ||
yield ((_a = page.browser().videoCaptureExtension) === null || _a === void 0 ? void 0 : _a.evaluate((settings) => { | ||
// @ts-ignore | ||
START_RECORDING(settings); | ||
}, Object.assign(Object.assign({}, opts), { index: page.index }))); | ||
(_b = page.browser().encoders) === null || _b === void 0 ? void 0 : _b.set(page.index, encoder); | ||
return encoder; | ||
extension.evaluate( | ||
// @ts-ignore | ||
(settings) => START_RECORDING(settings), Object.assign(Object.assign({}, opts), { index })); | ||
return stream; | ||
}); | ||
} | ||
exports.getStream = getStream; | ||
function str2ab(str) { | ||
// Convert a UTF-8 String to an ArrayBuffer | ||
var buf = new ArrayBuffer(str.length); // 1 byte for each char | ||
var bufView = new Uint8Array(buf); | ||
for (var i = 0, strLen = str.length; i < strLen; i++) { | ||
bufView[i] = str.charCodeAt(i); | ||
class UDPStream extends stream_1.Readable { | ||
constructor(port = 55200, onDestroy) { | ||
super({ highWaterMark: 1024 * 1024 * 8 }); | ||
this.onDestroy = onDestroy; | ||
this.socket = dgram_1.default | ||
.createSocket("udp4", (data) => { | ||
this.push(data); | ||
}) | ||
.bind(port, "127.0.0.1", () => { }); | ||
this.resume(); | ||
} | ||
return buf; | ||
_read(size) { } | ||
// @ts-ignore | ||
destroy(error) { | ||
const _super = Object.create(null, { | ||
destroy: { get: () => super.destroy } | ||
}); | ||
return __awaiter(this, void 0, void 0, function* () { | ||
yield this.onDestroy(); | ||
this.socket.close(); | ||
_super.destroy.call(this); | ||
return this; | ||
}); | ||
} | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHVwcGV0ZWVyU3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1B1cHBldGVlclN0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQU93QjtBQUN4QixtQ0FBbUQ7QUFDbkQsMkNBQTZCO0FBSTdCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFhLE1BQU8sU0FBUSxpQkFBUTtJQUNuQyxZQUFvQixJQUF1QixFQUFFLE9BQXlCO1FBQ3JFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURJLFNBQUksR0FBSixJQUFJLENBQW1CO0lBRTNDLENBQUM7SUFJRCxLQUFLLEtBQUksQ0FBQztJQUVWLGFBQWE7SUFDUCxPQUFPOzs7Ozs7WUFDWixNQUFNLENBQUEsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQiwwQ0FBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDbkUsYUFBYTtnQkFDYixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQztZQUNwQixPQUFNLE9BQU8sWUFBRztZQUNoQixPQUFPLElBQUksQ0FBQzs7S0FDWjtDQUNEO0FBbEJELHdCQWtCQztBQVdELFNBQXNCLE1BQU0sQ0FDM0IsSUFBa0YsRUFDbEYsSUFBMkU7OztRQUUzRSxzRkFBc0Y7UUFDdEYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFO1lBQ3JDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDWjtRQUVELElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztR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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHVwcGV0ZWVyU3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1B1cHBldGVlclN0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQU93QjtBQUN4QiwyQ0FBNkI7QUFDN0IsbUNBQWtDO0FBQ2xDLGtEQUFzQztBQUV0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDOUQsTUFBTSxXQUFXLEdBQUcsa0NBQWtDLENBQUM7QUFDdkQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXJCLFNBQXNCLE1BQU0sQ0FDM0IsSUFBa0YsRUFDbEYsSUFBMkU7OztRQUUzRSxzRkFBc0Y7UUFDdEYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFO1lBQ3JDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDWjtRQUVELElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUUvQixTQUFTLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYztZQUM3QyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNYLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUFFLE9BQU87Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDM0I7WUFDRCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUMvQixJQUFJLENB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 |
@@ -1,99 +0,4 @@ | ||
// @ts-nocheck | ||
/* global chrome, MediaRecorder, FileReader */ | ||
// need to reload extension when puppeteer-extra plugin is provided | ||
chrome.storage.local.get(/* String or Array */["done"], function(items){ | ||
let done = items?.done; | ||
setTimeout(() => { | ||
console.log(done) | ||
if (done) return; | ||
chrome.storage.local.set({ "done": true }, function(){ | ||
chrome.runtime.reload () | ||
}); | ||
}, 1000); | ||
}); | ||
const recorders = {}; | ||
function START_RECORDING({ index, video, audio, frameSize, audioBitsPerSecond, videoBitsPerSecond, bitsPerSecond, mimeType, videoConstraints }) { | ||
chrome.tabCapture.capture( | ||
{ | ||
audio, | ||
video, | ||
videoConstraints | ||
}, | ||
(stream) => { | ||
if (!stream) return; | ||
const recorder = new MediaRecorder(stream, { | ||
ignoreMutedMedia: true, | ||
audioBitsPerSecond, | ||
videoBitsPerSecond, | ||
bitsPerSecond, | ||
mimeType, | ||
}); | ||
recorders[index] = recorder; | ||
// TODO: recorder onerror | ||
recorder.ondataavailable = async function (event) { | ||
if (event.data.size > 0) { | ||
const buffer = await event.data.arrayBuffer(); | ||
const data = arrayBufferToString(buffer); | ||
if (window.sendData) { | ||
window.sendData({ | ||
id: index, | ||
data, | ||
timecode: event.timecode | ||
}); | ||
} | ||
} | ||
}; | ||
recorder.onerror = () => recorder.stop(); | ||
recorder.onstop = function () { | ||
try { | ||
const tracks = stream.getTracks(); | ||
tracks.forEach(function (track) { | ||
track.stop(); | ||
}); | ||
} catch (error) {} | ||
}; | ||
stream.oninactive = () => { | ||
try { | ||
recorder.stop(); | ||
} catch (error) {} | ||
}; | ||
recorder.start(frameSize); | ||
} | ||
); | ||
} | ||
function STOP_RECORDING(index) { | ||
//chrome.extension.getBackgroundPage().console.log(recorders) | ||
if (!recorders[index]) return; | ||
recorders[index].stop(); | ||
} | ||
function arrayBufferToString(buffer) { | ||
// Convert an ArrayBuffer to an UTF-8 String | ||
var bufView = new Uint8Array(buffer); | ||
var length = bufView.length; | ||
var result = ""; | ||
var addition = Math.pow(2, 8) - 1; | ||
for (var i = 0; i < length; i += addition) { | ||
if (i + addition > length) { | ||
addition = length - i; | ||
} | ||
result += String.fromCharCode.apply(null, bufView.subarray(i, i + addition)); | ||
} | ||
return result; | ||
} | ||
chrome.tabs.create( | ||
{ pinned: true, active: false, url: `chrome-extension://${chrome.runtime.id}/options.html` }, | ||
(tab) => {} | ||
); |
@@ -5,8 +5,20 @@ { | ||
"key": "ackedhmjjinfocdcekpnbdocpmiffaac", | ||
"manifest_version": 2, | ||
"manifest_version": 3, | ||
"background": { | ||
"persistent": true, | ||
"scripts": ["background.js"] | ||
"service_worker": "background.js" | ||
}, | ||
"permissions": ["tabs", "<all_urls>", "tabCapture", "storage"] | ||
"content_scripts": [ | ||
{ | ||
"matches": ["*://*/*"], | ||
"js": ["content.js"] | ||
} | ||
], | ||
"sockets": { | ||
"tcp": { | ||
"connect": "" | ||
}, | ||
"udp": { "send": ["*:*"], "bind": ["*:*"] } | ||
}, | ||
"permissions": ["tabs", "tabCapture", "storage", "activeTab", "scripting", "sockets.tcp"], | ||
"host_permissions": ["*://*/*", "<all_urls>", "https://*/*", "http://*/*"] | ||
} |
{ | ||
"name": "puppeteer-stream", | ||
"version": "2.1.4", | ||
"version": "3.0.0", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "dist/PuppeteerStream.js", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
29079
14
407
2
4