-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
77 lines (63 loc) · 2.26 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const chromium = require('chrome-aws-lambda');
const userAgent = require('user-agents');
const AWS = require('aws-sdk');
const { PRIORITY_ABOVE_NORMAL } = require('constants');
const SES = new AWS.SES();
exports.handler = async (event, context, callback) => {
let result = null;
let browser = null;
try {
browser = await chromium.puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath,
headless: true,
ignoreHTTPSErrors: true
});
let page = await browser.newPage();
let title = await page.title();
const emailParams = {
Destination: {
},
Message: {
Body: {
Html: { Data: `Tickets available for event: ${title} (${event.url})` }
},
Subject: {
Data: 'RA checker: tickets available'
},
},
Source: '[email protected]'
}
await page.setUserAgent(userAgent.toString());
await page.goto(event.url || 'https://example.com');
await page.waitForSelector('iframe');
const frameHandle = await page.$('#tickets iframe');
const frame = await frameHandle.contentFrame();
page.on('console', (msg) => console.log(msg.text()));
result = await frame.evaluate(() => {
const openTiers = document.querySelectorAll('[data-ticket-info-selector-id="tickets-info"] li.onsale');
const available = openTiers.length > 0;
return available;
})
if (result) {
console.log('sending email...');
try {
await SES.sendEmail(emailParams).promise();
console.log('email sent successfully');
} catch (e) {
console.error(e);
}
}
return result;
} catch (error) {
console.error(error);
return callback(error);
} finally {
if (browser !== null) {
await browser.close();
}
}
return callback(null, result);
};