-
Notifications
You must be signed in to change notification settings - Fork 2
/
godaddy.js
126 lines (109 loc) · 3.3 KB
/
godaddy.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
require('dotenv').config()
var express = require('express');
var vo = require('vo');
var fs = require('fs');
const app = express();
const Nightmare = require('nightmare');
const nightmare = Nightmare({ show: process.env.SHOW_WINDOW, typeInterval: 10, openDevTools: false });
nightmare.viewport(1024,768);
var handlebars = require("handlebars");
var template = handlebars.compile(fs.readFileSync('wrapper.hbs','utf8'));
app.set('port', process.env.LISTEN_PORT);
app.use(express.static(__dirname + '/invoices'));
var run = function * () {
let pages = {};
let receipt_ids = [];
let receipts = {};
yield nightmare
.goto('https://sso.godaddy.com/?realm=idp&path=%2F&app=mya')
.wait('input.username-input')
.type('input.username-input', process.env.GODADDY_U)
.type('input[type="password"]', process.env.GODADDY_P)
.click('button#submitBtn')
.wait('li#account-dropdown')
.goto('https://account.godaddy.com/orders')
.wait('div.qa-order-list-item')
.evaluate(function () {
let ids = [];
let container = document.querySelector('div.orders-container');
let divs = container.querySelectorAll('div.qa-order-list-item');
divs.forEach(qli => {
let _tid = qli.querySelector('div.order-title').innerText.replace('#','').trim();
ids.push(_tid);
});
return ids;
}).then((results)=> {
receipt_ids = results;
return pages;
});
for(var idx in receipt_ids) {
yield page = function*(){
let item = receipt_ids[idx];
let html = "";
let prefix = "GoDaddy_"+item;
let pdf_file = `${prefix}.pdf`;
let pdf_loc = `${__dirname}/invoices/${pdf_file}`;
if(!fs.existsSync(pdf_loc)){
yield nightmare
.goto('https://account.godaddy.com/orders/receipt/'+item)
.wait('.order-action-tray')
.wait(1000)
.evaluate(function(){
let o = document.querySelector('div.ember-modal-dialog-center');
let ev = o.querySelector('.ember-view > .ember-view');
ev.style="";
return o.innerHTML;
}).then(function(result){
html = result
.replace(/width\:[\s0-9]+px;\s+height\:[\s0-9]+px;/g,'')
.replace(/opacity\:[\s.0-9]+;/g,'')
.replace(/src\=\/\//g,'src=https://');
receipts[item] = html;
return html;
});
}
return html;
};
};
var server = app.listen(app.get('port'), function() {
var port = server.address().port;
});
let rendered_pdfs = [];
for(var idx in receipts) {
let item = receipts[idx];
yield pdfResult = function*(){
let _r = item;
let prefix = "GoDaddy_"+idx;
let html_file = `${prefix}.html`;
let pdf_file = `${prefix}.pdf`;
let pdf_loc = `${__dirname}/invoices/${pdf_file}`;
let html = template({innerHTML:_r});
fs.writeFileSync(__dirname + '/invoices/' + html_file, html);
return yield nightmare
.goto('http://127.0.0.1:'+process.env.LISTEN_PORT+'/'+html_file)
.wait('.ember-view')
.pdf(pdf_loc)
.then(function(err){
console.log('render:', pdf_file);
rendered_pdfs.push(pdf_file);
fs.unlinkSync(__dirname + '/invoices/' + html_file)
return true;
}).catch(function (error) {
done(error);
})
};
};
yield nightmare.end();
return rendered_pdfs;
};
vo(run)(function(err, rendered_pdfs) {
if(err){
console.log(err);
}
if(rendered_pdfs.length == 0) {
console.log('no new invoices');
} else {
console.log('rendered',rendered_pdfs.length,'pdfs');
}
process.exit();
});