-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
lambda.js
93 lines (75 loc) · 2.39 KB
/
lambda.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
const PORT= process.env.port || 3000;
const HOST= process.env.host || 'mein.host.name';
// entry
exports.handler = function(event, context, callback) {
//console.log(event);
//console.log(context);
var post_data = JSON.stringify(event);
var options = {
hostname: HOST,
port: PORT,
//family: 6,
//path: '/',
method: 'POST',
rejectUnauthorized: false, // accept self-signed
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(post_data)
}
};
var request = require('https').request(options, (result) => {
console.log(`STATUS: ${result.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(result.headers)}`);
result.setEncoding('utf8');
var body = '';
result.on('data', (chunk) => body += chunk);
result.on('end', () => {
console.log(`BODY: ${JSON.stringify(body)}`);
callback(null, JSON.parse(body) );
return;
});
});
request.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
var error;
if( event.directive )
error = { "event": {
"header": createHeader("Alexa", "ErrorResponse", event),
"endpoint": event.directive.endpoint,
"payload": {
"type": "BRIDGE_UNREACHABLE",
"message": "Bridge appears to be offline: "+ e.message }
},
};
else
error = { "header": createHeader("Alexa.ConnectedHome.Control", "BridgeOfflineError"),
"payload": {} };
callback(undefined, error);
return;
});
request.write(post_data);
request.end();
return;
}// exports.handler
var createMessageId = function() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random()*16)%16 | 0;
d = Math.floor(d/16);
return (c=='x' ? r : (r&0x3|0x8)).toString(16);
});
return uuid;
}; // createMessageId
var createHeader = function(namespace, name, event) {
var header = {
namespace: namespace,
name: name,
payloadVersion: '2',
messageId: createMessageId(),
};
if( event && event.directive && event.directive.header ) {
header.payloadVersion = event.directive.header.payloadVersion;
header.correlationToken = event.directive.header.correlationToken;
}
return header;
}; // createHeader