@live-change/email-service 0.9.93 → 0.9.95
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/browser.js +22 -4
- package/package.json +3 -3
- package/render.js +21 -23
package/browser.js
CHANGED
|
@@ -17,11 +17,13 @@ async function newBrowser() {
|
|
|
17
17
|
console.log("New browser", config)
|
|
18
18
|
//process.exit(0)
|
|
19
19
|
if(config.browser.webSocketDebuggerUrl) {
|
|
20
|
-
const browser = await chromium.connect({ wsEndpoint: config.browser.webSocketDebuggerUrl })
|
|
20
|
+
//const browser = await chromium.connect({ wsEndpoint: config.browser.webSocketDebuggerUrl }, { timeout: 60000 })
|
|
21
|
+
const browser = await chromium.connect(config.browser.webSocketDebuggerUrl, { timeout: 10000 })
|
|
21
22
|
return browser
|
|
22
23
|
} else if(config.browser.url) {
|
|
23
24
|
const browserInfo = await got.post(config.browser.url + '/json/version').json()
|
|
24
|
-
const browser = await chromium.connect({ wsEndpoint: browserInfo.webSocketDebuggerUrl })
|
|
25
|
+
//const browser = await chromium.connect({ wsEndpoint: browserInfo.webSocketDebuggerUrl } { timeout: 60000 })
|
|
26
|
+
const browser = await chromium.connect(browserInfo.webSocketDebuggerUrl, { timeout: 10000 })
|
|
25
27
|
return browser
|
|
26
28
|
} if(config.browser.host) {
|
|
27
29
|
const ip = await dns.resolve4(config.browser.host)
|
|
@@ -30,7 +32,7 @@ async function newBrowser() {
|
|
|
30
32
|
const browserInfo = await got.post(browserInfoUrl).json()
|
|
31
33
|
console.log("Browser info", browserInfo)
|
|
32
34
|
try {
|
|
33
|
-
const browser = await chromium.connectOverCDP(browserInfo.webSocketDebuggerUrl)
|
|
35
|
+
const browser = await chromium.connectOverCDP(browserInfo.webSocketDebuggerUrl, { timeout: 10000 })
|
|
34
36
|
return browser
|
|
35
37
|
} catch (error) {
|
|
36
38
|
console.error("Failed to connect to browser", error)
|
|
@@ -54,4 +56,20 @@ export async function runWithBrowser(func) {
|
|
|
54
56
|
await browser.close()
|
|
55
57
|
}
|
|
56
58
|
})
|
|
57
|
-
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export async function runWithPage(func) {
|
|
62
|
+
return await browserQueue.add(async () => {
|
|
63
|
+
const browser = await newBrowser()
|
|
64
|
+
const context = await browser.newContext()
|
|
65
|
+
const page = await context.newPage()
|
|
66
|
+
try {
|
|
67
|
+
const result = await func(page)
|
|
68
|
+
return result
|
|
69
|
+
} finally {
|
|
70
|
+
await page.close()
|
|
71
|
+
await context.close()
|
|
72
|
+
await browser.close()
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-change/email-service",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.95",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"url": "https://www.viamage.com/"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@live-change/framework": "^0.9.
|
|
24
|
+
"@live-change/framework": "^0.9.95",
|
|
25
25
|
"got": "^11.8.6",
|
|
26
26
|
"html-to-text": "8.1.0",
|
|
27
27
|
"inline-css": "4.0.2",
|
|
@@ -32,6 +32,6 @@
|
|
|
32
32
|
"postcss-calc": "10.1.1",
|
|
33
33
|
"postcss-custom-properties": "14.0.4"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "cf88c48885ac39d5620129d659bfe192bf529c55",
|
|
36
36
|
"type": "module"
|
|
37
37
|
}
|
package/render.js
CHANGED
|
@@ -11,7 +11,7 @@ import { ObservableValue } from '@live-change/dao'
|
|
|
11
11
|
import definition from './definition.js'
|
|
12
12
|
import config from './config.js'
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { runWithPage } from './browser.js'
|
|
15
15
|
|
|
16
16
|
const publicDir = config.publicDir || 'front/public/'
|
|
17
17
|
|
|
@@ -173,12 +173,10 @@ async function processImageAttachments(images, url) {
|
|
|
173
173
|
|
|
174
174
|
async function renderEmailWithBrowser(url) {
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
const page = await browser.newPage()
|
|
176
|
+
const email =await runWithPage(async (page) => {
|
|
178
177
|
console.log("RENDER EMAIL WITH BROWSER", url)
|
|
179
178
|
await page.goto(url)
|
|
180
|
-
|
|
181
|
-
const email = await page.evaluate(() => {
|
|
179
|
+
return await page.evaluate(() => {
|
|
182
180
|
const ALLOWED_CSS_PROPERTIES = new Set([
|
|
183
181
|
'background',
|
|
184
182
|
'background-blend-mode',
|
|
@@ -397,27 +395,27 @@ async function renderEmailWithBrowser(url) {
|
|
|
397
395
|
|
|
398
396
|
return email
|
|
399
397
|
})
|
|
398
|
+
})
|
|
400
399
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
400
|
+
// process element to remove unwanted attributes and extract images using jsdom
|
|
401
|
+
const dom = new JSDOM(email.html)
|
|
402
|
+
const images = new Map()
|
|
403
|
+
const messageElements = dom.window.document.querySelectorAll("[data-html]")
|
|
404
|
+
for(let messageElement of messageElements) {
|
|
405
|
+
processElement(messageElement, images)
|
|
406
|
+
}
|
|
407
|
+
email.html = dom.serialize()
|
|
408
|
+
dom.window.close()
|
|
410
409
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
email.attachments = email.attachments || []
|
|
415
|
-
email.attachments.push(...imageAttachments)
|
|
416
|
-
|
|
417
|
-
console.log("EMAIL", email)
|
|
410
|
+
console.log("IMAGES", Array.from(images.entries()))
|
|
411
|
+
const imageAttachments = await processImageAttachments(images, url)
|
|
418
412
|
|
|
419
|
-
|
|
420
|
-
|
|
413
|
+
email.attachments = email.attachments || []
|
|
414
|
+
email.attachments.push(...imageAttachments)
|
|
415
|
+
|
|
416
|
+
console.log("EMAIL", email)
|
|
417
|
+
|
|
418
|
+
return email
|
|
421
419
|
}
|
|
422
420
|
|
|
423
421
|
export { renderEmailWithJuice, renderEmailWithBrowser }
|