-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
119 lines (104 loc) · 2.1 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
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
/**
* @copyright Maichong Software Ltd. 2016 http://maichong.it
* @date 2016-02-19
* @author Liang <[email protected]>
*/
'use strict';
const fetch = require('node-fetch');
const FormData = require('form-data');
const instances = {};
/**
*
* @param config
* @constructor
*/
function Pubu(config) {
this.init(config);
}
/**
* @param {string} name
* @returns {Pubu}
*/
Pubu.getInstance = function (name) {
if (!instances[name]) {
instances[name] = new Pubu();
}
return instances[name];
};
Pubu.init = function (config) {
config || (config = {});
if (typeof config == 'string') {
config = { url: config };
}
this._url = config.url || this._url || '';
this._user = config.displayUser || this._user || {};
return this;
};
/**
* send message
* @param {String} text
* @param {Array|Object} atts [optional]
* @param {ReadStream} file [optional]
* @returns {Promise}
*/
Pubu.post = function (text, atts, file) {
if (typeof atts == 'object') {
if (!atts.length) {
atts = [atts];
}
}
let headers = {};
let body;
if (file) {
body = new FormData();
body.append('text', text);
body.append('attachments', atts);
body.append('displayUser', this._user);
body.append('file', file);
} else {
headers = {
'Content-Type': 'application/json'
};
body = JSON.stringify({
text: text,
attachments: atts || [],
displayUser: this._user
});
}
return fetch(this._url, {
method: 'POST',
headers: headers,
body: body
}).then(function (res) {
return res.json();
});
};
/**
* send code snippet
* @param name
* @param code
* @param type
* @returns {Promise}
*/
Pubu.code = function (name, code, type) {
let body = {
name: name,
text: name,
snippet: {
code: code,
type: type
},
displayUser: this._user
};
return fetch(this._url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
}).then(function (res) {
return res.json();
});
};
module.exports = Pubu.prototype = Pubu.default = Pubu;
Pubu.call(Pubu);