blob: 71635f7851272156d9f1e9d33ac5e9589b1a78ef [file] [log] [blame]
// Generated by CoffeeScript 1.10.0
var DEFAULT_MAX_ATTEMPTS, DEFAULT_TIMEOUT, Slack, request,
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
request = require("requestretry");
DEFAULT_TIMEOUT = 10 * 1000;
DEFAULT_MAX_ATTEMPTS = 3;
Slack = (function() {
function Slack(token, domain) {
this.token = token;
this.domain = domain;
this.api = bind(this.api, this);
this.webhook = bind(this.webhook, this);
this.detectEmoji = bind(this.detectEmoji, this);
this.setWebhook = bind(this.setWebhook, this);
this.composeUrl = bind(this.composeUrl, this);
this.apiMode = this.domain == null;
this.url = this.composeUrl();
this.timeout = DEFAULT_TIMEOUT;
this.maxAttempts = DEFAULT_MAX_ATTEMPTS;
}
Slack.prototype.composeUrl = function() {
return "https://slack.com/api/";
};
Slack.prototype.setWebhook = function(url) {
this.webhookUrl = url;
return this;
};
Slack.prototype.detectEmoji = function(emoji) {
var obj;
obj = {};
if (!emoji) {
obj.key = "icon_emoji";
obj.val = "";
return obj;
}
obj.key = emoji.match(/^http/) ? "icon_url" : "icon_emoji";
obj.val = emoji;
return obj;
};
Slack.prototype.webhook = function(options, callback) {
var emoji, payload;
emoji = this.detectEmoji(options.icon_emoji);
payload = {
response_type: options.response_type || 'ephemeral',
channel: options.channel,
text: options.text,
username: options.username,
attachments: options.attachments,
link_names: options.link_names || 0
};
payload[emoji.key] = emoji.val;
return request({
method: "POST",
url: this.webhookUrl,
body: JSON.stringify(payload),
timeout: this.timeout,
maxAttempts: this.maxAttempts,
retryDelay: 0
}, function(err, body, response) {
if (err != null) {
return callback(err);
}
return callback(null, {
status: err || response !== "ok" ? "fail" : "ok",
statusCode: body.statusCode,
headers: body.headers,
response: response
});
});
};
Slack.prototype.api = function(method, options, callback) {
var request_arg, url;
if (options == null) {
options = {};
}
if (typeof options === "function") {
callback = options;
options = {};
}
options.token = this.token;
url = this.url + method;
request_arg = {
url: this.url + method,
timeout: this.timeout,
maxAttempts: this.maxAttempts,
retryDelay: 0
};
if (this._is_post_api(method)) {
request_arg.method = "POST";
request_arg.formData = options;
} else {
request_arg.method = "GET";
request_arg.qs = options;
}
request(request_arg, function(err, body, response) {
var error, parsedResponse;
if (err) {
return callback(err, {
status: "fail",
response: response
});
}
try {
parsedResponse = JSON.parse(response);
} catch (error) {
err = error;
err = new Error("Couldn't parse Slack API response as JSON:\n" + response);
return typeof callback === "function" ? callback(err) : void 0;
}
if (typeof callback === "function") {
callback(err, parsedResponse);
}
});
return this;
};
Slack.prototype._is_post_api = function(method) {
return method === "files.upload";
};
return Slack;
})();
module.exports = Slack;