diff options
| -rw-r--r-- | src/browser.ts | 13 | ||||
| -rw-r--r-- | src/instagram_task.ts | 7 | ||||
| -rw-r--r-- | src/tiktok_task.ts | 7 |
3 files changed, 17 insertions, 10 deletions
diff --git a/src/browser.ts b/src/browser.ts new file mode 100644 index 0000000..b09d167 --- /dev/null +++ b/src/browser.ts @@ -0,0 +1,13 @@ +import puppeteer, { Browser } from "puppeteer"; + +let _browser: Browser | undefined = undefined; + +export const getBrowser = async () => { + if (!_browser || !_browser.connected) { + _browser = await puppeteer.launch({ + headless: false, + args: ["--shm-size=1gb"], + }); + } + return _browser; +}; diff --git a/src/instagram_task.ts b/src/instagram_task.ts index bea1e38..4e31518 100644 --- a/src/instagram_task.ts +++ b/src/instagram_task.ts @@ -1,6 +1,7 @@ import fs from "fs"; import puppeteer, { TimeoutError } from "puppeteer"; import { wait } from "./utils"; +import { getBrowser } from "./browser"; export interface InstagramTask { type: "download_instagram"; @@ -10,10 +11,7 @@ export interface InstagramTask { } export const runDownloadInstagramTask = async (task: InstagramTask) => { - const browser = await puppeteer.launch({ - headless: false, - args: ["--shm-size=1gb"], - }); + const browser = await getBrowser(); const page = await browser.newPage(); const client = await page.createCDPSession(); await client.send("Page.setDownloadBehavior", { @@ -126,6 +124,5 @@ export const runDownloadInstagramTask = async (task: InstagramTask) => { await task.respondWithFile(`./downloads/${downloadedFile}`); } finally { await page.close(); - await browser.close(); } }; diff --git a/src/tiktok_task.ts b/src/tiktok_task.ts index f9099b4..7e85c5c 100644 --- a/src/tiktok_task.ts +++ b/src/tiktok_task.ts @@ -1,6 +1,7 @@ import fs from "fs"; import puppeteer, { TimeoutError } from "puppeteer"; import { wait } from "./utils"; +import { getBrowser } from "./browser"; export interface TikTokTask { type: "download_tiktok"; @@ -10,10 +11,7 @@ export interface TikTokTask { } export const runDownloadTiktokTask = async (task: TikTokTask) => { - const browser = await puppeteer.launch({ - headless: false, - args: ["--shm-size=1gb"], - }); + const browser = await getBrowser(); const page = await browser.newPage(); const client = await page.createCDPSession(); await client.send("Page.setDownloadBehavior", { @@ -127,6 +125,5 @@ export const runDownloadTiktokTask = async (task: TikTokTask) => { await task.respondWithFile(`./downloads/${downloadedFile}`); } finally { await page.close(); - await browser.close(); } }; |
