-
Notifications
You must be signed in to change notification settings - Fork 0
/
eventfabric.js
108 lines (92 loc) · 3.5 KB
/
eventfabric.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
/*global require, exports, Buffer*/
/**
* Copyright (c) 2013 Javier Dall' Amore <[email protected]>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
var http = require("http"),
url = require('url');
var eventfabric = exports;
eventfabric.version = "0.1.0";
eventfabric.client = function (username, password, root_url) {
"use strict";
var token, credentials = {
"username": username,
"password": password
};
function endpoint(path) {
return root_url + path;
}
root_url = root_url || "https://event-fabric.com/";
root_url = root_url[root_url.length - 1] === '/' ? root_url : root_url + "/";
function request(path, body, successCb, failCb) {
var req, reqUrl = url.parse(endpoint(path)),
settings = {
host: reqUrl.hostname,
port: reqUrl.port || 80,
path: reqUrl.pathname,
headers: {
'x-session': token,
'Content-Type': 'application/json',
'Accept': 'application/json',
'Content-Length': Buffer.byteLength(JSON.stringify(body), 'utf8')
},
method: 'POST'
};
req = http.request(settings);
req.on('response', function (res) {
res.body = '';
res.setEncoding('utf-8');
res.on('data', function (chunk) {
res.body += chunk;
});
res.on('end', function () {
var body = JSON.parse(res.body);
if (res.statusCode === 201) {
if (path === "sessions") {
token = body.token;
}
successCb(res.statusCode, res.body);
} else {
failCb(res.statusCode, res.message);
}
});
});
req.on('error', function (err) {
failCb(err);
});
req.write(JSON.stringify(body));
req.end();
}
function login(successCb, failCb) {
request("sessions", credentials, successCb, failCb);
}
function sendEvent(event, successCb, failCb, user) {
var bucket = event.bucket || "_user_" + username,
path = "streams/" + bucket + "/" + event.channel + "/";
request(path, event.value, successCb, failCb);
}
return {
login: login,
credentials: credentials,
endpoint: endpoint,
sendEvent: sendEvent
};
};