From 313d8d6a53d8f93e1d9bd09c3623134946d5e79d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 30 Aug 2022 18:19:43 +0000 Subject: [PATCH] Fix unfurler navigation race condition --- unfurler/src/index.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/unfurler/src/index.ts b/unfurler/src/index.ts index eab4723b7..167225af5 100644 --- a/unfurler/src/index.ts +++ b/unfurler/src/index.ts @@ -97,15 +97,20 @@ class Server { throw new Error('failed to access open graph service'); } } + // wait for navigation to complete + await page.waitForFunction( + (path) => window.location.pathname.includes(path), + {}, + path + ); + // wait for preview component to initialize + await page.waitForSelector('meta[property="og:preview:loading"]', { timeout: config.PUPPETEER.RENDER_TIMEOUT || 3000 }) - const waitForReady = await page.$('meta[property="og:preview:loading"]'); let success = true; - if (waitForReady != null) { - success = await Promise.race([ - page.waitForSelector('meta[property="og:preview:ready"]', { timeout: config.PUPPETEER.RENDER_TIMEOUT || 3000 }).then(() => true), - page.waitForSelector('meta[property="og:preview:fail"]', { timeout: config.PUPPETEER.RENDER_TIMEOUT || 3000 }).then(() => false) - ]) - } + success = await Promise.race([ + page.waitForSelector('meta[property="og:preview:ready"]', { timeout: config.PUPPETEER.RENDER_TIMEOUT || 3000 }).then(() => true), + page.waitForSelector('meta[property="og:preview:fail"]', { timeout: config.PUPPETEER.RENDER_TIMEOUT || 3000 }).then(() => false) + ]) if (success) { const screenshot = await page.screenshot(); return screenshot;