-
Notifications
You must be signed in to change notification settings - Fork 11
/
api.js
80 lines (64 loc) · 1.69 KB
/
api.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
"use strict";
var util = require('util');
var extend = require("extend");
var moment = require("moment");
module.exports = function (data) {
data = Object.assign({}, data);
var bus = data.bus = data.bus || {};
var aws = data.aws = data.aws || {};
if (data.kinesis && !data.stream) {
data.stream = data.kinesis;
}
if (data.s3 && !bus.s3) {
bus.s3 = data.s3;
}
if (data.firehose && !bus.firehose) {
bus.firehose = data.firehose;
}
if (!data.region) {
data.region = aws.region || 'us-west-2';
}
if (data.region && !aws.region) {
aws.region = data.region;
}
delete data.kinesis;
delete data.s3;
delete data.fireshose;
delete data.region;
if (!data.domainName) {
throw new Error("Field 'domainName' is required");
} else if (!data.domainName.match(/^https?:\/\//)) {
data.domainName = "https://" + data.domainName;
}
return {
subscribe: function (id, queue, data) {
if (!id || !queue) {
return Promise.reject("'id' and 'queue' are required");
}
return this.bot.get(id).then(bot => {
data = Object.assign({}, data, {
id: id,
triggers: Array.isArray(queue) ? queue : [queue],
lambda: extend(true, (bot || {}).lambda, {
settings: [{
source: queue
}]
})
});
if (!bot && !data.lambdaName) {
data.lambdaName = id;
}
if (!bot) {
var timestamp = moment.utc();
data.checkpoint = 'z' + timestamp.format('/YYYY/MM/DD/HH/mm/ss/');
}
if (data.checkpoint && !data.checkpoint.match(/^z/)) {
var c = data.checkpoint.match(/^\//) ? "" : "/";
data.checkpoint = "z" + c + data.checkpoint;
}
return this.bot.save(data);
});
},
bot: require("./lib/apis/bot_api.js")(data)
};
};